123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- // Qt includes
- #include <QTemporaryFile>
- #include <QTextStream>
- // CTK includes
- #include "ctkAbstractPythonManager.h"
- #include "ctkTest.h"
- // PythonQt includes
- #include <PythonQt.h>
- // STD includes
- #include <cstdlib>
- #include <iostream>
- //-----------------------------------------------------------------------------
- #if QT_VERSION < 0x040700
- Q_DECLARE_METATYPE(QVariant)
- #endif
- //-----------------------------------------------------------------------------
- class ctkAbstractPythonManagerTester: public QObject
- {
- Q_OBJECT
- private:
- ctkAbstractPythonManager PythonManager;
- private Q_SLOTS:
- void testIsPythonInitialized();
- void testSetInitializationFlags();
- void testPythonErrorOccured();
- void testPythonErrorOccured_data();
- void testInitialize();
- void testMainContext();
- void testAddObjectToPythonMain();
- //void testRegisterPythonQtDecorator(); // TODO
- //void testRegisterClassForPythonQt(); // TODO
- void testExecuteString();
- void testExecuteString_data();
- void testExecuteFile();
- void testExecuteFile_data();
- //void testPythonAttributes(); // TODO
- };
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testIsPythonInitialized()
- {
- QCOMPARE(this->PythonManager.isPythonInitialized(), false);
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testSetInitializationFlags()
- {
- QCOMPARE(this->PythonManager.initializationFlags(), PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
- int flagsToSetPreInit = PythonQt::RedirectStdOut;
- int expectedFlagsPreInit = PythonQt::RedirectStdOut;
- this->PythonManager.setInitializationFlags(flagsToSetPreInit);
- QCOMPARE(this->PythonManager.initializationFlags(), expectedFlagsPreInit);
- this->PythonManager.mainContext();
- int flagsToSetPostInit = 0;
- int expectedFlagsPostInit = PythonQt::RedirectStdOut;
- this->PythonManager.setInitializationFlags(flagsToSetPostInit);
- QCOMPARE(this->PythonManager.initializationFlags(), expectedFlagsPostInit);
- QCOMPARE(this->PythonManager.isPythonInitialized(), true);
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testInitialize()
- {
- QVERIFY(this->PythonManager.initialize());
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testMainContext()
- {
- QVERIFY(this->PythonManager.mainContext());
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testPythonErrorOccured()
- {
- QFETCH(QString, pythonCode);
- QFETCH(bool, errorOccured);
- this->PythonManager.executeString(pythonCode);
- QCOMPARE(this->PythonManager.pythonErrorOccured(), errorOccured);
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testPythonErrorOccured_data()
- {
- QTest::addColumn<QString>("pythonCode");
- QTest::addColumn<bool>("errorOccured");
- QTest::newRow("0") << QString("2 + 2") << false;
- QTest::newRow("1") << QString("raise Exception('This is exception is expected')") << true;
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testAddObjectToPythonMain()
- {
- QObject * object = new QObject(this);
- object->setProperty("happy", true);
- this->PythonManager.addObjectToPythonMain("testAddObjectToPythonMain", object);
- QVariant returnValue = this->PythonManager.executeString("testAddObjectToPythonMain.happy",
- ctkAbstractPythonManager::EvalInput);
- QCOMPARE(returnValue, QVariant(true));
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testExecuteString()
- {
- QFETCH(QString, stringToExecute);
- QFETCH(int, executeStringMode);
- QFETCH(QVariant, expectedReturnValue);
- QFETCH(QString, expectedVariableName);
- QFETCH(QVariant, expectedVariableValue);
- QVariant returnValue = this->PythonManager.executeString(
- stringToExecute,
- static_cast<ctkAbstractPythonManager::ExecuteStringMode>(executeStringMode));
- QCOMPARE(returnValue, expectedReturnValue);
- QCOMPARE(this->PythonManager.getVariable(expectedVariableName), expectedVariableValue);
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testExecuteString_data()
- {
- QTest::addColumn<QString>("stringToExecute");
- QTest::addColumn<int>("executeStringMode");
- QTest::addColumn<QVariant>("expectedReturnValue");
- QTest::addColumn<QString>("expectedVariableName");
- QTest::addColumn<QVariant>("expectedVariableValue");
- QTest::newRow("0") << QString("a = 6542")
- << static_cast<int>(ctkAbstractPythonManager::FileInput)
- << QVariant() << QString("a") << QVariant(6542);
- QTest::newRow("1") << QString("6543")
- << static_cast<int>(ctkAbstractPythonManager::FileInput)
- << QVariant() << QString("a") << QVariant(6542);
- QTest::newRow("2") << QString("b = 6544")
- << static_cast<int>(ctkAbstractPythonManager::EvalInput)
- << QVariant() << QString("b") << QVariant();
- QTest::newRow("3") << QString("7")
- << static_cast<int>(ctkAbstractPythonManager::EvalInput)
- << QVariant(7) << QString("b") << QVariant();
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testExecuteFile()
- {
- QFETCH(QString, stringToExecute);
- QFETCH(bool, pythonErrorExpected);
- QTemporaryFile pythonFile("testExecuteFile-XXXXXX.py");
- QVERIFY(pythonFile.open());
- QTextStream out(&pythonFile);
- out << stringToExecute;
- pythonFile.close();
- this->PythonManager.executeFile(pythonFile.fileName());
- QCOMPARE(this->PythonManager.pythonErrorOccured(), pythonErrorExpected);
- }
- // ----------------------------------------------------------------------------
- void ctkAbstractPythonManagerTester::testExecuteFile_data()
- {
- QTest::addColumn<QString>("stringToExecute");
- QTest::addColumn<bool>("pythonErrorExpected");
- QTest::newRow("0-emptyfile") << QString("")
- << false;
- QTest::newRow("1-helloworld") << QString("print 'Hello world'")
- << false;
- QTest::newRow("2-syntaxerror") << QString("print '") // SyntaxError
- << true;
- QTest::newRow("3-check __file__ attribute") << QString("print 'This file is: %s' % __file__")
- << false;
- }
- // ----------------------------------------------------------------------------
- CTK_TEST_MAIN(ctkAbstractPythonManagerTest)
- #include "moc_ctkAbstractPythonManagerTest.cpp"
|