168 lines
4.9 KiB
Python
168 lines
4.9 KiB
Python
|
# 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",
|
||
|
],
|
||
|
)
|