[PATCH 02/11] test: New tests for Emacs charset handling
Austin Clements
amdragon at MIT.EDU
Mon Apr 21 11:37:39 PDT 2014
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
More information about the notmuch
mailing list