The test of viewing 8bit messages is known-broken. The rest pass, but for very fragile reasons. The next several commits will fix the known-broken test and make our charset handling robust. --- test/T455-emacs-charsets.sh | 141 ++++++++++++++++++++++++++++++++++++++++++++ test/test-lib.el | 4 +- 2 files changed, 144 insertions(+), 1 deletion(-) create mode 100755 test/T455-emacs-charsets.sh
diff --git a/test/T455-emacs-charsets.sh b/test/T455-emacs-charsets.sh new file mode 100755 index 0000000..a42a1d2 --- /dev/null +++ b/test/T455-emacs-charsets.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +test_description="emacs notmuch-show charset handling" +. ./test-lib.sh + + +UTF8_YEN=$'\xef\xbf\xa5' +BIG5_YEN=$'\xa2\x44' + +# Add four messages with unusual encoding requirements: +# +# 1) text/plain in quoted-printable big5 +generate_message \ + [id]=test-plain at example.com \ + '[content-type]="text/plain; charset=big5"' \ + '[content-transfer-encoding]=quoted-printable' \ + '[body]="Yen: =A2=44"' + +# 2) text/plain in 8bit big5 +generate_message \ + [id]=test-plain-8bit at example.com \ + '[content-type]="text/plain; charset=big5"' \ + '[content-transfer-encoding]=8bit' \ + '[body]="Yen: '$BIG5_YEN'"' + +# 3) text/html in quoted-printable big5 +generate_message \ + [id]=test-html at example.com \ + '[content-type]="text/html; charset=big5"' \ + '[content-transfer-encoding]=quoted-printable' \ + '[body]="<html><body>Yen: =A2=44</body></html>"' + +# 4) application/octet-stream in quoted-printable of big5 text +generate_message \ + [id]=test-binary at example.com \ + '[content-type]="application/octet-stream"' \ + '[content-transfer-encoding]=quoted-printable' \ + '[body]="Yen: =A2=44"' + +notmuch new > /dev/null + +# Test rendering + +test_begin_subtest "Text parts are decoded when rendering" +test_emacs '(notmuch-show "id:test-plain at example.com") + (test-visible-output "OUTPUT.raw")' +awk 'show {print} /^$/ {show=1}' < OUTPUT.raw > OUTPUT +cat <<EOF >EXPECTED +Yen: $UTF8_YEN +EOF +test_expect_equal_file OUTPUT EXPECTED + +test_begin_subtest "8bit text parts are decoded when rendering" +test_emacs '(notmuch-show "id:test-plain-8bit at example.com") + (test-visible-output "OUTPUT.raw")' +awk 'show {print} /^$/ {show=1}' < OUTPUT.raw > OUTPUT +cat <<EOF >EXPECTED +Yen: $UTF8_YEN +EOF +test_expect_equal_file OUTPUT EXPECTED + +test_begin_subtest "HTML parts are decoded when rendering" +test_emacs '(notmuch-show "id:test-html at example.com") + (test-visible-output "OUTPUT.raw")' +awk 'show {print} /^$/ {show=1}' < OUTPUT.raw > OUTPUT +cat <<EOF >EXPECTED +[ text/html ] +Yen: $UTF8_YEN +EOF +test_expect_equal_file OUTPUT EXPECTED + +# Test saving + +test_begin_subtest "Text parts are not decoded when saving" +rm -f part +test_emacs '(notmuch-show "id:test-plain at example.com") + (search-forward "Yen") + (let ((standard-input "\"part\"")) + (notmuch-show-save-part))' +cat <<EOF >EXPECTED +Yen: $BIG5_YEN +EOF +test_expect_equal_file part EXPECTED + +test_begin_subtest "8bit text parts are not decoded when saving" +rm -f part +test_emacs '(notmuch-show "id:test-plain-8bit at example.com") + (search-forward "Yen") + (let ((standard-input "\"part\"")) + (notmuch-show-save-part))' +cat <<EOF >EXPECTED +Yen: $BIG5_YEN +EOF +test_expect_equal_file part EXPECTED + +test_begin_subtest "HTML parts are not decoded when saving" +rm -f part +test_emacs '(notmuch-show "id:test-html at example.com") + (search-forward "Yen") + (let ((standard-input "\"part\"")) + (notmuch-show-save-part))' +cat <<EOF >EXPECTED +<html><body>Yen: $BIG5_YEN</body></html> +EOF +test_expect_equal_file part EXPECTED + +test_begin_subtest "Binary parts are not decoded when saving" +rm -f part +test_emacs '(notmuch-show "id:test-binary at example.com") + (search-forward "application/") + (let ((standard-input "\"part\"")) + (notmuch-show-save-part))' +cat <<EOF >EXPECTED +Yen: $BIG5_YEN +EOF +test_expect_equal_file part EXPECTED + +# Test message viewing + +test_begin_subtest "Text message are not decoded when viewing" +test_emacs '(notmuch-show "id:test-plain at example.com") + (notmuch-show-view-raw-message) + (test-visible-output "OUTPUT.raw")' +awk 'show {print} /^$/ {show=1}' < OUTPUT.raw > OUTPUT +cat <<EOF >EXPECTED +Yen: =A2=44 +EOF +test_expect_equal_file OUTPUT EXPECTED + +test_begin_subtest "8bit text message are not decoded when viewing" +test_subtest_known_broken +test_emacs '(notmuch-show "id:test-plain-8bit at example.com") + (notmuch-show-view-raw-message) + (test-visible-output "OUTPUT.raw")' +awk 'show {print} /^$/ {show=1}' < OUTPUT.raw > OUTPUT +cat <<EOF >EXPECTED +Yen: $BIG5_YEN +EOF +test_expect_equal_file OUTPUT EXPECTED + +test_done diff --git a/test/test-lib.el b/test/test-lib.el index 437f83f..dd3446e 100644 --- a/test/test-lib.el +++ b/test/test-lib.el @@ -57,7 +57,9 @@ (defun test-output (&optional filename) (defun test-visible-output (&optional filename) "Save visible text in current buffer to file FILENAME. Default FILENAME is OUTPUT." - (let ((text (visible-buffer-string))) + (let ((text (visible-buffer-string)) + ;; Tests expect output in UTF-8 encoding + (coding-system-for-write 'utf-8)) (with-temp-file (or filename "OUTPUT") (insert text)))) (defun visible-buffer-string () -- 1.9.1