# Copyright 2023 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Analysis tests for common_settings.bzl.""" load("//lib:unittest.bzl", "analysistest", "asserts") load("//rules:common_settings.bzl", "int_flag", "int_setting", "string_flag", "string_setting") def _template_variable_info_contents_test_impl(ctx): env = analysistest.begin(ctx) target_under_test = analysistest.target_under_test(env) if ctx.attr.expected: asserts.equals( env, expected = ctx.attr.expected, actual = target_under_test[platform_common.TemplateVariableInfo].variables, ) else: asserts.false(env, platform_common.TemplateVariableInfo in target_under_test) return analysistest.end(env) _template_variable_info_contents_test = analysistest.make( _template_variable_info_contents_test_impl, attrs = { "expected": attr.string_dict(), }, ) def _test_template_variable_info_contents(): int_flag( name = "my_int_flag", build_setting_default = 42, make_variable = "MY_INT_1", ) _template_variable_info_contents_test( name = "my_int_flag_test", target_under_test = ":my_int_flag", expected = { "MY_INT_1": "42", }, ) int_setting( name = "my_int_setting", build_setting_default = 21, make_variable = "MY_INT_2", ) _template_variable_info_contents_test( name = "my_int_setting_test", target_under_test = ":my_int_setting", expected = { "MY_INT_2": "21", }, ) string_flag( name = "my_string_flag", build_setting_default = "foo", make_variable = "MY_STRING_1", ) _template_variable_info_contents_test( name = "my_string_flag_test", target_under_test = ":my_string_flag", expected = { "MY_STRING_1": "foo", }, ) string_setting( name = "my_string_setting", build_setting_default = "bar", make_variable = "MY_STRING_2", ) _template_variable_info_contents_test( name = "my_string_setting_test", target_under_test = ":my_string_setting", expected = { "MY_STRING_2": "bar", }, ) string_flag( name = "my_string_flag_without_make_variable", build_setting_default = "foo", ) _template_variable_info_contents_test( name = "my_string_flag_without_make_variable_test", target_under_test = ":my_string_flag_without_make_variable", expected = {}, ) def _failure_test_impl(ctx): env = analysistest.begin(ctx) asserts.expect_failure(env, ctx.attr.expected_failure) return analysistest.end(env) _failure_test = analysistest.make( _failure_test_impl, attrs = { "expected_failure": attr.string(), }, expect_failure = True, ) def _test_make_variable_name_failures(): int_flag( name = "my_failing_int_flag", build_setting_default = 42, make_variable = "my_int_1", tags = ["manual"], ) _failure_test( name = "my_failing_int_flag_test", target_under_test = ":my_failing_int_flag", expected_failure = "Error setting //tests:my_failing_int_flag: invalid make variable name 'my_int_1'. Make variable names may only contain uppercase letters, digits, and underscores.", ) string_flag( name = "my_failing_string_flag", build_setting_default = "foo", make_variable = "MY STRING", tags = ["manual"], ) _failure_test( name = "my_failing_string_flag_test", target_under_test = ":my_failing_string_flag", expected_failure = "Error setting //tests:my_failing_string_flag: invalid make variable name 'MY STRING'. Make variable names may only contain uppercase letters, digits, and underscores.", ) def common_settings_test_suite(name = "common_settings_test_suite"): _test_template_variable_info_contents() _test_make_variable_name_failures() native.test_suite( name = "common_settings_test_suite", tests = [ "my_int_flag_test", "my_int_setting_test", "my_string_flag_test", "my_string_setting_test", "my_string_flag_without_make_variable_test", "my_failing_int_flag_test", "my_failing_string_flag_test", ], )