| /* | |
| * 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); | |
| } |