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