File indexing completed on 2024-04-28 05:42:13

0001 // clang-format off
0002 /*
0003  KDiff3 - Text Diff And Merge Tool
0004 
0005  SPDX-FileCopyrightText: 2020 Michael Reeves reeves.87@gmail.com
0006  SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 // clang-format on
0009 
0010 #include <QTest>
0011 #include <QtGlobal>
0012 
0013 #include "../combiners.h"
0014 
0015 class CombinertestTest: public QObject
0016 {
0017     Q_OBJECT;
0018 
0019   private:
0020     QString nonEmpty2(){ return "test 2";}
0021 
0022     QString nonEmpty1(){ return "test 1";}
0023     QString emptyString(){ return "";}
0024     bool yes() { return true; }
0025     bool no() { return false;}
0026 
0027   private Q_SLOTS:
0028     void testOrCombiner()
0029     {
0030         boost::signals2::signal<bool(), or_> test1;
0031         std::list<boost::signals2::scoped_connection> connections;
0032 
0033         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0034         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0035         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0036 
0037         QVERIFY(test1());
0038         connections.clear();
0039 
0040         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0041         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0042         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0043 
0044         QVERIFY(!test1());
0045         connections.clear();
0046 
0047         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0048         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0049         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0050 
0051         QVERIFY(test1());
0052         connections.clear();
0053     }
0054 
0055     void testAndCombiner()
0056     {
0057         boost::signals2::signal<bool(), and_> test1;
0058         std::list<boost::signals2::scoped_connection> connections;
0059 
0060         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0061         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0062         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0063 
0064         QVERIFY(!test1());
0065         connections.clear();
0066 
0067         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0068         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0069         connections.push_back(test1.connect(boost::bind(&CombinertestTest::no, this)));
0070 
0071         QVERIFY(!test1());
0072         connections.clear();
0073 
0074         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0075         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0076         connections.push_back(test1.connect(boost::bind(&CombinertestTest::yes, this)));
0077 
0078         QVERIFY(test1());
0079         connections.clear();
0080     }
0081 
0082     void testFirstNonEmpty()
0083     {
0084         boost::signals2::signal<QString (), FirstNonEmpty<QString>> test1;
0085         std::list<boost::signals2::scoped_connection> connections;
0086 
0087         //Just in case someone monkeys with the test functions
0088         QVERIFY(emptyString().isEmpty());
0089         QVERIFY(!nonEmpty1().isEmpty());
0090         QVERIFY(!nonEmpty1().isEmpty());
0091 
0092         connections.clear();
0093         QVERIFY(test1().isEmpty());
0094 
0095         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0096         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty1, this)));
0097         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty2, this)));
0098 
0099         QCOMPARE(test1(), nonEmpty1());
0100         connections.clear();
0101 
0102         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty1, this)));
0103         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0104         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty2, this)));
0105 
0106         QCOMPARE(test1(), nonEmpty1());
0107         connections.clear();
0108 
0109         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty1, this)));
0110         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0111         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty2, this)));
0112 
0113         QCOMPARE(test1(), nonEmpty1());
0114         connections.clear();
0115 
0116         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0117         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty2, this)));
0118         connections.push_back(test1.connect(boost::bind(&CombinertestTest::nonEmpty1, this)));
0119 
0120         QCOMPARE(test1(), nonEmpty2());
0121         connections.clear();
0122 
0123         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0124         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0125         connections.push_back(test1.connect(boost::bind(&CombinertestTest::emptyString, this)));
0126 
0127         QCOMPARE(test1(), emptyString());
0128         connections.clear();
0129     }
0130 };
0131 
0132 QTEST_MAIN(CombinertestTest);
0133 
0134 #include "combinertest.moc"