1 /* 2 * SPDX-FileCopyrightText: 2014 Kevin Ottens <ervin@kde.org> 3 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 4 */ 5 6 7 #include <testlib/qtest_zanshin.h> 8 9 #include "utils/mockobject.h" 10 11 using mockitopp::matcher::any; 12 13 using namespace Utils; 14 15 class FakeInterface 16 { 17 public: FakeInterface()18 FakeInterface() {} ~FakeInterface()19 virtual ~FakeInterface() {} 20 virtual void doSomething() = 0; 21 virtual int computeMe(QString input) = 0; 22 }; 23 24 class MockObjectTest : public QObject 25 { 26 Q_OBJECT 27 private slots: testBasics()28 void testBasics() 29 { 30 MockObject<FakeInterface> mock; 31 mock(&FakeInterface::doSomething).when().thenReturn(); 32 mock(&FakeInterface::doSomething).when().thenThrow("exception"); 33 for (int i = 0; i < 10; i++) { 34 mock(&FakeInterface::computeMe).when(QStringLiteral("A")).thenReturn(0); 35 mock(&FakeInterface::computeMe).when(QStringLiteral("B")).thenReturn(1); 36 mock(&FakeInterface::computeMe).when(QStringLiteral("C")).thenReturn(-1); 37 mock(&FakeInterface::computeMe).when(QStringLiteral("Foo")).thenReturn(-1); 38 } 39 QSharedPointer<FakeInterface> iface1 = mock.getInstance(); 40 QSharedPointer<FakeInterface> iface2 = mock.getInstance(); // Shouldn't cause a crash later 41 42 QCOMPARE(iface1.data(), iface2.data()); 43 44 iface1->doSomething(); 45 try { 46 iface2->doSomething(); 47 QFAIL("No exception thrown"); 48 } catch (...) { 49 // We expect to catch something 50 } 51 52 for (int i = 0; i < 10; i++) { 53 QCOMPARE(iface1->computeMe(QStringLiteral("A")), 0); 54 QCOMPARE(iface2->computeMe(QStringLiteral("B")), 1); 55 QCOMPARE(iface1->computeMe(QStringLiteral("C")), -1); 56 QCOMPARE(iface2->computeMe(QStringLiteral("Foo")), -1); 57 } 58 59 QVERIFY(mock(&FakeInterface::doSomething).when().exactly(2)); 60 QVERIFY(mock(&FakeInterface::computeMe).when(any<QString>()).exactly(40)); 61 } 62 }; 63 64 ZANSHIN_TEST_MAIN(MockObjectTest) 65 66 #include "mockobjecttest.moc" 67