• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // GPUTestExpectationsParser_unittest.cpp: Unit tests for GPUTestExpectationsParser*
7 //
8 
9 #include "tests/test_expectations/GPUTestExpectationsParser.h"
10 #include <gtest/gtest.h>
11 #include "tests/test_expectations/GPUTestConfig.h"
12 
13 using namespace angle;
14 
15 namespace
16 {
17 enum class ConditionTestType
18 {
19     OnLoad,
20     OnGet,
21 };
22 
23 class GPUTestConfigTester : public GPUTestConfig
24 {
25   public:
GPUTestConfigTester()26     GPUTestConfigTester()
27     {
28         mConditions.reset();
29         mConditions[GPUTestConfig::kConditionWin]    = true;
30         mConditions[GPUTestConfig::kConditionNVIDIA] = true;
31         mConditions[GPUTestConfig::kConditionD3D11]  = true;
32     }
33 };
34 
35 class GPUTestExpectationsParserTest : public testing::TestWithParam<ConditionTestType>
36 {
37   public:
load(const std::string & line)38     bool load(const std::string &line)
39     {
40         if (GetParam() == ConditionTestType::OnLoad)
41         {
42             return parser.loadTestExpectations(config, line);
43         }
44         else
45         {
46             return parser.loadAllTestExpectations(line);
47         }
48     }
49 
get(const std::string & testName)50     int32_t get(const std::string &testName)
51     {
52         if (GetParam() == ConditionTestType::OnLoad)
53         {
54             return parser.getTestExpectation(testName);
55         }
56         else
57         {
58             return parser.getTestExpectationWithConfig(config, testName);
59         }
60     }
61 
62     GPUTestConfigTester config;
63     GPUTestExpectationsParser parser;
64 };
65 
66 // A correct entry with a test that's skipped on all platforms should not lead
67 // to any errors, and should properly return the expectation SKIP.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSkip)68 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSkip)
69 {
70     std::string line =
71         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
72     EXPECT_TRUE(load(line));
73     EXPECT_TRUE(parser.getErrorMessages().empty());
74     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
75               GPUTestExpectationsParser::kGpuTestSkip);
76 }
77 
78 // A correct entry with a test that's failed on all platforms should not lead
79 // to any errors, and should properly return the expectation FAIL.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserFail)80 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserFail)
81 {
82     std::string line =
83         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = FAIL)";
84     EXPECT_TRUE(load(line));
85     EXPECT_TRUE(parser.getErrorMessages().empty());
86     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
87               GPUTestExpectationsParser::kGpuTestFail);
88 }
89 
90 // A correct entry with a test that's passed on all platforms should not lead
91 // to any errors, and should properly return the expectation PASS.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserPass)92 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserPass)
93 {
94     std::string line =
95         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = PASS)";
96     EXPECT_TRUE(load(line));
97     EXPECT_TRUE(parser.getErrorMessages().empty());
98     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
99               GPUTestExpectationsParser::kGpuTestPass);
100 }
101 
102 // A correct entry with a test that's timed out on all platforms should not lead
103 // to any errors, and should properly return the expectation TIMEOUT.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserTimeout)104 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserTimeout)
105 {
106     std::string line =
107         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = TIMEOUT)";
108     EXPECT_TRUE(load(line));
109     EXPECT_TRUE(parser.getErrorMessages().empty());
110     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
111               GPUTestExpectationsParser::kGpuTestTimeout);
112 }
113 
114 // A correct entry with a test that's flaky on all platforms should not lead
115 // to any errors, and should properly return the expectation FLAKY.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserFlaky)116 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserFlaky)
117 {
118     std::string line =
119         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = FLAKY)";
120     EXPECT_TRUE(load(line));
121     EXPECT_TRUE(parser.getErrorMessages().empty());
122     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
123               GPUTestExpectationsParser::kGpuTestFlaky);
124 }
125 
126 // A correct entry with a test that's skipped on windows should not lead
127 // to any errors, and should properly return the expectation SKIP on this
128 // tester.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineWin)129 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineWin)
130 {
131     std::string line =
132         R"(100 WIN : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
133     EXPECT_TRUE(load(line));
134     EXPECT_TRUE(parser.getErrorMessages().empty());
135     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
136               GPUTestExpectationsParser::kGpuTestSkip);
137 }
138 
139 // A correct entry with a test that's skipped on windows/NVIDIA should not lead
140 // to any errors, and should properly return the expectation SKIP on this
141 // tester.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineWinNVIDIA)142 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineWinNVIDIA)
143 {
144     std::string line =
145         R"(100 WIN NVIDIA : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
146     EXPECT_TRUE(load(line));
147     EXPECT_TRUE(parser.getErrorMessages().empty());
148     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
149               GPUTestExpectationsParser::kGpuTestSkip);
150 }
151 
152 // A correct entry with a test that's skipped on windows/NVIDIA/D3D11 should not
153 // lead to any errors, and should properly return the expectation SKIP on this
154 // tester.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineWinNVIDIAD3D11)155 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineWinNVIDIAD3D11)
156 {
157     std::string line =
158         R"(100 WIN NVIDIA D3D11 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
159     EXPECT_TRUE(load(line));
160     EXPECT_TRUE(parser.getErrorMessages().empty());
161     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
162               GPUTestExpectationsParser::kGpuTestSkip);
163 }
164 
165 // Same as GPUTestExpectationsParserSingleLineWinNVIDIAD3D11, but verifying that the order
166 // of these conditions doesn't matter
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineWinNVIDIAD3D11OtherOrder)167 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineWinNVIDIAD3D11OtherOrder)
168 {
169     std::string line =
170         R"(100 D3D11 NVIDIA WIN : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
171     EXPECT_TRUE(load(line));
172     EXPECT_TRUE(parser.getErrorMessages().empty());
173     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
174               GPUTestExpectationsParser::kGpuTestSkip);
175 }
176 
177 // A correct entry with a test that's skipped on mac should not lead
178 // to any errors, and should default to PASS on this tester (windows).
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineMac)179 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineMac)
180 {
181     std::string line =
182         R"(100 MAC : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
183     EXPECT_TRUE(load(line));
184     EXPECT_TRUE(parser.getErrorMessages().empty());
185     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
186               GPUTestExpectationsParser::kGpuTestPass);
187 }
188 
189 // A correct entry with a test that has conflicting entries should not lead
190 // to any errors, and should default to PASS.
191 // (https:anglebug.com/3368) In the future, this condition should cause an
192 // error
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserSingleLineConflict)193 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserSingleLineConflict)
194 {
195     std::string line =
196         R"(100 WIN MAC : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
197     EXPECT_TRUE(load(line));
198     EXPECT_TRUE(parser.getErrorMessages().empty());
199     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
200               GPUTestExpectationsParser::kGpuTestPass);
201 }
202 
203 // A line without a bug ID should return an error and not add the expectation.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMissingBugId)204 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMissingBugId)
205 {
206     std::string line = R"( : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
207     EXPECT_FALSE(load(line));
208     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
209     if (parser.getErrorMessages().size() >= 1)
210     {
211         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
212     }
213     // Default behavior is to let missing tests pass
214     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
215               GPUTestExpectationsParser::kGpuTestPass);
216 }
217 
218 // A line without a bug ID should return an error and not add the expectation, (even if
219 // the line contains conditions that might be mistaken for a bug id)
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMissingBugIdWithConditions)220 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMissingBugIdWithConditions)
221 {
222     std::string line =
223         R"(WIN D3D11 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
224     EXPECT_FALSE(load(line));
225     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
226     if (parser.getErrorMessages().size() >= 1)
227     {
228         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
229     }
230     // Default behavior is to let missing tests pass
231     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
232               GPUTestExpectationsParser::kGpuTestPass);
233 }
234 
235 // A line without a colon should return an error and not add the expectation.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMissingColon)236 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMissingColon)
237 {
238     std::string line = R"(100 dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
239     EXPECT_FALSE(load(line));
240     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
241     if (parser.getErrorMessages().size() >= 1)
242     {
243         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
244     }
245     // Default behavior is to let missing tests pass
246     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
247               GPUTestExpectationsParser::kGpuTestPass);
248 }
249 
250 // A wild character (*) at the end of a line should match any expectations that are a subset of that
251 // line. It should not greedily match to omany expectations that aren't in that subset.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserWildChar)252 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserWildChar)
253 {
254     std::string line = R"(100 : dEQP-GLES31.functional.layout_binding.ubo.* = SKIP)";
255     EXPECT_TRUE(load(line));
256     EXPECT_TRUE(parser.getErrorMessages().empty());
257     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
258               GPUTestExpectationsParser::kGpuTestSkip);
259     // Also ensure the wild char is not too wild, only covers tests that are more specific
260     EXPECT_EQ(get("dEQP-GLES31.functional.program_interface_query.transform_feedback_varying."
261                   "resource_list.vertex_fragment.builtin_gl_position"),
262               GPUTestExpectationsParser::kGpuTestPass);
263 }
264 
265 // A line without an equals should return an error and not add the expectation.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMissingEquals)266 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMissingEquals)
267 {
268     std::string line = R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max SKIP)";
269     EXPECT_FALSE(load(line));
270     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
271     if (parser.getErrorMessages().size() >= 1)
272     {
273         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
274     }
275     // Default behavior is to let missing tests pass
276     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
277               GPUTestExpectationsParser::kGpuTestPass);
278 }
279 
280 // A line without an expectation should return an error and not add the expectation.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMissingExpectation)281 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMissingExpectation)
282 {
283     std::string line = R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max =)";
284     EXPECT_FALSE(load(line));
285     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
286     if (parser.getErrorMessages().size() >= 1)
287     {
288         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
289     }
290     // Default behavior is to let missing tests pass
291     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
292               GPUTestExpectationsParser::kGpuTestPass);
293 }
294 
295 // A line with an expectation that doesn't exist should return an error and not add the expectation.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserInvalidExpectation)296 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserInvalidExpectation)
297 {
298     std::string line =
299         R"(100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = WRONG)";
300     EXPECT_FALSE(load(line));
301     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
302     if (parser.getErrorMessages().size() >= 1)
303     {
304         EXPECT_EQ(parser.getErrorMessages()[0], "Line 1 : entry with wrong format");
305     }
306     // Default behavior is to let missing tests pass
307     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
308               GPUTestExpectationsParser::kGpuTestPass);
309 }
310 
311 // ChromeOS is reserved as a token, but doesn't actually check any conditions. Any tokens that
312 // do not check conditions should return an error and not add the expectation
313 // (https://anglebug.com/3363) Remove/update this test when ChromeOS is supported
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserUnimplementedCondition)314 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserUnimplementedCondition)
315 {
316     // Does not apply when loading all expectations and not checking the config.
317     if (GetParam() == ConditionTestType::OnGet)
318     {
319         GTEST_SKIP() << "Test does not apply when loading all expectations.";
320     }
321 
322     std::string line =
323         R"(100 CHROMEOS : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
324     EXPECT_FALSE(load(line));
325     EXPECT_EQ(parser.getErrorMessages().size(), 1u);
326     if (parser.getErrorMessages().size() >= 1)
327     {
328         EXPECT_EQ(parser.getErrorMessages()[0],
329                   "Line 1 : entry invalid, likely unimplemented modifiers");
330     }
331     // Default behavior is to let missing tests pass
332     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
333               GPUTestExpectationsParser::kGpuTestPass);
334 }
335 
336 // If a line starts with a comment, it's ignored and should not be added to the list.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserComment)337 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserComment)
338 {
339     std::string line =
340         R"(//100 : dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max = SKIP)";
341     EXPECT_TRUE(load(line));
342     EXPECT_TRUE(parser.getErrorMessages().empty());
343     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
344               GPUTestExpectationsParser::kGpuTestPass);
345 }
346 
347 // A misspelled expectation should not be matched from getTestExpectation, and should lead to an
348 // unused expectation when later queried.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserMisspelledExpectation)349 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserMisspelledExpectation)
350 {
351     std::string line =
352         R"(100 : dEQP-GLES31.functionaal.layout_binding.ubo.* = SKIP)";  // "functionaal"
353     EXPECT_TRUE(load(line));
354     EXPECT_TRUE(parser.getErrorMessages().empty());
355     // Default behavior is to let missing tests pass
356     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
357               GPUTestExpectationsParser::kGpuTestPass);
358     EXPECT_EQ(parser.getUnusedExpectationsMessages().size(), 1u);
359     if (parser.getUnusedExpectationsMessages().size() >= 1)
360     {
361         EXPECT_EQ(parser.getUnusedExpectationsMessages()[0], "Line 1: expectation was unused.");
362     }
363 }
364 
365 // Wild characters that match groups of expectations can be overridden with more specific lines.
366 // The parse should still compute correctly which lines were used and which were unused.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserOverrideExpectation)367 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserOverrideExpectation)
368 {
369     // Fail all layout_binding tests, but skip the layout_binding.ubo subset.
370     std::string line = R"(100 : dEQP-GLES31.functional.layout_binding.* = FAIL
371 100 : dEQP-GLES31.functional.layout_binding.ubo.* = SKIP)";
372     EXPECT_TRUE(load(line));
373     EXPECT_TRUE(parser.getErrorMessages().empty());
374     // Default behavior is to let missing tests pass
375     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
376               GPUTestExpectationsParser::kGpuTestSkip);
377     // The FAIL expectation was unused because it was overridden.
378     EXPECT_EQ(parser.getUnusedExpectationsMessages().size(), 1u);
379     if (parser.getUnusedExpectationsMessages().size() >= 1)
380     {
381         EXPECT_EQ(parser.getUnusedExpectationsMessages()[0], "Line 1: expectation was unused.");
382     }
383     // Now try a test that doesn't match the override criteria
384     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.image.test"),
385               GPUTestExpectationsParser::kGpuTestFail);
386     EXPECT_TRUE(parser.getUnusedExpectationsMessages().empty());
387 }
388 
389 // This test is the same as GPUTestExpectationsParserOverrideExpectation, but verifying the order
390 // doesn't matter when overriding.
TEST_P(GPUTestExpectationsParserTest,GPUTestExpectationsParserOverrideExpectationOtherOrder)391 TEST_P(GPUTestExpectationsParserTest, GPUTestExpectationsParserOverrideExpectationOtherOrder)
392 {
393     // Fail all layout_binding tests, but skip the layout_binding.ubo subset.
394     std::string line = R"(100 : dEQP-GLES31.functional.layout_binding.ubo.* = SKIP
395 100 : dEQP-GLES31.functional.layout_binding.* = FAIL)";
396     EXPECT_TRUE(load(line));
397     EXPECT_TRUE(parser.getErrorMessages().empty());
398     // Default behavior is to let missing tests pass
399     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
400               GPUTestExpectationsParser::kGpuTestSkip);
401     // The FAIL expectation was unused because it was overridden.
402     EXPECT_EQ(parser.getUnusedExpectationsMessages().size(), 1u);
403     if (parser.getUnusedExpectationsMessages().size() >= 1)
404     {
405         EXPECT_EQ(parser.getUnusedExpectationsMessages()[0], "Line 2: expectation was unused.");
406     }
407     // Now try a test that doesn't match the override criteria
408     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.image.test"),
409               GPUTestExpectationsParser::kGpuTestFail);
410     EXPECT_TRUE(parser.getUnusedExpectationsMessages().empty());
411 }
412 
413 // Tests that overlap checking doesn't generate false positives.
TEST_P(GPUTestExpectationsParserTest,OverlapConditions)414 TEST_P(GPUTestExpectationsParserTest, OverlapConditions)
415 {
416     std::string lines = R"(
417 100 NVIDIA VULKAN : dEQP-GLES31.functional.layout_binding.ubo.* = SKIP
418 100 NVIDIA D3D11 : dEQP-GLES31.functional.layout_binding.ubo.* = SKIP)";
419 
420     ASSERT_TRUE(load(lines));
421     ASSERT_TRUE(parser.getErrorMessages().empty());
422 
423     EXPECT_EQ(get("dEQP-GLES31.functional.layout_binding.ubo.vertex_binding_max"),
424               GPUTestExpectationsParser::kGpuTestSkip);
425 }
426 
ConditionTestTypeName(testing::TestParamInfo<ConditionTestType> testParamInfo)427 std::string ConditionTestTypeName(testing::TestParamInfo<ConditionTestType> testParamInfo)
428 {
429     if (testParamInfo.param == ConditionTestType::OnLoad)
430     {
431         return "OnLoad";
432     }
433     else
434     {
435         return "OnGet";
436     }
437 }
438 
439 INSTANTIATE_TEST_SUITE_P(,
440                          GPUTestExpectationsParserTest,
441                          testing::Values(ConditionTestType::OnGet, ConditionTestType::OnLoad),
442                          ConditionTestTypeName);
443 }  // anonymous namespace
444