aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Panteleev <notmuch@thecybershadow.net>2017-08-16 16:31:27 +0000
committerDavid Bremner <david@tethera.net>2017-08-23 08:07:45 -0300
commit8c772eaa0dfe227d998e5d5f7b97bd514f3eae3c (patch)
tree415f88d3dff51356e74e5d21144717cb7f7f889f
parenteb232ee0aba8f031fe4f0cb509682a321d85e06e (diff)
test: Use small Python script for JSON normalization instead of json.tool
json.tool does not sort or otherwise normalize the order of JSON keys in its output, which can result in test failures on some test systems. Instead, use a one-line Python script passed to the interpreter directly on its command line. Use sort_keys=True for json.dump to ensure the key order is normalized. The script works with both Python 2 and 3. * test/test-lib.sh: Update test_expect_equal_json.
-rw-r--r--test/test-lib.sh5
1 files changed, 3 insertions, 2 deletions
diff --git a/test/test-lib.sh b/test/test-lib.sh
index c505e764..d2b2a47f 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -450,9 +450,10 @@ test_expect_equal_json () {
# The test suite forces LC_ALL=C, but this causes Python 3 to
# decode stdin as ASCII. We need to read JSON in UTF-8, so
# override Python's stdio encoding defaults.
- output=$(echo "$1" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -mjson.tool \
+ local script='import json, sys; json.dump(json.load(sys.stdin), sys.stdout, sort_keys=True, indent=4)'
+ output=$(echo "$1" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -c "$script" \
|| echo "$1")
- expected=$(echo "$2" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -mjson.tool \
+ expected=$(echo "$2" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -c "$script" \
|| echo "$2")
shift 2
test_expect_equal "$output" "$expected" "$@"