/src/skia/tests/CtsEnforcement.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2022 Google Inc. |
3 | | * |
4 | | * Use of this source code is governed by a BSD-style license that can be |
5 | | * found in the LICENSE file. |
6 | | */ |
7 | | |
8 | | #ifndef CtsEnforcement_DEFINED |
9 | | #define CtsEnforcement_DEFINED |
10 | | |
11 | | #include "include/core/SkTypes.h" |
12 | | |
13 | | #include <climits> |
14 | | #include <cstdint> |
15 | | |
16 | | /** |
17 | | * Determines how unit tests are enforced by CTS. Depending on the ApiLevel, a test will be run |
18 | | * in one of 3 states: run without workarounds, run with workarounds or skipped. |
19 | | */ |
20 | | class CtsEnforcement { |
21 | | public: |
22 | | enum ApiLevel : int32_t { |
23 | | /* When used as fStrictVersion, always skip this test. It is not relevant to CTS. |
24 | | * When used as fWorkaroundsVersion, there are no api levels that should run the |
25 | | * test with workarounds. |
26 | | */ |
27 | | kNever = INT32_MAX, |
28 | | /* The kApiLevel_* values are directly correlated with Android API levels. Every new |
29 | | * CTS/SkQP release has a corresponding Android API level that will be captured by these |
30 | | * enum values. |
31 | | */ |
32 | | kApiLevel_T = 33, |
33 | | kApiLevel_U = 34, |
34 | | kApiLevel_V = 35, |
35 | | /* kNextRelease is a placeholder value that all new unit tests should use. It implies that |
36 | | * this test will be enforced in the next Android release. At the time of the release a |
37 | | * new kApiLevel_* value will be added and all current kNextRelease values will be replaced |
38 | | * with that new value. |
39 | | */ |
40 | | kNextRelease = kApiLevel_V |
41 | | }; |
42 | | |
43 | | /** |
44 | | * Tests will run in strict (no workarounds) mode if the device API level is >= strictVersion |
45 | | */ |
46 | | constexpr CtsEnforcement(ApiLevel strictVersion) |
47 | 0 | : fStrictVersion(strictVersion), fWorkaroundsVersion(kNever) {} |
48 | | |
49 | | /** |
50 | | * Test will run with workarounds if the device API level is >= workaroundVersion |
51 | | * and < strictVersion |
52 | | */ |
53 | 0 | constexpr CtsEnforcement& withWorkarounds(ApiLevel workaroundVersion) { |
54 | 0 | SkASSERT(workaroundVersion <= fStrictVersion); |
55 | 0 | fWorkaroundsVersion = workaroundVersion; |
56 | 0 | return *this; |
57 | 0 | } |
58 | | |
59 | | enum class RunMode { kSkip = 0, kRunWithWorkarounds = 1, kRunStrict = 2 }; |
60 | | RunMode eval(int apiLevel) const; |
61 | | |
62 | | private: |
63 | | ApiLevel fStrictVersion; |
64 | | ApiLevel fWorkaroundsVersion; |
65 | | }; |
66 | | |
67 | | #endif |