xref: /aosp_15_r20/external/skia/tests/TestTest.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2015 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "tests/CtsEnforcement.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker struct GrContextOptions;
12*c8dee2aaSAndroid Build Coastguard Worker 
13*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a normal test. It should not require any GPU backends, that is, it is a
14*c8dee2aaSAndroid Build Coastguard Worker // CPU test.
DEF_TEST(TestNormal,reporter)15*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(TestNormal, reporter) {
16*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
17*c8dee2aaSAndroid Build Coastguard Worker }
18*c8dee2aaSAndroid Build Coastguard Worker 
19*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a conditional test with a true condition.
20*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_TEST(TestTrueCondition, reporter, 1 == 1) {
21*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
22*c8dee2aaSAndroid Build Coastguard Worker }
23*c8dee2aaSAndroid Build Coastguard Worker 
24*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a conditional test with a false condition.
25*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_TEST(TestFalseCondition, reporter, 1 == 0) {
26*c8dee2aaSAndroid Build Coastguard Worker     ERRORF(reporter, "DEF_CONDITIONAL_TEST executed a test with a false condition");
27*c8dee2aaSAndroid Build Coastguard Worker }
28*c8dee2aaSAndroid Build Coastguard Worker 
29*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a GPU test that runs if any Ganesh backend is compiled in. The test itself
30*c8dee2aaSAndroid Build Coastguard Worker // is responsible for making the relevant GrDirectContext (e.g. using
31*c8dee2aaSAndroid Build Coastguard Worker // sk_gpu_test::GrContextFactory).
DEF_GANESH_TEST(TestGpuFactory,reporter,factory,CtsEnforcement::kNever)32*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST(TestGpuFactory, reporter, factory, CtsEnforcement::kNever) {
33*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
34*c8dee2aaSAndroid Build Coastguard Worker }
35*c8dee2aaSAndroid Build Coastguard Worker 
36*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a GPU test that tests a property that should work for all Ganesh contexts.
37*c8dee2aaSAndroid Build Coastguard Worker // Note: Some of the contexts might not produce a rendering output.
DEF_GANESH_TEST_FOR_ALL_CONTEXTS(TestGpuAllContexts,reporter,ctxInfo,CtsEnforcement::kNever)38*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_ALL_CONTEXTS(TestGpuAllContexts, reporter, ctxInfo, CtsEnforcement::kNever) {
39*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
40*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, ctxInfo.directContext());
41*c8dee2aaSAndroid Build Coastguard Worker }
42*c8dee2aaSAndroid Build Coastguard Worker 
43*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a GPU test that tests a property that should work for all Ganesh contexts
44*c8dee2aaSAndroid Build Coastguard Worker // that produce a rendering output.
DEF_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContexts,reporter,ctxInfo,CtsEnforcement::kNever)45*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContexts,
46*c8dee2aaSAndroid Build Coastguard Worker                                        reporter,
47*c8dee2aaSAndroid Build Coastguard Worker                                        ctxInfo,
48*c8dee2aaSAndroid Build Coastguard Worker                                        CtsEnforcement::kNever) {
49*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
50*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, ctxInfo.directContext());
51*c8dee2aaSAndroid Build Coastguard Worker }
52*c8dee2aaSAndroid Build Coastguard Worker 
53*c8dee2aaSAndroid Build Coastguard Worker // This is an example of a GPU test that tests a property that uses the mock Ganesh context.
54*c8dee2aaSAndroid Build Coastguard Worker // 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)55*c8dee2aaSAndroid Build Coastguard Worker DEF_GANESH_TEST_FOR_MOCK_CONTEXT(TestMockContext, reporter, ctxInfo) {
56*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
57*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, ctxInfo.directContext());
58*c8dee2aaSAndroid Build Coastguard Worker }
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker // Conditional variant of DEF_GANESH_TEST_FOR_ALL_CONTEXTS. It will only execute if the provided
61*c8dee2aaSAndroid Build Coastguard Worker // condition parameter is true.
DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS(TestGpuAllContextsWithTrueCondition,reporter,ctxInfo,true,CtsEnforcement::kNever)62*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS(
63*c8dee2aaSAndroid Build Coastguard Worker         TestGpuAllContextsWithTrueCondition, reporter, ctxInfo, true, CtsEnforcement::kNever) {
64*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
65*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, ctxInfo.directContext());
66*c8dee2aaSAndroid Build Coastguard Worker }
67*c8dee2aaSAndroid Build Coastguard Worker 
DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS(TestGpuAllContextsWithFalseCondition,reporter,ctxInfo,false,CtsEnforcement::kNever)68*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS(
69*c8dee2aaSAndroid Build Coastguard Worker         TestGpuAllContextsWithFalseCondition, reporter, ctxInfo, false, CtsEnforcement::kNever) {
70*c8dee2aaSAndroid Build Coastguard Worker     ERRORF(reporter, "DEF_CONDITIONAL_GANESH_TEST_FOR_ALL_CONTEXTS ran with a false condition");
71*c8dee2aaSAndroid Build Coastguard Worker }
72*c8dee2aaSAndroid Build Coastguard Worker 
73*c8dee2aaSAndroid Build Coastguard Worker // Conditional variant of DEF_GANESH_TEST_FOR_RENDERING_CONTEXTS. It will only execute if the
74*c8dee2aaSAndroid Build Coastguard Worker // provided condition parameter is true.
DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithTrueCondition,reporter,ctxInfo,true,CtsEnforcement::kNever)75*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithTrueCondition,
76*c8dee2aaSAndroid Build Coastguard Worker                                                    reporter,
77*c8dee2aaSAndroid Build Coastguard Worker                                                    ctxInfo,
78*c8dee2aaSAndroid Build Coastguard Worker                                                    true,
79*c8dee2aaSAndroid Build Coastguard Worker                                                    CtsEnforcement::kNever) {
80*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, reporter);
81*c8dee2aaSAndroid Build Coastguard Worker     REPORTER_ASSERT(reporter, ctxInfo.directContext());
82*c8dee2aaSAndroid Build Coastguard Worker }
83*c8dee2aaSAndroid Build Coastguard Worker 
DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithFalseCondition,reporter,ctxInfo,false,CtsEnforcement::kNever)84*c8dee2aaSAndroid Build Coastguard Worker DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContextsWithFalseCondition,
85*c8dee2aaSAndroid Build Coastguard Worker                                                    reporter,
86*c8dee2aaSAndroid Build Coastguard Worker                                                    ctxInfo,
87*c8dee2aaSAndroid Build Coastguard Worker                                                    false,
88*c8dee2aaSAndroid Build Coastguard Worker                                                    CtsEnforcement::kNever) {
89*c8dee2aaSAndroid Build Coastguard Worker     ERRORF(reporter,
90*c8dee2aaSAndroid Build Coastguard Worker            "DEF_CONDITIONAL_GANESH_TEST_FOR_RENDERING_CONTEXTS ran "
91*c8dee2aaSAndroid Build Coastguard Worker            "with a false condition");
92*c8dee2aaSAndroid Build Coastguard Worker }
93*c8dee2aaSAndroid Build Coastguard Worker 
DEF_TEST(TestCtsEnforcement,reporter)94*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(TestCtsEnforcement, reporter) {
95*c8dee2aaSAndroid Build Coastguard Worker     auto verifyRunMode = [&](CtsEnforcement e, int apiLevel, CtsEnforcement::RunMode runMode) {
96*c8dee2aaSAndroid Build Coastguard Worker         REPORTER_ASSERT(reporter, e.eval(apiLevel) == runMode);
97*c8dee2aaSAndroid Build Coastguard Worker     };
98*c8dee2aaSAndroid Build Coastguard Worker 
99*c8dee2aaSAndroid Build Coastguard Worker     CtsEnforcement e1 = CtsEnforcement::kNever;
100*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e1, 0, CtsEnforcement::RunMode::kSkip);
101*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e1, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kSkip);
102*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e1, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kSkip);
103*c8dee2aaSAndroid Build Coastguard Worker 
104*c8dee2aaSAndroid Build Coastguard Worker     CtsEnforcement e2 = CtsEnforcement::kApiLevel_T;
105*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e2, 0, CtsEnforcement::RunMode::kSkip);
106*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e2, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kRunStrict);
107*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e2, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict);
108*c8dee2aaSAndroid Build Coastguard Worker 
109*c8dee2aaSAndroid Build Coastguard Worker     CtsEnforcement e3 = CtsEnforcement::kNextRelease;
110*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e3, 0, CtsEnforcement::RunMode::kSkip);
111*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e3, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kSkip);
112*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e3, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict);
113*c8dee2aaSAndroid Build Coastguard Worker 
114*c8dee2aaSAndroid Build Coastguard Worker     CtsEnforcement e4 = CtsEnforcement(CtsEnforcement::kNextRelease)
115*c8dee2aaSAndroid Build Coastguard Worker                                 .withWorkarounds(CtsEnforcement::kApiLevel_T);
116*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e4, 0, CtsEnforcement::RunMode::kSkip);
117*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e4, CtsEnforcement::kApiLevel_T, CtsEnforcement::RunMode::kRunWithWorkarounds);
118*c8dee2aaSAndroid Build Coastguard Worker     verifyRunMode(e4, CtsEnforcement::kNextRelease, CtsEnforcement::RunMode::kRunStrict);
119*c8dee2aaSAndroid Build Coastguard Worker }
120