120 lines
5.3 KiB
C++
120 lines
5.3 KiB
C++
/*
|
|
* 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);
|
|
}
|