diff options
Diffstat (limited to 'tests/analysis/internal_do_not_use/util')
4 files changed, 179 insertions, 0 deletions
diff --git a/tests/analysis/internal_do_not_use/util/file_factory/BUILD b/tests/analysis/internal_do_not_use/util/file_factory/BUILD new file mode 100644 index 0000000..d92e379 --- /dev/null +++ b/tests/analysis/internal_do_not_use/util/file_factory/BUILD @@ -0,0 +1,41 @@ +# Copyright 2022 Google LLC. 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. + +load(":happy_test.bzl", "file_factory_happy_test") +load(":check_base_file_valid.bzl", "check_base_file_valid") +load("//tests/analysis:assert_failure_test.bzl", "assert_failure_test") + +licenses(["notice"]) + +file_factory_happy_test( + name = "happy_test", +) + +assert_failure_test( + name = "base_without_extension_test", + msg_contains = "file must have an extension", + target_under_test = check_base_file_valid( + name = "base_without_extension", + base_file = "BUILD", + ), +) + +assert_failure_test( + name = "base_from_other_package_test", + msg_contains = "file must be from ctx package", + target_under_test = check_base_file_valid( + name = "base_from_other_package", + base_file = "//tests/analysis/internal_do_not_use/util/file_factory/sub", + ), +) diff --git a/tests/analysis/internal_do_not_use/util/file_factory/check_base_file_valid.bzl b/tests/analysis/internal_do_not_use/util/file_factory/check_base_file_valid.bzl new file mode 100644 index 0000000..9ca1f05 --- /dev/null +++ b/tests/analysis/internal_do_not_use/util/file_factory/check_base_file_valid.bzl @@ -0,0 +1,38 @@ +# Copyright 2022 Google LLC. 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. + +"""Happy tests for FileFactory.""" + +load("//kotlin/jvm/internal_do_not_use/util:file_factory.bzl", "FileFactory") +load("//tests/analysis:util.bzl", "ONLY_FOR_ANALYSIS_TEST_TAGS") +load("//:visibility.bzl", "RULES_KOTLIN") + +def _check_base_file_valid_impl(ctx): + FileFactory(ctx, ctx.file.base_file) + return [] + +_check_base_file_valid = rule( + implementation = _check_base_file_valid_impl, + attrs = dict( + base_file = attr.label(allow_single_file = True, mandatory = True), + ), +) + +def check_base_file_valid(name, tags = [], **kwargs): + _check_base_file_valid( + name = name, + tags = tags + ONLY_FOR_ANALYSIS_TEST_TAGS, + **kwargs + ) + return name diff --git a/tests/analysis/internal_do_not_use/util/file_factory/happy_test.bzl b/tests/analysis/internal_do_not_use/util/file_factory/happy_test.bzl new file mode 100644 index 0000000..1a2a655 --- /dev/null +++ b/tests/analysis/internal_do_not_use/util/file_factory/happy_test.bzl @@ -0,0 +1,78 @@ +# Copyright 2022 Google LLC. 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. + +"""file_factory_happy_test""" + +load("//kotlin/jvm/internal_do_not_use/util:file_factory.bzl", "FileFactory") +load("//:visibility.bzl", "RULES_KOTLIN") + +def _test_base_from_file(ctx, pkg_path): + base_file = ctx.actions.declare_file("file/base.txt") + factory = FileFactory(ctx, base_file) + + _assert_equals(pkg_path + "/file/base", factory.base_as_path) + + return [base_file] + +def _test_declare(ctx, pkg_path): + factory = FileFactory(ctx, "string/base") + + _assert_equals(pkg_path + "/string/base", factory.base_as_path) + + a_file = factory.declare_file("a.txt") + _assert_equals(pkg_path + "/string/basea.txt", a_file.path) + + b_dir = factory.declare_directory("b_dir") + _assert_equals(pkg_path + "/string/baseb_dir", b_dir.path) + + return [a_file, b_dir] + +def _test_derive(ctx, pkg_path): + factory = FileFactory(ctx, "") + + # Once + factory_once = factory.derive("once") + _assert_equals(pkg_path + "/once", factory_once.base_as_path) + + # Twice + factory_twice = factory_once.derive("/twice") + _assert_equals(pkg_path + "/once/twice", factory_twice.base_as_path) + +def _assert_equals(expected, actual): + if expected != actual: + fail("Expected '%s' but was '%s'" % (expected, actual)) + +def _file_factory_happy_test_impl(ctx): + pkg_path = ctx.bin_dir.path + "/" + ctx.label.package + all_files = [] + + all_files.extend(_test_base_from_file(ctx, pkg_path)) + all_files.extend(_test_declare(ctx, pkg_path)) + _test_derive(ctx, pkg_path) + + ctx.actions.run_shell( + outputs = all_files, + command = "exit 1", + ) + + test_script = ctx.actions.declare_file(ctx.label.name + "_test.sh") + ctx.actions.write(test_script, "#!/bin/bash", True) + return [ + DefaultInfo(executable = test_script), + ] + +file_factory_happy_test = rule( + implementation = _file_factory_happy_test_impl, + test = True, +) diff --git a/tests/analysis/internal_do_not_use/util/file_factory/sub/BUILD b/tests/analysis/internal_do_not_use/util/file_factory/sub/BUILD new file mode 100644 index 0000000..db873cf --- /dev/null +++ b/tests/analysis/internal_do_not_use/util/file_factory/sub/BUILD @@ -0,0 +1,22 @@ +# Copyright 2022 Google LLC. 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. + +licenses(["notice"]) + +genrule( + name = "sub", + outs = ["sub.txt"], + cmd = "touch $(OUTS)", + visibility = ["//tests/analysis/internal_do_not_use/util/file_factory:__pkg__"], +) |