elisp-vcs/flim-1.14.9/tests/test-rfc2231.el

219 lines
6.8 KiB
EmacsLisp

(require 'lunit)
(require 'mime)
(luna-define-class test-rfc2231 (lunit-test-case))
;;;
;;; Parameter Value Continuations
;;;
;; The content-type field
;;
;; Content-Type: message/external-body; access-type=URL;
;; URL*0="ftp://";
;; URL*1="cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar"
;;
;; is semantically identical to
;;
;; Content-Type: message/external-body; access-type=URL;
;; URL="ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar"
;;
(luna-define-method test-rfc2231-continuation-1 ((case test-rfc2231))
(lunit-assert
(eq
(mime-content-type-primary-type
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL*0=\"ftp://\";
URL*1=\"cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\""))
(mime-content-type-primary-type
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL=\"ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")))))
(luna-define-method test-rfc2231-continuation-2 ((case test-rfc2231))
(lunit-assert
(eq
(mime-content-type-subtype
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL*0=\"ftp://\";
URL*1=\"cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\""))
(mime-content-type-subtype
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL=\"ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")))))
(luna-define-method test-rfc2231-continuation-3 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL*0=\"ftp://\";
URL*1=\"cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")
"access-type")
(mime-content-type-parameter
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL=\"ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")
"access-type"))))
(luna-define-method test-rfc2231-continuation-4 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL*0=\"ftp://\";
URL*1=\"cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")
"url")
(mime-content-type-parameter
(mime-parse-Content-Type "message/external-body; access-type=URL;
URL=\"ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer.tar\"")
"url"))))
;;;
;;; Parameter Value Character Set and Language Information
;;;
;; Content-Type: application/x-stuff;
;; title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A
(luna-define-method test-rfc2231-charset-language-1 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title")
"This is ***fun***")))
(luna-define-method test-rfc2231-charset-language-2 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=''This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title")
"This is ***fun***")))
;;;
;;; Combining Character Set, Language, and Parameter Continuations
;;;
;; Content-Type: application/x-stuff;
;; title*0*=us-ascii'en'This%20is%20even%20more%20;
;; title*1*=%2A%2A%2Afun%2A%2A%2A%20;
;; title*2="isn't it!"
(luna-define-method test-rfc2231-charset-language-continuation-1 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*0*=us-ascii'en'This%20is%20even%20more%20;
title*1*=%2A%2A%2Afun%2A%2A%2A%20;
title*2=\"isn't it!\"")
"title")
"This is even more ***fun*** isn't it!")))
;; MIME states that parameters are not order sensitive.
(luna-define-method test-rfc2231-charset-language-continuation-2 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*2=\"isn't it!\";
title*1*=%2A%2A%2Afun%2A%2A%2A%20;
title*0*=us-ascii'en'This%20is%20even%20more%20")
"title")
"This is even more ***fun*** isn't it!")))
;; ABNF states that `ext-octet' is case-insensitive.
(luna-define-method test-rfc2231-charset-language-continuation-3 ((case test-rfc2231))
(lunit-assert
(let ((case-fold-search nil))
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=us-ascii'en-us'This%20is%20%2a%2a%2afun%2a%2a%2a")
"title")
"This is ***fun***"))))
;; unencoded segments MUST NOT be decoded.
(luna-define-method test-rfc2231-charset-language-continuation-4 ((case test-rfc2231))
(lunit-assert
(string=
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*0*=us-ascii'en'This%20is%20even%20more%20;
title*1*=%2A%2A%2Afun%2A%2A%2A%20;
title*2=\"isn%27t%20it!\"")
"title")
"This is even more ***fun*** isn%27t%20it!")))
;;;
;;; Language specification in Encoded Words
;;;
(luna-define-method test-rfc2231-encoded-word-1 ((case test-rfc2231))
(lunit-assert
(string=
(eword-decode-encoded-word "=?US-ASCII?Q?Keith_Moore?=")
"Keith Moore")))
(luna-define-method test-rfc2231-encoded-word-2 ((case test-rfc2231))
(lunit-assert
(string=
(eword-decode-encoded-word "=?US-ASCII*EN?Q?Keith_Moore?=")
"Keith Moore")))
(luna-define-method test-rfc2231-encoded-word-3 ((case test-rfc2231))
(lunit-assert
(eq
(get-text-property
0 'mime-language
(eword-decode-encoded-word "=?US-ASCII*EN?Q?Keith_Moore?="))
'en)))
;;;
;;; Language specification in FLIM
;;;
;; both flim-1_13-rfc2231 and flim-1_14-rfc2231 choose to put language
;; info to the `mime-language' text-property of the parameter value.
(luna-define-method test-rfc2231-mime-language-1 ((case test-rfc2231))
(lunit-assert
(eq
(get-text-property
0 'mime-language
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title"))
'en-us)))
(luna-define-method test-rfc2231-mime-language-2 ((case test-rfc2231))
(lunit-assert
(eq
(get-text-property
0 'mime-language
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=US-ASCII'EN-US'This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title"))
'en-us)))
(luna-define-method test-rfc2231-mime-language-3 ((case test-rfc2231))
(lunit-assert
(null
(get-text-property
0 'mime-language
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=us-ascii''This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title")))))
(luna-define-method test-rfc2231-mime-language-4 ((case test-rfc2231))
(lunit-assert
(null
(get-text-property
0 'mime-language
(mime-content-type-parameter
(mime-parse-Content-Type "application/x-stuff;
title*=''This%20is%20%2A%2A%2Afun%2A%2A%2A")
"title")))))