ctkAbstractPythonManagerTest.cpp 5.2 KB

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