| load("//rules:copy_file.bzl", "copy_file") | |
| load("//rules:native_binary.bzl", "native_binary", "native_test") | |
| load("@rules_cc//cc:defs.bzl", "cc_binary") | |
| package( | |
| default_testonly = 1, | |
| default_visibility = ["//visibility:private"], | |
| ) | |
| cc_binary( | |
| name = "assertarg", | |
| srcs = ["assertarg.cc"], | |
| ) | |
| cc_binary( | |
| name = "assertdata", | |
| srcs = ["assertdata.cc"], | |
| deps = ["@bazel_tools//tools/cpp/runfiles"], | |
| # Depends on the runfiles library but doesn't have data-dependencies, on | |
| # purpose. We supplement the runfiles in the native_binary / native_test | |
| # rule. | |
| ) | |
| cc_binary( | |
| name = "assertdata_with_runfiles", | |
| srcs = ["assertdata.cc"], | |
| # This version depends on runfiles directly, to ensure runfiles from the | |
| # binary are picked up by native_test/native_binary | |
| data = ["testdata.txt"], | |
| deps = ["@bazel_tools//tools/cpp/runfiles"], | |
| ) | |
| # A rule that copies "assertarg"'s output as an opaque executable, simulating a | |
| # binary that's not built from source and needs to be wrapped in native_binary. | |
| copy_file( | |
| name = "copy_assertarg_exe", | |
| src = ":assertarg", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "assertarg_copy.exe", | |
| is_executable = True, | |
| ) | |
| # A rule that copies "assertdata"'s output as an opaque executable, simulating a | |
| # binary that's not built from source and needs to be wrapped in native_binary. | |
| copy_file( | |
| name = "copy_assertdata_exe", | |
| src = ":assertdata", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "assertdata_copy.exe", | |
| is_executable = True, | |
| ) | |
| _ARGS = [ | |
| "'a b'", | |
| "c\\ d", | |
| "$(location testdata.txt) $$(location testdata.txt) $(location testdata.txt)", | |
| "'$(location testdata.txt) $$(location testdata.txt) $(location testdata.txt)'", | |
| "$$TEST_SRCDIR", | |
| "$${TEST_SRCDIR}", | |
| ] | |
| native_binary( | |
| name = "args_bin", | |
| src = ":copy_assertarg_exe", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "args_bin.exe", | |
| args = _ARGS, | |
| # We only need the data-dependency for $(location) expansion. | |
| data = ["testdata.txt"], | |
| ) | |
| native_test( | |
| name = "args_test", | |
| src = ":copy_assertarg_exe", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "args_test.exe", | |
| args = _ARGS, | |
| # We only need the data-dependency for $(location) expansion. | |
| data = ["testdata.txt"], | |
| ) | |
| native_binary( | |
| name = "data_bin", | |
| src = ":copy_assertdata_exe", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "data_bin.exe", | |
| data = ["testdata.txt"], | |
| ) | |
| native_test( | |
| name = "data_test", | |
| src = ":copy_assertdata_exe", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "data_test.exe", | |
| data = ["testdata.txt"], | |
| ) | |
| native_test( | |
| name = "data_from_binary_test", | |
| src = ":assertdata_with_runfiles", | |
| # On Windows we need the ".exe" extension. | |
| # On other platforms the extension doesn't matter. | |
| # Therefore we can use ".exe" on every platform. | |
| out = "data_from_binary_test.exe", | |
| ) |