annotate tests/automated/base64-tests.el @ 2227:8e7b4a0c1a81

[xemacs-hg @ 2004-08-21 17:05:49 by michaels] 2004-08-15 Jan Rychter <jwr@xemacs.org> * window-xemacs.el (really-set-window-configuration): deal gracefully with the case when the buffer previously saved in the configuration (and that we want to switch to) has been killed. Switch to the next buffer on the buffer-list in that case.
author michaels
date Sat, 21 Aug 2004 17:05:51 +0000
parents abe6d1db359e
children 189fb67ca31a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
1 ;; Copyright (C) 1999 Free Software Foundation, Inc.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
3 ;; Author: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
4 ;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
5 ;; Created: 1999
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
6 ;; Keywords: tests
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
9
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
10 ;; XEmacs is free software; you can redistribute it and/or modify it
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
11 ;; under the terms of the GNU General Public License as published by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
13 ;; any later version.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
14
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
18 ;; General Public License for more details.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
19
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
23 ;; 02111-1307, USA.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
24
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
25 ;;; Synched up with: Not in FSF.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
26
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
27 ;;; Commentary:
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
28
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
29 ;; Test base64 functions.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
30 ;; See test-harness.el for instructions on how to run these tests.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
31
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
32 (eval-when-compile
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
33 (condition-case nil
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
34 (require 'test-harness)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
35 (file-error
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
36 (push "." load-path)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
37 (when (and (boundp 'load-file-name) (stringp load-file-name))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
38 (push (file-name-directory load-file-name) load-path))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
39 (require 'test-harness))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
40
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
41 ;; We need to test the buffer and string functions. We do it by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
42 ;; testing them in various circumstances, asserting the same result,
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
43 ;; and returning that result.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
44
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
45 (defvar bt-test-buffer (get-buffer-create " *base64-workhorse*"))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
46
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
47 (defun bt-base64-encode-string (string &optional no-line-break)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
48 (let ((string-result (base64-encode-string string no-line-break))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
49 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
50 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
51 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
52 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
53 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
54 (setq length (base64-encode-region (point-min) (point-max) no-line-break))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
55 (Assert (eq length (- (point-max) (point-min))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
56 (Assert (equal (buffer-string) string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
57 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
58 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
59 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
60 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
61 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
62 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
63 (insert "...more random junk.q,f3/.qrm314.r,m2typ' 2436T@W$^@$#^T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
64 (setq length (base64-encode-region p1 p2 no-line-break))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
65 (Assert (eq length (- p2 p1)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
66 (Assert (equal (buffer-substring p1 p2) string-result))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
67 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
68
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
69 (defun bt-base64-decode-string (string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
70 (let ((string-result (base64-decode-string string))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
71 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
72 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
73 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
74 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
75 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
76 (setq length (base64-decode-region (point-min) (point-max)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
77 (cond (string-result
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
78 (Assert (eq length (- (point-max) (point-min))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
79 (Assert (equal (buffer-string) string-result)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
80 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
81 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
82 ;; The buffer should not have been modified.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
83 (Assert (equal (buffer-string) string))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
84 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
85 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
86 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
87 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
88 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
89 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
90 (insert "...more random junk.q,f3/.qrm314.\0\0r,m2typ' 2436T@W$^@$#T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
91 (setq length (base64-decode-region p1 p2))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
92 (cond (string-result
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
93 (Assert (eq length (- p2 p1)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
94 (Assert (equal (buffer-substring p1 p2) string-result)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
95 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
96 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
97 ;; The buffer should not have been modified.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
98 (Assert (equal (buffer-substring p1 p2) string))))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
99 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
100
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
101 (defun bt-remove-newlines (str)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
102 (apply #'string (delete ?\n (mapcar #'identity str))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
103
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
104 (defconst bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
105 (let ((str (make-string 256 ?\0)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
106 (dotimes (i 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
107 (aset str i (int-char i)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
108 str))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
109
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
110 (defconst bt-test-strings
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
111 `(("" "")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
112 ("foo" "Zm9v")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
113 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
114 "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
115 MjM0NTY3ODk=")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
116 (,bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
117 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
118 Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWpr
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
119 bG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
120 oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
121 2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
122 ))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
123
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
124 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
125 ;; Encoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
126 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
127
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
128 (loop for (raw encoded) in bt-test-strings do
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
129 (Assert (equal (bt-base64-encode-string raw) encoded))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
130 ;; test the NO-LINE-BREAK flag
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
131 (Assert (equal (bt-base64-encode-string raw t) (bt-remove-newlines encoded))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
132
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
133 ;; When Mule is around, Lisp programmers should make sure that the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
134 ;; buffer contains only characters whose `char-int' is in the [0, 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
135 ;; range. If this condition is not satisfied for any character, an
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
136 ;; error is signaled.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
137 (when (featurep 'mule)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
138 ;; #### remove subtraction of 128 -- no longer needed with make-char
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
139 ;; patch!
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
140 (let* ((mule-string (format "Hrvoje Nik%ci%c"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
141 ;; scaron == 185 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
142 (make-char 'latin-iso8859-2 (- 185 128))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
143 ;; cacute == 230 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
144 (make-char 'latin-iso8859-2 (- 230 128)))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
145 (Check-Error-Message error "Non-ascii character in base64 input"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
146 (bt-base64-encode-string mule-string))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
147
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
148 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
149 ;; Decoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
150 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
151
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
152 (loop for (raw encoded) in bt-test-strings do
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
153 (Assert (equal (bt-base64-decode-string encoded) raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
154 (Assert (equal (bt-base64-decode-string (bt-remove-newlines encoded)) raw)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
155
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
156 ;; Test errors
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
157 (dolist (str `("foo" "AAC" "foo\0bar" "====" "Zm=9v" ,bt-allchars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
158 (Check-Error error (base64-decode-string str)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
159
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
160 ;; base64-decode-string should ignore non-base64 characters anywhere
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
161 ;; in the string. We test this in the cheesiest manner possible, by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
162 ;; inserting non-base64 chars at the beginning, at the end, and in the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
163 ;; middle of the string.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
164
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
165 (defconst bt-base64-chars '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
166 ;; sometimes I hate Emacs indentation.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
167 ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
168 ?U ?V ?W ?X ?Y ?Z ?a ?b ?c ?d
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
169 ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
170 ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
171 ?y ?z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
172 ?8 ?9 ?+ ?/ ?=))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
173
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
174 (defconst bt-nonbase64-chars (set-difference (mapcar #'identity bt-allchars)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
175 bt-base64-chars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
176
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
177 (loop for (raw encoded) in bt-test-strings do
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
178 (unless (equal raw "")
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
179 (let* ((middlepos (/ (1+ (length encoded)) 2))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
180 (left (substring encoded 0 middlepos))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
181 (right (substring encoded middlepos)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
182 ;; Whitespace at the beginning, end, and middle.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
183 (let ((mangled (concat bt-nonbase64-chars left bt-nonbase64-chars right
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
184 bt-nonbase64-chars)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
185 (Assert (equal (bt-base64-decode-string mangled) raw)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
186
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
187 ;; Whitespace between every char.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
188 (let ((mangled (concat bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
189 ;; ENCODED with bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
190 ;; between every character.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
191 (mapconcat #'char-to-string encoded
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
192 (apply #'string bt-nonbase64-chars))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
193 bt-nonbase64-chars)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
194 (Assert (equal (bt-base64-decode-string mangled) raw))))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
195
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
196 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
197 ;; Mixed...
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
198 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
199
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
200 ;; The whole point of base64 is to ensure that an arbitrary sequence
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
201 ;; of bytes passes through gateway hellfire unscathed, protected by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
202 ;; the asbestos suit of base64. Here we test that
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
203 ;; (base64-decode-string (base64-decode-string FOO)) equals FOO for
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
204 ;; any FOO we can think of. The following stunts stress-test
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
205 ;; practically all aspects of the encoding and decoding process.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
206
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
207 (loop for (raw ignored) in bt-test-strings do
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
208 (Assert (equal (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
209 (bt-base64-encode-string raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
210 raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
211 (Assert (equal (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
212 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
213 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
214 (bt-base64-encode-string raw))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
215 raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
216 (Assert (equal (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
217 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
218 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
219 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
220 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
221 (bt-base64-encode-string raw))))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
222 raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
223 (Assert (equal (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
224 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
225 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
226 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
227 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
228 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
229 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
230 (bt-base64-encode-string raw))))))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
231 raw))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
232 (Assert (equal (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
233 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
234 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
235 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
236 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
237 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
238 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
239 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
240 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
241 (bt-base64-encode-string raw))))))))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
242 raw)))