| load("//lib:jq.bzl", "jq") |
| load("//lib:testing.bzl", "assert_contains") |
| load("//lib/tests/jq:diff_test.bzl", "diff_test") |
| |
| exports_files([ |
| "a_pretty.json", |
| "a.json", |
| "b.json", |
| ]) |
| |
| # Identity filter produces identical json |
| jq( |
| name = "case_dot_filter", |
| srcs = ["a.json"], |
| filter = ".", |
| ) |
| |
| diff_test( |
| name = "case_dot_filter_test", |
| file1 = "a_pretty.json", |
| file2 = ":case_dot_filter", |
| ) |
| |
| # Merge filter with slurp merges two jsons |
| jq( |
| name = "case_merge_filter", |
| srcs = [ |
| "a.json", |
| "b.json", |
| ], |
| args = ["--slurp"], |
| filter = ".[0] * .[1]", |
| ) |
| |
| diff_test( |
| name = "case_merge_filter_test", |
| file1 = "a_b_merged.json", |
| file2 = ":case_merge_filter", |
| ) |
| |
| # Use predeclared output |
| jq( |
| name = "case_predeclared_output", |
| srcs = ["a.json"], |
| out = "foo.json", |
| filter = ".", |
| ) |
| |
| diff_test( |
| name = "case_predeclared_output_test", |
| file1 = "a_pretty.json", |
| file2 = "foo.json", |
| ) |
| |
| # No sources produces null (equivalent to --null-input) |
| jq( |
| name = "case_no_sources", |
| srcs = [], |
| filter = ".", |
| ) |
| |
| diff_test( |
| name = "case_no_sources_test", |
| file1 = ":case_no_sources", |
| file2 = "null.json", |
| ) |
| |
| # Sources with --null-input flag produces null |
| jq( |
| name = "case_null_input_flag", |
| srcs = ["a.json"], |
| args = ["--null-input"], |
| filter = ".", |
| ) |
| |
| diff_test( |
| name = "case_null_input_flag_test", |
| file1 = ":case_null_input_flag", |
| file2 = "null.json", |
| ) |
| |
| # Load filter from file |
| jq( |
| name = "case_filter_file", |
| srcs = [ |
| "a.json", |
| "b.json", |
| ], |
| args = ["--slurp"], |
| filter_file = "merge_filter.txt", |
| ) |
| |
| diff_test( |
| name = "case_filter_file_test", |
| file1 = "a_b_merged.json", |
| file2 = ":case_filter_file", |
| ) |
| |
| # Filter that uses a stamp variable |
| [ |
| jq( |
| name = ("" if stamp else "un") + "stamped", |
| srcs = ["a.json"], |
| filter = "|".join([ |
| # Don't directly reference $STAMP as it's only set when stamping |
| "$ARGS.named.STAMP as $stamp", |
| # Provide a default using the "alternative operator" |
| ".foo = ($stamp[0].BUILD_EMBED_LABEL // \"<unstamped>\")", |
| ".value = ($stamp[0].BUILD_TIMESTAMP // 1 | tonumber)", |
| ]), |
| stamp = stamp, |
| ) |
| for stamp in [ |
| 0, |
| 1, |
| ] |
| ] |
| |
| assert_contains( |
| name = "check_stamped", |
| actual = "stamped.json", |
| # v1.2.3 comes from the --embed_label flag in .bazelrc |
| expected = """foo": "v1.2.3""", |
| ) |
| |
| assert_contains( |
| name = "check_unstamped", |
| actual = "unstamped.json", |
| expected = """foo": "<unstamped>""", |
| ) |
| |
| # Call jq within a genrule |
| genrule( |
| name = "case_genrule", |
| srcs = ["a.json"], |
| outs = ["genrule_output.json"], |
| cmd = "$(JQ_BIN) '.' $(location a.json) > $@", |
| toolchains = ["@jq_toolchains//:resolved_toolchain"], |
| ) |
| |
| diff_test( |
| name = "case_genrule_test", |
| file1 = "genrule_output.json", |
| file2 = "a_pretty.json", |
| ) |
| |
| # Raw input (--raw-input / -R) |
| jq( |
| name = "case_raw_input", |
| srcs = ["raw.txt"], |
| args = [ |
| "--raw-input", |
| "--slurp", |
| ], |
| filter = "split(\"\\n\")", |
| ) |
| |
| diff_test( |
| name = "case_raw_input_test", |
| file1 = ":case_raw_input", |
| file2 = "raw_expected.json", |
| ) |
| |
| # Similar to copy_to_bin, this will create a file a.json in the output folder. |
| # That's the same path as an input file, but that's okay as long as the jq |
| # rule doesn't pre-declare that output. |
| jq( |
| name = "a", |
| srcs = ["a.json"], |
| filter = """ .foo = "baz" """, |
| ) |