mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
test: New tests for Emacs charset handling
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.
This commit is contained in:
parent
0b94dd7fd3
commit
f4cdabccd0
2 changed files with 144 additions and 1 deletions
141
test/T455-emacs-charsets.sh
Executable file
141
test/T455-emacs-charsets.sh
Executable file
|
@ -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@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@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@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@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@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@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@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@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@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@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@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@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@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
|
|
@ -59,7 +59,9 @@
|
||||||
"Save visible text in current buffer to file FILENAME. Default
|
"Save visible text in current buffer to file FILENAME. Default
|
||||||
FILENAME is OUTPUT."
|
FILENAME is OUTPUT."
|
||||||
(notmuch-post-command)
|
(notmuch-post-command)
|
||||||
(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))))
|
(with-temp-file (or filename "OUTPUT") (insert text))))
|
||||||
|
|
||||||
(defun visible-buffer-string ()
|
(defun visible-buffer-string ()
|
||||||
|
|
Loading…
Reference in a new issue