| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "tests/CtsEnforcement.h" |
| #include "tests/Test.h" |
| |
| struct GrContextOptions; |
| |
| // This is an example of a normal test. It should not require any GPU backends, that is, it is a |
| // CPU test. |
| DEF_TEST(TestNormal, reporter) { |
| REPORTER_ASSERT(reporter, reporter); |
| } |
| |
| // This is an example of a conditional test with a true condition. |
| DEF_CONDITIONAL_TEST(TestTrueCondition, reporter, 1 == 1) { |
| REPORTER_ASSERT(reporter, reporter); |
| } |
| |
| // This is an example of a conditional test with a false condition. |
| DEF_CONDITIONAL_TEST(TestFalseCondition, reporter, 1 == 0) { |
| ERRORF(reporter, "DEF_CONDITIONAL_TEST executed a test with a false condition"); |
| } |
| |
| // This is an example of a GPU test that runs if any Ganesh backend is compiled in. The test itself |
| // is responsible for making the relevant GrDirectContext (e.g. using |
| // sk_gpu_test::GrContextFactory). |
| DEF_GANESH_TEST(TestGpuFactory, reporter, factory, CtsEnforcement::kNever) { |
| REPORTER_ASSERT(reporter, reporter); |
| } |
| |
| // This is an example of a GPU test that tests a property that should work for all Ganesh contexts. |
| // Note: Some of the contexts might not produce a rendering output. |
| DEF_GANESH_TEST_FOR_ALL_CONTEXTS(TestGpuAllContexts, reporter, ctxInfo, CtsEnforcement::kNever) { |
| REPORTER_ASSERT(reporter, reporter); |
| REPORTER_ASSERT(reporter, ctxInfo.directContext()); |
| } |
| |
| // This is an example of a GPU test that tests a property that should work for all Ganesh contexts |
| // that produce a rendering output. |
| DEF_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContexts, |
| reporter, |
| ctxInfo, |
| CtsEnforcement::kNever) { |
| REPORTER_ASSERT(reporter, reporter); |
| REPORTER_ASSERT(reporter, ctxInfo.directContext()); |
| } |
| |
| // This is an example of a GPU test that tests a property that uses the mock Ganesh context. |
| // It should be used if the test tests some behavior that is mocked with the mock context. |
| DEF_GANESH_TEST_FOR_MOCK_CONTEXT(TestMockContext, reporter, ctxInfo) { |
| REPORTER_ASSERT(reporter, reporter); |
| REPORTER_ASSERT(reporter, ctxInfo.directContext()); |
| } |
| |
| // Conditional variant of DEF_GANESH_TEST_FOR_ALL_CONTEXTS. It will only execute if the provided |
| // condition parameter is true. |
| DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS( |
| TestGpuAllContextsWithTrueCondition, reporter, ctxInfo, true, CtsEnforcement::kNever) { |
| REPORTER_ASSERT(reporter, reporter); |
| REPORTER_ASSERT(reporter, ctxInfo.directContext()); |
| } |
| |
| DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS( |
| TestGpuAllContextsWithFalseCondition, reporter, ctxInfo, false, CtsEnforcement::kNever) { |
| ERRORF(reporter, "DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS ran with a false condition"); |
| } |
| |
| // Conditional variant of DEF_GANESH_TEST_FOR_RENDERING_CONTEXTS. It will only execute if the |
| // provided condition parameter is true. |
| DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithTrueCondition, |
| reporter, |
| ctxInfo, |
| true, |
| CtsEnforcement::kNever) { |
| REPORTER_ASSERT(reporter, reporter); |
| REPORTER_ASSERT(reporter, ctxInfo.directContext()); |
| } |
| |
| DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithFalseCondition, |
| reporter, |
| ctxInfo, |
| false, |
| CtsEnforcement::kNever) { |
| ERRORF(reporter, |
| "DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS ran " |
| "with a false condition"); |
| } |
| |
| DEF_TEST(TestCtsEnforcement, reporter) { |
| auto verifyRunMode = [&](CtsEnforcement e, int apiLevel, CtsEnforcement::RunMode runMode) { |
| REPORTER_ASSERT(reporter, e.eval(apiLevel) == runMode); |
| }; |
| |
| CtsEnforcement e1 = CtsEnforcement::kNever; |
| verifyRunMode(e1, 0, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e1, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e1, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kSkip); |
| |
| CtsEnforcement e2 = CtsEnforcement::kApiLevel_T; |
| verifyRunMode(e2, 0, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e2, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kRunStrict); |
| verifyRunMode(e2, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict); |
| |
| CtsEnforcement e3 = CtsEnforcement::kNextRelease; |
| verifyRunMode(e3, 0, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e3, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e3, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict); |
| |
| CtsEnforcement e4 = CtsEnforcement(CtsEnforcement::kNextRelease) |
| .withWorkarounds(CtsEnforcement::kApiLevel_T); |
| verifyRunMode(e4, 0, CtsEnforcement::RunMode::kSkip); |
| verifyRunMode(e4, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kRunWithWorkarounds); |
| verifyRunMode(e4, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict); |
| } |