ctkAbstractPythonManagerTest.cpp 5.4 KB

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