mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-30 14:44:11 +01:00
a34bb1f9fa
Previously, we used a variety of ad-hoc canonicalizations for JSON output in the test suite, but were ultimately very sensitive to JSON irrelevancies such as whitespace. This introduces a new test comparison function, test_expect_equal_json, that first pretty-prints *both* the actual and expected JSON and the compares the result. The current implementation of this simply uses Python's json.tool to perform pretty-printing (with a fallback to the identity function if parsing fails). However, since the interface it introduces is semantically high-level, we could swap in other mechanisms in the future, such as another pretty-printer or something that does not re-order object keys (if we decide that we care about that). In general, this patch does not remove the existing ad-hoc canonicalization because it does no harm. We do have to remove the newline-after-comma rule from notmuch_json_show_sanitize and filter_show_json because it results in invalid JSON that cannot be pretty-printed. Most of this patch simply replaces test_expect_equal and test_expect_equal_file with test_expect_equal_json. It changes the expected JSON in a few places where sanitizers had placed newlines after commas inside strings.
340 lines
10 KiB
Bash
Executable file
340 lines
10 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
test_description='various settings for "notmuch search --output="'
|
|
. ./test-lib.sh
|
|
|
|
add_email_corpus
|
|
|
|
test_begin_subtest "--output=threads"
|
|
notmuch search --output=threads '*' | sed -e s/thread:.*/thread:THREADID/ >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
thread:THREADID
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=threads --format=json"
|
|
notmuch search --format=json --output=threads '*' | sed -e s/\".*\"/\"THREADID\"/ >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
["THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID",
|
|
"THREADID"]
|
|
EOF
|
|
test_expect_equal_json "$(cat OUTPUT)" "$(cat EXPECTED)"
|
|
|
|
test_begin_subtest "--output=messages"
|
|
notmuch search --output=messages '*' >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
id:4EFC743A.3060609@april.org
|
|
id:877h1wv7mg.fsf@inf-8657.int-evry.fr
|
|
id:1258544095-16616-1-git-send-email-chris@chris-wilson.co.uk
|
|
id:877htoqdbo.fsf@yoom.home.cworth.org
|
|
id:878we4qdqf.fsf@yoom.home.cworth.org
|
|
id:87aaykqe24.fsf@yoom.home.cworth.org
|
|
id:87bpj0qeng.fsf@yoom.home.cworth.org
|
|
id:87fx8cqf8v.fsf@yoom.home.cworth.org
|
|
id:87hbssqfix.fsf@yoom.home.cworth.org
|
|
id:87iqd8qgiz.fsf@yoom.home.cworth.org
|
|
id:87k4xoqgnl.fsf@yoom.home.cworth.org
|
|
id:87ocn0qh6d.fsf@yoom.home.cworth.org
|
|
id:87pr7gqidx.fsf@yoom.home.cworth.org
|
|
id:867hto2p0t.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me
|
|
id:1258532999-9316-1-git-send-email-keithp@keithp.com
|
|
id:86aayk2rbj.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me
|
|
id:86d43g2w3y.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me
|
|
id:ddd65cda0911172214t60d22b63hcfeb5a19ab54a39b@mail.gmail.com
|
|
id:86einw2xof.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me
|
|
id:736613.51770.qm@web113505.mail.gq1.yahoo.com
|
|
id:1258520223-15328-1-git-send-email-jan@ryngle.com
|
|
id:ddd65cda0911171950o4eea4389v86de9525e46052d3@mail.gmail.com
|
|
id:1258510940-7018-1-git-send-email-stewart@flamingspork.com
|
|
id:yunzl6kd1w0.fsf@aiko.keithp.com
|
|
id:yun1vjwegii.fsf@aiko.keithp.com
|
|
id:yun3a4cegoa.fsf@aiko.keithp.com
|
|
id:1258509400-32511-1-git-send-email-stewart@flamingspork.com
|
|
id:1258506353-20352-1-git-send-email-stewart@flamingspork.com
|
|
id:20091118010116.GC25380@dottiness.seas.harvard.edu
|
|
id:20091118005829.GB25380@dottiness.seas.harvard.edu
|
|
id:20091118005040.GA25380@dottiness.seas.harvard.edu
|
|
id:cf0c4d610911171623q3e27a0adx802e47039b57604b@mail.gmail.com
|
|
id:1258500222-32066-1-git-send-email-ingmar@exherbo.org
|
|
id:20091117232137.GA7669@griffis1.net
|
|
id:20091118002059.067214ed@hikari
|
|
id:1258498485-sup-142@elly
|
|
id:f35dbb950911171438k5df6eb56k77b6c0944e2e79ae@mail.gmail.com
|
|
id:f35dbb950911171435ieecd458o853c873e35f4be95@mail.gmail.com
|
|
id:1258496327-12086-1-git-send-email-jan@ryngle.com
|
|
id:1258493565-13508-1-git-send-email-keithp@keithp.com
|
|
id:yunaayketfm.fsf@aiko.keithp.com
|
|
id:yunbpj0etua.fsf@aiko.keithp.com
|
|
id:1258491078-29658-1-git-send-email-dottedmag@dottedmag.net
|
|
id:87fx8can9z.fsf@vertex.dottedmag
|
|
id:20091117203301.GV3165@dottiness.seas.harvard.edu
|
|
id:87lji4lx9v.fsf@yoom.home.cworth.org
|
|
id:cf0c4d610911171136h1713aa59w9cf9aa31f052ad0a@mail.gmail.com
|
|
id:87iqd9rn3l.fsf@vertex.dottedmag
|
|
id:20091117190054.GU3165@dottiness.seas.harvard.edu
|
|
id:87lji5cbwo.fsf@yoom.home.cworth.org
|
|
id:1258471718-6781-2-git-send-email-dottedmag@dottedmag.net
|
|
id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=messages --format=json"
|
|
notmuch search --format=json --output=messages '*' >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
["4EFC743A.3060609@april.org",
|
|
"877h1wv7mg.fsf@inf-8657.int-evry.fr",
|
|
"1258544095-16616-1-git-send-email-chris@chris-wilson.co.uk",
|
|
"877htoqdbo.fsf@yoom.home.cworth.org",
|
|
"878we4qdqf.fsf@yoom.home.cworth.org",
|
|
"87aaykqe24.fsf@yoom.home.cworth.org",
|
|
"87bpj0qeng.fsf@yoom.home.cworth.org",
|
|
"87fx8cqf8v.fsf@yoom.home.cworth.org",
|
|
"87hbssqfix.fsf@yoom.home.cworth.org",
|
|
"87iqd8qgiz.fsf@yoom.home.cworth.org",
|
|
"87k4xoqgnl.fsf@yoom.home.cworth.org",
|
|
"87ocn0qh6d.fsf@yoom.home.cworth.org",
|
|
"87pr7gqidx.fsf@yoom.home.cworth.org",
|
|
"867hto2p0t.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me",
|
|
"1258532999-9316-1-git-send-email-keithp@keithp.com",
|
|
"86aayk2rbj.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me",
|
|
"86d43g2w3y.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me",
|
|
"ddd65cda0911172214t60d22b63hcfeb5a19ab54a39b@mail.gmail.com",
|
|
"86einw2xof.fsf@fortitudo.i-did-not-set--mail-host-address--so-tickle-me",
|
|
"736613.51770.qm@web113505.mail.gq1.yahoo.com",
|
|
"1258520223-15328-1-git-send-email-jan@ryngle.com",
|
|
"ddd65cda0911171950o4eea4389v86de9525e46052d3@mail.gmail.com",
|
|
"1258510940-7018-1-git-send-email-stewart@flamingspork.com",
|
|
"yunzl6kd1w0.fsf@aiko.keithp.com",
|
|
"yun1vjwegii.fsf@aiko.keithp.com",
|
|
"yun3a4cegoa.fsf@aiko.keithp.com",
|
|
"1258509400-32511-1-git-send-email-stewart@flamingspork.com",
|
|
"1258506353-20352-1-git-send-email-stewart@flamingspork.com",
|
|
"20091118010116.GC25380@dottiness.seas.harvard.edu",
|
|
"20091118005829.GB25380@dottiness.seas.harvard.edu",
|
|
"20091118005040.GA25380@dottiness.seas.harvard.edu",
|
|
"cf0c4d610911171623q3e27a0adx802e47039b57604b@mail.gmail.com",
|
|
"1258500222-32066-1-git-send-email-ingmar@exherbo.org",
|
|
"20091117232137.GA7669@griffis1.net",
|
|
"20091118002059.067214ed@hikari",
|
|
"1258498485-sup-142@elly",
|
|
"f35dbb950911171438k5df6eb56k77b6c0944e2e79ae@mail.gmail.com",
|
|
"f35dbb950911171435ieecd458o853c873e35f4be95@mail.gmail.com",
|
|
"1258496327-12086-1-git-send-email-jan@ryngle.com",
|
|
"1258493565-13508-1-git-send-email-keithp@keithp.com",
|
|
"yunaayketfm.fsf@aiko.keithp.com",
|
|
"yunbpj0etua.fsf@aiko.keithp.com",
|
|
"1258491078-29658-1-git-send-email-dottedmag@dottedmag.net",
|
|
"87fx8can9z.fsf@vertex.dottedmag",
|
|
"20091117203301.GV3165@dottiness.seas.harvard.edu",
|
|
"87lji4lx9v.fsf@yoom.home.cworth.org",
|
|
"cf0c4d610911171136h1713aa59w9cf9aa31f052ad0a@mail.gmail.com",
|
|
"87iqd9rn3l.fsf@vertex.dottedmag",
|
|
"20091117190054.GU3165@dottiness.seas.harvard.edu",
|
|
"87lji5cbwo.fsf@yoom.home.cworth.org",
|
|
"1258471718-6781-2-git-send-email-dottedmag@dottedmag.net",
|
|
"1258471718-6781-1-git-send-email-dottedmag@dottedmag.net"]
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=files"
|
|
notmuch search --output=files '*' | sed -e "s,$MAIL_DIR,MAIL_DIR," >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
MAIL_DIR/cur/52:2,
|
|
MAIL_DIR/cur/53:2,
|
|
MAIL_DIR/cur/50:2,
|
|
MAIL_DIR/cur/49:2,
|
|
MAIL_DIR/cur/48:2,
|
|
MAIL_DIR/cur/47:2,
|
|
MAIL_DIR/cur/46:2,
|
|
MAIL_DIR/cur/45:2,
|
|
MAIL_DIR/cur/44:2,
|
|
MAIL_DIR/cur/43:2,
|
|
MAIL_DIR/cur/42:2,
|
|
MAIL_DIR/cur/41:2,
|
|
MAIL_DIR/cur/40:2,
|
|
MAIL_DIR/cur/39:2,
|
|
MAIL_DIR/cur/38:2,
|
|
MAIL_DIR/cur/37:2,
|
|
MAIL_DIR/cur/36:2,
|
|
MAIL_DIR/cur/35:2,
|
|
MAIL_DIR/cur/34:2,
|
|
MAIL_DIR/cur/33:2,
|
|
MAIL_DIR/cur/32:2,
|
|
MAIL_DIR/cur/31:2,
|
|
MAIL_DIR/cur/30:2,
|
|
MAIL_DIR/cur/29:2,
|
|
MAIL_DIR/cur/28:2,
|
|
MAIL_DIR/cur/27:2,
|
|
MAIL_DIR/cur/26:2,
|
|
MAIL_DIR/cur/25:2,
|
|
MAIL_DIR/cur/24:2,
|
|
MAIL_DIR/cur/23:2,
|
|
MAIL_DIR/cur/22:2,
|
|
MAIL_DIR/cur/21:2,
|
|
MAIL_DIR/cur/19:2,
|
|
MAIL_DIR/cur/18:2,
|
|
MAIL_DIR/cur/51:2,
|
|
MAIL_DIR/cur/20:2,
|
|
MAIL_DIR/cur/17:2,
|
|
MAIL_DIR/cur/16:2,
|
|
MAIL_DIR/cur/15:2,
|
|
MAIL_DIR/cur/14:2,
|
|
MAIL_DIR/cur/13:2,
|
|
MAIL_DIR/cur/12:2,
|
|
MAIL_DIR/cur/11:2,
|
|
MAIL_DIR/cur/10:2,
|
|
MAIL_DIR/cur/09:2,
|
|
MAIL_DIR/cur/08:2,
|
|
MAIL_DIR/cur/06:2,
|
|
MAIL_DIR/cur/05:2,
|
|
MAIL_DIR/cur/04:2,
|
|
MAIL_DIR/cur/03:2,
|
|
MAIL_DIR/cur/07:2,
|
|
MAIL_DIR/cur/02:2,
|
|
MAIL_DIR/cur/01:2,
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=files --format=json"
|
|
notmuch search --format=json --output=files '*' | sed -e "s,$MAIL_DIR,MAIL_DIR," >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
["MAIL_DIR/cur/52:2,",
|
|
"MAIL_DIR/cur/53:2,",
|
|
"MAIL_DIR/cur/50:2,",
|
|
"MAIL_DIR/cur/49:2,",
|
|
"MAIL_DIR/cur/48:2,",
|
|
"MAIL_DIR/cur/47:2,",
|
|
"MAIL_DIR/cur/46:2,",
|
|
"MAIL_DIR/cur/45:2,",
|
|
"MAIL_DIR/cur/44:2,",
|
|
"MAIL_DIR/cur/43:2,",
|
|
"MAIL_DIR/cur/42:2,",
|
|
"MAIL_DIR/cur/41:2,",
|
|
"MAIL_DIR/cur/40:2,",
|
|
"MAIL_DIR/cur/39:2,",
|
|
"MAIL_DIR/cur/38:2,",
|
|
"MAIL_DIR/cur/37:2,",
|
|
"MAIL_DIR/cur/36:2,",
|
|
"MAIL_DIR/cur/35:2,",
|
|
"MAIL_DIR/cur/34:2,",
|
|
"MAIL_DIR/cur/33:2,",
|
|
"MAIL_DIR/cur/32:2,",
|
|
"MAIL_DIR/cur/31:2,",
|
|
"MAIL_DIR/cur/30:2,",
|
|
"MAIL_DIR/cur/29:2,",
|
|
"MAIL_DIR/cur/28:2,",
|
|
"MAIL_DIR/cur/27:2,",
|
|
"MAIL_DIR/cur/26:2,",
|
|
"MAIL_DIR/cur/25:2,",
|
|
"MAIL_DIR/cur/24:2,",
|
|
"MAIL_DIR/cur/23:2,",
|
|
"MAIL_DIR/cur/22:2,",
|
|
"MAIL_DIR/cur/21:2,",
|
|
"MAIL_DIR/cur/19:2,",
|
|
"MAIL_DIR/cur/18:2,",
|
|
"MAIL_DIR/cur/51:2,",
|
|
"MAIL_DIR/cur/20:2,",
|
|
"MAIL_DIR/cur/17:2,",
|
|
"MAIL_DIR/cur/16:2,",
|
|
"MAIL_DIR/cur/15:2,",
|
|
"MAIL_DIR/cur/14:2,",
|
|
"MAIL_DIR/cur/13:2,",
|
|
"MAIL_DIR/cur/12:2,",
|
|
"MAIL_DIR/cur/11:2,",
|
|
"MAIL_DIR/cur/10:2,",
|
|
"MAIL_DIR/cur/09:2,",
|
|
"MAIL_DIR/cur/08:2,",
|
|
"MAIL_DIR/cur/06:2,",
|
|
"MAIL_DIR/cur/05:2,",
|
|
"MAIL_DIR/cur/04:2,",
|
|
"MAIL_DIR/cur/03:2,",
|
|
"MAIL_DIR/cur/07:2,",
|
|
"MAIL_DIR/cur/02:2,",
|
|
"MAIL_DIR/cur/01:2,"]
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=tags"
|
|
notmuch search --output=tags '*' >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
attachment
|
|
inbox
|
|
signed
|
|
unread
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "--output=tags --format=json"
|
|
notmuch search --format=json --output=tags '*' >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
["attachment",
|
|
"inbox",
|
|
"signed",
|
|
"unread"]
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "sanitize output for quoted-printable line-breaks in author and subject"
|
|
add_message "[subject]='two =?ISO-8859-1?Q?line=0A_subject?=
|
|
headers'"
|
|
notmuch search id:"$gen_msg_id" | notmuch_search_sanitize >OUTPUT
|
|
cat <<EOF >EXPECTED
|
|
thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; two line? subject headers (inbox unread)
|
|
EOF
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "search for non-existent message prints nothing"
|
|
notmuch search "no-message-matches-this" > OUTPUT
|
|
echo -n >EXPECTED
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_begin_subtest "search --format=json for non-existent message prints proper empty json"
|
|
notmuch search --format=json "no-message-matches-this" > OUTPUT
|
|
echo "[]" >EXPECTED
|
|
test_expect_equal_file OUTPUT EXPECTED
|
|
|
|
test_done
|