qtquicktest.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright (C) 2023 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. /*********************************************************************
  4. * INJECT CODE
  5. ********************************************************************/
  6. // @snippet call-quick-test-main
  7. static int callQuickTestMain(const QString &name, QObject *setup,
  8. QStringList argv, QString dir)
  9. {
  10. if (dir.isEmpty())
  11. dir = QDir::currentPath();
  12. if (argv.isEmpty())
  13. argv.append(name);
  14. std::vector<QByteArray> argvB;
  15. std::vector<char *> argvC;
  16. const auto argc = argv.size();
  17. argvB.reserve(argc);
  18. argvC.reserve(argc);
  19. for (const auto &arg : argv) {
  20. argvB.emplace_back(arg.toUtf8());
  21. argvC.push_back(argvB.back().data());
  22. }
  23. return quick_test_main_with_setup(int(argc), argvC.data(),
  24. name.toUtf8().constData(),
  25. dir.toUtf8().constData(), setup);
  26. }
  27. // @snippet call-quick-test-main
  28. // @snippet quick-test-main
  29. const int exitCode = callQuickTestMain(%1, nullptr, %2, %3);
  30. %PYARG_0 = %CONVERTTOPYTHON[int](exitCode);
  31. // @snippet quick-test-main
  32. // @snippet quick-test-main_with_setup
  33. Shiboken::AutoDecRef pySetupObject(PyObject_CallObject(reinterpret_cast<PyObject *>(%2), nullptr));
  34. if (pySetupObject.isNull() || PyErr_Occurred() != nullptr)
  35. return nullptr;
  36. /// Convenience to convert a PyObject to QObject
  37. QObject *setupObject = PySide::convertToQObject(pySetupObject.object(), true /* raiseError */);
  38. if (setupObject == nullptr)
  39. return nullptr;
  40. const int exitCode = callQuickTestMain(%1, setupObject, %3, %4);
  41. %PYARG_0 = %CONVERTTOPYTHON[int](exitCode);
  42. // @snippet quick-test-main_with_setup