| 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", |
| ) |