summaryrefslogtreecommitdiff
path: root/tests/quoted-printable.scm
blob: f3dd5eb4dd010ab742fb7bbfaf9ebe6399da734d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;;; guile-email --- Guile email parser
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of guile-email.
;;;
;;; guile-email is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU Affero General Public License as
;;; published by the Free Software Foundation; either version 3 of the
;;; License, or (at your option) any later version.
;;;
;;; guile-email is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; Affero General Public License for more details.
;;;
;;; You should have received a copy of the GNU Affero General Public
;;; License along with guile-email.  If not, see
;;; <http://www.gnu.org/licenses/>.

(use-modules (email quoted-printable)
             (ice-9 iconv)
             (srfi srfi-1)
             (srfi srfi-64))

(test-begin "quoted-printable")

(let ((decoded-text
       "J'interdis aux marchands de vanter trop leur marchandises. Car ils se font vite pédagogues et t'enseignent comme but ce qui n'est par essence qu'un moyen, et te trompant ainsi sur la route à suivre les voilà bientôt qui te dégradent, car si leur musique est vulgaire ils te fabriquent pour te la vendre une âme vulgaire.")
      (encoded-text
       "J'interdis aux marchands de vanter trop leur marchandises. Car ils se font =
vite p=C3=A9dagogues et t'enseignent comme but ce qui n'est par essence qu'=
un moyen, et te trompant ainsi sur la route =C3=A0 suivre les voil=C3=A0 bi=
ent=C3=B4t qui te d=C3=A9gradent, car si leur musique est vulgaire ils te f=
abriquent pour te la vendre une =C3=A2me vulgaire.")
      (charset "UTF-8"))
  (test-equal "quoted-printable wikipedia example: decoding"
    (bytevector->string (quoted-printable-decode encoded-text) charset)
    decoded-text)

  (test-equal "quoted-printable wikipedia example: encoding"
    (quoted-printable-encode
     (string->bytevector decoded-text charset))
    encoded-text)

  (test-assert "quoted-printable wikipedia example: encoded output should not be more than 76 columns wide"
    (every (lambda (line)
             (<= (string-length line) 76))
           (string-split (quoted-printable-encode
                          (string->bytevector decoded-text charset))
                         #\newline))))

(test-equal "quoted-printable encoding of ="
  (quoted-printable-encode
   (string->bytevector "=" "UTF-8"))
  (string-append "=" (string-upcase (number->string
                                     (char->integer #\=) 16))))

(let ((encoded-text "=A1Hola,_se=F1or!")
      (decoded-text "¡Hola, señor!")
      (charset "ISO-8859-1"))
  (test-equal "q-encoding wikipedia example: decoding"
    (q-encoding-encode
     (string->bytevector decoded-text charset))
    encoded-text)

  (test-equal "q-encoding wikipedia example: encoding"
    (bytevector->string
     (q-encoding-decode encoded-text)
     charset)
    decoded-text))

(test-end "quoted-printable")