ctkAbstractPythonManagerTest.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. // CTK includes
  2. #include "ctkAbstractPythonManager.h"
  3. #include "ctkTest.h"
  4. // PythonQt includes
  5. #include <PythonQt.h>
  6. // STD includes
  7. #include <cstdlib>
  8. #include <iostream>
  9. //-----------------------------------------------------------------------------
  10. #if QT_VERSION < 0x040700
  11. Q_DECLARE_METATYPE(QVariant)
  12. #endif
  13. //-----------------------------------------------------------------------------
  14. class ctkAbstractPythonManagerTester: public QObject
  15. {
  16. Q_OBJECT
  17. private:
  18. ctkAbstractPythonManager PythonManager;
  19. private Q_SLOTS:
  20. void testIsPythonInitialized();
  21. void testSetInitializationFlags();
  22. void testPythonErrorOccured();
  23. void testPythonErrorOccured_data();
  24. void testInitialize();
  25. void testMainContext();
  26. void testAddObjectToPythonMain();
  27. //void testRegisterPythonQtDecorator(); // TODO
  28. //void testRegisterClassForPythonQt(); // TODO
  29. void testExecuteString();
  30. void testExecuteString_data();
  31. //void testExecuteFile(); // TODO
  32. //void testPythonAttributes(); // TODO
  33. };
  34. // ----------------------------------------------------------------------------
  35. void ctkAbstractPythonManagerTester::testIsPythonInitialized()
  36. {
  37. QCOMPARE(this->PythonManager.isPythonInitialized(), false);
  38. }
  39. // ----------------------------------------------------------------------------
  40. void ctkAbstractPythonManagerTester::testSetInitializationFlags()
  41. {
  42. QCOMPARE(this->PythonManager.initializationFlags(), PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut);
  43. int flagsToSetPreInit = PythonQt::RedirectStdOut;
  44. int expectedFlagsPreInit = PythonQt::RedirectStdOut;
  45. this->PythonManager.setInitializationFlags(flagsToSetPreInit);
  46. QCOMPARE(this->PythonManager.initializationFlags(), expectedFlagsPreInit);
  47. this->PythonManager.mainContext();
  48. int flagsToSetPostInit = 0;
  49. int expectedFlagsPostInit = PythonQt::RedirectStdOut;
  50. this->PythonManager.setInitializationFlags(flagsToSetPostInit);
  51. QCOMPARE(this->PythonManager.initializationFlags(), expectedFlagsPostInit);
  52. QCOMPARE(this->PythonManager.isPythonInitialized(), true);
  53. }
  54. // ----------------------------------------------------------------------------
  55. void ctkAbstractPythonManagerTester::testInitialize()
  56. {
  57. QVERIFY(this->PythonManager.initialize());
  58. }
  59. // ----------------------------------------------------------------------------
  60. void ctkAbstractPythonManagerTester::testMainContext()
  61. {
  62. QVERIFY(this->PythonManager.mainContext());
  63. }
  64. // ----------------------------------------------------------------------------
  65. void ctkAbstractPythonManagerTester::testPythonErrorOccured()
  66. {
  67. QFETCH(QString, pythonCode);
  68. QFETCH(bool, errorOccured);
  69. this->PythonManager.executeString(pythonCode);
  70. QCOMPARE(this->PythonManager.pythonErrorOccured(), errorOccured);
  71. }
  72. // ----------------------------------------------------------------------------
  73. void ctkAbstractPythonManagerTester::testPythonErrorOccured_data()
  74. {
  75. QTest::addColumn<QString>("pythonCode");
  76. QTest::addColumn<bool>("errorOccured");
  77. QTest::newRow("0") << QString("2 + 2") << false;
  78. QTest::newRow("1") << QString("raise Exception('This is exception is expected')") << true;
  79. }
  80. // ----------------------------------------------------------------------------
  81. void ctkAbstractPythonManagerTester::testAddObjectToPythonMain()
  82. {
  83. QObject * object = new QObject(this);
  84. object->setProperty("happy", true);
  85. this->PythonManager.addObjectToPythonMain("testAddObjectToPythonMain", object);
  86. QVariant returnValue = this->PythonManager.executeString("testAddObjectToPythonMain.happy",
  87. ctkAbstractPythonManager::EvalInput);
  88. QCOMPARE(returnValue, QVariant(true));
  89. }
  90. // ----------------------------------------------------------------------------
  91. void ctkAbstractPythonManagerTester::testExecuteString()
  92. {
  93. QFETCH(QString, stringToExecute);
  94. QFETCH(int, executeStringMode);
  95. QFETCH(QVariant, expectedReturnValue);
  96. QFETCH(QString, expectedVariableName);
  97. QFETCH(QVariant, expectedVariableValue);
  98. QVariant returnValue = this->PythonManager.executeString(
  99. stringToExecute,
  100. static_cast<ctkAbstractPythonManager::ExecuteStringMode>(executeStringMode));
  101. QCOMPARE(returnValue, expectedReturnValue);
  102. QCOMPARE(this->PythonManager.getVariable(expectedVariableName), expectedVariableValue);
  103. }
  104. // ----------------------------------------------------------------------------
  105. void ctkAbstractPythonManagerTester::testExecuteString_data()
  106. {
  107. QTest::addColumn<QString>("stringToExecute");
  108. QTest::addColumn<int>("executeStringMode");
  109. QTest::addColumn<QVariant>("expectedReturnValue");
  110. QTest::addColumn<QString>("expectedVariableName");
  111. QTest::addColumn<QVariant>("expectedVariableValue");
  112. QTest::newRow("0") << QString("a = 6542")
  113. << static_cast<int>(ctkAbstractPythonManager::FileInput)
  114. << QVariant() << QString("a") << QVariant(6542);
  115. QTest::newRow("1") << QString("6543")
  116. << static_cast<int>(ctkAbstractPythonManager::FileInput)
  117. << QVariant() << QString("a") << QVariant(6542);
  118. QTest::newRow("2") << QString("b = 6544")
  119. << static_cast<int>(ctkAbstractPythonManager::EvalInput)
  120. << QVariant() << QString("b") << QVariant();
  121. QTest::newRow("3") << QString("7")
  122. << static_cast<int>(ctkAbstractPythonManager::EvalInput)
  123. << QVariant(7) << QString("b") << QVariant();
  124. }
  125. // ----------------------------------------------------------------------------
  126. CTK_TEST_MAIN(ctkAbstractPythonManagerTest)
  127. #include "moc_ctkAbstractPythonManagerTest.cpp"