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)