diff --git a/cmd/jsonnetfmt.cpp b/cmd/jsonnetfmt.cpp index 54932bf15..8b7c90322 100644 --- a/cmd/jsonnetfmt.cpp +++ b/cmd/jsonnetfmt.cpp @@ -231,6 +231,7 @@ int main(int argc, const char **argv) std::string output_file = config.outputFile; if (config.fmtInPlace || config.fmtTest) { + bool changed_files = false; assert(config.inputFiles.size() >= 1); for (std::string &inputFile : config.inputFiles) { if (config.fmtInPlace) { @@ -269,8 +270,10 @@ int main(int argc, const char **argv) bool ok = output == input; jsonnet_realloc(vm, output, 0); if (!ok) { - jsonnet_destroy(vm); - return 2; + if (inputFile != "-" && !config.filenameIsCode) { + std::cout << inputFile << std::endl; + } + changed_files = true; } } else { // Write output Jsonnet only if there is a difference between input and output @@ -282,11 +285,19 @@ int main(int argc, const char **argv) jsonnet_destroy(vm); return EXIT_FAILURE; } + if (inputFile != "-" && !config.filenameIsCode) { + std::cout << inputFile << std::endl; + } } else { jsonnet_realloc(vm, output, 0); } } } + + if (config.fmtTest && changed_files) { + jsonnet_destroy(vm); + return 2; + } } else { assert(config.inputFiles.size() == 1); // Read input file. diff --git a/test_cmd/fmt_inplace.golden.stdout b/test_cmd/fmt_inplace.golden.stdout new file mode 100644 index 000000000..89c5bad61 --- /dev/null +++ b/test_cmd/fmt_inplace.golden.stdout @@ -0,0 +1 @@ +out/fmt_inplace/test_badfmt.jsonnet diff --git a/test_cmd/fmt_simple_test1.golden.stdout b/test_cmd/fmt_simple_test1.golden.stdout new file mode 100644 index 000000000..e69de29bb diff --git a/test_cmd/fmt_simple_test2.golden.stdout b/test_cmd/fmt_simple_test2.golden.stdout new file mode 100644 index 000000000..e69de29bb diff --git a/test_cmd/fmt_simple_test3.golden.stdout b/test_cmd/fmt_simple_test3.golden.stdout new file mode 100644 index 000000000..e69de29bb diff --git a/test_cmd/fmt_simple_test4.golden.stdout b/test_cmd/fmt_simple_test4.golden.stdout new file mode 100644 index 000000000..f77a0b6cb --- /dev/null +++ b/test_cmd/fmt_simple_test4.golden.stdout @@ -0,0 +1 @@ +test_badfmt.jsonnet diff --git a/test_cmd/run_cmd_tests.sh b/test_cmd/run_cmd_tests.sh index 5d6350754..d8c72e492 100755 --- a/test_cmd/run_cmd_tests.sh +++ b/test_cmd/run_cmd_tests.sh @@ -27,6 +27,8 @@ source "${DIR}/cmd_tests.source" OUT_DIR=$(mktemp -d) trap "rm -rf -- ${OUT_DIR}" EXIT INT TERM +>&2 echo "output dir: ${OUT_DIR}" + pushd "${DIR}" [[ -d "${OUT_DIR}" ]] || { @@ -174,17 +176,25 @@ if do_fmt_test "fmt_out" 0 -e "{ a: 1, b: 2, c: 3 }" -o "${OUT_DIR}/fmt_out/cust fi do_fmt_test "fmt_double_dash" 0 -e -- -1 -if mkdir -p "${OUT_DIR}/fmt_inplace" && cp "test.jsonnet" "${OUT_DIR}/fmt_inplace/test.jsonnet"; then +do_fmt_test "fmt_simple_test1" 0 --test "test.jsonnet" +do_fmt_test "fmt_simple_test2" 2 --test -e "{a:1,b:2,c:3}" +do_fmt_test "fmt_simple_test3" 0 --test -e $'42\n' +do_fmt_test "fmt_simple_test4" 2 --test "test.jsonnet" "test_badfmt.jsonnet" + +SED_STDOUT="${SED_REPLACE_OUT_DIR}" +if mkdir -p "${OUT_DIR}/fmt_inplace" && cp "test.jsonnet" "test_badfmt.jsonnet" "${OUT_DIR}/fmt_inplace/"; then # Test jsonnetfmt in-place modifications - do_fmt_test "fmt_inplace" 0 -i "${OUT_DIR}/fmt_inplace/test.jsonnet" check_file "fmt_inplace" "${OUT_DIR}/fmt_inplace/test.jsonnet" "fmt_simple_out.golden.custom_output" # Verify that running jsonnetfmt on an already formatted file does not change timesetamps touch -m -t 199108252057.08 "${OUT_DIR}/fmt_inplace/test.jsonnet" + touch -m -t 199108252057.08 "${OUT_DIR}/fmt_inplace/test_badfmt.jsonnet" stat -c '%y' "${OUT_DIR}/fmt_inplace/test.jsonnet" > "${OUT_DIR}/fmt_inplace/stat_mod_time_before.txt" - do_fmt_test "fmt_inplace" 0 -i "${OUT_DIR}/fmt_inplace/test.jsonnet" + do_fmt_test "fmt_inplace" 0 -i \ + "${OUT_DIR}/fmt_inplace/test.jsonnet" "${OUT_DIR}/fmt_inplace/test_badfmt.jsonnet" stat -c '%y' "${OUT_DIR}/fmt_inplace/test.jsonnet" > "${OUT_DIR}/fmt_inplace/stat_mod_time_after.txt" check_file "fmt_inplace" "${OUT_DIR}/fmt_inplace/stat_mod_time_before.txt" "${OUT_DIR}/fmt_inplace/stat_mod_time_after.txt" fi +unset -v SED_STDOUT fi diff --git a/test_cmd/test_badfmt.jsonnet b/test_cmd/test_badfmt.jsonnet new file mode 100644 index 000000000..8569c4df1 --- /dev/null +++ b/test_cmd/test_badfmt.jsonnet @@ -0,0 +1,3 @@ +{a:1, b: + +2,['c']:3}