1*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") 2*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/common:api.bzl", "api_from_product") 3*7594170eSAndroid Build Coastguard Worker 4*7594170eSAndroid Build Coastguard Workerdef _is_preview_test_impl(ctx): 5*7594170eSAndroid Build Coastguard Worker env = unittest.begin(ctx) 6*7594170eSAndroid Build Coastguard Worker platform_sdk_variables = struct( 7*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["UpsideDownCake"], 8*7594170eSAndroid Build Coastguard Worker ) 9*7594170eSAndroid Build Coastguard Worker api = api_from_product(platform_sdk_variables) 10*7594170eSAndroid Build Coastguard Worker 11*7594170eSAndroid Build Coastguard Worker # schema: version string to parse: is preview api 12*7594170eSAndroid Build Coastguard Worker _LEVELS_UNDER_TEST = { 13*7594170eSAndroid Build Coastguard Worker # numbers 14*7594170eSAndroid Build Coastguard Worker "9": False, # earliest released number 15*7594170eSAndroid Build Coastguard Worker # codenames 16*7594170eSAndroid Build Coastguard Worker "Tiramisu": False, 17*7594170eSAndroid Build Coastguard Worker "UpsideDownCake": True, # preview 18*7594170eSAndroid Build Coastguard Worker "current": True, # future (considered as preview) 19*7594170eSAndroid Build Coastguard Worker "(no version)": True, 20*7594170eSAndroid Build Coastguard Worker # preview numbers 21*7594170eSAndroid Build Coastguard Worker "9000": True, # preview 22*7594170eSAndroid Build Coastguard Worker "10000": True, # future (considered as preview) 23*7594170eSAndroid Build Coastguard Worker } 24*7594170eSAndroid Build Coastguard Worker 25*7594170eSAndroid Build Coastguard Worker for level, expected in _LEVELS_UNDER_TEST.items(): 26*7594170eSAndroid Build Coastguard Worker asserts.equals(env, expected, api.is_preview(level), "unexpected is_preview value for %s" % level) 27*7594170eSAndroid Build Coastguard Worker 28*7594170eSAndroid Build Coastguard Worker return unittest.end(env) 29*7594170eSAndroid Build Coastguard Worker 30*7594170eSAndroid Build Coastguard Workeris_preview_test = unittest.make(_is_preview_test_impl) 31*7594170eSAndroid Build Coastguard Worker 32*7594170eSAndroid Build Coastguard Workerdef _default_app_target_sdk_string_test_impl(ctx): 33*7594170eSAndroid Build Coastguard Worker env = unittest.begin(ctx) 34*7594170eSAndroid Build Coastguard Worker 35*7594170eSAndroid Build Coastguard Worker asserts.equals( 36*7594170eSAndroid Build Coastguard Worker env, 37*7594170eSAndroid Build Coastguard Worker "33", 38*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 39*7594170eSAndroid Build Coastguard Worker platform_sdk_final = True, 40*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 41*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "REL", 42*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = [], 43*7594170eSAndroid Build Coastguard Worker )).default_app_target_sdk_string(), 44*7594170eSAndroid Build Coastguard Worker "unexpected default_app_target_sdk_string value with platform_sdk_final True and platform_sdk_version 33.", 45*7594170eSAndroid Build Coastguard Worker ) 46*7594170eSAndroid Build Coastguard Worker asserts.equals( 47*7594170eSAndroid Build Coastguard Worker env, 48*7594170eSAndroid Build Coastguard Worker "VanillaIceCream", 49*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 50*7594170eSAndroid Build Coastguard Worker platform_sdk_final = False, 51*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 52*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "VanillaIceCream", 53*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["VanillaIceCream"], 54*7594170eSAndroid Build Coastguard Worker )).default_app_target_sdk_string(), 55*7594170eSAndroid Build Coastguard Worker "unexpected default_app_target_sdk_string value with platform_sdk_final False and platform_sdk_codename VanillaIceCream.", 56*7594170eSAndroid Build Coastguard Worker ) 57*7594170eSAndroid Build Coastguard Worker 58*7594170eSAndroid Build Coastguard Worker return unittest.end(env) 59*7594170eSAndroid Build Coastguard Worker 60*7594170eSAndroid Build Coastguard Workerdefault_app_target_sdk_string_test = unittest.make(_default_app_target_sdk_string_test_impl) 61*7594170eSAndroid Build Coastguard Worker 62*7594170eSAndroid Build Coastguard Workerdef _effective_version_string_test_impl(ctx): 63*7594170eSAndroid Build Coastguard Worker env = unittest.begin(ctx) 64*7594170eSAndroid Build Coastguard Worker 65*7594170eSAndroid Build Coastguard Worker asserts.equals( 66*7594170eSAndroid Build Coastguard Worker env, 67*7594170eSAndroid Build Coastguard Worker "32", 68*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 69*7594170eSAndroid Build Coastguard Worker platform_sdk_final = True, 70*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 71*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "REL", 72*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = [], 73*7594170eSAndroid Build Coastguard Worker )).effective_version_string("32"), 74*7594170eSAndroid Build Coastguard Worker "unexpected effective version string when input version (32) is not preview", 75*7594170eSAndroid Build Coastguard Worker ) 76*7594170eSAndroid Build Coastguard Worker asserts.equals( 77*7594170eSAndroid Build Coastguard Worker env, 78*7594170eSAndroid Build Coastguard Worker "33", 79*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 80*7594170eSAndroid Build Coastguard Worker platform_sdk_final = True, 81*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 82*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "REL", 83*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = [], 84*7594170eSAndroid Build Coastguard Worker )).effective_version_string("current"), 85*7594170eSAndroid Build Coastguard Worker "unexpected effective version string when input version (current) is preview and default_app_target_sdk (33) is not.", 86*7594170eSAndroid Build Coastguard Worker ) 87*7594170eSAndroid Build Coastguard Worker asserts.equals( 88*7594170eSAndroid Build Coastguard Worker env, 89*7594170eSAndroid Build Coastguard Worker "VanillaIceCream", 90*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 91*7594170eSAndroid Build Coastguard Worker platform_sdk_final = False, 92*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 93*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "UpsideDownCake", 94*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["UpsideDownCake", "VanillaIceCream"], 95*7594170eSAndroid Build Coastguard Worker )).effective_version_string("VanillaIceCream"), 96*7594170eSAndroid Build Coastguard Worker "unexpected effective version string when both input version (VanillaIceCream) and default_app_target_sdk (UpsideDownCake) are preview.", 97*7594170eSAndroid Build Coastguard Worker ) 98*7594170eSAndroid Build Coastguard Worker asserts.equals( 99*7594170eSAndroid Build Coastguard Worker env, 100*7594170eSAndroid Build Coastguard Worker "UpsideDownCake", 101*7594170eSAndroid Build Coastguard Worker api_from_product(struct( 102*7594170eSAndroid Build Coastguard Worker platform_sdk_final = False, 103*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 104*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "UpsideDownCake", 105*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["UpsideDownCake", "VanillaIceCream"], 106*7594170eSAndroid Build Coastguard Worker )).effective_version_string("current"), 107*7594170eSAndroid Build Coastguard Worker "unexpected effective version string when both input version (current) and default_app_target_sdk (UpsideDownCake) are preview.", 108*7594170eSAndroid Build Coastguard Worker ) 109*7594170eSAndroid Build Coastguard Worker 110*7594170eSAndroid Build Coastguard Worker return unittest.end(env) 111*7594170eSAndroid Build Coastguard Worker 112*7594170eSAndroid Build Coastguard Workereffective_version_string_test = unittest.make(_effective_version_string_test_impl) 113*7594170eSAndroid Build Coastguard Worker 114*7594170eSAndroid Build Coastguard Workerdef _api_levels_test_impl(ctx): 115*7594170eSAndroid Build Coastguard Worker env = unittest.begin(ctx) 116*7594170eSAndroid Build Coastguard Worker api = api_from_product(struct( 117*7594170eSAndroid Build Coastguard Worker platform_sdk_final = False, 118*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 119*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "UpsideDownCake", 120*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["UpsideDownCake"], 121*7594170eSAndroid Build Coastguard Worker )) 122*7594170eSAndroid Build Coastguard Worker 123*7594170eSAndroid Build Coastguard Worker # schema: version string to parse: expected api int 124*7594170eSAndroid Build Coastguard Worker _LEVELS_UNDER_TEST = { 125*7594170eSAndroid Build Coastguard Worker # numbers 126*7594170eSAndroid Build Coastguard Worker "9": 9, # earliest released number 127*7594170eSAndroid Build Coastguard Worker "21": 21, 128*7594170eSAndroid Build Coastguard Worker "30": 30, 129*7594170eSAndroid Build Coastguard Worker "33": 33, 130*7594170eSAndroid Build Coastguard Worker # unchecked non final api level (not finalized, not preview, not current) 131*7594170eSAndroid Build Coastguard Worker "1234": 1234, 132*7594170eSAndroid Build Coastguard Worker "8999": 8999, 133*7594170eSAndroid Build Coastguard Worker "9999": 9999, 134*7594170eSAndroid Build Coastguard Worker "10001": 10001, 135*7594170eSAndroid Build Coastguard Worker # letters 136*7594170eSAndroid Build Coastguard Worker "G": 9, # earliest released letter 137*7594170eSAndroid Build Coastguard Worker "J-MR1": 17, 138*7594170eSAndroid Build Coastguard Worker "R": 30, 139*7594170eSAndroid Build Coastguard Worker "S": 31, 140*7594170eSAndroid Build Coastguard Worker "S-V2": 32, 141*7594170eSAndroid Build Coastguard Worker # codenames 142*7594170eSAndroid Build Coastguard Worker "Tiramisu": 33, 143*7594170eSAndroid Build Coastguard Worker "UpsideDownCake": 9000, 144*7594170eSAndroid Build Coastguard Worker "current": 10000, 145*7594170eSAndroid Build Coastguard Worker "9000": 9000, 146*7594170eSAndroid Build Coastguard Worker "10000": 10000, 147*7594170eSAndroid Build Coastguard Worker } 148*7594170eSAndroid Build Coastguard Worker 149*7594170eSAndroid Build Coastguard Worker for level, expected in _LEVELS_UNDER_TEST.items(): 150*7594170eSAndroid Build Coastguard Worker asserts.equals(env, expected, api.parse_api_level_from_version(level), "unexpected api level parsed for %s" % level) 151*7594170eSAndroid Build Coastguard Worker 152*7594170eSAndroid Build Coastguard Worker return unittest.end(env) 153*7594170eSAndroid Build Coastguard Worker 154*7594170eSAndroid Build Coastguard Workerapi_levels_test = unittest.make(_api_levels_test_impl) 155*7594170eSAndroid Build Coastguard Worker 156*7594170eSAndroid Build Coastguard Workerdef _final_or_future_test_impl(ctx): 157*7594170eSAndroid Build Coastguard Worker env = unittest.begin(ctx) 158*7594170eSAndroid Build Coastguard Worker api = api_from_product(struct( 159*7594170eSAndroid Build Coastguard Worker platform_sdk_final = False, 160*7594170eSAndroid Build Coastguard Worker platform_sdk_version = 33, 161*7594170eSAndroid Build Coastguard Worker platform_sdk_codename = "UpsideDownCake", 162*7594170eSAndroid Build Coastguard Worker platform_version_active_codenames = ["UpsideDownCake"], 163*7594170eSAndroid Build Coastguard Worker )) 164*7594170eSAndroid Build Coastguard Worker 165*7594170eSAndroid Build Coastguard Worker # schema: version string to parse: expected api int 166*7594170eSAndroid Build Coastguard Worker _LEVELS_UNDER_TEST = { 167*7594170eSAndroid Build Coastguard Worker # finalized 168*7594170eSAndroid Build Coastguard Worker "30": 30, 169*7594170eSAndroid Build Coastguard Worker "33": 33, 170*7594170eSAndroid Build Coastguard Worker "S": 31, 171*7594170eSAndroid Build Coastguard Worker "S-V2": 32, 172*7594170eSAndroid Build Coastguard Worker "Tiramisu": 33, 173*7594170eSAndroid Build Coastguard Worker # not finalized 174*7594170eSAndroid Build Coastguard Worker "UpsideDownCake": 10000, 175*7594170eSAndroid Build Coastguard Worker "current": 10000, 176*7594170eSAndroid Build Coastguard Worker "9000": 10000, 177*7594170eSAndroid Build Coastguard Worker "10000": 10000, 178*7594170eSAndroid Build Coastguard Worker } 179*7594170eSAndroid Build Coastguard Worker 180*7594170eSAndroid Build Coastguard Worker for level, expected in _LEVELS_UNDER_TEST.items(): 181*7594170eSAndroid Build Coastguard Worker asserts.equals( 182*7594170eSAndroid Build Coastguard Worker env, 183*7594170eSAndroid Build Coastguard Worker expected, 184*7594170eSAndroid Build Coastguard Worker api.final_or_future(api.parse_api_level_from_version(level)), 185*7594170eSAndroid Build Coastguard Worker "unexpected final or future api for %s" % level, 186*7594170eSAndroid Build Coastguard Worker ) 187*7594170eSAndroid Build Coastguard Worker 188*7594170eSAndroid Build Coastguard Worker return unittest.end(env) 189*7594170eSAndroid Build Coastguard Worker 190*7594170eSAndroid Build Coastguard Workerfinal_or_future_test = unittest.make(_final_or_future_test_impl) 191*7594170eSAndroid Build Coastguard Worker 192*7594170eSAndroid Build Coastguard Workerdef api_levels_test_suite(name): 193*7594170eSAndroid Build Coastguard Worker tests = { 194*7594170eSAndroid Build Coastguard Worker "api_levels": api_levels_test, 195*7594170eSAndroid Build Coastguard Worker "final_or_future": final_or_future_test, 196*7594170eSAndroid Build Coastguard Worker "is_preview": is_preview_test, 197*7594170eSAndroid Build Coastguard Worker "default_app_target_sdk_string": default_app_target_sdk_string_test, 198*7594170eSAndroid Build Coastguard Worker "effective_version_string": effective_version_string_test, 199*7594170eSAndroid Build Coastguard Worker } 200*7594170eSAndroid Build Coastguard Worker 201*7594170eSAndroid Build Coastguard Worker for test_name, test_function in tests.items(): 202*7594170eSAndroid Build Coastguard Worker test_function(name = name + "_" + test_name) 203*7594170eSAndroid Build Coastguard Worker 204*7594170eSAndroid Build Coastguard Worker native.test_suite( 205*7594170eSAndroid Build Coastguard Worker name = name, 206*7594170eSAndroid Build Coastguard Worker tests = [name + "_" + test_name for test_name in tests.keys()], 207*7594170eSAndroid Build Coastguard Worker ) 208