ApplicationTests.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
  9. #include <AzCore/UnitTest/TestTypes.h>
  10. #include <AzCore/std/smart_ptr/make_shared.h>
  11. #include <source/Application.h>
  12. #include <source/ApplicationParameters.h>
  13. namespace PythonBindingsExample
  14. {
  15. //! This function returns the build system target name
  16. AZStd::string_view GetBuildTargetName()
  17. {
  18. #if !defined (LY_CMAKE_TARGET)
  19. #error "LY_CMAKE_TARGET must be defined in order to add this source file to a CMake executable target"
  20. #endif
  21. return AZStd::string_view{ LY_CMAKE_TARGET };
  22. }
  23. class PythonBindingsExampleTest
  24. : public ::UnitTest::LeakDetectionFixture
  25. {
  26. public:
  27. void SetUp() override
  28. {
  29. s_application = AZStd::make_unique<PythonBindingsExample::Application>(nullptr, nullptr);
  30. // The AZ::ComponentApplication constructor creates the settings registry
  31. AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddBuildSystemTargetSpecialization(
  32. *AZ::SettingsRegistry::Get(), GetBuildTargetName());
  33. s_application->SetUp();
  34. }
  35. void TearDown() override
  36. {
  37. s_application->TearDown();
  38. s_application.reset();
  39. }
  40. static AZStd::unique_ptr<PythonBindingsExample::Application> s_application;
  41. };
  42. AZStd::unique_ptr<PythonBindingsExample::Application> PythonBindingsExampleTest::s_application;
  43. TEST_F(PythonBindingsExampleTest, Application_Run_WithoutParameters_Returns_False)
  44. {
  45. EXPECT_FALSE(s_application->Run());
  46. }
  47. TEST_F(PythonBindingsExampleTest, Application_RunWithParameters_Works)
  48. {
  49. ApplicationParameters params;
  50. EXPECT_TRUE(s_application->RunWithParameters(params));
  51. }
  52. TEST_F(PythonBindingsExampleTest, Application_ImportSys_Works)
  53. {
  54. ApplicationParameters params;
  55. params.m_pythonStatement = "import sys";
  56. EXPECT_TRUE(s_application->RunWithParameters(params));
  57. }
  58. TEST_F(PythonBindingsExampleTest, Application_ImportAzLmbr_Works)
  59. {
  60. ApplicationParameters params;
  61. params.m_pythonStatement = "import azlmbr";
  62. EXPECT_TRUE(s_application->RunWithParameters(params));
  63. }
  64. TEST_F(PythonBindingsExampleTest, Application_ImportAzLmbrPaths_Works)
  65. {
  66. ApplicationParameters params;
  67. params.m_pythonStatement = "import azlmbr.paths; print (azlmbr.paths.engroot)";
  68. EXPECT_TRUE(s_application->RunWithParameters(params));
  69. }
  70. TEST_F(PythonBindingsExampleTest, Application_SystemExit_Blocked)
  71. {
  72. int exceptions = 0;
  73. int errors = 0;
  74. s_application->GetErrorCount(exceptions, errors);
  75. ASSERT_EQ(exceptions, 0);
  76. ASSERT_EQ(errors, 0);
  77. // expects a clean "error" from this statement
  78. // the whole program should not exit()
  79. {
  80. ApplicationParameters params;
  81. params.m_pythonStatement = "import sys; sys.exit(0)";
  82. EXPECT_FALSE(s_application->RunWithParameters(params));
  83. s_application->GetErrorCount(exceptions, errors);
  84. EXPECT_EQ(exceptions, 0);
  85. EXPECT_GE(errors, 1);
  86. }
  87. s_application->ResetErrorCount();
  88. // should be able to run more statements
  89. {
  90. ApplicationParameters params;
  91. params.m_pythonStatement = "import sys";
  92. EXPECT_TRUE(s_application->RunWithParameters(params));
  93. s_application->GetErrorCount(exceptions, errors);
  94. EXPECT_EQ(exceptions, 0);
  95. EXPECT_EQ(errors, 0);
  96. }
  97. }
  98. }