adding unit tests for platform_data
diff --git a/platform_data/defs.bzl b/platform_data/defs.bzl index ce8a648..0d38f86 100644 --- a/platform_data/defs.bzl +++ b/platform_data/defs.bzl
@@ -54,7 +54,7 @@ def _platform_data_impl(ctx): target = ctx.attr.target - default_info = target[DefaultInfo] + default_info = target[0][DefaultInfo] files = default_info.files original_executable = default_info.files_to_run.executable runfiles = default_info.default_runfiles
diff --git a/platform_data/test/BUILD b/platform_data/test/BUILD new file mode 100644 index 0000000..99a8a28 --- /dev/null +++ b/platform_data/test/BUILD
@@ -0,0 +1,25 @@ +load("//third_party/bazel_platforms/experimental/platform_data:defs.bzl", "platform_data") +load(":analysis_tests.bzl", "platform_data_test", "write_target_platform_rule_test") + +platform_data_test( + name = "platform_data_test", + expected_platform = "//third_party/bazel_platforms/experimental/platform_data/test:test_platform", + target_under_test = ":foo_embedded", +) + +write_target_platform_rule_test( + name = "foo", +) + +platform_data( + name = "foo_embedded", + testonly = True, + platform = ":test_platform", + target = ":foo", +) + +platform( + name = "test_platform", + constraint_values = [ + ], +)
diff --git a/platform_data/test/analysis_tests.bzl b/platform_data/test/analysis_tests.bzl new file mode 100644 index 0000000..09bc408 --- /dev/null +++ b/platform_data/test/analysis_tests.bzl
@@ -0,0 +1,72 @@ +"""TODO(aranguyen): Write module docstring.""" + +load("@bazel_skylib/lib:unittest.bzl", "analysistest", "asserts") + +TransitivePlatformInfo = provider( + "Contains information about transitive target platform info", + fields = ["platforms"], +) + +TestPlatformInfo = provider( + "Contains information about target platform", + fields = ["platforms"], +) + +def _transitive_aspect_impl(target, aspect_ctx): + transitive_target_platforms = [] + for dep in getattr(aspect_ctx.rule.attr, "target", []): + if TestPlatformInfo in dep: + transitive_target_platforms.append(dep[TestPlatformInfo].platforms) + + return [TransitivePlatformInfo(platforms = transitive_target_platforms)] + +_transitive_aspect = aspect( + attr_aspects = ["target"], + implementation = _transitive_aspect_impl, +) + +def _platform_data_test_impl(ctx): + env = analysistest.begin(ctx) + target_under_test = analysistest.target_under_test(env) + transitive_target_platforms = target_under_test[TransitivePlatformInfo] + + print("transitive_target_platforms: " + str(transitive_target_platforms)) + asserts.equals( + env, + ctx.attr.expected_platform, + str(transitive_target_platforms.platforms[0]), + "Target platform does not match the expected value", + ) + return analysistest.end(env) + +platform_data_test = analysistest.make( + _platform_data_test_impl, + attrs = { + "expected_platform": attr.string(), + }, + extra_target_under_test_aspects = [_transitive_aspect], +) + +def print_target_platform(target_platform): + return """ + echo Target platform for target under test is {target_platform} + """ + +def _write_target_platform_impl(ctx): + script = print_target_platform(str(ctx.fragments.platform.platform)) + executable = ctx.actions.declare_file(ctx.label.name) + + ctx.actions.write( + output = executable, + content = script, + is_executable = True, + ) + return [ + DefaultInfo(executable = executable), + TestPlatformInfo(platforms = ctx.fragments.platform.platform), + ] + +write_target_platform_rule_test = rule( + implementation = _write_target_platform_impl, + test = True, +)