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 /* kNextRelease is a placeholder value that all new unit tests should use. It implies that 34 * this test will be enforced in the next Android release. At the time of the release a 35 * new kApiLevel_* value will be added and all current kNextRelease values will be replaced 36 * with that new value. 37 */ 38 kNextRelease = kApiLevel_T + 1 39 }; 40 41 /** 42 * Tests will run in strict (no workarounds) mode if the device API level is >= strictVersion 43 */ CtsEnforcement(ApiLevel strictVersion)44 constexpr CtsEnforcement(ApiLevel strictVersion) 45 : fStrictVersion(strictVersion), fWorkaroundsVersion(kNever) {} 46 47 /** 48 * Test will run with workarounds if the device API level is >= workaroundVersion 49 * and < strictVersion 50 */ withWorkarounds(ApiLevel workaroundVersion)51 constexpr CtsEnforcement& withWorkarounds(ApiLevel workaroundVersion) { 52 SkASSERT(workaroundVersion <= fStrictVersion); 53 fWorkaroundsVersion = workaroundVersion; 54 return *this; 55 } 56 57 enum class RunMode { kSkip = 0, kRunWithWorkarounds = 1, kRunStrict = 2 }; 58 RunMode eval(int apiLevel) const; 59 60 private: 61 ApiLevel fStrictVersion; 62 ApiLevel fWorkaroundsVersion; 63 }; 64 65 #endif 66