99// 
1010#pragma  once
1111
12+ #include  < gtest/gtest.h> 
13+ #include  < string> 
14+ 
15+ #define  AGP_TEST_DEFAULT_BACKEND (TestSuiteName, TestName )                                          \
16+     void  AGPTestDefaultBackend##TestName();                                                        \
17+     TEST (TestSuiteName, TestName)                                                                  \
18+     {                                                                                              \
19+         TestHelpers::gParameterizedTests  = false ;                                                  \
20+         TestHelpers::gTestNames  =                                                                  \
21+             TestHelpers::getTestNames (::testing::UnitTest::GetInstance ()->current_test_info ());    \
22+         AGPTestDefaultBackend##TestName ();                                                         \
23+     }                                                                                              \
24+     void  AGPTestDefaultBackend##TestName()
25+ 
26+ #if  defined(ENABLE_VULKAN) && defined(WIN32)
27+ 
28+     #define  AGP_TEST (TestSuiteName, TestName )                                                      \
29+         std::string ParamTestName##TestName(const  testing::TestParamInfo<std::string>& info)       \
30+         {                                                                                          \
31+             return  info.param ;                                                                     \
32+         }                                                                                          \
33+         class  TestName  : public ::testing::TestWithParam<std::string>                              \
34+         {                                                                                          \
35+         public:                                                                                     \
36+             void  AGPTest##TestName();                                                              \
37+         };                                                                                         \
38+         INSTANTIATE_TEST_SUITE_P (TestSuiteName, TestName, ::testing::Values(/* "Vulkan",*/   " OpenGL"  ),   \
39+             ParamTestName##TestName);                                                              \
40+         TEST_P (TestName, TestName)                                                                 \
41+         {                                                                                          \
42+             TestHelpers::gRunVulkanTests      = (GetParam () == " Vulkan"  );                           \
43+             TestHelpers::gParameterizedTests  = true ;                                               \
44+             TestHelpers::gTestNames           = TestHelpers::getTestNames (                          \
45+                 ::testing::UnitTest::GetInstance ()->current_test_info());                          \
46+             AGPTest##TestName ();                                                                   \
47+         }                                                                                          \
48+         void  TestName::AGPTest##TestName()
49+ 
50+ #else 
51+ 
52+     #define  AGP_TEST (TestSuiteName, TestName )                                                      \
53+         void  AGPTestDefaultBackend##TestName();                                                    \
54+         TEST (TestSuiteName, TestName)                                                              \
55+         {                                                                                          \
56+             TestHelpers::gParameterizedTests  = false ;                                              \
57+             TestHelpers::gTestNames           = TestHelpers::getTestNames (                          \
58+                 ::testing::UnitTest::GetInstance ()->current_test_info());                 \
59+             AGPTestDefaultBackend##TestName ();                                                     \
60+         }                                                                                          \
61+         void  AGPTestDefaultBackend##TestName()
62+ 
63+ #endif 
64+ 
1265namespace  TestHelpers 
1366{
14- inline  bool  gRunVulkanTests  = false ;
15- } //  namespace TestHelpers
67+     struct  TestNames 
68+     {
69+         std::string suiteName;
70+         std::string fixtureName;
71+         std::string paramName;
72+     };
73+ 
74+     inline  bool  gRunVulkanTests  = false ;
75+     inline  bool  gParameterizedTests  = false ;
76+     inline  TestNames gTestNames  = TestNames {};
77+ 
78+     inline  TestNames getTestNames (const  ::testing::TestInfo* testInfo)
79+     {
80+         TestNames testNames;
81+         if  (testInfo)
82+         {
83+             std::string testSuiteName = testInfo->test_suite_name ();
84+             std::string testName      = testInfo->name ();
85+ 
86+             //  If parameterized tests are used, test_suite_name and name returns
87+             //  SuiteName/TestName/Param. Hence the following filtering is
88+             //  needed.
89+             if  (TestHelpers::gParameterizedTests  == true )
90+             {
91+                 size_t  pos = testSuiteName.find (' /'  );
92+                 if  (pos != std::string::npos)
93+                 {
94+                     testNames.suiteName    = testSuiteName.substr (0 , pos);
95+                     testNames.fixtureName  = testSuiteName.substr (pos + 1 );
96+                 }
97+ 
98+                 pos = testName.find (' /'  );
99+                 if  (pos != std::string::npos)
100+                 {
101+                     testNames.paramName  = testName.substr (pos + 1 );
102+                 }
103+             }
104+             else  //  Otherwise the following is enough
105+             {
106+                 testNames.suiteName    = testInfo->test_suite_name ();
107+                 testNames.fixtureName  = testInfo->name ();
108+             }
109+         }
110+         return  testNames;
111+     }
112+ 
113+     // / Gets the image file based on the test parameter.
114+     inline  std::string getComputedImagePath ()
115+     {
116+         return  gTestNames .paramName .empty () ? gTestNames .fixtureName 
117+                                             : (gTestNames .fixtureName  + " _"   + gTestNames .paramName );
118+     }
119+ 
120+     // / Appends image file based on the test parameter.
121+     inline  std::string appendParamToImageFile (const  std::string& fileName)
122+     {
123+         return  gTestNames .paramName .empty () ? fileName : (fileName + " _"   + gTestNames .paramName );
124+     }
125+ 
126+ } //  namespace TestHelpers
0 commit comments