1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 16*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:linker_config.bzl", "linker_config") 17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:prebuilt_file.bzl", "PrebuiltFileInfo") 18*7594170eSAndroid Build Coastguard Worker 19*7594170eSAndroid Build Coastguard WorkerSRC = "foo.json" 20*7594170eSAndroid Build Coastguard WorkerOUT_EXP = "foo.pb" 21*7594170eSAndroid Build Coastguard Worker 22*7594170eSAndroid Build Coastguard Workerdef _test_linker_config_actions_impl(ctx): 23*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 24*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 25*7594170eSAndroid Build Coastguard Worker asserts.equals(env, 1, len(actions), "expected 1 action got {}".format(actions)) 26*7594170eSAndroid Build Coastguard Worker 27*7594170eSAndroid Build Coastguard Worker in_file = actions[0].inputs.to_list()[0] 28*7594170eSAndroid Build Coastguard Worker out_files = actions[0].outputs.to_list() 29*7594170eSAndroid Build Coastguard Worker asserts.equals(env, 1, len(out_files), "expected 1 out file got {}".format(out_files)) 30*7594170eSAndroid Build Coastguard Worker 31*7594170eSAndroid Build Coastguard Worker asserts.equals( 32*7594170eSAndroid Build Coastguard Worker env, 33*7594170eSAndroid Build Coastguard Worker SRC, 34*7594170eSAndroid Build Coastguard Worker in_file.basename, 35*7594170eSAndroid Build Coastguard Worker "expected source file {} got {}".format(SRC, in_file.basename), 36*7594170eSAndroid Build Coastguard Worker ) 37*7594170eSAndroid Build Coastguard Worker asserts.equals( 38*7594170eSAndroid Build Coastguard Worker env, 39*7594170eSAndroid Build Coastguard Worker OUT_EXP, 40*7594170eSAndroid Build Coastguard Worker out_files[0].basename, 41*7594170eSAndroid Build Coastguard Worker "expected out file {} got {}".format(OUT_EXP, out_files[0].basename), 42*7594170eSAndroid Build Coastguard Worker ) 43*7594170eSAndroid Build Coastguard Worker 44*7594170eSAndroid Build Coastguard Worker # gets build target we are testing for 45*7594170eSAndroid Build Coastguard Worker target_under_test = analysistest.target_under_test(env) 46*7594170eSAndroid Build Coastguard Worker prebuilt_file_info = target_under_test[PrebuiltFileInfo] 47*7594170eSAndroid Build Coastguard Worker asserts.equals( 48*7594170eSAndroid Build Coastguard Worker env, 49*7594170eSAndroid Build Coastguard Worker "linker.config.pb", 50*7594170eSAndroid Build Coastguard Worker prebuilt_file_info.filename, 51*7594170eSAndroid Build Coastguard Worker "expected PrebuiltFileInfo filename to be {} but got {}".format("linkerconfig.pb", prebuilt_file_info.filename), 52*7594170eSAndroid Build Coastguard Worker ) 53*7594170eSAndroid Build Coastguard Worker asserts.equals( 54*7594170eSAndroid Build Coastguard Worker env, 55*7594170eSAndroid Build Coastguard Worker "etc", 56*7594170eSAndroid Build Coastguard Worker prebuilt_file_info.dir, 57*7594170eSAndroid Build Coastguard Worker "expected PrebuiltFileInfo dir to be {} but got {}".format("etc", prebuilt_file_info.dir), 58*7594170eSAndroid Build Coastguard Worker ) 59*7594170eSAndroid Build Coastguard Worker asserts.equals( 60*7594170eSAndroid Build Coastguard Worker env, 61*7594170eSAndroid Build Coastguard Worker out_files[0], 62*7594170eSAndroid Build Coastguard Worker prebuilt_file_info.src, 63*7594170eSAndroid Build Coastguard Worker "expected PrebuiltFileInfo src to be {} but got {}".format(out_files[0], prebuilt_file_info.src), 64*7594170eSAndroid Build Coastguard Worker ) 65*7594170eSAndroid Build Coastguard Worker 66*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 67*7594170eSAndroid Build Coastguard Worker 68*7594170eSAndroid Build Coastguard Workerlinker_config_actions_test = analysistest.make(_test_linker_config_actions_impl) 69*7594170eSAndroid Build Coastguard Worker 70*7594170eSAndroid Build Coastguard Workerdef _test_linker_config_actions(): 71*7594170eSAndroid Build Coastguard Worker name = "linker_config_actions" 72*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 73*7594170eSAndroid Build Coastguard Worker 74*7594170eSAndroid Build Coastguard Worker linker_config( 75*7594170eSAndroid Build Coastguard Worker name = name, 76*7594170eSAndroid Build Coastguard Worker src = SRC, 77*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 78*7594170eSAndroid Build Coastguard Worker ) 79*7594170eSAndroid Build Coastguard Worker 80*7594170eSAndroid Build Coastguard Worker linker_config_actions_test( 81*7594170eSAndroid Build Coastguard Worker name = test_name, 82*7594170eSAndroid Build Coastguard Worker target_under_test = name, 83*7594170eSAndroid Build Coastguard Worker ) 84*7594170eSAndroid Build Coastguard Worker return test_name 85*7594170eSAndroid Build Coastguard Worker 86*7594170eSAndroid Build Coastguard Workerdef _test_linker_config_commands_impl(ctx): 87*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 88*7594170eSAndroid Build Coastguard Worker actions = analysistest.target_actions(env) 89*7594170eSAndroid Build Coastguard Worker 90*7594170eSAndroid Build Coastguard Worker in_files = actions[0].inputs.to_list() 91*7594170eSAndroid Build Coastguard Worker asserts.true(env, len(in_files) > 0, "expected at least 1 input file got {}".format(in_files)) 92*7594170eSAndroid Build Coastguard Worker 93*7594170eSAndroid Build Coastguard Worker args = actions[0].argv 94*7594170eSAndroid Build Coastguard Worker asserts.equals(env, 6, len(args), "expected 4 args got {}".format(args)) 95*7594170eSAndroid Build Coastguard Worker asserts.equals(env, "proto", args[1]) 96*7594170eSAndroid Build Coastguard Worker asserts.equals(env, "-s", args[2]) 97*7594170eSAndroid Build Coastguard Worker asserts.equals(env, "-o", args[4]) 98*7594170eSAndroid Build Coastguard Worker 99*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 100*7594170eSAndroid Build Coastguard Worker 101*7594170eSAndroid Build Coastguard Workerlinker_config_commands_test = analysistest.make(_test_linker_config_commands_impl) 102*7594170eSAndroid Build Coastguard Worker 103*7594170eSAndroid Build Coastguard Workerdef _test_linker_config_commands(): 104*7594170eSAndroid Build Coastguard Worker name = "linker_config_commands" 105*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 106*7594170eSAndroid Build Coastguard Worker linker_config( 107*7594170eSAndroid Build Coastguard Worker name = name, 108*7594170eSAndroid Build Coastguard Worker src = SRC, 109*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 110*7594170eSAndroid Build Coastguard Worker ) 111*7594170eSAndroid Build Coastguard Worker 112*7594170eSAndroid Build Coastguard Worker linker_config_commands_test( 113*7594170eSAndroid Build Coastguard Worker name = test_name, 114*7594170eSAndroid Build Coastguard Worker target_under_test = name, 115*7594170eSAndroid Build Coastguard Worker ) 116*7594170eSAndroid Build Coastguard Worker 117*7594170eSAndroid Build Coastguard Worker return test_name 118*7594170eSAndroid Build Coastguard Worker 119*7594170eSAndroid Build Coastguard Workerdef linker_config_test_suite(name): 120*7594170eSAndroid Build Coastguard Worker native.test_suite( 121*7594170eSAndroid Build Coastguard Worker name = name, 122*7594170eSAndroid Build Coastguard Worker tests = [ 123*7594170eSAndroid Build Coastguard Worker _test_linker_config_actions(), 124*7594170eSAndroid Build Coastguard Worker _test_linker_config_commands(), 125*7594170eSAndroid Build Coastguard Worker ], 126*7594170eSAndroid Build Coastguard Worker ) 127