168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
| load("//rules:diff_test.bzl", "diff_test")
 | |
| load("//rules:run_binary.bzl", "run_binary")
 | |
| load("//rules:write_file.bzl", "write_file")
 | |
| load("@rules_cc//cc:defs.bzl", "cc_binary")
 | |
| 
 | |
| package(
 | |
|     default_testonly = 1,
 | |
|     default_visibility = ["//visibility:private"],
 | |
| )
 | |
| 
 | |
| diff_test(
 | |
|     name = "run_script_test",
 | |
|     file1 = ":run_script.out",
 | |
|     file2 = ":run_script_expected",
 | |
| )
 | |
| 
 | |
| # Generate this file with write_file instead of checking it in to the source
 | |
| # tree. This ensures line endings are consistent across "run_script.expected"
 | |
| # and "run_script.out".
 | |
| write_file(
 | |
|     name = "run_script_expected",
 | |
|     out = "run_script.expected",
 | |
|     content = [
 | |
|         "arg1=(foo)",
 | |
|         "arg2=(bar)",
 | |
|         "ENV_LOCATION=(a tests/run_binary/BUILD)",
 | |
|         "ENV_LOCATIONS=(b\\ tests/run_binary/BUILD tests/run_binary/printargs.cc)",
 | |
|         "ENV_COMPLEX=(xx/yy \\\"zz)",
 | |
|         "ENV_PATH_BASH=($PATH)",
 | |
|         "ENV_PATH_CMD=(%PATH%)",
 | |
|         # Can't prevent "echo" from adding a newline on Windows, so let's add
 | |
|         # one to the expected output too.
 | |
|         "",
 | |
|     ],
 | |
| )
 | |
| 
 | |
| run_binary(
 | |
|     name = "run_script",
 | |
|     srcs = [
 | |
|         "BUILD",
 | |
|         ":dummy_srcs",
 | |
|     ],
 | |
|     outs = ["run_script.out"],
 | |
|     # Not testing any complex arguments here, because Windows .bat file argument
 | |
|     # escaping is different from most MSVC-built Windows binaries. We test
 | |
|     # argument escaping in "run_bin".
 | |
|     args = [
 | |
|         "foo",
 | |
|         "bar",
 | |
|     ],
 | |
|     # Test complex environment variables. They are location-expanded but not
 | |
|     # Bash-tokenized, and should appear the same for Windows .bat files and Bash
 | |
|     # .sh scripts.
 | |
|     env = {
 | |
|         # Testing $(location) expansion only on source files so the result is
 | |
|         # predictable. The path of generated files depends on the target
 | |
|         # platform.
 | |
|         "ENV_LOCATION": "a $(location BUILD)",
 | |
|         "ENV_LOCATIONS": "b\\ $(locations :dummy_srcs)",
 | |
|         "ENV_COMPLEX": "xx/yy \\\"zz",
 | |
|         "ENV_PATH_BASH": "$PATH",
 | |
|         "ENV_PATH_CMD": "%PATH%",
 | |
|         "OUT": "$(location run_script.out)",
 | |
|     },
 | |
|     tool = ":script",
 | |
| )
 | |
| 
 | |
| write_file(
 | |
|     name = "script",
 | |
|     # On Windows we need the ".bat" extension.
 | |
|     # On other platforms the extension doesn't matter.
 | |
|     # Therefore we can use ".bat" on every platform.
 | |
|     out = "script.bat",
 | |
|     content = select({
 | |
|         "@bazel_tools//src/conditions:host_windows": [
 | |
|             "@echo>%OUT% arg1=(%1)",
 | |
|             "@echo>>%OUT% arg2=(%2)",
 | |
|             "@echo>>%OUT% ENV_LOCATION=(%ENV_LOCATION%)",
 | |
|             "@echo>>%OUT% ENV_LOCATIONS=(%ENV_LOCATIONS%)",
 | |
|             "@echo>>%OUT% ENV_COMPLEX=(%ENV_COMPLEX%)",
 | |
|             "@echo>>%OUT% ENV_PATH_BASH=(%ENV_PATH_BASH%)",
 | |
|             "@echo>>%OUT% ENV_PATH_CMD=(%ENV_PATH_CMD%)",
 | |
|         ],
 | |
|         "//conditions:default": [
 | |
|             "#!/bin/bash",
 | |
|             "echo > \"$OUT\" \"arg1=($1)\"",
 | |
|             "echo >> \"$OUT\" \"arg2=($2)\"",
 | |
|             "echo >> \"$OUT\" \"ENV_LOCATION=($ENV_LOCATION)\"",
 | |
|             "echo >> \"$OUT\" \"ENV_LOCATIONS=($ENV_LOCATIONS)\"",
 | |
|             "echo >> \"$OUT\" \"ENV_COMPLEX=($ENV_COMPLEX)\"",
 | |
|             "echo >> \"$OUT\" \"ENV_PATH_BASH=($ENV_PATH_BASH)\"",
 | |
|             "echo >> \"$OUT\" \"ENV_PATH_CMD=($ENV_PATH_CMD)\"",
 | |
|         ],
 | |
|     }),
 | |
|     is_executable = True,
 | |
| )
 | |
| 
 | |
| diff_test(
 | |
|     name = "run_bin_test",
 | |
|     file1 = ":run_bin.out",
 | |
|     file2 = ":run_bin_expected",
 | |
| )
 | |
| 
 | |
| # Generate this file with write_file instead of checking it in to the source
 | |
| # tree. This ensures line endings are consistent across "run_bin.expected"
 | |
| # and "run_bin.out".
 | |
| write_file(
 | |
|     name = "run_bin_expected",
 | |
|     out = "run_bin.expected",
 | |
|     content = [
 | |
|         "arg1=(a b)",
 | |
|         "arg2=(\"c d\")",
 | |
|         "arg3=(e\\ f)",
 | |
|         "arg4=(xx/yy\\ \\\"zz)",
 | |
|         "arg5=(tests/run_binary/BUILD)",
 | |
|         "arg6=(tests/run_binary/BUILD tests/run_binary/printargs.cc)",
 | |
|         "arg7=('tests/run_binary/BUILD $tests/run_binary/BUILD')",
 | |
|         "arg8=($PATH)",
 | |
|         "arg9=($$PATH)",
 | |
|         "arg10=(${PATH})",
 | |
|         # Add trailing newline, as printed by printargs.
 | |
|         "",
 | |
|     ],
 | |
| )
 | |
| 
 | |
| run_binary(
 | |
|     name = "run_bin",
 | |
|     srcs = [
 | |
|         "BUILD",
 | |
|         ":dummy_srcs",
 | |
|     ],
 | |
|     outs = ["run_bin.out"],
 | |
|     # Test complex arguments here. They are location-expanded but not
 | |
|     # Bash-tokenized, and should appear the same on every platform.
 | |
|     args = [
 | |
|         "a b",
 | |
|         "\"c d\"",
 | |
|         "e\\ f",
 | |
|         "xx/yy\\ \\\"zz",
 | |
|         # Testing $(location) expansion only on source files so the result is
 | |
|         # predictable. The path of generated files depends on the target
 | |
|         # platform.
 | |
|         "$(location BUILD)",
 | |
|         "$(locations :dummy_srcs)",
 | |
|         "'$(location BUILD) $$(location BUILD)'",
 | |
|         "$PATH",
 | |
|         "$$PATH",
 | |
|         "${PATH}",
 | |
|     ],
 | |
|     # Not testing any complex envvars here, because we already did in
 | |
|     # "run_script".
 | |
|     env = {"OUT": "$(location run_bin.out)"},
 | |
|     tool = ":printargs",
 | |
| )
 | |
| 
 | |
| filegroup(
 | |
|     name = "dummy_srcs",
 | |
|     srcs = [
 | |
|         "BUILD",
 | |
|         "printargs.cc",
 | |
|     ],
 | |
| )
 | |
| 
 | |
| cc_binary(
 | |
|     name = "printargs",
 | |
|     srcs = ["printargs.cc"],
 | |
| )
 |