X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4fcf75e40c7c445476029e31c9c93b6c66d23bdc..b58ec23ab118f9614c478cf3ee323e614e3c13bf:/test/mhbuild/test-header-encode diff --git a/test/mhbuild/test-header-encode b/test/mhbuild/test-header-encode index a8fb8187..8c0f9aae 100755 --- a/test/mhbuild/test-header-encode +++ b/test/mhbuild/test-header-encode @@ -15,13 +15,16 @@ fi . "${MH_OBJ_DIR}/test/common.sh" setup_test + +check_exit '-eq 1' mhbuild -h + testname="${MH_TEST_DIR}/$$" +backupname="${MH_TEST_DIR}/`mhparam sbackup`$$" # # We're going to hardcode UTF-8 for this test. # - -LC_ALL=en_US.UTF-8; export LC_ALL +require_locale en_US.UTF-8 en_US.UTF8 en_US.utf-8 en_US.utf8 # # Basic test of encoding a short subject @@ -44,7 +47,7 @@ Content-Type: text/plain; charset="us-ascii" This is a test EOF -mhbuild "${testname}.basic.actual" +run_prog mhbuild "${testname}.basic.actual" check "${testname}.basic.actual" "${testname}.basic.expected" 'keep first' @@ -77,13 +80,13 @@ Content-Type: text/plain; charset="us-ascii" This is a test EOF -mhbuild -headerencoding base64 "${testname}.basic.actual" +run_prog mhbuild -headerencoding base64 "${testname}.basic.actual" check "${testname}.basic.actual" "${testname}.basic.expected" 'keep first' run_test 'eval fmttest -outsize max -format "%(decode{subject})" -message -file "${testname}.basic.actual"' 'This is ä test' -rm -f "${testname}.basic.actual" +rm -f "${testname}.basic.actual" "${backupname}.basic.actual.orig" # # Have a subject that will pick base64 as the shorter encoding @@ -107,13 +110,13 @@ Content-Type: text/plain; charset="us-ascii" This is a test EOF -mhbuild "${testname}.autopick.actual" +run_prog mhbuild "${testname}.autopick.actual" check "${testname}.autopick.actual" "${testname}.autopick.expected" 'keep first' run_test 'eval fmttest -outsize max -format "%(decode{subject})" -message -file "${testname}.autopick.actual"' 'This is ä tëst©' -rm -f "${testname}.basic.autopick" +rm -f "${testname}.autopick.actual" "${backupname}.autopick.actual.orig" # # Tests using longer subject lines. @@ -123,7 +126,7 @@ cat > "${testname}.longsubject1.actual" < To: Somebody Subject: This is ä tëst of a rather long sübject line; will it overflow - the line length? I sure hope thät ='s and "'s are encoded properly. Will + the line length? I sure hope thät ='s and _'s are encoded properly. Will they be? This is a test of a very long subject line. @@ -134,21 +137,21 @@ From: Mr Foo Bar To: Somebody Subject: =?UTF-8?Q?This_is_=C3=A4_t=C3=ABst_of_a_rather_long_s=C3=BCbject_?= =?UTF-8?Q?line;_will_it_overflow_the_line_length=3F__I_sure_hope_?= - =?UTF-8?Q?th=C3=A4t_=3D's_and_"'s_are_encoded_properly.__Will_the?= - =?UTF-8?Q?y_be=3F?= + =?UTF-8?Q?th=C3=A4t_=3D's_and_=5F's_are_encoded_properly.__Will_t?= + =?UTF-8?Q?hey_be=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" This is a test of a very long subject line. EOF -mhbuild "${testname}.longsubject1.actual" +run_prog mhbuild "${testname}.longsubject1.actual" check "${testname}.longsubject1.actual" "${testname}.longsubject1.expected" 'keep first' -run_test 'eval fmttest -outsize max -format "%(putlit(decode(trim{subject})))" -message -file "${testname}.longsubject1.actual"' "This is ä tëst of a rather long sübject line; will it overflow the line length? I sure hope thät ='s and \"'s are encoded properly. Will they be?" +run_test 'eval fmttest -outsize max -format "%(putlit(decode(trim{subject})))" -message -file "${testname}.longsubject1.actual"' "This is ä tëst of a rather long sübject line; will it overflow the line length? I sure hope thät ='s and _'s are encoded properly. Will they be?" -rm -f "${testname}.longsubject1.actual" +rm -f "${testname}.longsubject1.actual" "${backupname}.longsubject1.actual.orig" # # Test a longer line with base64 encoding @@ -178,10 +181,236 @@ Content-Type: text/plain; charset="us-ascii" This is a test of a very long subject line using base64. EOF -mhbuild "${testname}.longsubject2.actual" +run_prog mhbuild "${testname}.longsubject2.actual" check "${testname}.longsubject2.actual" "${testname}.longsubject2.expected" 'keep first' run_test 'eval fmttest -outsize max -format "%(putlit(decode(trim{subject})))" -message -file "${testname}.longsubject2.actual"' "This is ä tëst øf ä räthër løng sübjëct line; will it øvërfløw the line length? I sure hope thät ='s and \"'s are encoded properly. Will they be?" +rm -f "${testname}.longsubject2.actual" "${backupname}.longsubject2.actual.orig" + +# +# Another long test, but make sure multibyte characters are not split across +# RFC-2047 tokens (prohibited by the standard). Test both quoted-printable +# and base64 +# + +cat > "${testname}.longsubject3.actual" < +To: Somebody +Subject: This is a test of a big UTF-8 multibyte character (😉); will + this work properly, or will it get truncated? 😨! Hopefully not + +This is another long test. +EOF + +cat > "${testname}.longsubject3.expected" < +To: Somebody +Subject: =?UTF-8?Q?This_is_a_test_of_a_big_UTF-8_multibyte_character_(?= + =?UTF-8?Q?=F0=9F=98=89);_will_this_work_properly,_or_will_it_get_?= + =?UTF-8?Q?truncated=3F_=F0=9F=98=A8!_Hopefully_not?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is another long test. +EOF + +run_prog mhbuild "${testname}.longsubject3.actual" + +check "${testname}.longsubject3.actual" "${testname}.longsubject3.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(putlit(decode(trim{subject})))" -message -file "${testname}.longsubject3.actual"' "This is a test of a big UTF-8 multibyte character (😉); will this work properly, or will it get truncated? 😨! Hopefully not" + +rm -f "${testname}.longsubject3.actual" "${backupname}.longsubject3.actual.orig" + +cat > "${testname}.longsubject4.actual" < +To: Somebody +Subject: This is ä tëst øf å big ÜTF-8 (😉) mültibyte character; will + this wørk prøperly, ør will it get trµnᴬted? 😨! Hopefully nøt + +This is another long test. +EOF + +cat > "${testname}.longsubject4.expected" < +To: Somebody +Subject: =?UTF-8?B?VGhpcyBpcyDDpCB0w6tzdCDDuGYgw6UgYmlnIMOcVEYtOCAo?= + =?UTF-8?B?8J+YiSkgbcO8bHRpYnl0ZSBjaGFyYWN0ZXI7IHdpbGwgdGhpcyB3?= + =?UTF-8?B?w7hyayBwcsO4cGVybHksIMO4ciB3aWxsIGl0IGdldCB0csK1bg==?= + =?UTF-8?B?4bSsdGVkPyDwn5ioISBIb3BlZnVsbHkgbsO4dA==?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is another long test. +EOF + +run_prog mhbuild "${testname}.longsubject4.actual" + +check "${testname}.longsubject4.actual" "${testname}.longsubject4.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(putlit(decode(trim{subject})))" -message -file "${testname}.longsubject4.actual"' "This is ä tëst øf å big ÜTF-8 (😉) mültibyte character; will this wørk prøperly, ør will it get trµnᴬted? 😨! Hopefully nøt" + +rm -f "${testname}.longsubject4.actual" "${backupname}.longsubject4.actual.orig" + +# +# Test out some basic email address encoding +# + +cat > "${testname}.basicemail1.actual" < +To: Somebody +Subject: Impørtant stuff + +This is important information +EOF + +cat > "${testname}.basicemail1.expected" < +To: Somebody +Subject: =?UTF-8?Q?Imp=C3=B8rtant_stuff?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is important information +EOF + +run_prog mhbuild "${testname}.basicemail1.actual" + +check "${testname}.basicemail1.actual" "${testname}.basicemail1.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(decode{from})" -message -file "${testname}.basicemail1.actual"' "Mr Foo Bär " +run_test 'eval fmttest -outsize max -format "%(decode(friendly{from}))" -message -file "${testname}.basicemail1.actual"' "Mr Foo Bär" + +rm -f "${testname}.basicemail1.actual" "${backupname}.basicemail1.actual.orig" + +cat > "${testname}.basicemail2.actual" < +Subject: Impørtant stuff + +This is important information +EOF + +cat > "${testname}.basicemail2.expected" < +Subject: =?UTF-8?Q?Imp=C3=B8rtant_stuff?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is important information +EOF + +run_prog mhbuild "${testname}.basicemail2.actual" + +check "${testname}.basicemail2.actual" "${testname}.basicemail2.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(decode{from})" -message -file "${testname}.basicemail2.actual"' "foobar@example.com (Mr Foo Bär)" +run_test 'eval fmttest -outsize max -format "%(decode(friendly{from}))" -message -file "${testname}.basicemail2.actual"' "Mr Foo Bär" + +rm -f "${testname}.basicemail2.actual" "${backupname}.basicemail2.actual.orig" + +# +# Make sure the base64 encoder is tested as well +# + +cat > "${testname}.basicemail3.actual" < +To: Somebody +Subject: Impørtant stuff + +This is important information +EOF + +cat > "${testname}.basicemail3.expected" < +To: Somebody +Subject: =?UTF-8?Q?Imp=C3=B8rtant_stuff?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is important information +EOF + +run_prog mhbuild "${testname}.basicemail3.actual" + +check "${testname}.basicemail3.actual" "${testname}.basicemail3.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(decode{from})" -message -file "${testname}.basicemail3.actual"' "Mr Føø Bär " +run_test 'eval fmttest -outsize max -format "%(decode(friendly{from}))" -message -file "${testname}.basicemail3.actual"' "Mr Føø Bär" + +rm -f "${testname}.basicemail3.actual" "${backupname}.basicemail3.actual.orig" + +cat > "${testname}.basicemail4.actual" < +Subject: Impørtant stuff + +This is important information +EOF + +cat > "${testname}.basicemail4.expected" < +Subject: =?UTF-8?Q?Imp=C3=B8rtant_stuff?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is important information +EOF + +run_prog mhbuild "${testname}.basicemail4.actual" + +check "${testname}.basicemail4.actual" "${testname}.basicemail4.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(decode{from})" -message -file "${testname}.basicemail4.actual"' "foobar@example.com (Mr Føø Bär)" +run_test 'eval fmttest -outsize max -format "%(decode(friendly{from}))" -message -file "${testname}.basicemail4.actual"' "Mr Føø Bär" + +rm -f "${testname}.basicemail4.actual" "${backupname}.basicemail4.actual.orig" + +# +# A more complicated header; it includes groups, addresses that require +# quoted-printable and base64, and unencoded email. +# + +cat > "${testname}.complexemail1.actual" < +To: "Mr F. One" , "Mr F. Twø" , + foo list: Føø Thrëë , Foo Four , + Foo Fivë ; Føø Sîx , + "Mr F. Seven" +cc: "The Distingµishëd F. Sëvën" +Subject: Very long list + +This is a lot of people on this email! +EOF + +cat > "${testname}.complexemail1.expected" < +To: "Mr F. One" , + =?UTF-8?Q?Mr_F=2E_Tw=C3=B8?= , + foo list: =?UTF-8?Q?F=C3=B8=C3=B8_Thr=C3=AB=C3=AB?= , + Foo Four , + =?UTF-8?Q?Foo_Fiv=C3=AB?= ;, + =?UTF-8?Q?F=C3=B8=C3=B8_S=C3=AEx?= , + "Mr F. Seven" +cc: =?UTF-8?B?VGhlIERpc3RpbmfCtWlzaMOrZCBGLiBTw6t2w6tu?= +Subject: Very long list +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" + +This is a lot of people on this email! +EOF + +run_prog mhbuild "${testname}.complexemail1.actual" + +check "${testname}.complexemail1.actual" "${testname}.complexemail1.expected" 'keep first' + +run_test 'eval fmttest -outsize max -format "%(decode{to})" -message -file "${testname}.complexemail1.actual"' "\"Mr F. One\" , Mr F. Twø , foo list: Føø Thrëë , Foo Four , Foo Fivë ;, Føø Sîx , \"Mr F. Seven\" " +run_test 'eval fmttest -outsize max -format "%(decode{cc})" -message -file "${testname}.complexemail1.actual"' "The Distingµishëd F. Sëvën " + +rm -f "${testname}.complexemail1.actual" "${backupname}.complexemail1.actual.orig" + exit ${failed:-0}