ea9680977493a7b62db78e0b2df58b5d03361015
[elisp/wanderlust.git] / tests / test-elmo-util.el
1 (require 'lunit)
2 (require 'elmo-util)
3
4 (luna-define-class test-elmo-util (lunit-test-case))
5
6 ;; setup & teardown
7 (defvar test-elmo-temoporary-file)
8
9 (luna-define-method lunit-test-case-setup ((case test-elmo-util))
10   (setq test-elmo-temoporary-file
11         (make-temp-file temporary-file-directory)))
12
13 (luna-define-method lunit-test-case-teardown ((case test-elmo-util))
14   (when (file-exists-p test-elmo-temoporary-file)
15     (delete-file test-elmo-temoporary-file)))
16
17
18 (luna-define-method test-elmo-replace-string-as-filename-1 ((case test-elmo-util))
19   "Revert checking replace and recover."
20   (lunit-assert
21    (let ((str "/foo//./../bar/"))
22      (string= str
23               (elmo-recover-string-from-filename
24                (elmo-replace-string-as-filename str))))))
25
26
27 ;; object save & load
28 (luna-define-method test-elmo-object-save-1 ((case test-elmo-util))
29   "Check `print-length' let bindings."
30   (let ((list '(1 2 3 4 5 6 7 8 9 10 11 12))
31         (print-length 1))
32     (elmo-object-save test-elmo-temoporary-file list)
33     (lunit-assert
34      (equal list
35             (elmo-object-load test-elmo-temoporary-file)))))
36
37 (luna-define-method test-elmo-object-save-2 ((case test-elmo-util))
38   "Check `print-level' let bindings."
39   (let ((list '(1 (2 :foo (nil . :bar))))
40         (print-level 1))
41     (elmo-object-save test-elmo-temoporary-file list)
42     (lunit-assert
43      (equal list
44             (elmo-object-load test-elmo-temoporary-file)))))
45
46 (luna-define-method test-elmo-save-string-1 ((case test-elmo-util))
47   )
48
49 ;; list functions
50 (luna-define-method test-elmo-uniq-list-1 ((case test-elmo-util))
51   (lunit-assert
52    (eq nil (elmo-uniq-list nil)))
53   (lunit-assert
54    (equal '(1) (elmo-uniq-list '(1))))
55   (lunit-assert
56    (equal '(1) (elmo-uniq-list '(1 1))))
57   (lunit-assert
58    (equal '(1) (elmo-uniq-list '(1 1 1)))))
59
60 (luna-define-method test-elmo-uniq-list-2 ((case test-elmo-util))
61   (lunit-assert
62    (equal '(1 2 3 4 5 6 nil)
63           (elmo-uniq-list '(1 2 3 4 1 5 6 nil nil 1 1 2))))
64   (lunit-assert
65    (equal '("foo") (elmo-uniq-list '("foo" "foo")))))
66
67 (luna-define-method test-elmo-uniq-list-3 ((case test-elmo-util))
68   "Check using DELETE-FUNCTION"
69   (lunit-assert
70    (equal '("foo" "foo") (elmo-uniq-list '("foo" "foo") #'delq)))
71   (lunit-assert
72    (equal '(:foo) (elmo-uniq-list '(:foo :foo) #'delq))))
73
74 (luna-define-method test-elmo-list-insert-1 ((case test-elmo-util))
75   (lunit-assert
76    (equal '(1 2 3 4 5)
77           (elmo-list-insert '(1 2 3 5) 4 3)))
78   (lunit-assert
79    (equal '(1 2 3 5 9)
80           (elmo-list-insert '(1 2 3 5) 9 :notfound)))
81 ;;; memq vs. member
82 ;;;   (equal '(1 2 "3" 5 4)
83 ;;;       (elmo-list-insert '(1 2 "3" 5) 4 "3"))
84    )
85
86 (luna-define-method test-elmo-list-insert-2 ((case test-elmo-util))
87   "Check not copied"
88   (let* ((list1 '(1 2 3 4 5))
89          (list2 list1))
90     (elmo-list-insert list1 4 3)
91     (lunit-assert
92      (eq list1 list2))))
93 ;;; memq vs. member
94 ;;;   (equal '(1 2 "3" 5 4)
95 ;;;       (elmo-list-insert '(1 2 "3" 5) 4 "3"))
96
97 (luna-define-method test-elmo-list-diff ((case test-elmo-util))
98   (let ((list1 '(1 2 3))
99         (list2 '(1 2 3 4))
100         (list3 '(1 2 4))
101         (list4 '(4 5 6))
102         (list5 '(3 4 5 6)))
103     (lunit-assert
104      (equal '(nil nil)
105             (elmo-list-diff nil nil)))
106     (lunit-assert
107      (equal '(nil (3 2 1))
108             (elmo-list-diff nil list1)))
109     (lunit-assert
110      (equal '((3 2 1) nil)
111             (elmo-list-diff list1 nil)))
112     (lunit-assert
113      (equal '(nil nil)
114             (elmo-list-diff list1 list1)))
115     (lunit-assert
116      (equal '(nil (4))
117             (elmo-list-diff list1 list2)))
118     (lunit-assert
119      (equal '((3) (4))
120             (elmo-list-diff list1 list3)))
121     (lunit-assert
122      (equal '((3 2 1) (6 5 4))
123             (elmo-list-diff list1 list4)))
124     (lunit-assert
125      (equal '((2 1) (6 5))
126             (elmo-list-diff list3 list4)))
127     (lunit-assert
128      (equal '((2 1) (6 5 3))
129             (elmo-list-diff list3 list5)))))
130
131 (luna-define-method test-elmo-delete-char-1 ((case test-elmo-util))
132   (lunit-assert
133    (string= "f" (elmo-delete-char ?o "foo")))
134   (lunit-assert
135    (string= "f\nf" (elmo-delete-char ?o "foo\nfoo")))
136   (lunit-assert
137    (string= "" (elmo-delete-char ?o  "oo")))
138   (lunit-assert
139    (string= "" (elmo-delete-char ?o  ""))))
140
141 (luna-define-method test-elmo-concat-path-1 ((case test-elmo-util))
142   (lunit-assert
143    (string=
144     "/home/foo"
145     (elmo-concat-path "/home" "foo")))
146   (lunit-assert
147    (string=
148     (elmo-concat-path "/home/" "foo")
149     (elmo-concat-path "/home//" "foo"))))
150
151
152 (luna-define-method test-elmo-remove-passwd-1 ((case test-elmo-util))
153   "Check shred password."
154   (let* ((password "cGFzc3dk")
155          (elmo-passwd-alist (list (cons "key" password))))
156     (elmo-remove-passwd "key")
157     (lunit-assert
158      (string= "\0\0\0\0\0\0\0\0" password))))
159
160 (luna-define-method test-elmo-remove-passwd-2 ((case test-elmo-util))
161   "Check remove target pair only.  Not rassoc."
162   (let ((password "cGFzc3dk")
163         (elmo-passwd-alist '(("foo" . "key")
164                              ("key" . "ok")
165                              ("bar" . "baz"))))
166     (elmo-remove-passwd "key")
167     (lunit-assert
168      (equal '(("foo" . "key")
169               ("bar" . "baz"))
170             elmo-passwd-alist))))
171
172 (luna-define-method test-elmo-remove-passwd-3 ((case test-elmo-util))
173   "Multiple same key."
174   (let ((password "cGFzc3dk")
175         (elmo-passwd-alist '(("foo" . "key")
176                              ("key" . "ok")
177                              ("key" . "ok2")
178                              ("bar" . "baz"))))
179     (elmo-remove-passwd "key")
180     (lunit-assert
181      (equal '(("foo" . "key")
182               ("bar" . "baz"))
183             elmo-passwd-alist))))
184
185 (luna-define-method test-elmo-passwd-alist-clear-1 ((case test-elmo-util))
186   "Check shred ALL password."
187   (let* ((password1 "cGFzc3dk")
188          (password2 (copy-sequence password1))
189          (elmo-passwd-alist (list (cons "key1" password1)
190                                   (cons "key2" password2))))
191     (elmo-passwd-alist-clear)
192     (lunit-assert
193      (string= "\0\0\0\0\0\0\0\0" password1))
194     (lunit-assert
195      (string= "\0\0\0\0\0\0\0\0" password2))))
196
197 (luna-define-method test-elmo-address-quote-specials-1 ((case test-elmo-util))
198   ""
199   (lunit-assert
200    (string= "\"dot.atom.text\""
201             (elmo-address-quote-specials "dot.atom.text")))
202   (lunit-assert
203    (string= "\"...\""
204             (elmo-address-quote-specials "..."))))
205
206 (luna-define-method test-elmo-address-quote-specials-2 ((case test-elmo-util))
207   ""
208   (lunit-assert
209    (string=
210     "atext!#$%&'*+-/=?^_`{|}~"
211     (elmo-address-quote-specials "atext!#$%&'*+-/=?^_`{|}~"))))
212
213 (luna-define-method test-elmo-elmo-flatten-1 ((case test-elmo-util))
214   ""
215   (lunit-assert
216    (equal
217     '(1 2 3 4 5)
218     (elmo-flatten '(1 2 (3 4 5))))))
219
220 (luna-define-method test-elmo-number-set-member-1 ((case test-elmo-util))
221   "Check edge."
222   (lunit-assert
223    (equal '((1 . 99))
224           (elmo-number-set-member 1 '((1 . 99)))))
225   (lunit-assert
226    (equal '((1 . 99))
227           (elmo-number-set-member 99 '((1 . 99))))))
228
229 (luna-define-method test-elmo-number-set-member-2 ((case test-elmo-util))
230   "Check edge."
231   (lunit-assert
232    (null (elmo-number-set-member 0 '((1 . 99)))))
233   (lunit-assert
234    (null (elmo-number-set-member 100 '((1 . 99))))))
235
236 (luna-define-method test-elmo-number-set-append-list-1 ((case test-elmo-util))
237   "Simple testcase."
238   (lunit-assert
239    (equal '((1 . 100))
240           (elmo-number-set-append-list '((1 . 99)) '(100)))))
241
242 (luna-define-method test-elmo-number-set-append-1 ((case test-elmo-util))
243   "Simple testcase."
244   (lunit-assert
245    (equal '((1 . 100))
246           (elmo-number-set-append '((1 . 99)) 100))))
247
248 (luna-define-method test-elmo-number-set-delete-1 ((case test-elmo-util))
249   "Check edge."
250   (lunit-assert
251    (equal '(2 3)
252           (elmo-number-set-delete '(1 2 3) 1))))
253
254 (luna-define-method test-elmo-number-set-delete-2 ((case test-elmo-util))
255   "Normal case."
256   (lunit-assert
257    (equal '(1 3)
258           (elmo-number-set-delete '(1 2 3) 2))))
259
260 (luna-define-method test-elmo-number-set-delete-3 ((case test-elmo-util))
261   "Check edge."
262   (lunit-assert
263    (equal '(1 2)
264           (elmo-number-set-delete '(1 2 3) 3))))
265
266 (luna-define-method test-elmo-number-set-delete-4 ((case test-elmo-util))
267   "Check edge."
268   (lunit-assert
269    (equal '((2 . 100))
270           (elmo-number-set-delete '((1 . 100)) 1))))
271
272 (luna-define-method test-elmo-number-set-delete-5 ((case test-elmo-util))
273   "Check edge."
274   (lunit-assert
275    (equal '(1 (3 . 100))
276           (elmo-number-set-delete '((1 . 100)) 2))))
277
278 (luna-define-method test-elmo-number-set-delete-6 ((case test-elmo-util))
279   "Normal case."
280   (lunit-assert
281    (equal '((1 . 49) (51 . 100))
282           (elmo-number-set-delete '((1 . 100)) 50))))
283
284 (luna-define-method test-elmo-number-set-delete-7 ((case test-elmo-util))
285   "Check edge."
286   (lunit-assert
287    (equal '((1 . 98) 100)
288           (elmo-number-set-delete '((1 . 100)) 99))))
289
290 (luna-define-method test-elmo-number-set-delete-8 ((case test-elmo-util))
291   "Check edge."
292   (lunit-assert
293    (equal '((1 . 99))
294           (elmo-number-set-delete '((1 . 100)) 100))))
295
296 (luna-define-method test-elmo-number-set-delete-list-1 ((case test-elmo-util))
297   "Simple testcase."
298   (lunit-assert
299    (equal '((1 . 99))
300           (elmo-number-set-delete-list '((1 . 100)) '(100)))))
301
302 (luna-define-method test-elmo-number-set-to-number-list-1 ((case test-elmo-util))
303   "Simple testcase."
304   (lunit-assert
305    (equal '(1 2 3 4 5 6 7 8 9)
306           (elmo-number-set-to-number-list '((1 . 9)))))
307   (lunit-assert
308    (equal '(1)
309           (elmo-number-set-to-number-list '(1)))))