From af0bcb06365969d17f71b705862448b473a6556f Mon Sep 17 00:00:00 2001 From: John Date: Thu, 10 Jun 2021 14:58:34 +0100 Subject: [PATCH] Remove test files --- ...ImpactBuildTargetDescriptorFactoryTest.cpp | 370 ---- .../TestImpactModuleCoverageFactoryTest.cpp | 522 ----- ...TestImpactTargetDescriptorCompilerTest.cpp | 150 -- ...tImpactTestEnumerationSuiteFactoryTest.cpp | 589 ------ .../TestImpactTestRunSuiteFactoryTest.cpp | 592 ------ ...TestImpactTestTargetMetaMapFactoryTest.cpp | 239 --- .../TestImpactProcessSchedulerTest.cpp | 712 ------- .../Tests/Process/TestImpactProcessTest.cpp | 491 ----- .../Target/TestImpactBuildTargetTest.cpp | 352 ---- .../Code/Tests/TestImpactExceptionTest.cpp | 150 -- .../Tests/TestImpactTestJobRunnerCommon.h | 159 -- .../Code/Tests/TestImpactTestUtils.cpp | 1843 ----------------- .../Runtime/Code/Tests/TestImpactTestUtils.h | 220 -- .../Code/Tests/TestProcess/CMakeLists.txt | 12 - .../Tests/TestProcess/Code/CMakeLists.txt | 24 - .../Code/Source/TestImpactTestProcess.cpp | 93 - .../Code/Source/TestImpactTestProcess.h | 38 - .../Source/TestImpactTestProcessLargeText.cpp | 531 ----- .../Source/TestImpactTestProcessLargeText.h | 19 - .../Code/Source/TestImpactTestProcessMain.cpp | 19 - ...estimpactframework_testprocess_files.cmake | 18 - .../Code/Tests/TestTargetA/CMakeLists.txt | 12 - .../Tests/TestTargetA/Code/CMakeLists.txt | 28 - .../Code/Tests/TestImpactTestTargetA.cpp | 73 - ...actframework_testtargeta_tests_files.cmake | 14 - .../Code/Tests/TestTargetB/CMakeLists.txt | 12 - .../Tests/TestTargetB/Code/CMakeLists.txt | 29 - .../Code/Tests/TestImpactTestTargetB.cpp | 78 - ...actframework_testtargetb_tests_files.cmake | 14 - .../Code/Tests/TestTargetC/CMakeLists.txt | 12 - .../Tests/TestTargetC/Code/CMakeLists.txt | 29 - .../Code/Tests/TestImpactTestTargetC.cpp | 63 - ...actframework_testtargetc_tests_files.cmake | 14 - .../Code/Tests/TestTargetD/CMakeLists.txt | 12 - .../Tests/TestTargetD/Code/CMakeLists.txt | 29 - .../Code/Tests/TestImpactTestTargetD.cpp | 188 -- ...actframework_testtargetd_tests_files.cmake | 14 - 37 files changed, 7764 deletions(-) delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactBuildTargetDescriptorFactoryTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactModuleCoverageFactoryTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTargetDescriptorCompilerTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestEnumerationSuiteFactoryTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestRunSuiteFactoryTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestTargetMetaMapFactoryTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessSchedulerTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/Target/TestImpactBuildTargetTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactExceptionTest.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestJobRunnerCommon.h delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.h delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.h delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.h delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessMain.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/testimpactframework_testprocess_files.cmake delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/Tests/TestImpactTestTargetA.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/testimpactframework_testtargeta_tests_files.cmake delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/Tests/TestImpactTestTargetB.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/testimpactframework_testtargetb_tests_files.cmake delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/Tests/TestImpactTestTargetC.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/testimpactframework_testtargetc_tests_files.cmake delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/CMakeLists.txt delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/Tests/TestImpactTestTargetD.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/testimpactframework_testtargetd_tests_files.cmake diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactBuildTargetDescriptorFactoryTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactBuildTargetDescriptorFactoryTest.cpp deleted file mode 100644 index a0a4a7309e..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactBuildTargetDescriptorFactoryTest.cpp +++ /dev/null @@ -1,370 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include - -namespace UnitTest -{ - class BuildTargetDescriptorFactoryTestFixture - : public AllocatorsTestFixture - { - protected: - const AZStd::vector m_staticExclude = {".cmake"}; - const AZStd::vector m_inputExclude = {".jinja"}; - const AZStd::string m_autogenMatcher = {"(.*)\\..*"}; - - const AZStd::vector m_autogenInputs = - { - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/Log.ScriptCanvasNode.xml", - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/DrawText.ScriptCanvasNode.xml", - "Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNode_Header.jinja", - "Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNode_Source.jinja" - }; - - const AZStd::vector m_autogenOutputs = - { - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.cpp", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.cpp" - }; - - const AZStd::vector m_staticSources = - { - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/precompiled.cpp", - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/precompiled.h", - "Gems/ScriptCanvasDiagnosticLibrary/Code/scriptcanvasdiagnosticlibrary_autogen_files.cmake", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.cpp", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.cpp" - }; - - const AZStd::vector m_expectedStaticSources = - { - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/precompiled.cpp", - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/precompiled.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.cpp", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.cpp" - }; - - const AZStd::string m_name = "ScriptCanvasDiagnosticLibrary.Static"; - const AZStd::string m_outputName = "ScriptCanvasDiagnosticLibrary"; - const AZStd::string m_path = "Gems/ScriptCanvasDiagnosticLibrary/Code"; - - const TestImpact::AutogenSources m_expectedAutogenSources = - { - { - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/Log.ScriptCanvasNode.xml", - { - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/Log.generated.cpp" - } - }, - { - "Gems/ScriptCanvasDiagnosticLibrary/Code/Source/DrawText.ScriptCanvasNode.xml", - { - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.h", - "windows_vs2019/Gems/ScriptCanvasDiagnosticLibrary/Code/Azcg/Generated/Source/DrawText.generated.cpp" - } - } - }; - }; - - TEST_F(BuildTargetDescriptorFactoryTestFixture, NoRawData_ExpectArtifactException) - { - // Given an empty raw descriptor string - const AZStd::string rawTargetDescriptor; - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, InvalidRawData_ExpectArtifactException) - { - // Given a raw descriptor string of invalid data - const AZStd::string rawTargetDescriptor = "abcde"; - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, NoAutogenMatcher_ExpectArtifactException) - { - // Given a valid raw descriptor string - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, m_staticSources, m_autogenInputs, m_autogenOutputs); - - try - { - // When attempting to construct the build target descriptor with an empty autogen matcher - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, ""); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, EmptyName_ExpectArtifactException) - { - // Given a invalid raw descriptor string lacking build meta-data name - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString("", m_outputName, m_path, m_staticSources, m_autogenInputs, m_autogenOutputs); - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, EmptyOutputName_ExpectArtifactException) - { - // Given a invalid raw descriptor string lacking build meta-data output name - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, "", m_path, m_staticSources, m_autogenInputs, m_autogenOutputs); - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, EmptyPath_ExpectArtifactException) - { - // Given a invalid raw descriptor string lacking build meta-data path - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, "", m_staticSources, m_autogenInputs, m_autogenOutputs); - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, NoStaticSources_ExpectValidDescriptor) - { - const TestImpact::BuildTargetDescriptor expectedBuiltTarget = - GenerateBuildTargetDescriptor(m_name, m_outputName, m_path, {}, m_expectedAutogenSources); - - // Given a valid raw descriptor string with no static sources - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, {}, m_autogenInputs, m_autogenOutputs); - - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, {}, m_inputExclude, m_autogenMatcher); - - // Expect the constructed build target descriptor to match the specified descriptor - EXPECT_TRUE(buildTarget == expectedBuiltTarget); - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, NoAutogenSources_ExpectValidDescriptor) - { - const TestImpact::BuildTargetDescriptor expectedBuiltTarget = - GenerateBuildTargetDescriptor(m_name, m_outputName, m_path, m_expectedStaticSources, {}); - - // Given a valid raw descriptor string with no autogen sources - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, m_staticSources, {}, {}); - - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Expect the constructed build target descriptor to match the specified descriptor - EXPECT_TRUE(buildTarget == expectedBuiltTarget); - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, NoStaticOrAutogenSources_ExpectValidDescriptor) - { - const TestImpact::BuildTargetDescriptor expectedBuiltTarget = GenerateBuildTargetDescriptor(m_name, m_outputName, m_path, {}, {}); - - // Given a valid raw descriptor string with no static or autogen sources - const AZStd::string rawTargetDescriptor = GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, {}, {}, {}); - - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Expect the constructed build target descriptor to match the specified descriptor - EXPECT_TRUE(buildTarget == expectedBuiltTarget); - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, AutogenOutputSourcesButNoAutogenInputSources_ExpectArtifactException) - { - // Given a valid raw descriptor string with autogen output sources but no autogen input sources - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, m_staticSources, {}, m_autogenOutputs); - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, AutogenInputSourcesButNoAutogenOutputSources_ExpectArtifactException) - { - // Given a valid raw descriptor string with autogen inout sources but no autogen output sources - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, m_staticSources, m_autogenInputs, {}); - - try - { - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(BuildTargetDescriptorFactoryTestFixture, StaticAndAutogenSources_ExpectValidDescriptor) - { - const TestImpact::BuildTargetDescriptor expectedBuiltTarget = - GenerateBuildTargetDescriptor(m_name, m_outputName, m_path, m_expectedStaticSources, m_expectedAutogenSources); - - // Given a valid raw descriptor string with static and autogen sources - const AZStd::string rawTargetDescriptor = - GenerateBuildTargetDescriptorString(m_name, m_outputName, m_path, m_staticSources, m_autogenInputs, m_autogenOutputs); - - // When attempting to construct the build target descriptor - const TestImpact::BuildTargetDescriptor buildTarget = - TestImpact::BuildTargetDescriptorFactory(rawTargetDescriptor, m_staticExclude, m_inputExclude, m_autogenMatcher); - - // Expect the constructed build target descriptor to match the specified descriptor - EXPECT_TRUE(buildTarget == expectedBuiltTarget); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactModuleCoverageFactoryTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactModuleCoverageFactoryTest.cpp deleted file mode 100644 index 137addc360..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactModuleCoverageFactoryTest.cpp +++ /dev/null @@ -1,522 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include - -namespace UnitTest -{ - TEST(CoberturaModuleCoveragesFactory, ParseEmptyString_ThrowsArtifactException) - { - // Given an empty string - const AZStd::string rawCoverage; - - try - { - // When attempting to parse the empty coverage - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(CoberturaModuleCoveragesFactory, ParseInvalidString_ThrowsArtifactException) - { - // Given an invalid string - const AZStd::string rawCoverage = "!@?"; - - try - { - // When attempting to parse the invalid coverage - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(CoberturaModuleCoveragesFactory, ParseEmptyCoverage_ExpectEmptyModuleCoverages) - { - // Given an empty coverage string - const AZStd::string rawCoverage = - "" - "" - " " - " " - "" - ""; - - // When attempting to parse the empty coverage - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect an empty module coverages - EXPECT_TRUE(coverage.empty()); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetLineCoverageA_ReturnsValidLineCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetALineModuleCoverages(); - - // Given the raw line coverage output of TestTargetA - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw line coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetSourceCoverageA_ReturnsValidSourceCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetASourceModuleCoverages(); - - // Given the raw source coverage output of TestTargetA - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw source coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetLineCoverageB_ReturnsValidLineCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetBLineModuleCoverages(); - - // Given the raw line coverage output of TestTargetB - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw line coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetSourceCoverageB_ReturnsValidSourceCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetBSourceModuleCoverages(); - - // Given the raw source coverage output of TestTargetB - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw source coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetLineCoverageC_ReturnsValidLineCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetCLineModuleCoverages(); - - // Given the raw line coverage output of TestTargetC - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw line coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetSourceCoverageC_ReturnsValidSourceCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetCSourceModuleCoverages(); - - // Given the raw source coverage output of TestTargetC - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw source coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetLineCoverageD_ReturnsValidLineCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetDLineModuleCoverages(); - - // Given the raw line coverage output of TestTargetD - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw line coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } - - TEST(CoberturaModuleCoveragesFactory, ParseTestTargetSourceCoverageD_ReturnsValidSourceCoverage) - { - const AZStd::vector expectedCoverage = GetTestTargetDSourceModuleCoverages(); - - // Given the raw source coverage output of TestTargetD - const AZStd::string rawCoverage = - "" - "" - " " - " C:" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw source coverage text is parsed - const AZStd::vector coverage = TestImpact::Cobertura::ModuleCoveragesFactory(rawCoverage); - - // Expect the generated suite data to match that of the raw coverage text - EXPECT_TRUE(coverage == expectedCoverage); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTargetDescriptorCompilerTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTargetDescriptorCompilerTest.cpp deleted file mode 100644 index 1e72902b4e..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTargetDescriptorCompilerTest.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include - -namespace UnitTest -{ - class TargetDescriptorCompilerTestFixture - : public AllocatorsTestFixture - { - public: - void SetUp() override - { - AllocatorsTestFixture::SetUp(); - - m_buildTargetDescriptors.emplace_back(TestImpact::BuildTargetDescriptor{{"TestTargetA", "", ""}, {}}); - m_buildTargetDescriptors.emplace_back(TestImpact::BuildTargetDescriptor{{"TestTargetB", "", ""}, {}}); - m_buildTargetDescriptors.emplace_back(TestImpact::BuildTargetDescriptor{{"ProductionTargetA", "", ""}, {}}); - m_buildTargetDescriptors.emplace_back(TestImpact::BuildTargetDescriptor{{"ProductionTargetB", "", ""}, {}}); - m_buildTargetDescriptors.emplace_back(TestImpact::BuildTargetDescriptor{{"ProductionTargetC", "", ""}, {}}); - - m_testTargetMetaMap.emplace("TestTargetA", TestImpact::TestTargetMeta{"", TestImpact::LaunchMethod::TestRunner}); - m_testTargetMetaMap.emplace("TestTargetB", TestImpact::TestTargetMeta{"", TestImpact::LaunchMethod::StandAlone}); - } - - protected: - AZStd::vector m_buildTargetDescriptors; - TestImpact::TestTargetMetaMap m_testTargetMetaMap; - }; - - TestImpact::ProductionTargetDescriptor ConstructProductionTargetDescriptor(const AZStd::string& name) - { - return TestImpact::ProductionTargetDescriptor{TestImpact::BuildTargetDescriptor{{name, "", ""}, {{}, {}}}}; - } - - TestImpact::TestTargetDescriptor ConstructTestTargetDescriptor(const AZStd::string& name, TestImpact::LaunchMethod launchMethod) - { - return TestImpact::TestTargetDescriptor{ - TestImpact::BuildTargetDescriptor{{name, "", ""}, {{}, {}}}, TestImpact::TestTargetMeta{"", launchMethod}}; - } - - TEST_F(TargetDescriptorCompilerTestFixture, EmptyBuildTargetDescriptorList_ExpectArtifactException) - { - try - { - // Given an empty build target descriptor list but valid test target meta map - // When attempting to construct the test target - const auto& [productionTargetDescriptors, testTargetDescriptors] = - TestImpact::CompileTargetDescriptors({}, AZStd::move(m_testTargetMetaMap)); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(TargetDescriptorCompilerTestFixture, EmptyTestTargetMetaMap_ExpectArtifactException) - { - try - { - // Given a valid build target descriptor list but empty test target meta map - // When attempting to construct the test target - const auto& [productionTargetDescriptors, testTargetDescriptors] = - TestImpact::CompileTargetDescriptors(AZStd::move(m_buildTargetDescriptors), {}); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(TargetDescriptorCompilerTestFixture, TestTargetWithNoMatchingMeta_ExpectArtifactException) - { - try - { - // Given a valid build target descriptor list but a test target meta map with an orphan entry - m_testTargetMetaMap.emplace("Orphan", TestImpact::TestTargetMeta{"", TestImpact::LaunchMethod::TestRunner}); - - // When attempting to construct the test target - const auto& [productionTargetDescriptors, testTargetDescriptors] = - TestImpact::CompileTargetDescriptors(AZStd::move(m_buildTargetDescriptors), {}); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(TargetDescriptorCompilerTestFixture, ValidProductionTargetsAndTestTargetMetas_ExpectValidProductionAndTestTargets) - { - // Given a valid build target descriptor list and a valid test target meta map - // When attempting to construct the test target - const auto& [productionTargetDescriptors, testTargetDescriptors] = - TestImpact::CompileTargetDescriptors(AZStd::move(m_buildTargetDescriptors), AZStd::move(m_testTargetMetaMap)); - - // Expect the production targets to match the expected targets - EXPECT_TRUE(productionTargetDescriptors.size() == 3); - EXPECT_TRUE(productionTargetDescriptors[0] == ConstructProductionTargetDescriptor("ProductionTargetA")); - EXPECT_TRUE(productionTargetDescriptors[1] == ConstructProductionTargetDescriptor("ProductionTargetB")); - EXPECT_TRUE(productionTargetDescriptors[2] == ConstructProductionTargetDescriptor("ProductionTargetC")); - - // Expect the test targets to match the expected targets - EXPECT_TRUE(testTargetDescriptors.size() == 2); - EXPECT_TRUE(testTargetDescriptors[0] == ConstructTestTargetDescriptor("TestTargetA", TestImpact::LaunchMethod::TestRunner)); - EXPECT_TRUE(testTargetDescriptors[1] == ConstructTestTargetDescriptor("TestTargetB", TestImpact::LaunchMethod::StandAlone)); - } - -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestEnumerationSuiteFactoryTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestEnumerationSuiteFactoryTest.cpp deleted file mode 100644 index d6e1dc5920..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestEnumerationSuiteFactoryTest.cpp +++ /dev/null @@ -1,589 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace UnitTest -{ - TEST(GTestEnumerationSuiteFactory, ParseEmptyString_ThrowsArtifactException) - { - // Given an empty string - const AZStd::string rawEnum; - - try - { - // When attempting to parse the empty suite - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(GTestEnumerationSuiteFactory, ParseInvalidString_ThrowsArtifactException) - { - // Given an invalid string - const AZStd::string rawEnum = "!@?"; - - try - { - // When attempting to parse the empty suite - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(GTestEnumerationSuiteFactory, ParseTestTargetA_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetATestEnumerationSuites(); - - // Given the raw enum output of TestTargetA - const AZStd::string rawEnum = - "\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n" - "\n"; - - // When the raw enumeration text is parsed - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Expect the generated suite data to match that of the raw enum text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestEnumerationSuiteFactory, ParseTestTargetB_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetBTestEnumerationSuites(); - - // Given the raw enum output of TestTargetB - const AZStd::string rawEnum = - "\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n" - "\n"; - - // When the raw enumeration text is parsed - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Expect the generated suite data to match that of the raw enum text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestEnumerationSuiteFactory, ParseTestTargetC_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetCTestEnumerationSuites(); - - // Given the raw enum output of TestTargetC - const AZStd::string rawEnum = - "\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n" - "\n"; - - // When the raw enumeration text is parsed - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Expect the generated suite data to match that of the raw enum text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestEnumerationSuiteFactory, ParseTestTargetD_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetDTestEnumerationSuites(); - - // Given the raw enum output of TestTargetD - const AZStd::string rawEnum = - "\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n" - "\n"; - - // When the raw enumeration text is parsed - const AZStd::vector suites = TestImpact::GTest::TestEnumerationSuitesFactory(rawEnum); - - // Expect the generated suite data to match that of the raw enum text - EXPECT_TRUE(suites == expectedSuites); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestRunSuiteFactoryTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestRunSuiteFactoryTest.cpp deleted file mode 100644 index 0f0a7dfdd8..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestRunSuiteFactoryTest.cpp +++ /dev/null @@ -1,592 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace UnitTest -{ - TEST(GTestRunSuiteFactory, ParseEmptyString_ThrowsArtifactException) - { - // Given an empty string - const AZStd::string rawRun; - - try - { - // When attempting to parse the empty suite - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect a artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(GTestRunSuiteFactory, ParseInvalidString_ThrowsArtifactException) - { - // Given an invalid string - const AZStd::string rawRun = "!@?"; - - try - { - // When attempting to parse the invalid suite - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Do not expect the parsing to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect a artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(GTestRunSuiteFactory, ParseTestTargetA_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetATestRunSuites(); - - // Given the raw run output of TestTargetA - const AZStd::string rawRun = - "" - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw run text is parsed - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Expect the generated suite data to match that of the raw run text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestRunSuiteFactory, ParseTestTargetB_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetBTestRunSuites(); - - // Given the raw run output of TestTargetB - const AZStd::string rawRun = - "" - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw run text is parsed - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Expect the generated suite data to match that of the raw run text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestRunSuiteFactory, ParseTestTargetC_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetCTestRunSuites(); - - // Given the raw run output of TestTargetC - const AZStd::string rawRun = - "" - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw run text is parsed - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Expect the generated suite data to match that of the raw run text - EXPECT_TRUE(suites == expectedSuites); - } - - TEST(GTestRunSuiteFactory, ParseTestTargetD_ReturnsValidSuitesAndTests) - { - const AZStd::vector expectedSuites = GetTestTargetDTestRunSuites(); - - // Given the raw run output of TestTargetD - const AZStd::string rawRun = - "" - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - // When the raw run text is parsed - const AZStd::vector suites = TestImpact::GTest::TestRunSuitesFactory(rawRun); - - // Expect the generated suite data to match that of the raw run text - EXPECT_TRUE(suites == expectedSuites); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestTargetMetaMapFactoryTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestTargetMetaMapFactoryTest.cpp deleted file mode 100644 index 588c46d1ce..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Artifact/TestImpactTestTargetMetaMapFactoryTest.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include - -namespace UnitTest -{ - TEST(TestTargetMetaMapFactoryTest, NoRawData_ExpectArtifactException) - { - // Given an empty meta data string - const AZStd::string rawTestTargetMetaData; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, InvalidRawData_ExpectArtifactException) - { - // Given a raw meta data string of invalid data - const AZStd::string rawTestTargetMetaData = "abcde"; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, EmptyTestMetaArray_ExpectArtifactException) - { - // Given a raw meta data string of valid JSON that contains no tests - const AZStd::string rawTestTargetMetaData = - "{" - " \"google\": {" - " \"test\": {" - " \"tests\": [" - " ]" - " }" - " }" - "}"; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, EmptyName_ExpectArtifactException) - { - // Given a raw meta data string with a test that has no name value - const AZStd::string rawTestTargetMetaData = - "{" - " \"google\": {" - " \"test\": {" - " \"tests\": [" - " { \"name\": \"\", \"namespace\": \"Legacy\", \"suite\": \"main\", \"launch_method\": \"test_runner\" }" - " ]" - " }" - " }" - "}"; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, EmptyBuildType_ExpectArtifactException) - { - // Given a raw meta data string with a test that has no build type - const AZStd::string rawTestTargetMetaData = - "{" - " \"google\": {" - " \"test\": {" - " \"tests\": [" - " { \"name\": \"TestName\", \"namespace\": \"Legacy\", \"suite\": \"main\", \"launch_method\": \"\" }" - " ]" - " }" - " }" - "}"; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, InvalidBuildType_ExpectArtifactException) - { - // Given a raw meta data string with a test that has an invalid build type - const AZStd::string rawTestTargetMetaData = - "{" - " \"google\": {" - " \"test\": {" - " \"tests\": [" - " { \"name\": \"TestName\", \"namespace\": \"Legacy\", \"suite\": \"main\", \"launch_method\": \"Unknown\" }" - " ]" - " }" - " }" - "}"; - - try - { - // When attempting to construct the test target - const TestImpact::TestTargetMetaMap testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Do not expect this statement to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ArtifactException& e) - { - // Expect an artifact exception - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(TestTargetMetaMapFactoryTest, ValidMetaData_ExpectValidTestMetaData) - { - // Given a raw meta data string valid test meta-data - const AZStd::string rawTestTargetMetaData = - "{" - " \"google\": {" - " \"test\": {" - " \"tests\": [" - " { \"name\": \"TestA\", \"namespace\": \"Legacy\", \"suite\": \"main\", \"launch_method\": \"test_runner\" }," - " { \"name\": \"TestB\", \"namespace\": \"\", \"suite\": \"main\", \"launch_method\": \"test_runner\" }," - " { \"name\": \"TestC\", \"namespace\": \"\", \"suite\": \"\", \"launch_method\": \"test_runner\" }," - " { \"name\": \"TestD\", \"namespace\": \"Legacy\", \"suite\": \"main\", \"launch_method\": \"stand_alone\" }" - " ]" - " }" - " }" - "}"; - - // When attempting to construct the test target - const auto testTargetMetaData = TestImpact::TestTargetMetaMapFactory(rawTestTargetMetaData); - - // Expect the constructed test meta-data to match that of the supplied raw data - EXPECT_EQ(testTargetMetaData.size(), 4); - EXPECT_TRUE(testTargetMetaData.find("TestA") != testTargetMetaData.end()); - EXPECT_TRUE((testTargetMetaData.at("TestA") == TestImpact::TestTargetMeta{"main", TestImpact::LaunchMethod::TestRunner})); - EXPECT_TRUE(testTargetMetaData.find("TestB") != testTargetMetaData.end()); - EXPECT_TRUE((testTargetMetaData.at("TestB") == TestImpact::TestTargetMeta{"main", TestImpact::LaunchMethod::TestRunner})); - EXPECT_TRUE(testTargetMetaData.find("TestC") != testTargetMetaData.end()); - EXPECT_TRUE((testTargetMetaData.at("TestC") == TestImpact::TestTargetMeta{"", TestImpact::LaunchMethod::TestRunner})); - EXPECT_TRUE(testTargetMetaData.find("TestD") != testTargetMetaData.end()); - EXPECT_TRUE((testTargetMetaData.at("TestD") == TestImpact::TestTargetMeta{"main", TestImpact::LaunchMethod::StandAlone})); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessSchedulerTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessSchedulerTest.cpp deleted file mode 100644 index 2b32067688..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessSchedulerTest.cpp +++ /dev/null @@ -1,712 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace UnitTest -{ - using SchedulerPermutation = AZStd::tuple - < - size_t, // Number of concurrent processes - size_t // Number of processes to launch - >; - - class ProcessSchedulerTestFixtureWithParams - : public AllocatorsTestFixture - , private AZ::Debug::TraceMessageBus::Handler - , public ::testing::WithParamInterface - { - private: - bool OnOutput(const char*, const char*) override; - void SetUp() override; - void TearDown() override; - - protected: - void ConfigurePermutation(); - void ExpectSuccessfulLaunch(TestImpact::ProcessId pid); - void ExpectGracefulExit(TestImpact::ProcessId pid); - void ExpectUnsuccessfulLaunch(TestImpact::ProcessId pid); - void ExpectExitCondition( - TestImpact::ProcessId pid, AZStd::optional expectedExitCondition = AZStd::nullopt); - void DoNotExpectExitCondition(TestImpact::ProcessId pid); - void ExpectTerminatedProcess(TestImpact::ProcessId pid); - void ExpectTimeoutProcess(TestImpact::ProcessId pid); - void ExpectUnlaunchedProcess(TestImpact::ProcessId pid); - void ExpectLargeStdOutput(TestImpact::ProcessId pid); - void ExpectLargeStdError(TestImpact::ProcessId pid); - void ExpectSmallStdOutput(TestImpact::ProcessId pid); - void ExpectSmallStdError(TestImpact::ProcessId pid); - void DoNotExpectStdOutput(TestImpact::ProcessId pid); - void DoNotExpectStdError(TestImpact::ProcessId pid); - - struct ProcessResult - { - AZStd::optional m_launchResult; - AZStd::optional m_exitStatus; - AZStd::optional m_createTime; - AZStd::optional m_exitTime; - AZStd::chrono::milliseconds m_duration = AZStd::chrono::milliseconds(0); - AZStd::optional m_returnCode; - TestImpact::StdContent m_std; - }; - - size_t m_numMaxConcurrentProcesses = 0; - size_t m_numProcessesToLaunch = 0; - - AZStd::unique_ptr m_processScheduler; - TestImpact::ProcessLaunchCallback m_processLaunchCallback; - TestImpact::ProcessExitCallback m_processExitCallback; - AZStd::vector m_processInfos; - AZStd::vector m_processResults; - }; - - // Permutation values for small process batches - const std::vector SmallNumMaxConcurrentProcesses = {1, 4, 8}; - const std::vector SmallNumProcessesToLaunch = {1, 8, 32}; - - // Permutation values for large process batches - const std::vector LargeNumMaxConcurrentProcesses = {16, 32, 64}; - const std::vector LargeNumProcessesToLaunch = {128, 256, 512}; - - void ProcessSchedulerTestFixtureWithParams::ConfigurePermutation() - { - const auto& [numMaxConcurrentProcesses, numProcessesToLaunch] = GetParam(); - m_numMaxConcurrentProcesses = numMaxConcurrentProcesses; - m_numProcessesToLaunch = numProcessesToLaunch; - } - - // Consume AZ log spam - bool ProcessSchedulerTestFixtureWithParams::OnOutput([[maybe_unused]] const char*, [[maybe_unused]] const char*) - { - return true; - } - - void ProcessSchedulerTestFixtureWithParams::SetUp() - { - UnitTest::AllocatorsTestFixture::SetUp(); - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - ConfigurePermutation(); - - m_processLaunchCallback = [this]( - TestImpact::ProcessId pid, - TestImpact::LaunchResult launchResult, - AZStd::chrono::high_resolution_clock::time_point createTime) - { - m_processResults[pid].m_launchResult = launchResult; - m_processResults[pid].m_createTime.emplace(createTime); - return TestImpact::CallbackResult::Continue; - }; - - m_processExitCallback = [this]( - TestImpact::ProcessId pid, - TestImpact::ExitCondition exitStatus, - TestImpact::ReturnCode returnCode, - TestImpact::StdContent&& std, - AZStd::chrono::high_resolution_clock::time_point exitTime) - { - m_processResults[pid].m_std = std::move(std); - m_processResults[pid].m_returnCode.emplace(returnCode); - m_processResults[pid].m_exitStatus = exitStatus; - m_processResults[pid].m_exitTime = exitTime; - m_processResults[pid].m_duration = - AZStd::chrono::duration_cast(exitTime - *m_processResults[pid].m_createTime); - return TestImpact::CallbackResult::Continue; - }; - - m_processResults.resize(m_numProcessesToLaunch); - } - - void ProcessSchedulerTestFixtureWithParams::TearDown() - { - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - UnitTest::AllocatorsTestFixture::TearDown(); - } - - // Expects the process to have exited under the specified circumstances - void ProcessSchedulerTestFixtureWithParams::ExpectExitCondition( - TestImpact::ProcessId pid, AZStd::optional expectedExitCondition) - { - const auto& [launchResult, exitStatus, createTime, exitTime, duration, returnCode, std] = m_processResults[pid]; - - // Expect the processes to have exited - EXPECT_TRUE(exitStatus.has_value()); - - // Expect the return code to be valid - EXPECT_TRUE(returnCode.has_value()); - - if (expectedExitCondition.has_value()) - { - // Expect the process to have exited under the specified conditions - EXPECT_EQ(exitStatus, expectedExitCondition); - - // Expect the return code to be that of the process's is (for gracefull exists) or that of the error code - // associated with the abnormal exit condition - EXPECT_EQ(returnCode, - expectedExitCondition == TestImpact::ExitCondition::Gracefull - ? pid - : static_cast(*exitStatus)); - } - - // Expect the duration to be non zero and the create time and exit time to have values as the processes has been in-flight - EXPECT_GT(duration.count(), 0); - EXPECT_TRUE(createTime.has_value()); - EXPECT_TRUE(exitTime.has_value()); - - // Expect the exit time to be later than the start time - EXPECT_GT(exitTime, createTime); - } - - // Expects the process to not have exited for to lack of being in-flight - void ProcessSchedulerTestFixtureWithParams::DoNotExpectExitCondition(TestImpact::ProcessId pid) - { - const auto& [launchResult, exitStatus, createTime, exitTime, duration, returnCode, std] = m_processResults[pid]; - - // Expect the processes to not have exited as the process has not been launched successfully - EXPECT_FALSE(exitStatus.has_value()); - - // Expect the return code to be invalid - EXPECT_FALSE(returnCode.has_value()); - - // Expect the duration to be zero as the process has not been in-flight - EXPECT_EQ(duration.count(), 0); - - // Do not expect the exit time to have a value - EXPECT_FALSE(exitTime.has_value()); - } - - // Expects the process to have been launched successfully, makes no assumptions about how it exited - void ProcessSchedulerTestFixtureWithParams::ExpectSuccessfulLaunch(TestImpact::ProcessId pid) - { - const auto& [launchResult, exitStatus, createTime, exitTime, duration, returnCode, std] = m_processResults[pid]; - - // Expect a launch to have been attempted by this process (not still in queue) - EXPECT_TRUE(launchResult.has_value()); - - // Expect the process to have launched successfully - EXPECT_EQ(launchResult, TestImpact::LaunchResult::Success); - } - - // Expects the process to have failed to launch - void ProcessSchedulerTestFixtureWithParams::ExpectUnsuccessfulLaunch(TestImpact::ProcessId pid) - { - const auto& [launchResult, exitStatus, createTime, exitTime, duration, returnCode, std] = m_processResults[pid]; - - // Expect a launch to have been attempted by this process (not still in queue) - EXPECT_TRUE(launchResult.has_value()); - - // Expect the process to have launched unsuccessfully - EXPECT_EQ(launchResult, TestImpact::LaunchResult::Failure); - - // Expect the create time to have a value as the process was technically created - EXPECT_TRUE(createTime.has_value()); - - DoNotExpectExitCondition(pid); - } - - // Expects the process to have exited gracefully of its own accord (i.e. not terminated for any reason by the scheduler) - void ProcessSchedulerTestFixtureWithParams::ExpectGracefulExit(TestImpact::ProcessId pid) - { - ExpectSuccessfulLaunch(pid); - ExpectExitCondition(pid, TestImpact::ExitCondition::Gracefull); - } - - // Expects the process to have been terminated by the client or scheduler - void ProcessSchedulerTestFixtureWithParams::ExpectTerminatedProcess(TestImpact::ProcessId pid) - { - ExpectSuccessfulLaunch(pid); - ExpectExitCondition(pid, TestImpact::ExitCondition::Terminated); - } - - // Expects the process to have been terminated by the scheduler due to the process or scheduler timing out - void ProcessSchedulerTestFixtureWithParams::ExpectTimeoutProcess(TestImpact::ProcessId pid) - { - ExpectSuccessfulLaunch(pid); - ExpectExitCondition(pid, TestImpact::ExitCondition::Timeout); - } - - // Expects the process to have not been attempted to launch (was still in the queue) - void ProcessSchedulerTestFixtureWithParams::ExpectUnlaunchedProcess(TestImpact::ProcessId pid) - { - const auto& [launchResult, exitStatus, createTime, exitTime, duration, returnCode, std] = m_processResults[pid]; - - // Expect a launch to not have been attempted by this process (still in queue) - EXPECT_FALSE(launchResult.has_value()); - - // Expect the create time to have a value as the process was technically created - EXPECT_FALSE(createTime.has_value()); - - DoNotExpectExitCondition(pid); - } - - // Expects the std output to have been captured from the process with a large volume of text - void ProcessSchedulerTestFixtureWithParams::ExpectLargeStdOutput(TestImpact::ProcessId pid) - { - const auto& stdOut = m_processResults[pid].m_std.m_out; - - // Expect standard output to have a value - EXPECT_TRUE(stdOut.has_value()); - - // Expect the output length to be that of the large text output from the child process - EXPECT_EQ(stdOut.value().length(), LargeTextSize); - } - - // Expects the std error to have been captured from the process with a large volume of text - void ProcessSchedulerTestFixtureWithParams::ExpectLargeStdError(TestImpact::ProcessId pid) - { - const auto& stdErr = m_processResults[pid].m_std.m_err; - - // Expect standard error to have a value - EXPECT_TRUE(stdErr.has_value()); - - // Expect the error length to be that of the large text output from the child process - EXPECT_EQ(stdErr.value().length(), LargeTextSize); - } - - // Expects the std output to have been captured from the process with a small known text string - void ProcessSchedulerTestFixtureWithParams::ExpectSmallStdOutput(TestImpact::ProcessId pid) - { - const auto& stdOut = m_processResults[pid].m_std.m_out; - - // Expect standard output to have a value - EXPECT_TRUE(stdOut.has_value()); - - // Expect the output to match the known stdout of the child - EXPECT_EQ(stdOut.value(), KnownTestProcessOutputString(pid)); - } - - // Expects the std error to have been captured from the process with a small known text string - void ProcessSchedulerTestFixtureWithParams::ExpectSmallStdError(TestImpact::ProcessId pid) - { - const auto& stdErr = m_processResults[pid].m_std.m_err; - - // Expect standard error to have a value - EXPECT_TRUE(stdErr.has_value()); - - // Expect the output to match the known stderr of the child - EXPECT_EQ(stdErr.value(), KnownTestProcessErrorString(pid)); - } - - // Expects no standard output from the child process - void ProcessSchedulerTestFixtureWithParams::DoNotExpectStdOutput(TestImpact::ProcessId pid) - { - const auto& stdOut = m_processResults[pid].m_std.m_out; - - // Do not expect standard output to have a value - EXPECT_FALSE(stdOut.has_value()); - } - - // Expects no standard error from the child process - void ProcessSchedulerTestFixtureWithParams::DoNotExpectStdError(TestImpact::ProcessId pid) - { - const auto& stdErr = m_processResults[pid].m_std.m_err; - - // Do not expect standard error to have a value - EXPECT_FALSE(stdErr.has_value()); - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, ValidProcesses_SuccessfulLaunches) - { - // Given a set of processes to launch with valid arguments - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - ExpectGracefulExit(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, ValidAndInvalidProcesses_LaunchSuccessesAndFailures) - { - const size_t invalidProcessGroup = 4; - - // Given a mixture of processes to launch with valid and invalid arguments - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid % invalidProcessGroup == 0) - { - m_processInfos.emplace_back( - pid, - InvalidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - else - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - } - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid % invalidProcessGroup == 0) - { - ExpectUnsuccessfulLaunch(pid); - } - else - { - ExpectGracefulExit(pid); - } - - DoNotExpectStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, ProcessTimeouts_InFlightProcessesTimeout) - { - const size_t timeoutProcessGroup = 4; - - // Given a mixture of processes to launch with some processes sleeping indefinately - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid % timeoutProcessGroup == 0) - { - m_processInfos.emplace_back(pid, ValidProcessPath, ConstructTestProcessArgs(pid, LongSleep)); - } - else - { - m_processInfos.emplace_back(pid, ValidProcessPath, ConstructTestProcessArgs(pid, NoSleep)); - } - } - - // When the process scheduler launches the processes with a process timeout value - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::chrono::milliseconds(100), - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid % timeoutProcessGroup == 0) - { - ExpectTimeoutProcess(pid); - } - else - { - ExpectExitCondition(pid); - } - - DoNotExpectStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P( - ProcessSchedulerTestFixtureWithParams, ProcessLaunchCallbackAbort_InFlightProcessesTerminatedAndQueuedProcessesUnlaunched) - { - const size_t processToAbort = 8; - - // Given a set of processes to launch - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - - // Given a launch callback that will return the abort value for the process to abort - const auto abortingLaunchCallback = [this, processToAbort]( - TestImpact::ProcessId pid, - TestImpact::LaunchResult launchResult, - AZStd::chrono::high_resolution_clock::time_point createTime) - { - m_processLaunchCallback(pid, launchResult, createTime); - - if (pid == processToAbort) - { - return TestImpact::CallbackResult::Abort; - } - else - { - return TestImpact::CallbackResult::Continue; - } - }; - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - abortingLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid < processToAbort) - { - ExpectSuccessfulLaunch(pid); - } - else if (pid == processToAbort) - { - ExpectTerminatedProcess(pid); - } - else - { - ExpectUnlaunchedProcess(pid); - } - - DoNotExpectStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, ProcessExitCallbackAbort_InFlightProcessesTerminated) - { - const size_t processToAbort = 4; - - // Given a set of processes to launch - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - - // Given an exit callback that will return the abort value for the process to abort - const auto abortingExitCallback = [this, processToAbort]( - TestImpact::ProcessId pid, - TestImpact::ExitCondition exitStatus, - TestImpact::ReturnCode returnCode, - TestImpact::StdContent&& std, - AZStd::chrono::high_resolution_clock::time_point exitTime) - { - m_processExitCallback(pid, exitStatus, returnCode, std::move(std), exitTime); - - if (pid == processToAbort) - { - return TestImpact::CallbackResult::Abort; - } - else - { - return TestImpact::CallbackResult::Continue; - } - }; - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - abortingExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid < processToAbort) - { - ExpectSuccessfulLaunch(pid); - } - else if (pid == processToAbort) - { - ExpectGracefulExit(pid); - } - else - { - if (m_processResults[pid].m_launchResult.has_value()) - { - ExpectSuccessfulLaunch(pid); - } - else - { - ExpectUnlaunchedProcess(pid); - } - } - - DoNotExpectStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, SchedulerTimeout_QueuedAndInFlightProcessesTerminated) - { - const size_t processToTimeout = 0; - - // Given a set of processes to launch where one process will sleep indefinately - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid == processToTimeout) - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, LongSleep)); - } - else - { - m_processInfos.emplace_back( - pid, - ValidProcessPath, - ConstructTestProcessArgs(pid, NoSleep)); - } - } - - // When the process scheduler launches the processes with a scheduler timeout value - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::chrono::milliseconds(100) - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - if (pid == processToTimeout) - { - ExpectTimeoutProcess(pid); - } - else - { - if (m_processResults[pid].m_launchResult.has_value()) - { - ExpectSuccessfulLaunch(pid); - } - else - { - ExpectUnlaunchedProcess(pid); - } - } - - DoNotExpectStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, RedirectStdOut_StdOutputIsLargeTextString) - { - // Given a set of processes to launch - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - m_processInfos.emplace_back( - pid, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - ConstructTestProcessArgsLargeText(pid, NoSleep)); - } - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - ExpectGracefulExit(pid); - ExpectLargeStdOutput(pid); - DoNotExpectStdError(pid); - } - } - - TEST_P(ProcessSchedulerTestFixtureWithParams, RedirectStdError_StdErrorIsLargeTextString) - { - // Given a set of processes to launch - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - m_processInfos.emplace_back( - pid, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - ConstructTestProcessArgsLargeText(pid, NoSleep)); - } - - // When the process scheduler launches the processes - m_processScheduler = AZStd::make_unique( - m_processInfos, - m_processLaunchCallback, - m_processExitCallback, - m_numMaxConcurrentProcesses, - AZStd::nullopt, - AZStd::nullopt - ); - - for (size_t pid = 0; pid < m_numProcessesToLaunch; pid++) - { - ExpectGracefulExit(pid); - DoNotExpectStdOutput(pid); - ExpectLargeStdError(pid); - } - } - - INSTANTIATE_TEST_CASE_P( - SmallConcurrentProcesses, - ProcessSchedulerTestFixtureWithParams, - ::testing::Combine( - ::testing::ValuesIn(SmallNumMaxConcurrentProcesses), - ::testing::ValuesIn(SmallNumProcessesToLaunch) - )); - - INSTANTIATE_TEST_CASE_P( - LargeConcurrentProcesses, - ProcessSchedulerTestFixtureWithParams, - ::testing::Combine( - ::testing::ValuesIn(LargeNumMaxConcurrentProcesses), - ::testing::ValuesIn(LargeNumProcessesToLaunch) - )); -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessTest.cpp deleted file mode 100644 index df4ea5a967..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Process/TestImpactProcessTest.cpp +++ /dev/null @@ -1,491 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include -#include - -namespace UnitTest -{ - class ProcessTestFixture - : public AllocatorsTestFixture - { - protected: - void SetUp() override - { - UnitTest::AllocatorsTestFixture::SetUp(); - } - - void TearDown() override - { - if (m_process && m_process->IsRunning()) - { - m_process->Terminate(0); - } - - UnitTest::AllocatorsTestFixture::TearDown(); - } - - AZStd::unique_ptr m_process; - static constexpr const TestImpact::ProcessId m_id = 1; - static constexpr const TestImpact::ReturnCode m_terminateErrorCode = 666; - }; - - TEST_F(ProcessTestFixture, LaunchValidProcess_ProcessReturnsSuccessfully) - { - // Given a process launched with a valid binary - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process has exited - m_process->BlockUntilExit(); - - // Expect the process to no longer be running - EXPECT_FALSE(m_process->IsRunning()); - } - - TEST_F(ProcessTestFixture, LaunchInvalidProcessInfo_ThrowsProcessException) - { - try - { - // Given a process launched with an invalid binary - TestImpact::ProcessInfo processInfo(m_id, ""); - - // Do not expect this code to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ProcessException& e) - { - // Except a process exception to be thrown - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(ProcessTestFixture, LaunchInvalidBinary_ThrowsProcessException) - { - try - { - // Given a process launched with an ivalid binary - TestImpact::ProcessInfo processInfo(m_id, "#!#zz:/z/z/z.exe.z@"); - - // When the process is attempted launch - m_process = TestImpact::LaunchProcess(processInfo); - - // Do not expect this code to be reachable - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::ProcessException& e) - { - // Except a process exception to be thrown - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST_F(ProcessTestFixture, GetProcessInfo_ReturnsProcessInfo) - { - // Given a process launched with a valid binary and args - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath, args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process has exited - m_process->BlockUntilExit(); - - // Expect the retrieved process info to match to process info used to launch the process - EXPECT_EQ(m_process->GetProcessInfo().GetId(), m_id); - EXPECT_EQ(m_process->GetProcessInfo().GetProcessPath(), ValidProcessPath); - EXPECT_EQ(m_process->GetProcessInfo().GetStartupArgs(), args); - } - - TEST_F(ProcessTestFixture, GetReturnCodeAfterExit_ReturnsArg) - { - // Given a process launched with a valid binary and args - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath, args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process has exited - m_process->BlockUntilExit(); - - // Expect the process to no longer be running - EXPECT_FALSE(m_process->IsRunning()); - - // Expect the return value to be the process id - EXPECT_EQ(m_process->GetReturnCode(), m_id); - } - - TEST_F(ProcessTestFixture, GetReturnCodeInFlight_ReturnsNullOpt) - { - // Given a process launched with a valid binary and args to sleep for 100 seconds - const AZStd::string args = ConstructTestProcessArgs(m_id, LongSleep); - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath, args); - - // When the process is running - m_process = TestImpact::LaunchProcess(processInfo); - - // Expect the return value to be empty - EXPECT_EQ(m_process->GetReturnCode(), AZStd::nullopt); - } - - TEST_F(ProcessTestFixture, TerminateWithErrorCode_ReturnsErrorCode) - { - // Given a process launched with a valid binary and args to sleep for 100 seconds - const AZStd::string args = ConstructTestProcessArgs(m_id, LongSleep); - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath, args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process is terminated by the client with the specified error code - m_process->Terminate(m_terminateErrorCode); - - // Expect the return value to be the error code specified in the Terminate call - EXPECT_EQ(m_process->GetReturnCode(), m_terminateErrorCode); - - // Expect the process to no longer be running - EXPECT_FALSE(m_process->IsRunning()); - } - - TEST_F(ProcessTestFixture, CheckIsRunningWhilstRunning_ProcessIsRunning) - { - // Given a process launched with a valid binary and args to sleep for 100 seconds - const AZStd::string args = ConstructTestProcessArgs(m_id, LongSleep); - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath, args); - - // When the process is running - m_process = TestImpact::LaunchProcess(processInfo); - - // Expect the process to be running - EXPECT_TRUE(m_process->IsRunning()); - } - - TEST_F(ProcessTestFixture, CheckIsRunningWhilstNotRunning_ReturnsFalse) - { - // Given a process launched with a valid binary - TestImpact::ProcessInfo processInfo(m_id, ValidProcessPath); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process is terminated by the client - m_process->Terminate(0); - - // Expect the process to be running - EXPECT_FALSE(m_process->IsRunning()); - } - - TEST_F(ProcessTestFixture, RedirectStdOut_OutputIsKnownTestProcessOutputString) - { - // Given a process launched with a valid binary and standard output redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Expect stdoutput to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Do not expect stdouterr to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to match the known stdout of the child - EXPECT_EQ(m_process->ConsumeStdOut(), KnownTestProcessOutputString(m_id)); - } - - TEST_F(ProcessTestFixture, RedirectStdErr_OutputIsKnownTestProcessOutputString) - { - // Given a process launched with a valid binary and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Do not expect stdoutput to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Expect stderror to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to match the known stdout of the child - EXPECT_EQ(m_process->ConsumeStdErr(), KnownTestProcessErrorString(m_id)); - } - - TEST_F(ProcessTestFixture, RedirectStdOutAndTerminate_OutputIsEmpty) - { - // Given a process launched with a valid binary and standard output redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process is terminated - m_process->Terminate(0); - - // Expect stdoutput to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Do not expect stdouterr to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - } - - TEST_F(ProcessTestFixture, RedirectStdErrAndTerminate_OutputIsEmpty) - { - // Given a process launched with a valid binary and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process is terminated - m_process->Terminate(0); - - // Do not expect stdoutput to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Expect stderror to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to be empty - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - - TEST_F(ProcessTestFixture, RedirectStdOutAndStdErrorRouting_OutputsAreKnownTestProcessOutputStrings) - { - // Given a process launched with a valid binary and both standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Expect stdoutput to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Expect stderror to be rerouted to the parent - EXPECT_TRUE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to match the known stdout and stderr of the child - EXPECT_EQ(m_process->ConsumeStdOut(), KnownTestProcessOutputString(m_id)); - EXPECT_EQ(m_process->ConsumeStdErr(), KnownTestProcessErrorString(m_id)); - } - - TEST_F(ProcessTestFixture, NoStdOutOrStdErrRedirect_OutputIsEmpty) - { - // Given a process launched with a valid binary and both standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgs(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Do not expect stdoutput to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdOutput()); - - // Do not expect stdouterr to be rerouted to the parent - EXPECT_FALSE(m_process->GetProcessInfo().ParentHasStdError()); - - // Expect the output to to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - - TEST_F(ProcessTestFixture, LargePipeNoRedirects_OutputsAreEmpty) - { - // Given a process outputting large text with no standard output and no standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Expect the output to to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - - TEST_F(ProcessTestFixture, LargePipeNoRedirectsAndTerminated_OutputsAreEmpty) - { - // Given a process outputting large text with no standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, LongSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - - // When the process is running - m_process = TestImpact::LaunchProcess(processInfo); - - // Expect the output to to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - - // When the process is terminated - m_process->Terminate(0); - - // Expect the output to to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - - TEST_F(ProcessTestFixture, LargePipeRedirectsAndReadWhilstRunning_OutputsAreEmpty) - { - // Given a process outputting large text with no standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, ShortSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::None, - TestImpact::StdErrorRouting::None, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the outputs are read as the process is running - while (m_process->IsRunning()) - { - // Expect the outputs to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - } - - TEST_F(ProcessTestFixture, LargePipeRedirectsAndTerminated_OutputsAreEmpty) - { - // Given a process outputting large text with both standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, LongSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process is terminated - m_process->Terminate(0); - - // Expect the outputs to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } - - TEST_F(ProcessTestFixture, LargePipeRedirectsAndBlockedUntilExit_OutputsAreLargeTextFileSize) - { - // Given a process outputting large text with both standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, - args); - m_process = TestImpact::LaunchProcess(processInfo); - - // When the process exits - m_process->BlockUntilExit(); - - // Expect the output lengths to be that of the large text output from the child process - EXPECT_EQ(m_process->ConsumeStdOut().value().length(), LargeTextSize); - EXPECT_EQ(m_process->ConsumeStdErr().value().length(), LargeTextSize); - } - - TEST_F(ProcessTestFixture, LargePipeRedirectsAndReadWhilstRunning_TotalOutputsAreLargeTextFileSize) - { - // Given a process outputting large text with both standard output and standard error redirected to parent - const AZStd::string args = ConstructTestProcessArgsLargeText(m_id, NoSleep); - TestImpact::ProcessInfo processInfo( - m_id, - TestImpact::StdOutputRouting::ToParent, - TestImpact::StdErrorRouting::ToParent, - ValidProcessPath, args); - m_process = TestImpact::LaunchProcess(processInfo); - - size_t stdOutBytes = 0; - size_t stdErrBytes = 0; - while (m_process->IsRunning()) - { - // When the outputs are read as the process is running - if (auto output = m_process->ConsumeStdOut(); output.has_value()) - { - stdOutBytes += output.value().length(); - } - - if (auto output = m_process->ConsumeStdErr(); output.has_value()) - { - stdErrBytes += output.value().length(); - } - } - - // Expect the output lengths to be that of the large text output from the child process - EXPECT_EQ(stdOutBytes, LargeTextSize); - EXPECT_EQ(stdErrBytes, LargeTextSize); - - // Expect the outputs to be empty - EXPECT_FALSE(m_process->ConsumeStdOut().has_value()); - EXPECT_FALSE(m_process->ConsumeStdErr().has_value()); - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Target/TestImpactBuildTargetTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Target/TestImpactBuildTargetTest.cpp deleted file mode 100644 index e7ebec17d1..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/Target/TestImpactBuildTargetTest.cpp +++ /dev/null @@ -1,352 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include -#include - -#include -#include - -namespace UnitTest -{ - namespace - { - AZStd::string GenerateBuildTargetName(size_t index) - { - return AZStd::string::format("Target%u", index); - } - - AZStd::string GenerateBuildTargetOutputName(size_t index) - { - return AZStd::string::format("Output%u", index); - } - - AZ::IO::Path GenerateBuildTargetPath(size_t index) - { - return AZStd::string::format("C:\\Repo\\Dir%u", index); - } - - AZStd::string GenerateTestTargetSuite(size_t index) - { - return AZStd::string::format("Suite%u", index); - } - - TestImpact::LaunchMethod GenerateLaunchMethod(size_t index) - { - return index % 2 == 0 ? TestImpact::LaunchMethod::StandAlone : TestImpact::LaunchMethod::TestRunner; - } - - AZStd::string GenerateStaticSourceFile(size_t index) - { - return AZStd::string::format("StaticSource%u", index); - } - - TestImpact::AutogenPairs GenerateAutogenSourceFiles(size_t index) - { - TestImpact::AutogenPairs autogen; - autogen.m_input = AZStd::string::format("InputSource%u", index); - autogen.m_outputs.push_back(AZStd::string::format("OutputSource%u", index)); - autogen.m_outputs.push_back(AZStd::string::format("OutputHeader%u", index)); - return autogen; - } - - TestImpact::TargetSources GenerateTargetSources(size_t index) - { - TestImpact::TargetSources sources; - sources.m_staticSources.resize(index + 1); - for (size_t i = 0; i < sources.m_staticSources.size(); i++) - { - sources.m_staticSources[i] = GenerateStaticSourceFile(i); - } - - // Only generate autogen sources for even-numbered indexes - if (index % 2 == 0) - { - sources.m_autogenSources.resize(index + 1); - for (size_t i = 0; i < sources.m_autogenSources.size(); i++) - { - sources.m_autogenSources[i] = GenerateAutogenSourceFiles(i); - } - } - - return sources; - } - - TestImpact::ProductionTargetDescriptor GenerateProductionTargetDescriptor(size_t index = 0) - { - return TestImpact::ProductionTargetDescriptor( - { - TestImpact::BuildMetaData - { - GenerateBuildTargetName(index), GenerateBuildTargetOutputName(index), GenerateBuildTargetPath(index) - }, - GenerateTargetSources(index) - }); - } - - TestImpact::TestTargetDescriptor GenerateTestTargetDescriptor(size_t index = 0) - { - return TestImpact::TestTargetDescriptor( - { - TestImpact::BuildMetaData - { - GenerateBuildTargetName(index), GenerateBuildTargetOutputName(index), GenerateBuildTargetPath(index) - }, - GenerateTargetSources(index) - }, - TestImpact::TestTargetMeta - { - GenerateTestTargetSuite(index), GenerateLaunchMethod(index) - }); - } - } // namespace - - template - typename Target::Descriptor GenerateTargetDescriptor(size_t index = 0) - { - static_assert( - AZStd::is_same_v || AZStd::is_same_v, - "Unexpected target type, wants TestImpact::ProductionTarget or TestImpact::TestTarget"); - - if constexpr (AZStd::is_same_v) - { - return GenerateProductionTargetDescriptor(index); - } - else - { - return GenerateTestTargetDescriptor(index); - } - } - - void ValidateSources(const TestImpact::TargetSources& sources, size_t index = 0) - { - EXPECT_EQ(sources.m_staticSources.size(), index + 1); - for (size_t i = 0; i < sources.m_staticSources.size(); i++) - { - EXPECT_EQ(sources.m_staticSources[i], GenerateStaticSourceFile(i)); - } - - // Even numbered indexes have autogen sources - if (index % 2 == 0) - { - EXPECT_EQ(sources.m_autogenSources.size(), index + 1); - for (size_t i = 0; i < sources.m_autogenSources.size(); i++) - { - enum - { - OutputSource = 0, - OutputHeader = 1 - }; - - const TestImpact::AutogenPairs expectedAutogenSources = GenerateAutogenSourceFiles(i); - EXPECT_EQ(sources.m_autogenSources[i].m_input, expectedAutogenSources.m_input); - EXPECT_EQ(sources.m_autogenSources[i].m_outputs[OutputSource], expectedAutogenSources.m_outputs[OutputSource]); - EXPECT_EQ(sources.m_autogenSources[i].m_outputs[OutputHeader], expectedAutogenSources.m_outputs[OutputHeader]); - } - } - else - { - EXPECT_TRUE(sources.m_autogenSources.empty()); - } - } - - void ValidateTarget(const TestImpact::ProductionTarget& target, size_t index = 0) - { - EXPECT_EQ(target.GetName(), GenerateBuildTargetName(index)); - EXPECT_EQ(target.GetOutputName(), GenerateBuildTargetOutputName(index)); - EXPECT_EQ(target.GetPath(), GenerateBuildTargetPath(index)); - EXPECT_EQ(target.GetType(), TestImpact::TargetType::Production); - ValidateSources(target.GetSources(), index); - } - - void ValidateTarget(const TestImpact::TestTarget& target, size_t index = 0) - { - EXPECT_EQ(target.GetName(), GenerateBuildTargetName(index)); - EXPECT_EQ(target.GetOutputName(), GenerateBuildTargetOutputName(index)); - EXPECT_EQ(target.GetPath(), GenerateBuildTargetPath(index)); - EXPECT_EQ(target.GetType(), TestImpact::TargetType::Test); - EXPECT_EQ(target.GetSuite(), GenerateTestTargetSuite(index)); - EXPECT_EQ(target.GetLaunchMethod(), GenerateLaunchMethod(index)); - ValidateSources(target.GetSources(), index); - } - - template - class TargetListFixture - : public AllocatorsTestFixture - { - public: - using TargetListType = TargetList; - using TargetType = typename TargetList::TargetType; - - static constexpr size_t m_numTargets = 10; - }; - - using TargetTypes = testing::Types; - TYPED_TEST_CASE(TargetListFixture, TargetTypes); - - TYPED_TEST(TargetListFixture, CreateTarget_ExpectValidTarget) - { - // Given a target of the specified type - TargetType target(GenerateTargetDescriptor()); - - // Expect the target to match the procedurally generated target descriptor - ValidateTarget(target); - } - - TYPED_TEST(TargetListFixture, CreateEmptyTargetList_ExpectTargetException) - { - try - { - // Given an empty target list - TargetListType targetList({}); - - // Do not expect the target list construction to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::TargetException& e) - { - // Expect a target exception to be thrown - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TYPED_TEST(TargetListFixture, CreateTargetListWithDuplicateDescriptor_ExpectTargetException) - { - try - { - // Given a set of target descriptors containing a single duplicate - AZStd::vector descriptors; - descriptors.reserve(m_numTargets); - for (size_t i = 0; i < m_numTargets; i++) - { - // Wrap the last index round to repeat the first index - descriptors.push_back(GenerateTargetDescriptor(i % (m_numTargets - 1))); - } - - // When constructing the target list containing the duplicate target descriptor - TargetListType targetList(AZStd::move(descriptors)); - - // Do not expect the target list construction to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::TargetException& e) - { - // Expect a target exception to be thrown - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TYPED_TEST(TargetListFixture, CreateTargetListWithValidDescriptors_ExpectValidTargetList) - { - // Given a valid set of target descriptor - AZStd::vector descriptors; - descriptors.reserve(m_numTargets); - for (size_t i = 0; i < m_numTargets; i++) - { - descriptors.push_back(GenerateTargetDescriptor(i)); - } - - // When constructing the target list containing the valid target descriptors - TargetListType targetList(AZStd::move(descriptors)); - - // Expect the number of targets in the list to match the number of target descriptors used to construct the list - EXPECT_EQ(targetList.GetNumTargets(), m_numTargets); - - for (size_t i = 0; i < targetList.GetNumTargets(); i++) - { - // Expect the target to match the procedurally generated target descriptor - ValidateTarget(targetList.GetTargets()[i], i); - - // Expect the target obtained by name to match the procedurally generated target descriptor - auto target = targetList.GetTarget(GenerateBuildTargetName(i)); - EXPECT_TRUE(target); - EXPECT_EQ(target->GetName(), GenerateBuildTargetName(i)); - } - } - - TYPED_TEST(TargetListFixture, FindNonExistantTargets_ExpectEmptyResults) - { - // Given a valid set of target descriptor - AZStd::vector descriptors; - descriptors.reserve(m_numTargets); - for (size_t i = 0; i < m_numTargets; i++) - { - descriptors.push_back(GenerateTargetDescriptor(i)); - } - - // When constructing the target list containing the valid target descriptors - TargetListType targetList(AZStd::move(descriptors)); - - // Expect the number of targets in the list to match the number of target descriptors used to construct the list - EXPECT_EQ(targetList.GetNumTargets(), m_numTargets); - - for (size_t i = 0; i < targetList.GetNumTargets(); i++) - { - // When attempting to find a target that does not exist - auto target = targetList.GetTarget(GenerateBuildTargetName(i + targetList.GetNumTargets())); - - // Expect an empty result - EXPECT_FALSE(target); - } - } - - TYPED_TEST(TargetListFixture, FindNonExistantTargetsAndThrow_ExpectTargetExceptionss) - { - // Given a valid set of target descriptor - AZStd::vector descriptors; - descriptors.reserve(m_numTargets); - for (size_t i = 0; i < m_numTargets; i++) - { - descriptors.push_back(GenerateTargetDescriptor(i)); - } - - // When constructing the target list containing the valid target descriptors - TargetListType targetList(AZStd::move(descriptors)); - - // Expect the number of targets in the list to match the number of target descriptors used to construct the list - EXPECT_EQ(targetList.GetNumTargets(), m_numTargets); - - for (size_t i = 0; i < targetList.GetNumTargets(); i++) - { - try - { - // When attempting to find a target that does not exist - targetList.GetTargetOrThrow(GenerateBuildTargetName(i + targetList.GetNumTargets())); - - // Do not expect the target list construction to succeed - FAIL(); - } - catch ([[maybe_unused]] const TestImpact::TargetException& e) - { - // Expect a target exception to be thrown - SUCCEED(); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactExceptionTest.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactExceptionTest.cpp deleted file mode 100644 index bf2ccb6bc7..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactExceptionTest.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include -#include -#include - -namespace UnitTest -{ - constexpr const char* Message = "String Constructor"; - - TEST(ExceptionTest, DefaultConstructor_HasEmptyMessageString) - { - // Given an exception instantiated with the default constructor - const TestImpact::Exception e; - - // Expect the message to be an empty string - EXPECT_STREQ(e.what(), "\0"); - } - - TEST(ExceptionTest, StringConstructor_HasSpecifiedMessageString) - { - // Given an exception instantiated with a string - const AZStd::string msg(Message); - const TestImpact::Exception e(msg); - - // Expect the message to be the specified string - EXPECT_STREQ(e.what(), Message); - } - - TEST(ExceptionTest, StringLiteralConstructor_HasSpecifiedMessageString) - { - // Given an exception instantiated with a string literal - const TestImpact::Exception e(Message); - - // Expect the message to be the specified string - EXPECT_STREQ(e.what(), Message); - } - - TEST(ExceptionTest, InitializedWithLocalString_HasCopyOfLocalStringString) - { - try - { - // Given an exception instantiated with a string in local scope - throw(TestImpact::Exception(AZStd::string::format("%s", Message))); - - // Do not expect this code to be reachable - FAIL(); - } - catch (const TestImpact::Exception& e) - { - // Expect the message to be the specified out-of-scope string - EXPECT_STREQ(e.what(), Message); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(ExceptionTest, InitializedWithLocalStringLiteral_HasCopyOfLocalStringString) - { - try - { - // Given an exception instantiated with a copy of the message string in local scope - throw(TestImpact::Exception(AZStd::string::format("%s", Message).c_str())); - - // Do not expect this code to be reachable - FAIL(); - } - catch (const TestImpact::Exception& e) - { - // Expect the message to be the specified out-of-scope string literal - EXPECT_STREQ(e.what(), Message); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(ExceptionTest, EvalMacroFails_ExceptionTestThrown) - { - try - { - // Given an exception instantiated with a string literal in local scope - AZ_TestImpact_Eval(false, TestImpact::Exception, Message); - - // Do not expect this code to be reachable - FAIL(); - } - catch (const TestImpact::Exception& e) - { - // Expect the message contain the specified string - EXPECT_STREQ(e.what(), Message); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } - - TEST(ExceptionTest, EvalMacroSucceeds_ExceptionTestNotThrown) - { - try - { - // Given an exception instantiated with a string literal in local scope - AZ_TestImpact_Eval(true, TestImpact::Exception, Message); - - // Expect this code to be reachable - SUCCEED(); - } - catch (...) - { - // Do not expect any exceptions - FAIL(); - } - } - - TEST(ExceptionTest, Throw_ExceptionTestThrown) - { - try - { - // Given an exception instantiated with a string literal in local scope - throw(TestImpact::Exception(Message)); - } - catch (const TestImpact::Exception& e) - { - // Expect the message contain the specified string - EXPECT_STREQ(e.what(), Message); - } - catch (...) - { - // Do not expect any other exceptions - FAIL(); - } - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestJobRunnerCommon.h b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestJobRunnerCommon.h deleted file mode 100644 index 9d5ddd6c8c..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestJobRunnerCommon.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -#include - -#include -#include - -#include -#include -#include - -template -constexpr bool IsFlagSet(Flags flags, Flags flag) -{ - return TestImpact::Bitwise::IsFlagSet(flags, flag); -} - -namespace UnitTest -{ - // Named constants for array of targets lookup - enum - { - TestTargetA, - TestTargetB, - TestTargetC, - TestTargetD - }; - - // Named constants for max concurrency values - enum - { - OneConcurrentProcess = 1, - FourConcurrentProcesses = 4 - }; - - // Validates that the specified job was executed and returned successfully - template - void ValidateJobExecutedSuccessfully(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::ExecutedWithSuccess); - EXPECT_TRUE(job.GetDuration() > AZStd::chrono::milliseconds(0)); - EXPECT_TRUE(job.GetReturnCode().has_value()); - EXPECT_EQ(job.GetReturnCode(), 0); - EXPECT_TRUE(job.GetPayload().has_value()); - } - - // Validates that the specified job has not been executed - template - void ValidateJobNotExecuted(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::NotExecuted); - EXPECT_EQ(job.GetStartTime(), AZStd::chrono::high_resolution_clock::time_point()); - EXPECT_EQ(job.GetEndTime(), AZStd::chrono::high_resolution_clock::time_point()); - EXPECT_EQ(job.GetDuration(), AZStd::chrono::milliseconds(0)); - EXPECT_FALSE(job.GetReturnCode().has_value()); - EXPECT_FALSE(job.GetPayload().has_value()); - } - - // Validates that the specified job failed to execute - template - void ValidateJobFailedToExecute(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::FailedToExecute); - EXPECT_EQ(job.GetStartTime(), AZStd::chrono::high_resolution_clock::time_point()); - EXPECT_EQ(job.GetEndTime(), AZStd::chrono::high_resolution_clock::time_point()); - EXPECT_EQ(job.GetDuration(), AZStd::chrono::milliseconds(0)); - EXPECT_FALSE(job.GetReturnCode().has_value()); - EXPECT_FALSE(job.GetPayload().has_value()); - } - - // Validates that the specified job executed but returned with error - template - void ValidateJobExecutedWithFailure(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::ExecutedWithFailure); - EXPECT_TRUE(job.GetDuration() > AZStd::chrono::milliseconds(0)); - EXPECT_TRUE(job.GetReturnCode().has_value()); - EXPECT_GT(job.GetReturnCode().value(), 0); - EXPECT_FALSE(job.GetPayload().has_value()); - } - - // Validates that the specified job was executed but was terminated by the job runner - template - void ValidateJobTimeout(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::Terminated); - EXPECT_TRUE(job.GetDuration() > AZStd::chrono::milliseconds(0)); - EXPECT_TRUE(job.GetReturnCode().has_value()); - EXPECT_EQ(job.GetReturnCode().value(), TestImpact::ProcessTimeoutErrorCode); - EXPECT_FALSE(job.GetPayload().has_value()); - } - - // Validates that the specified job executed but returned with error - template - void ValidateJobExecutedWithFailedTests(const Job& job) - { - EXPECT_EQ(job.GetResult(), TestImpact::JobResult::ExecutedWithFailure); - EXPECT_TRUE(job.GetDuration() > AZStd::chrono::milliseconds(0)); - EXPECT_TRUE(job.GetReturnCode().has_value()); - EXPECT_GT(job.GetReturnCode().value(), 0); - EXPECT_TRUE(job.GetPayload().has_value()); - } - - // Validates whether a test run completed (passed/failed) - template - void ValidateTestRunCompleted(const Job& job, TestImpact::TestRunResult result) - { - if (result == TestImpact::TestRunResult::Passed) - { - ValidateJobExecutedSuccessfully(job); - } - else - { - ValidateJobExecutedWithFailedTests(job); - } - } - - // Validates that the specified test run matches the expected output - inline void ValidateTestTargetRun(const TestImpact::TestRun& actualResult, const TestImpact::TestRun& expectedResult) - { - EXPECT_TRUE(CheckTestRunsAreEqualIgnoreDurations(actualResult, expectedResult)); - EXPECT_EQ(actualResult.GetNumTestSuites(), CalculateNumTestSuites(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumTests(), CalculateNumTests(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumEnabledTests(), CalculateNumEnabledTests(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumDisabledTests(), CalculateNumDisabledTests(expectedResult.GetTestSuites())); - EXPECT_GT(actualResult.GetDuration(), AZStd::chrono::milliseconds{0}); - EXPECT_EQ(actualResult.GetNumPasses(), CalculateNumPassedTests(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumFailures(), CalculateNumFailedTests(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumRuns(), CalculateNumRunTests(expectedResult.GetTestSuites())); - EXPECT_EQ(actualResult.GetNumNotRuns(), CalculateNumNotRunTests(expectedResult.GetTestSuites())); - } - - // Delete any existing data in the test run folder as not to pollute tests with data from previous test runs - // Note: the file IO operations of this fixture means it cannot be sharded by the test sharder due to file race conditions - inline void DeleteFiles(const AZStd::string& path, const AZStd::string& pattern) - { - AZ::IO::SystemFile::FindFiles(AZStd::string::format("%s/%s", path.c_str(), pattern.c_str()).c_str(), [&path](const char* file, bool isFile) - { - if (isFile) - { - AZ::IO::SystemFile::Delete(AZStd::string::format("%s/%s", path.c_str(), file).c_str()); - } - - return true; - }); - }; -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.cpp deleted file mode 100644 index 6b2fa72310..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.cpp +++ /dev/null @@ -1,1843 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -#include - -#include -#include - -namespace UnitTest -{ - void WriteTextToFile(const AZStd::string& text, const AZ::IO::Path& path) - { - const AZStd::vector textBytes(text.begin(), text.end()); - AZ::IO::SystemFile textFile; - AZ_TestImpact_Eval( - textFile.Open( - path.c_str(), - AZ::IO::SystemFile::SF_OPEN_CREATE | AZ::IO::SystemFile::SF_OPEN_CREATE_PATH | AZ::IO::SystemFile::SF_OPEN_WRITE_ONLY), - TestImpact::Exception, "Couldn't open cache file for writing"); - const auto bytesWritten = textFile.Write(textBytes.data(), textBytes.size()); - AZ_TestImpact_Eval(bytesWritten == textBytes.size(), TestImpact::Exception, "Couldn't write text file data"); - } - - AZStd::string ConstructTestProcessArgs(TestImpact::ProcessId pid, AZStd::chrono::milliseconds sleepTime) - { - return AZStd::string::format("--id %i --sleep %u", pid, sleepTime.count()); - } - - AZStd::string ConstructTestProcessArgsLargeText(TestImpact::ProcessId pid, AZStd::chrono::milliseconds sleepTime) - { - return ConstructTestProcessArgs(pid, sleepTime) + " large"; - } - - AZStd::string KnownTestProcessOutputString(TestImpact::ProcessId pid) - { - return AZStd::string("TestProcessMainStdOut" + AZStd::to_string(pid)); - } - - AZStd::string KnownTestProcessErrorString(TestImpact::ProcessId pid) - { - return AZStd::string("TestProcessMainStdErr" + AZStd::to_string(pid)); - } - - AZStd::string GenerateSuiteOrFixtureName(const AZStd::string& name) - { - return name; - } - - AZStd::string GenerateTypedFixtureName(const AZStd::string& name, size_t typeNum) - { - return AZStd::string::format("%s/%u", name.c_str(), typeNum); - } - - AZStd::string GenerateParameterizedFixtureName(const AZStd::string& name, const AZStd::optional& prefix) - { - if (prefix.has_value()) - { - return AZStd::string::format("%s/%s", prefix->c_str(), name.c_str()); - } - - return AZStd::string::format("%s", name.c_str()); - } - - AZStd::string GenerateParameterizedTestName(const AZStd::string& name, size_t testNum) - { - return AZStd::string::format("%s/%u", name.c_str(), testNum); - } - - AZStd::string StringVectorToJSONElements(const AZStd::vector strings) - { - AZStd::string output; - - for (size_t i = 0, last = strings.size() - 1; i < strings.size(); i++) - { - output += AZStd::string::format("\"%s\"", strings[i].c_str()); - - if (i != last) - { - output += ","; - } - - output += "\n"; - } - - return output; - } - - AZStd::string GenerateBuildTargetDescriptorString( - const AZStd::string& name, - const AZStd::string& outputName, - const AZStd::string& path, - const AZStd::vector& staticSources, - const AZStd::vector& autogenInputs, - const AZStd::vector& autogenOutputs) - { - constexpr const char* const targetTemplate = - "{\n" - " \"sources\": {\n" - " \"input\": [\n" - "%s\n" - " ],\n" - " \"output\": [\n" - "%s\n" - " ],\n" - " \"static\": [\n" - "%s\n" - " ]\n" - " },\n" - " \"target\": {\n" - " \"name\": \"%s\",\n" - " \"output_name\": \"%s\",\n" - " \"path\": \"%s\"\n" - " }\n" - "}\n" - "\n"; - - AZStd::string output = AZStd::string::format(targetTemplate, - StringVectorToJSONElements(autogenInputs).c_str(), - StringVectorToJSONElements(autogenOutputs).c_str(), - StringVectorToJSONElements(staticSources).c_str(), - name.c_str(), - outputName.c_str(), - path.c_str()); - - return output; - } - - TestImpact::BuildTargetDescriptor GenerateBuildTargetDescriptor( - const AZStd::string& name, - const AZStd::string& outputName, - const AZStd::string& path, - const AZStd::vector& staticSources, - const TestImpact::AutogenSources& autogenSources) - { - TestImpact::BuildTargetDescriptor targetDescriptor; - targetDescriptor.m_buildMetaData = {name, outputName, path}; - targetDescriptor.m_sources = {staticSources, autogenSources}; - return targetDescriptor; - } - - TestImpact::TestEnumerationSuite GenerateParamterizedSuite( - const AZStd::pair& fixture, - const AZStd::optional& permutation, - const AZStd::vector> tests, - size_t permutationCount) - { - TestImpact::TestEnumerationSuite suite = - TestImpact::TestEnumerationSuite{GenerateParameterizedFixtureName(fixture.first, permutation), fixture.second, {}}; - - for (const auto& test : tests) - { - for (auto i = 0; i < permutationCount; i++) - { - suite.m_tests.push_back(TestImpact::TestEnumerationCase{GenerateParameterizedTestName(test.first, i), test.second}); - } - } - - return suite; - } - - void GenerateTypedSuite( - const AZStd::pair& fixture, - const AZStd::vector> tests, - size_t permutationCount, - AZStd::vector& parentSuiteList) - { - for (auto i = 0; i < permutationCount; i++) - { - parentSuiteList.push_back(TestImpact::TestEnumerationSuite{GenerateTypedFixtureName(fixture.first, i), fixture.second, {}}); - - for (const auto& test : tests) - { - parentSuiteList.back().m_tests.push_back(TestImpact::TestEnumerationCase{test.first, test.second}); - } - } - } - - size_t CalculateNumPassedTests(const AZStd::vector& suites) - { - size_t numPassedTests = 0; - for (const auto& suite : suites) - { - numPassedTests += AZStd::count_if(suite.m_tests.begin(), suite.m_tests.end(), [](const auto& test) { - return test.m_result.has_value() && test.m_result.value() == TestImpact::TestRunResult::Passed; - }); - } - - return numPassedTests; - } - - size_t CalculateNumFailedTests(const AZStd::vector& suites) - { - size_t numFailedTests = 0; - for (const auto& suite : suites) - { - for (const auto& test : suite.m_tests) - { - if (test.m_result.has_value() && test.m_result.value() == TestImpact::TestRunResult::Failed) - { - numFailedTests++; - } - } - } - - return numFailedTests; - } - - size_t CalculateNumRunTests(const AZStd::vector& suites) - { - size_t numRunTests = 0; - for (const auto& suite : suites) - { - for (const auto& test : suite.m_tests) - { - if (test.m_status == TestImpact::TestRunStatus::Run) - { - numRunTests++; - } - } - } - - return numRunTests; - } - - size_t CalculateNumNotRunTests(const AZStd::vector& suites) - { - size_t numNotRunTests = 0; - for (const auto& suite : suites) - { - for (const auto& test : suite.m_tests) - { - if (test.m_status == TestImpact::TestRunStatus::NotRun) - { - numNotRunTests++; - } - } - } - - return numNotRunTests; - } - - AZStd::vector GetTestTargetATestEnumerationSuites() - { - AZStd::vector suites; - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestCase"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test3_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test4_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test5_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test6_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test7_WillFail", true}); - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestFixture"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test3_WillPass", true}); - - return suites; - } - - AZStd::vector GetTestTargetBTestEnumerationSuites() - { - AZStd::vector suites; - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestCase"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test3_WillPass", true}); - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestFixture"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - - const size_t numParams = 27; - suites.push_back(GenerateParamterizedSuite( - {"TestFixtureWithParams", true}, "PermutationA", {{"Test1_WillPass", true}, {"Test2_WillPass", true}}, numParams)); - suites.push_back(GenerateParamterizedSuite( - {"TestFixtureWithParams", true}, AZStd::nullopt, {{"Test1_WillPass", true}, {"Test2_WillPass", true}}, numParams)); - - return suites; - } - - AZStd::vector GetTestTargetCTestEnumerationSuites() - { - AZStd::vector suites; - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestFixture"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - - const size_t numTypes = 4; - for (auto i = 0; i < numTypes; i++) - { - suites.push_back(TestImpact::TestEnumerationSuite{GenerateTypedFixtureName("TestFixtureWithTypes", i), true, {}}); - for (auto j = 1; j < numTypes + 1; j++) - { - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{AZStd::string::format("Test%u_WillPass", j), true}); - } - } - - return suites; - } - - AZStd::vector GetTestTargetDTestEnumerationSuites() - { - AZStd::vector suites; - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestCase"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"DISABLED_Test2_WillPass", false}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test3_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test4_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test5_WillPass", true}); - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("TestFixture1"), true, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - - suites.push_back(TestImpact::TestEnumerationSuite{GenerateSuiteOrFixtureName("DISABLED_TestFixture2"), false, {}}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test1_WillPass", true}); - suites.back().m_tests.push_back(TestImpact::TestEnumerationCase{"Test2_WillPass", true}); - - const size_t numTypes = 4; - GenerateTypedSuite( - {"TestFixtureWithTypes1", true}, {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}, {"Test3_WillPass", true}}, - numTypes, suites); - - GenerateTypedSuite( - {"DISABLED_TestFixtureWithTypes2", false}, - {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}, {"Test3_WillPass", true}}, numTypes, suites); - - const size_t numParams = 27; - suites.push_back(GenerateParamterizedSuite( - {"TestFixtureWithParams1", true}, "PermutationA", {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}}, numParams)); - suites.push_back(GenerateParamterizedSuite( - {"TestFixtureWithParams1", true}, AZStd::nullopt, {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}}, numParams)); - suites.push_back(GenerateParamterizedSuite( - {"DISABLED_TestFixtureWithParams2", false}, "PermutationA", {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}}, - numParams)); - suites.push_back(GenerateParamterizedSuite( - {"DISABLED_TestFixtureWithParams2", false}, AZStd::nullopt, {{"Test1_WillPass", true}, {"DISABLED_Test2_WillPass", false}}, - numParams)); - - return suites; - } - - TestImpact::TestRunCase TestRunCaseFromTestEnumerationCase(const TestImpact::TestEnumerationCase& enumCase) - { - TestImpact::TestRunCase runCase; - runCase.m_name = enumCase.m_name; - runCase.m_enabled = enumCase.m_enabled; - return runCase; - } - - TestImpact::TestRunSuite TestRunSuiteFromTestEnumerationSuite(const TestImpact::TestEnumerationSuite& enumSuite) - { - TestImpact::TestRunSuite runSuite; - runSuite.m_name = enumSuite.m_name; - runSuite.m_enabled = enumSuite.m_enabled; - - for (const auto& enumCase : enumSuite.m_tests) - { - runSuite.m_tests.push_back(TestRunCaseFromTestEnumerationCase(enumCase)); - } - - return runSuite; - } - - AZStd::vector TestRunSuitesFromTestEnumerationSuites( - const AZStd::vector& enumSuites) - { - AZStd::vector runSuites; - runSuites.reserve(enumSuites.size()); - - for (const auto& enumSuite : enumSuites) - { - runSuites.push_back(TestRunSuiteFromTestEnumerationSuite(enumSuite)); - } - - return runSuites; - } - - void SetTestRunSuiteData(TestImpact::TestRunSuite& testSuite, AZStd::chrono::milliseconds duration) - { - testSuite.m_duration = duration; - } - - void SetTestRunCaseData( - TestImpact::TestRunCase& testCase, AZStd::chrono::milliseconds duration, TestImpact::TestRunStatus status, - AZStd::optional result = AZStd::nullopt) - { - testCase.m_duration = duration; - testCase.m_status = status; - testCase.m_result = result; - } - - AZStd::vector GetTestTargetATestRunSuites() - { - AZStd::vector suites(TestRunSuitesFromTestEnumerationSuites(GetTestTargetATestEnumerationSuites())); - - enum - { - TestCaseIndex = 0, - TestFixtureIndex - }; - - { - auto& suite = suites[TestCaseIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{3}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[5], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[6], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Failed); - } - { - auto& suite = suites[TestFixtureIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{38}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{4}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - - return suites; - } - - AZStd::vector GetTestTargetBTestRunSuites() - { - AZStd::vector suites(TestRunSuitesFromTestEnumerationSuites(GetTestTargetBTestEnumerationSuites())); - - enum - { - TestCaseIndex = 0, - TestFixtureIndex, - PermutationATestFixtureWithParamsIndex, - TestFixtureWithParamsIndex - }; - - { - auto& suite = suites[TestCaseIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{202}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{3}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{62}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{5}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[PermutationATestFixtureWithParamsIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{3203}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[5], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[6], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[7], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[8], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[9], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[10], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[11], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[12], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[13], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[14], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[15], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[16], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[17], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[18], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[19], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[20], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[21], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[22], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[23], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[24], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[25], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[26], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[27], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[28], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[29], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[30], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[31], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[32], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[33], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[34], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[35], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[36], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[37], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[38], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[39], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[40], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[41], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[42], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[43], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[44], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[45], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[46], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[47], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[48], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[49], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[50], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[51], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[52], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[53], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithParamsIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{3360}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[5], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[6], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[7], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[8], AZStd::chrono::milliseconds{2}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[9], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[10], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[11], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[12], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[13], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[14], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[15], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[16], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[17], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[18], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[19], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[20], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[21], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[22], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[23], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[24], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[25], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[26], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[27], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[28], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[29], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[30], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[31], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[32], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[33], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[34], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[35], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[36], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[37], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[38], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[39], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[40], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[41], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[42], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[43], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[44], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[45], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[46], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[47], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[48], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[49], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[50], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[51], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[52], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[53], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - - return suites; - } - - AZStd::vector GetTestTargetCTestRunSuites() - { - AZStd::vector suites(TestRunSuitesFromTestEnumerationSuites(GetTestTargetCTestEnumerationSuites())); - - enum - { - TestCaseIndex = 0, - TestFixtureWithTypes0Index, - TestFixtureWithTypes1Index, - TestFixtureWithTypes2Index, - TestFixtureWithTypes3Index - }; - - { - auto& suite = suites[TestCaseIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{125}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{4}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes0Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{210}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes1Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{208}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes2Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{199}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes3Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{49}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - - return suites; - } - - AZStd::vector GetTestTargetDTestRunSuites() - { - AZStd::vector suites(TestRunSuitesFromTestEnumerationSuites(GetTestTargetDTestEnumerationSuites())); - - enum - { - TestCaseIndex = 0, - TestFixture1Index, - DISABLEDTestFixture2Index, - TestFixtureWithTypes10Index, - TestFixtureWithTypes11Index, - TestFixtureWithTypes12Index, - TestFixtureWithTypes13Index, - DISABLEDTestFixtureWithTypes20Index, - DISABLEDTestFixtureWithTypes21Index, - DISABLEDTestFixtureWithTypes22Index, - DISABLEDTestFixtureWithTypes23Index, - PermutationATestFixtureWithParams1Index, - TestFixtureWithParams1Index, - PermutationADISABLED_TestFixtureWithParams2Index, - DISABLED_TestFixtureWithParams2Index, - }; - - { - auto& suite = suites[TestCaseIndex]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{3}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixture1Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{4}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{2}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[DISABLEDTestFixture2Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData(suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[TestFixtureWithTypes10Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{1}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes11Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{3}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes12Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[TestFixtureWithTypes13Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{1}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - } - { - auto& suite = suites[DISABLEDTestFixtureWithTypes20Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData(suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[DISABLEDTestFixtureWithTypes21Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData(suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[DISABLEDTestFixtureWithTypes22Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData(suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[DISABLEDTestFixtureWithTypes23Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{0}); - SetTestRunCaseData(suite.m_tests[0], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[PermutationATestFixtureWithParams1Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{173}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[5], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[6], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[7], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[8], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[9], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[10], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[11], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[12], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[13], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[14], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[15], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[16], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[17], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[18], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[19], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[20], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[21], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[22], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[23], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[24], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[25], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[26], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[27], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[28], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[29], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[30], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[31], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[32], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[33], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[34], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[35], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[36], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[37], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[38], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[39], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[40], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[41], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[42], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[43], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[44], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[45], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[46], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[47], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[48], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[49], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[50], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[51], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[52], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[53], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - { - auto& suite = suites[TestFixtureWithParams1Index]; - SetTestRunSuiteData(suite, AZStd::chrono::milliseconds{102}); - SetTestRunCaseData( - suite.m_tests[0], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[1], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[2], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[3], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[4], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[5], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[6], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[7], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[8], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[9], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[10], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[11], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[12], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[13], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[14], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[15], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[16], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[17], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[18], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[19], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[20], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[21], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[22], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[23], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[24], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[25], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData( - suite.m_tests[26], AZStd::chrono::milliseconds{1}, TestImpact::TestRunStatus::Run, TestImpact::TestRunResult::Passed); - SetTestRunCaseData(suite.m_tests[27], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[28], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[29], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[30], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[31], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[32], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[33], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[34], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[35], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[36], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[37], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[38], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[39], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[40], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[41], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[42], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[43], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[44], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[45], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[46], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[47], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[48], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[49], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[50], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[51], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[52], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - SetTestRunCaseData(suite.m_tests[53], AZStd::chrono::milliseconds{0}, TestImpact::TestRunStatus::NotRun); - } - // The other two fixtures are all disabled (not run) - - return suites; - } - - AZStd::vector GetTestTargetASourceModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetA.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetA\\Code\\Tests\\TestImpactTestTargetA.cpp"; - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetBSourceModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetB.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetB\\Code\\Tests\\TestImpactTestTargetB.cpp"; - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetCSourceModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetC.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetC\\Code\\Tests\\TestImpactTestTargetC.cpp"; - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetDSourceModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetD.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetD\\Code\\Tests\\TestImpactTestTargetD.cpp"; - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetALineModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetA.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetA\\Code\\Tests\\TestImpactTestTargetA.cpp"; - sourceCoverage.m_coverage = AZStd::vector(); - - auto& lines = sourceCoverage.m_coverage; - lines.push_back(TestImpact::LineCoverage{22, 1}); - lines.push_back(TestImpact::LineCoverage{23, 1}); - lines.push_back(TestImpact::LineCoverage{24, 1}); - lines.push_back(TestImpact::LineCoverage{25, 1}); - lines.push_back(TestImpact::LineCoverage{27, 1}); - lines.push_back(TestImpact::LineCoverage{28, 1}); - lines.push_back(TestImpact::LineCoverage{29, 1}); - lines.push_back(TestImpact::LineCoverage{30, 1}); - lines.push_back(TestImpact::LineCoverage{32, 1}); - lines.push_back(TestImpact::LineCoverage{33, 1}); - lines.push_back(TestImpact::LineCoverage{34, 1}); - lines.push_back(TestImpact::LineCoverage{35, 1}); - lines.push_back(TestImpact::LineCoverage{37, 1}); - lines.push_back(TestImpact::LineCoverage{38, 1}); - lines.push_back(TestImpact::LineCoverage{39, 1}); - lines.push_back(TestImpact::LineCoverage{40, 1}); - lines.push_back(TestImpact::LineCoverage{42, 1}); - lines.push_back(TestImpact::LineCoverage{43, 1}); - lines.push_back(TestImpact::LineCoverage{44, 1}); - lines.push_back(TestImpact::LineCoverage{45, 1}); - lines.push_back(TestImpact::LineCoverage{47, 1}); - lines.push_back(TestImpact::LineCoverage{48, 1}); - lines.push_back(TestImpact::LineCoverage{49, 1}); - lines.push_back(TestImpact::LineCoverage{50, 1}); - lines.push_back(TestImpact::LineCoverage{52, 1}); - lines.push_back(TestImpact::LineCoverage{53, 1}); - lines.push_back(TestImpact::LineCoverage{54, 1}); - lines.push_back(TestImpact::LineCoverage{55, 1}); - lines.push_back(TestImpact::LineCoverage{57, 1}); - lines.push_back(TestImpact::LineCoverage{58, 1}); - lines.push_back(TestImpact::LineCoverage{59, 1}); - lines.push_back(TestImpact::LineCoverage{60, 1}); - lines.push_back(TestImpact::LineCoverage{62, 1}); - lines.push_back(TestImpact::LineCoverage{63, 1}); - lines.push_back(TestImpact::LineCoverage{64, 1}); - lines.push_back(TestImpact::LineCoverage{65, 1}); - lines.push_back(TestImpact::LineCoverage{67, 1}); - lines.push_back(TestImpact::LineCoverage{68, 1}); - lines.push_back(TestImpact::LineCoverage{69, 1}); - lines.push_back(TestImpact::LineCoverage{70, 1}); - lines.push_back(TestImpact::LineCoverage{73, 1}); - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetBLineModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetB.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetB\\Code\\Tests\\TestImpactTestTargetB.cpp"; - sourceCoverage.m_coverage = AZStd::vector(); - - auto& lines = sourceCoverage.m_coverage; - lines.push_back(TestImpact::LineCoverage{29, 1}); - lines.push_back(TestImpact::LineCoverage{30, 1}); - lines.push_back(TestImpact::LineCoverage{31, 1}); - lines.push_back(TestImpact::LineCoverage{32, 1}); - lines.push_back(TestImpact::LineCoverage{34, 1}); - lines.push_back(TestImpact::LineCoverage{35, 1}); - lines.push_back(TestImpact::LineCoverage{36, 1}); - lines.push_back(TestImpact::LineCoverage{37, 1}); - lines.push_back(TestImpact::LineCoverage{39, 1}); - lines.push_back(TestImpact::LineCoverage{40, 1}); - lines.push_back(TestImpact::LineCoverage{41, 1}); - lines.push_back(TestImpact::LineCoverage{42, 1}); - lines.push_back(TestImpact::LineCoverage{44, 1}); - lines.push_back(TestImpact::LineCoverage{45, 1}); - lines.push_back(TestImpact::LineCoverage{46, 1}); - lines.push_back(TestImpact::LineCoverage{47, 1}); - lines.push_back(TestImpact::LineCoverage{49, 1}); - lines.push_back(TestImpact::LineCoverage{50, 1}); - lines.push_back(TestImpact::LineCoverage{51, 1}); - lines.push_back(TestImpact::LineCoverage{52, 1}); - lines.push_back(TestImpact::LineCoverage{54, 1}); - lines.push_back(TestImpact::LineCoverage{55, 1}); - lines.push_back(TestImpact::LineCoverage{56, 1}); - lines.push_back(TestImpact::LineCoverage{57, 1}); - lines.push_back(TestImpact::LineCoverage{59, 1}); - lines.push_back(TestImpact::LineCoverage{66, 1}); - lines.push_back(TestImpact::LineCoverage{68, 1}); - lines.push_back(TestImpact::LineCoverage{75, 1}); - lines.push_back(TestImpact::LineCoverage{78, 1}); - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetCLineModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetC.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetC\\Code\\Tests\\TestImpactTestTargetC.cpp"; - sourceCoverage.m_coverage = AZStd::vector(); - - auto& lines = sourceCoverage.m_coverage; - lines.push_back(TestImpact::LineCoverage{32, 1}); - lines.push_back(TestImpact::LineCoverage{33, 1}); - lines.push_back(TestImpact::LineCoverage{34, 1}); - lines.push_back(TestImpact::LineCoverage{35, 1}); - lines.push_back(TestImpact::LineCoverage{37, 1}); - lines.push_back(TestImpact::LineCoverage{38, 1}); - lines.push_back(TestImpact::LineCoverage{39, 1}); - lines.push_back(TestImpact::LineCoverage{40, 1}); - lines.push_back(TestImpact::LineCoverage{42, 1}); - lines.push_back(TestImpact::LineCoverage{43, 1}); - lines.push_back(TestImpact::LineCoverage{44, 1}); - lines.push_back(TestImpact::LineCoverage{45, 1}); - lines.push_back(TestImpact::LineCoverage{47, 1}); - lines.push_back(TestImpact::LineCoverage{48, 1}); - lines.push_back(TestImpact::LineCoverage{49, 1}); - lines.push_back(TestImpact::LineCoverage{50, 1}); - lines.push_back(TestImpact::LineCoverage{52, 1}); - lines.push_back(TestImpact::LineCoverage{53, 1}); - lines.push_back(TestImpact::LineCoverage{54, 1}); - lines.push_back(TestImpact::LineCoverage{55, 1}); - lines.push_back(TestImpact::LineCoverage{57, 1}); - lines.push_back(TestImpact::LineCoverage{58, 1}); - lines.push_back(TestImpact::LineCoverage{59, 1}); - lines.push_back(TestImpact::LineCoverage{60, 1}); - lines.push_back(TestImpact::LineCoverage{63, 1}); - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - AZStd::vector GetTestTargetDLineModuleCoverages() - { - AZStd::vector moduleCoverages; - - TestImpact::ModuleCoverage moduleCoverage; - moduleCoverage.m_path = "C:\\Lumberyard\\windows_vs2019\\bin\\debug\\TestImpact.TestTargetD.Tests.dll"; - - TestImpact::SourceCoverage sourceCoverage; - sourceCoverage.m_path = - "C:\\Lumberyard\\Code\\Tools\\TestImpactFramework\\Runtime\\Code\\Tests\\TestTargetD\\Code\\Tests\\TestImpactTestTargetD.cpp"; - sourceCoverage.m_coverage = AZStd::vector(); - - auto& lines = sourceCoverage.m_coverage; - lines.push_back(TestImpact::LineCoverage{56, 1}); - lines.push_back(TestImpact::LineCoverage{57, 1}); - lines.push_back(TestImpact::LineCoverage{58, 1}); - lines.push_back(TestImpact::LineCoverage{59, 1}); - lines.push_back(TestImpact::LineCoverage{61, 1}); - lines.push_back(TestImpact::LineCoverage{62, 0}); - lines.push_back(TestImpact::LineCoverage{63, 0}); - lines.push_back(TestImpact::LineCoverage{64, 0}); - lines.push_back(TestImpact::LineCoverage{66, 1}); - lines.push_back(TestImpact::LineCoverage{67, 1}); - lines.push_back(TestImpact::LineCoverage{68, 1}); - lines.push_back(TestImpact::LineCoverage{69, 1}); - lines.push_back(TestImpact::LineCoverage{71, 1}); - lines.push_back(TestImpact::LineCoverage{72, 1}); - lines.push_back(TestImpact::LineCoverage{73, 1}); - lines.push_back(TestImpact::LineCoverage{74, 1}); - lines.push_back(TestImpact::LineCoverage{76, 1}); - lines.push_back(TestImpact::LineCoverage{77, 1}); - lines.push_back(TestImpact::LineCoverage{78, 1}); - lines.push_back(TestImpact::LineCoverage{79, 1}); - lines.push_back(TestImpact::LineCoverage{81, 1}); - lines.push_back(TestImpact::LineCoverage{82, 1}); - lines.push_back(TestImpact::LineCoverage{83, 1}); - lines.push_back(TestImpact::LineCoverage{84, 1}); - lines.push_back(TestImpact::LineCoverage{86, 1}); - lines.push_back(TestImpact::LineCoverage{87, 1}); - lines.push_back(TestImpact::LineCoverage{88, 1}); - lines.push_back(TestImpact::LineCoverage{89, 1}); - lines.push_back(TestImpact::LineCoverage{91, 1}); - lines.push_back(TestImpact::LineCoverage{92, 0}); - lines.push_back(TestImpact::LineCoverage{93, 0}); - lines.push_back(TestImpact::LineCoverage{94, 0}); - lines.push_back(TestImpact::LineCoverage{96, 1}); - lines.push_back(TestImpact::LineCoverage{97, 0}); - lines.push_back(TestImpact::LineCoverage{98, 0}); - lines.push_back(TestImpact::LineCoverage{99, 0}); - lines.push_back(TestImpact::LineCoverage{101, 1}); - lines.push_back(TestImpact::LineCoverage{102, 1}); - lines.push_back(TestImpact::LineCoverage{103, 1}); - lines.push_back(TestImpact::LineCoverage{104, 1}); - lines.push_back(TestImpact::LineCoverage{106, 1}); - lines.push_back(TestImpact::LineCoverage{107, 0}); - lines.push_back(TestImpact::LineCoverage{108, 0}); - lines.push_back(TestImpact::LineCoverage{109, 0}); - lines.push_back(TestImpact::LineCoverage{111, 1}); - lines.push_back(TestImpact::LineCoverage{112, 0}); - lines.push_back(TestImpact::LineCoverage{113, 0}); - lines.push_back(TestImpact::LineCoverage{114, 0}); - lines.push_back(TestImpact::LineCoverage{116, 1}); - lines.push_back(TestImpact::LineCoverage{117, 0}); - lines.push_back(TestImpact::LineCoverage{118, 0}); - lines.push_back(TestImpact::LineCoverage{119, 0}); - lines.push_back(TestImpact::LineCoverage{121, 1}); - lines.push_back(TestImpact::LineCoverage{128, 1}); - lines.push_back(TestImpact::LineCoverage{130, 1}); - lines.push_back(TestImpact::LineCoverage{137, 1}); - lines.push_back(TestImpact::LineCoverage{139, 1}); - lines.push_back(TestImpact::LineCoverage{146, 1}); - lines.push_back(TestImpact::LineCoverage{148, 1}); - lines.push_back(TestImpact::LineCoverage{155, 1}); - lines.push_back(TestImpact::LineCoverage{157, 1}); - lines.push_back(TestImpact::LineCoverage{158, 1}); - lines.push_back(TestImpact::LineCoverage{159, 1}); - lines.push_back(TestImpact::LineCoverage{160, 1}); - lines.push_back(TestImpact::LineCoverage{162, 1}); - lines.push_back(TestImpact::LineCoverage{163, 0}); - lines.push_back(TestImpact::LineCoverage{164, 0}); - lines.push_back(TestImpact::LineCoverage{165, 0}); - lines.push_back(TestImpact::LineCoverage{167, 1}); - lines.push_back(TestImpact::LineCoverage{168, 1}); - lines.push_back(TestImpact::LineCoverage{169, 1}); - lines.push_back(TestImpact::LineCoverage{170, 1}); - lines.push_back(TestImpact::LineCoverage{172, 1}); - lines.push_back(TestImpact::LineCoverage{173, 0}); - lines.push_back(TestImpact::LineCoverage{174, 0}); - lines.push_back(TestImpact::LineCoverage{175, 0}); - lines.push_back(TestImpact::LineCoverage{177, 1}); - lines.push_back(TestImpact::LineCoverage{178, 0}); - lines.push_back(TestImpact::LineCoverage{179, 0}); - lines.push_back(TestImpact::LineCoverage{180, 0}); - lines.push_back(TestImpact::LineCoverage{182, 1}); - lines.push_back(TestImpact::LineCoverage{183, 0}); - lines.push_back(TestImpact::LineCoverage{184, 0}); - lines.push_back(TestImpact::LineCoverage{185, 0}); - lines.push_back(TestImpact::LineCoverage{188, 1}); - - moduleCoverage.m_sources.push_back(AZStd::move(sourceCoverage)); - moduleCoverages.push_back(AZStd::move(moduleCoverage)); - return moduleCoverages; - } - - template - bool CheckTestCasesAreEqual(const TestCase& lhs, const TestCase& rhs) - { - if (lhs.m_enabled != rhs.m_enabled) - { - AZ_Error("CheckTestCasesAreEqual", false, "lhs.m_enabled: %u, rhs.m_enabled: %u", lhs.m_enabled, rhs.m_enabled); - return false; - } - - if (lhs.m_name != rhs.m_name) - { - AZ_Error("CheckTestCasesAreEqual", false, "lhs.m_name: %s, rhs.m_name: %s", lhs.m_name.c_str(), rhs.m_name.c_str()); - return false; - } - - return true; - } - - template - bool CheckTestSuitesAreEqual(const TestSuite& lhs, const TestSuite& rhs) - { - if (lhs.m_enabled != rhs.m_enabled) - { - AZ_Error("CheckTestSuitesAreEqual", false, "lhs.m_enabled: %u, rhs.m_enabled: %u", lhs.m_enabled, rhs.m_enabled); - return false; - } - - if (lhs.m_name != rhs.m_name) - { - AZ_Error("CheckTestSuitesAreEqual", false, "lhs.m_name: %s, rhs.m_name: %s", lhs.m_name.c_str(), rhs.m_name.c_str()); - return false; - } - - return AZStd::equal(lhs.m_tests.begin(), lhs.m_tests.end(), rhs.m_tests.begin(), [](const auto& left, const auto& right) { - return left == right; - }); - } - - template - bool CheckTestSuiteVectorsAreEqual(const AZStd::vector& lhs, const AZStd::vector& rhs) - { - return AZStd::equal(lhs.begin(), lhs.end(), rhs.begin(), [](const TestSuite& left, const TestSuite& right) { - return left == right; - }); - } - - template - bool CheckTestContainersAreEqual(const TestContainer& lhs, const TestContainer& rhs) - { - if (lhs.GetTestSuites().size() != rhs.GetTestSuites().size()) - { - return false; - } - - return AZStd::equal( - lhs.GetTestSuites().begin(), lhs.GetTestSuites().end(), rhs.GetTestSuites().begin(), [](const auto& left, const auto& right) { - return left == right; - }); - } - - bool operator==(const TestImpact::TestEnumerationCase& lhs, const TestImpact::TestEnumerationCase& rhs) - { - return CheckTestCasesAreEqual(lhs, rhs); - } - - bool operator==(const TestImpact::TestRunCase& lhs, const TestImpact::TestRunCase& rhs) - { - if (!CheckTestCasesAreEqual(lhs, rhs)) - { - return false; - } - - if (lhs.m_status != rhs.m_status) - { - AZ_Error( - "TestRunCase ==", false, "lhs.m_status: %u, rhs.m_status: %u", static_cast(lhs.m_status), - static_cast(rhs.m_status)); - return false; - } - - if (lhs.m_duration != rhs.m_duration) - { - AZ_Error("TestRunCase ==", false, "lhs.m_duration: %u, rhs.m_duration: %u", lhs.m_duration.count(), rhs.m_duration.count()); - return false; - } - - if (lhs.m_result != rhs.m_result) - { - if (!lhs.m_result.has_value() && rhs.m_result.has_value()) - { - AZ_Error("TestRunCase ==", false, "lhs.m_result: null, rhs.m_result: %u", static_cast(rhs.m_result.value())); - } - else if (lhs.m_result.has_value() && !rhs.m_result.has_value()) - { - AZ_Error("TestRunCase ==", false, "lhs.m_result: %u, rhs.m_result: null", static_cast(lhs.m_result.value())); - } - else - { - AZ_Error( - "TestRunCase ==", false, "lhs.m_result: %u, rhs.m_result: %u", static_cast(lhs.m_result.value()), - static_cast(rhs.m_result.value())); - } - - return false; - } - - return true; - } - - bool operator==(const TestImpact::TestEnumerationSuite& lhs, const TestImpact::TestEnumerationSuite& rhs) - { - return CheckTestSuitesAreEqual(lhs, rhs); - } - - bool operator==(const TestImpact::TestRunSuite& lhs, const TestImpact::TestRunSuite& rhs) - { - if (!CheckTestSuitesAreEqual(lhs, rhs)) - { - return false; - } - - if (lhs.m_duration != rhs.m_duration) - { - AZ_Error( - "TestEnumerationSuite ==", false, "lhs.m_duration: %u, rhs.m_duration: %u", lhs.m_duration.count(), rhs.m_duration.count()); - return false; - } - - return true; - } - - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs) - { - return CheckTestSuiteVectorsAreEqual(lhs, rhs); - } - - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs) - { - return CheckTestSuiteVectorsAreEqual(lhs, rhs); - } - - bool operator==(const TestImpact::TestEnumeration& lhs, const TestImpact::TestEnumeration& rhs) - { - return CheckTestContainersAreEqual(lhs, rhs); - } - - bool operator==(const TestImpact::TestRun& lhs, const TestImpact::TestRun& rhs) - { - if (lhs.GetDuration() != rhs.GetDuration()) - { - AZ_Error("TestRun ==", false, "lhs.GetDuration(): %u, rhs.GetDuration(): %u", lhs.GetDuration(), rhs.GetDuration()); - return false; - } - - if (lhs.GetNumDisabledTests() != rhs.GetNumDisabledTests()) - { - AZ_Error( - "TestRun ==", false, "lhs.GetNumDisabledTests(): %u, rhs.GetNumDisabledTests(): %u", lhs.GetNumDisabledTests(), - rhs.GetNumDisabledTests()); - return false; - } - - if (lhs.GetNumEnabledTests() != rhs.GetNumEnabledTests()) - { - AZ_Error( - "TestRun ==", false, "lhs.GetNumEnabledTests(): %u, rhs.GetNumEnabledTests(): %u", lhs.GetNumEnabledTests(), - rhs.GetNumEnabledTests()); - return false; - } - - if (lhs.GetNumFailures() != rhs.GetNumFailures()) - { - AZ_Error("TestRun ==", false, "lhs.GetNumFailures(): %u, rhs.GetNumFailures(): %u", lhs.GetNumFailures(), rhs.GetNumFailures()); - return false; - } - - if (lhs.GetNumNotRuns() != rhs.GetNumNotRuns()) - { - AZ_Error("TestRun ==", false, "lhs.GetNumNotRuns(): %u, rhs.GetNumNotRuns(): %u", lhs.GetNumNotRuns(), rhs.GetNumNotRuns()); - return false; - } - - if (lhs.GetNumPasses() != rhs.GetNumPasses()) - { - AZ_Error("TestRun ==", false, "lhs.GetNumPasses(): %u, rhs.GetNumPasses(): %u", lhs.GetNumPasses(), rhs.GetNumPasses()); - return false; - } - - if (lhs.GetNumRuns() != rhs.GetNumRuns()) - { - AZ_Error("TestRun ==", false, "lhs.GetNumRuns(): %u, rhs.GetNumRuns(): %u", lhs.GetNumRuns(), rhs.GetNumRuns()); - return false; - } - - return CheckTestContainersAreEqual(lhs, rhs); - } - - bool CheckTestRunCaseVectorsAreEqual( - const AZStd::vector& lhs, const AZStd::vector& rhs) - { - return AZStd::equal( - lhs.begin(), lhs.end(), rhs.begin(), [](const TestImpact::TestRunCase& leftCase, const TestImpact::TestRunCase& rightCase) { - if (!CheckTestCasesAreEqual(leftCase, rightCase)) - { - return false; - } - - if (leftCase.m_status != rightCase.m_status) - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftCase.m_status: %u, rightCase.m_status: %u", - static_cast(leftCase.m_status), static_cast(rightCase.m_status)); - return false; - } - - if (leftCase.m_result != rightCase.m_result) - { - if (!leftCase.m_result.has_value() && rightCase.m_result.has_value()) - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftCase.m_result: null, rightCase.m_result: %u", - static_cast(rightCase.m_result.value())); - } - else if (leftCase.m_result.has_value() && !rightCase.m_result.has_value()) - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftCase.m_result: %u, rightCase.m_result: null", - static_cast(leftCase.m_result.value())); - } - else - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftCase.m_result: %u, rightCase.m_result: %u", - static_cast(leftCase.m_result.value()), static_cast(rightCase.m_result.value())); - } - - return false; - } - - return true; - }); - } - - bool CheckTestRunsAreEqualIgnoreDurations(const TestImpact::TestRun& lhs, const TestImpact::TestRun& rhs) - { - return AZStd::equal( - lhs.GetTestSuites().begin(), lhs.GetTestSuites().end(), rhs.GetTestSuites().begin(), - [](const TestImpact::TestRunSuite& leftSuite, const TestImpact::TestRunSuite& rightSuite) { - if (leftSuite.m_enabled != rightSuite.m_enabled) - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftSuite.m_enabled: %u, rightSuite.m_enabled: %u", - leftSuite.m_enabled, rightSuite.m_enabled); - return false; - } - - if (leftSuite.m_name != rightSuite.m_name) - { - AZ_Error( - "CheckTestRunsAreEqualIgnoreDurations", false, "leftSuite.m_name: %s, rightSuite.m_name: %s", - leftSuite.m_name.c_str(), rightSuite.m_name.c_str()); - return false; - } - - return CheckTestRunCaseVectorsAreEqual(leftSuite.m_tests, rightSuite.m_tests); - }); - } - - bool operator==(const TestImpact::BuildMetaData& lhs, const TestImpact::BuildMetaData& rhs) - { - if (lhs.m_name != rhs.m_name) - { - return false; - } - else if (lhs.m_outputName != rhs.m_outputName) - { - return false; - } - else if (lhs.m_path != rhs.m_path) - { - return false; - } - - return true; - } - - bool operator==(const TestImpact::TargetSources& lhs, const TestImpact::TargetSources& rhs) - { - if (lhs.m_staticSources != rhs.m_staticSources) - { - return false; - } - else if (lhs.m_autogenSources.size() != rhs.m_autogenSources.size()) - { - return false; - } - else - { - for (size_t i = 0; i < lhs.m_autogenSources.size(); i++) - { - if (lhs.m_autogenSources[i].m_input != rhs.m_autogenSources[i].m_input) - { - return false; - } - else if (lhs.m_autogenSources[i].m_outputs.size() != rhs.m_autogenSources[i].m_outputs.size()) - { - return false; - } - - for (size_t j = 0; j < lhs.m_autogenSources[i].m_outputs.size(); j++) - { - if (lhs.m_autogenSources[i].m_outputs[j] != rhs.m_autogenSources[i].m_outputs[j]) - { - return false; - } - } - } - } - - return true; - } - - bool operator==(const TestImpact::BuildTargetDescriptor& lhs, const TestImpact::BuildTargetDescriptor& rhs) - { - return lhs.m_buildMetaData == rhs.m_buildMetaData && lhs.m_sources == rhs.m_sources; - } - - bool operator==(const TestImpact::TestTargetMeta& lhs, const TestImpact::TestTargetMeta& rhs) - { - if (lhs.m_suite != rhs.m_suite) - { - return false; - } - else if (lhs.m_launchMethod != rhs.m_launchMethod) - { - return false; - } - - return true; - } - - bool operator==(const TestImpact::ProductionTargetDescriptor& lhs, const TestImpact::ProductionTargetDescriptor& rhs) - { - return lhs.m_buildMetaData == rhs.m_buildMetaData; - } - - bool operator==(const TestImpact::TestTargetDescriptor& lhs, const TestImpact::TestTargetDescriptor& rhs) - { - return lhs.m_buildMetaData == rhs.m_buildMetaData && lhs.m_sources == rhs.m_sources && lhs.m_testMetaData == rhs.m_testMetaData; - } - - bool operator==(const TestImpact::LineCoverage& lhs, const TestImpact::LineCoverage& rhs) - { - if (lhs.m_hitCount != rhs.m_hitCount) - { - AZ_Error("LineCoverage ==", false, "lhs.m_hitCount: %u, rhs.m_hitCount: %u", lhs.m_hitCount, rhs.m_hitCount); - return false; - } - - if (lhs.m_lineNumber != rhs.m_lineNumber) - { - AZ_Error("LineCoverage ==", false, "lhs.m_lineNumber: %u, rhs.m_lineNumber: %u", lhs.m_lineNumber, rhs.m_lineNumber); - return false; - } - - return true; - } - - bool operator==(const TestImpact::SourceCoverage& lhs, const TestImpact::SourceCoverage& rhs) - { - if (lhs.m_path != rhs.m_path) - { - AZ_Error("LineCoverage ==", false, "lhs.m_path: %s, rhs.m_path: %s", lhs.m_path.c_str(), rhs.m_path.c_str()); - return false; - } - - if (lhs.m_coverage.empty() != rhs.m_coverage.empty()) - { - AZ_Error( - "LineCoverage ==", false, "lhs.m_coverage.empty(): %u, rhs.m_coverage.empty(): %u", lhs.m_coverage.empty(), - rhs.m_coverage.empty()); - return false; - } - - if (!lhs.m_coverage.empty()) - { - return AZStd::equal( - lhs.m_coverage.begin(), lhs.m_coverage.end(), rhs.m_coverage.begin(), - [](const TestImpact::LineCoverage& left, const TestImpact::LineCoverage& right) { - return left == right; - }); - } - - return true; - } - - bool operator==(const TestImpact::ModuleCoverage& lhs, const TestImpact::ModuleCoverage& rhs) - { - if (lhs.m_path != rhs.m_path) - { - AZ_Error("ModuleCoverage ==", false, "lhs.m_path: %s, rhs.m_path: %s", lhs.m_path.c_str(), rhs.m_path.c_str()); - return false; - } - - return AZStd::equal( - lhs.m_sources.begin(), lhs.m_sources.end(), rhs.m_sources.begin(), - [](const TestImpact::SourceCoverage& left, const TestImpact::SourceCoverage& right) { - return left == right; - }); - } - - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs) - { - if (lhs.size() != rhs.size()) - { - AZ_Error("ModuleCoverage ==", false, "lhs.size(): %u, rhs.size(): %u", lhs.size(), rhs.size()); - return false; - } - - return AZStd::equal( - lhs.begin(), lhs.end(), rhs.begin(), [](const TestImpact::ModuleCoverage& left, const TestImpact::ModuleCoverage& right) { - return left == right; - }); - } - - bool operator!=(const AZStd::vector& lhs, const AZStd::vector& rhs) - { - return !(lhs == rhs); - } - - bool operator==(const TestImpact::TestCoverage& lhs, const TestImpact::TestCoverage& rhs) - { - if (lhs.GetNumModulesCovered() != rhs.GetNumModulesCovered()) - { - return false; - } - - if (lhs.GetNumSourcesCovered() != rhs.GetNumSourcesCovered()) - { - return false; - } - - if (lhs.GetModuleCoverages() != rhs.GetModuleCoverages()) - { - return false; - } - - if (lhs.GetSourcesCovered().size() != rhs.GetSourcesCovered().size()) - { - return false; - } - - return true; - } -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.h b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.h deleted file mode 100644 index cc8d4190ec..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestImpactTestUtils.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace UnitTest -{ - // Common parameters for process related tests - inline constexpr const char* ValidProcessPath = LY_TEST_IMPACT_TEST_PROCESS_BIN; - inline constexpr const char* InvalidProcessPath = "!!!@@@---???"; - inline constexpr const AZStd::chrono::milliseconds LongSleep = AZStd::chrono::minutes(60); - inline constexpr const size_t LargeTextSize = 0xFFFF - 1; // 65,535 chars less the null terminator - inline constexpr const AZStd::chrono::milliseconds ShortSleep = AZStd::chrono::milliseconds(500); - inline constexpr const AZStd::chrono::milliseconds NoSleep = AZStd::chrono::milliseconds(0); - - // Writes the specified text string to the specified file - void WriteTextToFile(const AZStd::string& text, const AZ::IO::Path& path); - - // Construct the arguments for launcing the test process - AZStd::string ConstructTestProcessArgs(TestImpact::ProcessId pid, AZStd::chrono::milliseconds sleepTime); - - // Construct the arguments for launcing the test process with large text dump - AZStd::string ConstructTestProcessArgsLargeText(TestImpact::ProcessId pid, AZStd::chrono::milliseconds sleepTime); - - // Known standard output string of the test process - AZStd::string KnownTestProcessOutputString(TestImpact::ProcessId pid); - - // Known standard error string of the test process - AZStd::string KnownTestProcessErrorString(TestImpact::ProcessId pid); - - // Generate a gtest typed test fixture name string based on the specified name and type - AZStd::string GenerateTypedFixtureName(const AZStd::string& name, size_t typeNum); - - // Generate a gtest parameterized test fixture name string based on the specified name and permutation number - AZStd::string GenerateParameterizedFixtureName( - const AZStd::string& name, - const AZStd::optional& prefix = AZStd::nullopt); - - // Generate a gtest parameterized test name string based on the specified name and permutation number - AZStd::string GenerateParameterizedTestName(const AZStd::string& name, size_t testNum); - - // Generate a JSON string of array elements from the specified vector - AZStd::string StringVectorToJSONElements(const AZStd::vector strings); - - // Generate a build target descriptor string in JSON format from the specified build target description - AZStd::string GenerateBuildTargetDescriptorString( - const AZStd::string& name, - const AZStd::string& outputName, - const AZStd::string& path, - const AZStd::vector& staticSources, - const AZStd::vector& autogenInputs, - const AZStd::vector& autogenOutputs); - - // Generate a build target descriptor from the specified build target description - // Note: no check for correctness of arguments is peformed - TestImpact::BuildTargetDescriptor GenerateBuildTargetDescriptor( - const AZStd::string& name, - const AZStd::string& outputName, - const AZStd::string& path, - const AZStd::vector& staticSources, - const TestImpact::AutogenSources& autogenSources); - - // Procedurally generate a parameterized test suite based on the supplied parameters - TestImpact::TestEnumerationSuite GenerateParamterizedSuite( - const AZStd::pair& fixture, - const AZStd::optional& permutation, - const AZStd::vector> tests, - size_t permutationCount); - - // Procedurally generate a typed test suite based on the supplied parameters - void GenerateTypedSuite( - const AZStd::pair& fixture, - const AZStd::vector> tests, - size_t permutationCount, - AZStd::vector& parentSuiteList); - - // Helper functions for calculating test suite meta-data - size_t CalculateNumPassedTests(const AZStd::vector& suites); - size_t CalculateNumFailedTests(const AZStd::vector& suites); - size_t CalculateNumRunTests(const AZStd::vector& suites); - size_t CalculateNumNotRunTests(const AZStd::vector& suites); - - template - size_t CalculateNumTestSuites(const AZStd::vector& suites) - { - return suites.size(); - } - - template - size_t CalculateNumTests(const AZStd::vector& suites) - { - size_t numTests = 0; - for (const auto& suite : suites) - { - numTests += suite.m_tests.size(); - } - - return numTests; - } - - template - size_t CalculateNumEnabledTests(const AZStd::vector& suites) - { - size_t numEnabledTests = 0; - for (const auto& suite : suites) - { - if (!suite.m_enabled) - { - continue; - } - - for (const auto& test : suite.m_tests) - { - if (test.m_enabled) - { - numEnabledTests++; - } - } - } - - return numEnabledTests; - } - - template - size_t CalculateNumDisabledTests(const AZStd::vector& suites) - { - size_t numDisabledTests = 0; - for (const auto& suite : suites) - { - if (!suite.m_enabled) - { - numDisabledTests += suite.m_tests.size(); - continue; - } - - for (const auto& test : suite.m_tests) - { - if (!test.m_enabled) - { - numDisabledTests++; - } - } - } - - return numDisabledTests; - } - - // Test enumeration suite representation of the test targets used for testing - AZStd::vector GetTestTargetATestEnumerationSuites(); - AZStd::vector GetTestTargetBTestEnumerationSuites(); - AZStd::vector GetTestTargetCTestEnumerationSuites(); - AZStd::vector GetTestTargetDTestEnumerationSuites(); - - // Test run suite representation of the test targets used for testing - AZStd::vector GetTestTargetATestRunSuites(); - AZStd::vector GetTestTargetBTestRunSuites(); - AZStd::vector GetTestTargetCTestRunSuites(); - AZStd::vector GetTestTargetDTestRunSuites(); - - // Line coverage representation of the test targets used for testing - AZStd::vector GetTestTargetALineModuleCoverages(); - AZStd::vector GetTestTargetBLineModuleCoverages(); - AZStd::vector GetTestTargetCLineModuleCoverages(); - AZStd::vector GetTestTargetDLineModuleCoverages(); - - // Source coverage representation of the test targets used for testing - AZStd::vector GetTestTargetASourceModuleCoverages(); - AZStd::vector GetTestTargetBSourceModuleCoverages(); - AZStd::vector GetTestTargetCSourceModuleCoverages(); - AZStd::vector GetTestTargetDSourceModuleCoverages(); - - // Helper comparisons for test validation (could potentially be moved to production source in the future) - bool operator==(const TestImpact::TestEnumerationCase& lhs, const TestImpact::TestEnumerationCase& rhs); - bool operator==(const TestImpact::TestEnumerationSuite& lhs, const TestImpact::TestEnumerationSuite& rhs); - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs); - bool operator==(const TestImpact::TestEnumeration& lhs, const TestImpact::TestEnumeration& rhs); - - bool operator==(const TestImpact::TestRunCase& lhs, const TestImpact::TestRunCase& rhs); - bool operator==(const TestImpact::TestRunSuite& lhs, const TestImpact::TestRunSuite& rhs); - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs); - bool operator==(const TestImpact::TestRun& lhs, const TestImpact::TestRun& rhs); - bool CheckTestRunsAreEqualIgnoreDurations(const TestImpact::TestRun& lhs, const TestImpact::TestRun& rhs); - - bool operator==(const TestImpact::BuildMetaData& lhs, const TestImpact::BuildMetaData& rhs); - bool operator==(const TestImpact::TargetSources& lhs, const TestImpact::TargetSources& rhs); - bool operator==(const TestImpact::BuildTargetDescriptor& lhs, const TestImpact::BuildTargetDescriptor& rhs); - bool operator==(const TestImpact::TestTargetMeta& lhs, const TestImpact::TestTargetMeta& rhs); - bool operator==(const TestImpact::ProductionTargetDescriptor& lhs, const TestImpact::ProductionTargetDescriptor& rhs); - bool operator==(const TestImpact::TestTargetDescriptor& lhs, const TestImpact::TestTargetDescriptor& rhs); - - bool operator==(const TestImpact::LineCoverage& lhs, const TestImpact::LineCoverage& rhs); - bool operator==(const TestImpact::SourceCoverage& lhs, const TestImpact::SourceCoverage& rhs); - bool operator==(const TestImpact::ModuleCoverage& lhs, const TestImpact::ModuleCoverage& rhs); - bool operator==(const AZStd::vector& lhs, const AZStd::vector& rhs); - bool operator==(const TestImpact::TestCoverage& lhs, const TestImpact::TestCoverage& rhs); -} // namespace UnitTest diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/CMakeLists.txt deleted file mode 100644 index 8298bb7123..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -add_subdirectory(Code) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/CMakeLists.txt deleted file mode 100644 index 4b8e9d2809..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -ly_add_target( - NAME TestImpact.TestProcess.Console EXECUTABLE - NAMESPACE AZ - FILES_CMAKE - testimpactframework_testprocess_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Source - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore - AZ::AzFramework -) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.cpp deleted file mode 100644 index cdfad1404f..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include "TestImpactTestProcess.h" -#include "TestImpactTestProcessLargeText.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace TestImpact -{ - TestProcess::TestProcess(int argc, char* argv[]) - { - StartupEnvironment(); - ParseArgs(argc, argv); - } - - TestProcess::~TestProcess() - { - TeardownEnvironment(); - } - - void TestProcess::StartupEnvironment() - { - AZ::AllocatorInstance::Create(); - } - - void TestProcess::TeardownEnvironment() - { - AZ::AllocatorInstance::Destroy(); - } - - void TestProcess::ParseArgs(int argc, char* argv[]) - { - const AZStd::string idArg = "id"; - const AZStd::string sleepArg = "sleep"; - const AZStd::string largeArg = "large"; - - AZ::CommandLine commandLine; - commandLine.Parse(argc, argv); - - m_id = AZStd::stoi(commandLine.GetSwitchValue(idArg, 0)); - m_sleep = AZStd::stoi(commandLine.GetSwitchValue(sleepArg, 0)); - - m_dumpLargeText = false; - for (auto i = 0; i < commandLine.GetNumMiscValues(); i++) - { - const auto& miscValue = commandLine.GetMiscValue(i); - if (miscValue == largeArg) - { - m_dumpLargeText = true; - break; - } - } - } - - int TestProcess::MainFunc() - { - if (m_dumpLargeText) - { - // Dump the large text blob to stdout and stderr - std::cout << LongText; - std::cerr << LongText; - } - else - { - // Dump the short known output string with id appended to stdout and stderr - std::cout << "TestProcessMainStdOut" << m_id; - std::cerr << "TestProcessMainStdErr" << m_id; - } - - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(m_sleep)); - - return m_id; - } -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.h b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.h deleted file mode 100644 index cfe18aa3df..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcess.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -#include -#include - -namespace TestImpact -{ - class TestProcess - { - public: - TestProcess(int argc, char* argv[]); - ~TestProcess(); - - int MainFunc(); - - private: - void StartupEnvironment(); - void TeardownEnvironment(); - void ParseArgs(int argc, char* argv[]); - - int m_id; - int m_sleep; - bool m_dumpLargeText = false; - }; - -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.cpp deleted file mode 100644 index a4b899dd65..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.cpp +++ /dev/null @@ -1,531 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include "TestImpactTestProcessLargeText.h" - -namespace TestImpact -{ - // Long text blob measuring 65,535 in length (inc. null terminator) - const char* const LongText = - "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"; -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.h b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.h deleted file mode 100644 index faaabae2d3..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessLargeText.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -namespace TestImpact -{ - // Large text blob in the form of a string literal so the app does not require the Az FileIO and Application environment - extern const char* const LongText; -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessMain.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessMain.cpp deleted file mode 100644 index 5c46ee525e..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/Source/TestImpactTestProcessMain.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include "TestImpactTestProcess.h" - -int main(int argc, char* argv[]) -{ - TestImpact::TestProcess process(argc, argv); - return process.MainFunc(); -} diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/testimpactframework_testprocess_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/testimpactframework_testprocess_files.cmake deleted file mode 100644 index a06f1fa706..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestProcess/Code/testimpactframework_testprocess_files.cmake +++ /dev/null @@ -1,18 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(FILES - Source/TestImpactTestProcessMain.cpp - Source/TestImpactTestProcess.cpp - Source/TestImpactTestProcess.h - Source/TestImpactTestProcessLargeText.cpp - Source/TestImpactTestProcessLargeText.h -) diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/CMakeLists.txt deleted file mode 100644 index 8298bb7123..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -add_subdirectory(Code) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/CMakeLists.txt deleted file mode 100644 index 7748581284..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -################################################################################ -# Tests -################################################################################ - -ly_add_target( - NAME TestImpact.TestTargetA.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE AZ - FILES_CMAKE - testimpactframework_testtargeta_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - BUILD_DEPENDENCIES - PRIVATE - AZ::AzTestShared - AZ::AzTest -) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/Tests/TestImpactTestTargetA.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/Tests/TestImpactTestTargetA.cpp deleted file mode 100644 index 9598b88b98..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/Tests/TestImpactTestTargetA.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -namespace UnitTest -{ - class TestFixture - : public AllocatorsTestFixture - { - }; - - TEST(TestCase, Test1_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test2_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test3_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test4_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test5_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test6_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test7_WillFail) - { - FAIL(); - } - - TEST_F(TestFixture, Test1_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture, Test2_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture, Test3_WillPass) - { - SUCCEED(); - } -} // namespace UnitTest - -AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/testimpactframework_testtargeta_tests_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/testimpactframework_testtargeta_tests_files.cmake deleted file mode 100644 index 32c8746c9d..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetA/Code/testimpactframework_testtargeta_tests_files.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(FILES - Tests/TestImpactTestTargetA.cpp -) diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/CMakeLists.txt deleted file mode 100644 index 8298bb7123..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -add_subdirectory(Code) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/CMakeLists.txt deleted file mode 100644 index 57b55fb9f4..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -################################################################################ -# Tests -################################################################################ - -ly_add_target( - NAME TestImpact.TestTargetB.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE AZ - FILES_CMAKE - testimpactframework_testtargetb_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore - AZ::AzTestShared - AZ::AzTest -) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/Tests/TestImpactTestTargetB.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/Tests/TestImpactTestTargetB.cpp deleted file mode 100644 index be58b4fa17..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/Tests/TestImpactTestTargetB.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include -#include - -namespace UnitTest -{ - class TestFixture - : public AllocatorsTestFixture - { - }; - - class TestFixtureWithParams - : public AllocatorsTestFixture - , public ::testing::WithParamInterface> - { - }; - - TEST(TestCase, Test1_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test2_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test3_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture, Test1_WillPass) - { - SUCCEED(); - } - - TEST_P(TestFixtureWithParams, Test1_WillPass) - { - SUCCEED(); - } - - TEST_P(TestFixtureWithParams, Test2_WillPass) - { - SUCCEED(); - } - - INSTANTIATE_TEST_CASE_P( - PermutationA, - TestFixtureWithParams, - ::testing::Combine( - ::testing::Values(1, 2, 4), - ::testing::Values(3, 5, 7), - ::testing::Values(-0.0f, 0.0f, 1.0f) - )); - - INSTANTIATE_TEST_CASE_P( - , - TestFixtureWithParams, - ::testing::Combine( - ::testing::Values(8, 16, 32), - ::testing::Values(9, 13, 17), - ::testing::Values(-10.0f, 0.05f, 10.0f) - )); -} // namespace UnitTest - -AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/testimpactframework_testtargetb_tests_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/testimpactframework_testtargetb_tests_files.cmake deleted file mode 100644 index 949074a5af..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetB/Code/testimpactframework_testtargetb_tests_files.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(FILES - Tests/TestImpactTestTargetB.cpp -) diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/CMakeLists.txt deleted file mode 100644 index 8298bb7123..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -add_subdirectory(Code) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/CMakeLists.txt deleted file mode 100644 index 47862f80df..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -################################################################################ -# Tests -################################################################################ - -ly_add_target( - NAME TestImpact.TestTargetC.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE AZ - FILES_CMAKE - testimpactframework_testtargetc_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore - AZ::AzTestShared - AZ::AzTest -) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/Tests/TestImpactTestTargetC.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/Tests/TestImpactTestTargetC.cpp deleted file mode 100644 index 48f0ffe9dc..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/Tests/TestImpactTestTargetC.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include -#include - -namespace UnitTest -{ - class TestFixture - : public AllocatorsTestFixture - { - }; - - template - class TestFixtureWithTypes - : public AllocatorsTestFixture - { - }; - - using TestTypes = testing::Types; - TYPED_TEST_CASE(TestFixtureWithTypes, TestTypes); - - TEST_F(TestFixture, Test1_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture, Test2_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes, Test1_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes, Test2_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes, Test3_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes, Test4_WillPass) - { - SUCCEED(); - } -} // namespace UnitTest - -AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/testimpactframework_testtargetc_tests_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/testimpactframework_testtargetc_tests_files.cmake deleted file mode 100644 index fa5b4f6e9a..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetC/Code/testimpactframework_testtargetc_tests_files.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(FILES - Tests/TestImpactTestTargetC.cpp -) diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/CMakeLists.txt deleted file mode 100644 index 8298bb7123..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -add_subdirectory(Code) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/CMakeLists.txt b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/CMakeLists.txt deleted file mode 100644 index bf821ac0d6..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -################################################################################ -# Tests -################################################################################ - -ly_add_target( - NAME TestImpact.TestTargetD.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE AZ - FILES_CMAKE - testimpactframework_testtargetd_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore - AZ::AzTestShared - AZ::AzTest -) \ No newline at end of file diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/Tests/TestImpactTestTargetD.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/Tests/TestImpactTestTargetD.cpp deleted file mode 100644 index bd27b51fd9..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/Tests/TestImpactTestTargetD.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include -#include - -namespace UnitTest -{ - class TestFixture1 - : public AllocatorsTestFixture - { - }; - - class DISABLED_TestFixture2 - : public AllocatorsTestFixture - { - }; - - template - class TestFixtureWithTypes1 - : public AllocatorsTestFixture - { - }; - - template - class DISABLED_TestFixtureWithTypes2 - : public AllocatorsTestFixture - { - }; - - class TestFixtureWithParams1 - : public AllocatorsTestFixture - , public ::testing::WithParamInterface> - { - }; - - class DISABLED_TestFixtureWithParams2 - : public AllocatorsTestFixture - , public ::testing::WithParamInterface> - { - }; - - using TestTypes = testing::Types; - TYPED_TEST_CASE(TestFixtureWithTypes1, TestTypes); - TYPED_TEST_CASE(DISABLED_TestFixtureWithTypes2, TestTypes); - - TEST(TestCase, Test1_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, DISABLED_Test2_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test3_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test4_WillPass) - { - SUCCEED(); - } - - TEST(TestCase, Test5_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture1, Test1_WillPass) - { - SUCCEED(); - } - - TEST_F(TestFixture1, Test2_WillPass) - { - SUCCEED(); - } - - TEST_F(DISABLED_TestFixture2, Test1_WillPass) - { - SUCCEED(); - } - - TEST_F(DISABLED_TestFixture2, Test2_WillPass) - { - SUCCEED(); - } - - TEST_P(TestFixtureWithParams1, Test1_WillPass) - { - SUCCEED(); - } - - TEST_P(TestFixtureWithParams1, DISABLED_Test2_WillPass) - { - SUCCEED(); - } - - TEST_P(DISABLED_TestFixtureWithParams2, Test1_WillPass) - { - SUCCEED(); - } - - TEST_P(DISABLED_TestFixtureWithParams2, DISABLED_Test2_WillPass) - { - SUCCEED(); - } - - INSTANTIATE_TEST_CASE_P( - PermutationA, - TestFixtureWithParams1, - ::testing::Combine( - ::testing::Values(1, 2, 4), - ::testing::Values(3, 5, 7), - ::testing::Values(-0.0f, 0.0f, 1.0f) - )); - - INSTANTIATE_TEST_CASE_P( - , - TestFixtureWithParams1, - ::testing::Combine( - ::testing::Values(8, 16, 32), - ::testing::Values(9, 13, 17), - ::testing::Values(-10.0f, 0.05f, 10.0f) - )); - - INSTANTIATE_TEST_CASE_P( - PermutationA, - DISABLED_TestFixtureWithParams2, - ::testing::Combine( - ::testing::Values(1, 2, 4), - ::testing::Values(3, 5, 7), - ::testing::Values(-0.0f, 0.0f, 1.0f) - )); - - INSTANTIATE_TEST_CASE_P( - , - DISABLED_TestFixtureWithParams2, - ::testing::Combine( - ::testing::Values(8, 16, 32), - ::testing::Values(9, 13, 17), - ::testing::Values(-10.0f, 0.05f, 10.0f) - )); - - TYPED_TEST(TestFixtureWithTypes1, Test1_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes1, DISABLED_Test2_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(TestFixtureWithTypes1, Test3_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(DISABLED_TestFixtureWithTypes2, Test1_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(DISABLED_TestFixtureWithTypes2, DISABLED_Test2_WillPass) - { - SUCCEED(); - } - - TYPED_TEST(DISABLED_TestFixtureWithTypes2, Test3_WillPass) - { - SUCCEED(); - } -} // namespace UnitTest - -AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/testimpactframework_testtargetd_tests_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/testimpactframework_testtargetd_tests_files.cmake deleted file mode 100644 index ebb5a422c7..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Tests/TestTargetD/Code/testimpactframework_testtargetd_tests_files.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(FILES - Tests/TestImpactTestTargetD.cpp -)