File indexing completed on 2024-12-22 04:09:28

0001 /*
0002  *  SPDX-FileCopyrightText: 2019 Tusooa Zhu <tusooa@vista.aero>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisSignalAutoConnectionTest.h"
0008 
0009 #include <kis_signal_auto_connection.h>
0010 
0011 void KisSignalAutoConnectionTest::testMacroConnection()
0012 {
0013     QScopedPointer<TestClass> test1(new TestClass());
0014     QScopedPointer<TestClass> test2(new TestClass());
0015     KisSignalAutoConnectionsStore conn;
0016     conn.addConnection(test1.data(), SIGNAL(sigTest1()), test2.data(), SLOT(slotTest1()));
0017     emit test1->sigTest1();
0018     QVERIFY(test2->m_test1Called);
0019     test2->m_test1Called = false;
0020     conn.clear();
0021     emit test1->sigTest1();
0022     QVERIFY(test2->m_test1Called == false);
0023 }
0024 
0025 void KisSignalAutoConnectionTest::testMemberFunctionConnection()
0026 {
0027     QScopedPointer<TestClass> test1(new TestClass());
0028     QScopedPointer<TestClass> test2(new TestClass());
0029     KisSignalAutoConnectionsStore conn;
0030     conn.addConnection(test1.data(), &TestClass::sigTest1, test2.data(), &TestClass::slotTest1);
0031     emit test1->sigTest1();
0032     QVERIFY(test2->m_test1Called);
0033     test2->m_test1Called = false;
0034     conn.clear();
0035     emit test1->sigTest1();
0036     QVERIFY(test2->m_test1Called == false);
0037 }
0038 
0039 void KisSignalAutoConnectionTest::testOverloadConnection()
0040 {
0041     QScopedPointer<TestClass> test1(new TestClass());
0042     QScopedPointer<TestClass> test2(new TestClass());
0043     KisSignalAutoConnectionsStore conn;
0044     conn.addConnection(test1.data(), QOverload<const QString &, const QString &>::of(&TestClass::sigTest2),
0045                        test2.data(), QOverload<const QString &, const QString &>::of(&TestClass::slotTest2));
0046     conn.addConnection(test1.data(), SIGNAL(sigTest2(int)), test2.data(), SLOT(slotTest2(int)));
0047     emit test1->sigTest2("foo", "bar");
0048     QVERIFY(test2->m_str1 == "foo");
0049     QVERIFY(test2->m_str2 == "bar");
0050     emit test1->sigTest2(5);
0051     QVERIFY(test2->m_number == 5);
0052     conn.clear();
0053     emit test1->sigTest2("1", "2");
0054     QVERIFY(test2->m_str1 == "foo");
0055     QVERIFY(test2->m_str2 == "bar");
0056     conn.addConnection(test1.data(), SIGNAL(sigTest2(const QString &, const QString &)),
0057                        test2.data(), SLOT(slotTest2(const QString &)));
0058     emit test1->sigTest2("3", "4");
0059     QVERIFY(test2->m_str1 == "3");
0060     QVERIFY(test2->m_str2 == "");
0061 }
0062 
0063 void KisSignalAutoConnectionTest::testSignalToSignalConnection()
0064 {
0065     QScopedPointer<TestClass> test1(new TestClass());
0066     QScopedPointer<TestClass> test2(new TestClass());
0067     KisSignalAutoConnectionsStore conn;
0068     conn.addConnection(test1.data(), QOverload<int>::of(&TestClass::sigTest2),
0069                        test2.data(), QOverload<int>::of(&TestClass::sigTest2));
0070     conn.addConnection(test2.data(), SIGNAL(sigTest2(int)), test2.data(), SLOT(slotTest2(int)));
0071     emit test1->sigTest2(10);
0072     QVERIFY(test2->m_number == 10);
0073     conn.clear();
0074     conn.addConnection(test1.data(), SIGNAL(sigTest2(int)), test2.data(), SIGNAL(sigTest2(int)));
0075     conn.addConnection(test2.data(), QOverload<int>::of(&TestClass::sigTest2),
0076                        test2.data(), QOverload<int>::of(&TestClass::slotTest2));
0077     emit test1->sigTest2(50);
0078     QVERIFY(test2->m_number == 50);
0079 }
0080 
0081 void KisSignalAutoConnectionTest::testDestroyedObject()
0082 {
0083     QScopedPointer<TestClass> test1(new TestClass());
0084     QScopedPointer<TestClass> test2(new TestClass());
0085     KisSignalAutoConnectionsStore conn;
0086     conn.addConnection(test1.data(), QOverload<int>::of(&TestClass::sigTest2),
0087                        test2.data(), QOverload<int>::of(&TestClass::slotTest2));
0088     emit test1->sigTest2(10);
0089     QVERIFY(test2->m_number == 10);
0090     test2.reset(0);
0091     conn.clear();
0092 }
0093 
0094 TestClass::TestClass(QObject *parent)
0095     : QObject(parent)
0096     , m_test1Called(false)
0097     , m_str1()
0098     , m_str2()
0099     , m_number(0)
0100 {
0101 }
0102 
0103 TestClass::~TestClass()
0104 {
0105 }
0106 
0107 void TestClass::slotTest1()
0108 {
0109     m_test1Called = true;
0110 }
0111 
0112 void TestClass::slotTest2(const QString &arg1, const QString &arg2)
0113 {
0114     m_str1 = arg1;
0115     m_str2 = arg2;
0116 }
0117 
0118 void TestClass::slotTest2(const QString &arg)
0119 {
0120     m_str1 = arg;
0121     m_str2 = QString();
0122 }
0123 
0124 void TestClass::slotTest2(int arg)
0125 {
0126     m_number = arg;
0127 }
0128 
0129 SIMPLE_TEST_MAIN(KisSignalAutoConnectionTest)