diff --git a/.github/workflows/test-results-linux.yml b/.github/workflows/test-results-linux.yml index 41ce59577..23a6b7a23 100644 --- a/.github/workflows/test-results-linux.yml +++ b/.github/workflows/test-results-linux.yml @@ -38,3 +38,4 @@ jobs: name: ${{matrix.config.name}} path: "**/My Projects/Torque3D/game/test_detail.xml" reporter: java-junit + output-to: 'checks' diff --git a/.github/workflows/test-results-mac.yml b/.github/workflows/test-results-mac.yml index 6e50b530c..867582e53 100644 --- a/.github/workflows/test-results-mac.yml +++ b/.github/workflows/test-results-mac.yml @@ -38,3 +38,4 @@ jobs: name: ${{matrix.config.name}} path: "**/My Projects/Torque3D/game/test_detail.xml" reporter: java-junit + output-to: 'checks' diff --git a/.github/workflows/test-results-windows.yml b/.github/workflows/test-results-windows.yml index 1e0052340..3bd32a0c9 100644 --- a/.github/workflows/test-results-windows.yml +++ b/.github/workflows/test-results-windows.yml @@ -38,3 +38,4 @@ jobs: name: ${{matrix.config.name}} path: "**/My Projects/Torque3D/game/test_detail.xml" reporter: java-junit + output-to: 'checks' diff --git a/Engine/source/platformPOSIX/POSIXFileio.cpp b/Engine/source/platformPOSIX/POSIXFileio.cpp index cc5eb9299..b5b76c872 100644 --- a/Engine/source/platformPOSIX/POSIXFileio.cpp +++ b/Engine/source/platformPOSIX/POSIXFileio.cpp @@ -1017,8 +1017,10 @@ bool Platform::isFile(const char *pFilePath) // Get file info struct stat fStat; if (stat(pFilePath, &fStat) == 0) - if ((fStat.st_mode & S_IFMT) == S_IFREG) - return true; + return true; + + if ((fStat.st_mode & S_IFMT) == S_IFREG) + return true; // Since stat failed see if it exists in a zip file loaded if (Torque::FS::IsFile(pFilePath)) diff --git a/Engine/source/testing/unitTesting.cpp b/Engine/source/testing/unitTesting.cpp index f14647785..e7b5ceaa9 100644 --- a/Engine/source/testing/unitTesting.cpp +++ b/Engine/source/testing/unitTesting.cpp @@ -26,6 +26,7 @@ #include "console/codeBlock.h" #include "console/engineAPI.h" #include "console/consoleInternal.h" +#include "gfx/gfxInit.h" #if defined(TORQUE_OS_WIN) #define _CRTDBG_MAP_ALLOC @@ -145,42 +146,38 @@ private: const char* mFunctionName; }; -// uncomment to debug tests and use the test explorer. -//#define TEST_EXPLORER -#if !defined(TEST_EXPLORER) int main(int argc, char** argv) { - StandardMainLoop::init(); - StandardMainLoop::handleCommandLine(argc, (const char**)argv); - StandardMainLoop::shutdown(); - return StandardMainLoop::getReturnStatus(); -} -#else -int main(int argc, char** argv) -{ - StandardMainLoop::init(); + testing::GTEST_FLAG(output) = "xml:test_detail.xml"; + testing::GTEST_FLAG(stack_trace_depth) = 10; + printf("Running main() from %s\n", __FILE__); - // setup simular to runTests - Con::evaluate("GFXInit::createNullDevice();"); - Con::evaluate("if (!isObject(GuiDefaultProfile)) new GuiControlProfile(GuiDefaultProfile){}; if (!isObject(GuiTooltipProfile)) new GuiControlProfile(GuiTooltipProfile){};"); + // Initialize Google Test. testing::InitGoogleTest(&argc, argv); - // Fetch the unit test instance. - testing::UnitTest& unitTest = *testing::UnitTest::GetInstance(); - // Fetch the unit test event listeners. - testing::TestEventListeners& listeners = unitTest.listeners(); + // torques handle command. + StandardMainLoop::init(); + // setup torque for testing. + GFXInit::enumerateAdapters(); + GFXAdapter* a = GFXInit::chooseAdapter(NullDevice, ""); + GFXDevice* newDevice = GFX; + if (newDevice == NULL) + newDevice = GFXInit::createDevice(a); + newDevice->setAllowRender(false); - listeners.Append(new MemoryLeakDetector()); + // required for tests that add gui elements. + Con::evaluate("if (!isObject(GuiDefaultProfile)) new GuiControlProfile(GuiDefaultProfile){}; if (!isObject(GuiTooltipProfile)) new GuiControlProfile(GuiTooltipProfile){};"); - // Add the Torque unit test listener. - listeners.Append(new TorqueUnitTestListener(true)); + // this call is to add the tests that exist in runTests.tscript + // note these tests will not appear in the test explorer. + if(argc > 1) + StandardMainLoop::handleCommandLine(argc, (const char**)argv); + // run tests. int res = RUN_ALL_TESTS(); - StandardMainLoop::shutdown(); return res; } -#endif DefineEngineFunction(addUnitTest, void, (const char* function), , "Add a TorqueScript function as a GTest unit test.\n" @@ -227,58 +224,3 @@ DefineEngineFunction(expectTrue, void, (bool test, const char* message), (""), { EXPECT_TRUE(test) << scriptFileMessage(message).c_str(); } - -DefineEngineFunction(runAllUnitTests, int, (const char* testSpecs, const char* reportFormat), (""), - "Runs engine unit tests. Some tests are marked as 'stress' tests which do not " - "necessarily check correctness, just performance or possible nondeterministic " - "glitches. There may also be interactive or networking tests which may be " - "excluded by using the testSpecs argument.\n" - "This function should only be called once per executable run, because of " - "googletest's design.\n\n" - - "@param testSpecs A space-sepatated list of filters for test cases. " - "See https://code.google.com/p/googletest/wiki/AdvancedGuide#Running_a_Subset_of_the_Tests " - "and http://stackoverflow.com/a/14021997/945863 " - "for a description of the flag format.") -{ - Vector args; - args.push_back(NULL); // Program name is unused by googletest. - String specsArg; - if (dStrlen(testSpecs) > 0) - { - specsArg = testSpecs; - specsArg.replace(' ', ':'); - specsArg.insert(0, "--gtest_filter="); - args.push_back(const_cast(specsArg.c_str())); - } - - String reportFormatArg; - if (dStrlen(reportFormat) > 0) - { - reportFormatArg = String::ToString("--gtest_output=%s", reportFormat); - args.push_back(const_cast(reportFormatArg.c_str())); - } - S32 argc = args.size(); - - // Initialize Google Test. - testing::InitGoogleTest(&argc, args.address()); - - // Fetch the unit test instance. - testing::UnitTest& unitTest = *testing::UnitTest::GetInstance(); - - // Fetch the unit test event listeners. - testing::TestEventListeners& listeners = unitTest.listeners(); - - // Release the default listener. - delete listeners.Release(listeners.default_result_printer()); - - // Add the Torque unit test listener. - listeners.Append(new TorqueUnitTestListener(false)); - - // Perform googletest run. - Con::printf("\nUnit Tests Starting...\n"); - const S32 result = RUN_ALL_TESTS(); - Con::printf("... Unit Tests Ended.\n"); - - return result; -} diff --git a/Templates/BaseGame/game/runTests.tscript b/Templates/BaseGame/game/runTests.tscript index 25b53dd99..f22a98f77 100644 --- a/Templates/BaseGame/game/runTests.tscript +++ b/Templates/BaseGame/game/runTests.tscript @@ -1,13 +1,6 @@ -// Placeholder initialisation that the tests expect -GFXInit::createNullDevice(); +// put script tests here -if(!isObject(GuiDefaultProfile)) - new GuiControlProfile (GuiDefaultProfile) {}; -if(!isObject(GuiTooltipProfile)) - new GuiControlProfile (GuiTooltipProfile) {}; - -setLogMode(2); -$Con::LogBufferEnabled = false; -$Testing::CheckMemoryLeaks = false; -runAllUnitTests("-*.Stress*", "xml"); -quit(); +function MyTest() { + expectTrue(2+2 == 4, "basic math should work"); +} +addUnitTest(MyTest); \ No newline at end of file