446
|
1 ;;; -*- coding: iso-8859-1 -*-
|
|
2
|
|
3 ;; Copyright (C) 2000 Free Software Foundation, Inc.
|
|
4
|
|
5 ;; Author: Yoshiki Hayashi <yoshiki@xemacs.org>
|
|
6 ;; Maintainer: Yoshiki Hayashi <yoshiki@xemacs.org>
|
|
7 ;; Created: 2000
|
|
8 ;; Keywords: tests
|
|
9
|
|
10 ;; This file is part of XEmacs.
|
|
11
|
|
12 ;; XEmacs is free software; you can redistribute it and/or modify it
|
|
13 ;; under the terms of the GNU General Public License as published by
|
|
14 ;; the Free Software Foundation; either version 2, or (at your option)
|
|
15 ;; any later version.
|
|
16
|
|
17 ;; XEmacs is distributed in the hope that it will be useful, but
|
|
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
20 ;; General Public License for more details.
|
|
21
|
|
22 ;; You should have received a copy of the GNU General Public License
|
|
23 ;; along with XEmacs; see the file COPYING. If not, write to the Free
|
|
24 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
25 ;; 02111-1307, USA.
|
|
26
|
|
27 ;;; Synched up with: Not in FSF.
|
|
28
|
|
29 ;;; Commentary:
|
|
30
|
|
31 ;; Test regular expression.
|
|
32
|
|
33 (Check-Error-Message error "Trailing backslash"
|
|
34 (string-match "\\" "a"))
|
|
35 (Check-Error-Message error "Invalid preceding regular expression"
|
|
36 (string-match "a++" "a"))
|
|
37 (Check-Error-Message error "Invalid preceding regular expression"
|
|
38 (string-match "a**" "a"))
|
|
39 (Check-Error-Message error "Invalid preceding regular expression"
|
|
40 (string-match "a???" "a"))
|
|
41 (Check-Error-Message error "Unmatched \\[ or \\[^"
|
|
42 (string-match "[" "a"))
|
|
43 (Check-Error-Message error "Unmatched \\[ or \\[^"
|
|
44 (string-match "[abc" "a"))
|
|
45 (Check-Error-Message error "Unmatched ) or \\\\)"
|
|
46 (string-match "\\)" "a"))
|
|
47 (Check-Error-Message error "Invalid regular expression"
|
|
48 (string-match "\\(?.\\)" "a"))
|
|
49 (Check-Error-Message error "Unmatched \\\\{"
|
|
50 (string-match "a\\{" "a"))
|
|
51 (Check-Error-Message error "Invalid content of \\\\{\\\\}"
|
|
52 (string-match "a\\{a\\}" "a"))
|
|
53
|
|
54 ;; exactn
|
|
55
|
|
56 ;; string-match
|
|
57 (with-temp-buffer
|
|
58 ;; case-insensitive
|
|
59 (Assert (string-match "ä" "ä"))
|
|
60 (Assert (string-match "ä" "Ä"))
|
|
61 (Assert (string-match "Ä" "Ä"))
|
|
62 (Assert (string-match "Ä" "ä"))
|
|
63 ;; case-sensitive
|
|
64 (setq case-fold-search nil)
|
|
65 (Assert (string-match "ä" "ä"))
|
|
66 (Assert (not (string-match "ä" "Ä")))
|
|
67 (Assert (string-match "Ä" "Ä"))
|
|
68 (Assert (not (string-match "Ä" "ä"))))
|
|
69
|
|
70 ;; looking-at
|
|
71 (with-temp-buffer
|
|
72 (insert "äÄ")
|
|
73 ;; case-insensitive
|
|
74 (goto-char (point-min))
|
|
75 (Assert (looking-at "ä"))
|
|
76 (Assert (looking-at "Ä"))
|
|
77 (forward-char)
|
|
78 (Assert (looking-at "ä"))
|
|
79 (Assert (looking-at "Ä"))
|
|
80 ;; case-sensitive
|
|
81 (setq case-fold-search nil)
|
|
82 (goto-char (point-min))
|
|
83 (Assert (looking-at "ä"))
|
|
84 (Assert (not (looking-at "Ä")))
|
|
85 (forward-char)
|
|
86 (Assert (not (looking-at "ä")))
|
|
87 (Assert (looking-at "Ä")))
|
|
88
|
|
89 ;; re-search-forward and re-search-backward
|
|
90 (with-temp-buffer
|
|
91 (insert "äÄ")
|
|
92 ;; case insensitive
|
|
93 ;; forward
|
|
94 (goto-char (point-min))
|
|
95 ;; Avoid trivial regexp.
|
|
96 (Assert (eq 2 (re-search-forward "ä\\|a" nil t)))
|
|
97 (goto-char (point-min))
|
|
98 (Assert (eq 2 (re-search-forward "Ä\\|a" nil t)))
|
|
99 (goto-char (1+ (point-min)))
|
|
100 (Assert (eq 3 (re-search-forward "ä\\|a" nil t)))
|
|
101 (goto-char (1+ (point-min)))
|
|
102 (Assert (eq 3 (re-search-forward "Ä\\|a" nil t)))
|
|
103 ;; backward
|
|
104 (goto-char (point-max))
|
|
105 (Assert (eq 2 (re-search-backward "ä\\|a" nil t)))
|
|
106 (goto-char (point-max))
|
|
107 (Assert (eq 2 (re-search-backward "Ä\\|a" nil t)))
|
|
108 (goto-char (1- (point-max)))
|
|
109 (Assert (eq 1 (re-search-backward "ä\\|a" nil t)))
|
|
110 (goto-char (1- (point-max)))
|
|
111 (Assert (eq 1 (re-search-backward "Ä\\|a" nil t)))
|
|
112 ;; case sensitive
|
|
113 (setq case-fold-search nil)
|
|
114 ;; forward
|
|
115 (goto-char (point-min))
|
|
116 (Assert (eq 2 (re-search-forward "ä\\|a" nil t)))
|
|
117 (goto-char (point-min))
|
|
118 (Assert (eq 3 (re-search-forward "Ä\\|a" nil t)))
|
|
119 (goto-char (1+ (point-min)))
|
|
120 (Assert (not (re-search-forward "ä\\|a" nil t)))
|
|
121 (goto-char (1+ (point-min)))
|
|
122 (Assert (eq 3 (re-search-forward "Ä\\|a" nil t)))
|
|
123 ;; backward
|
|
124 (goto-char (point-max))
|
|
125 (Assert (eq 1 (re-search-backward "ä\\|a" nil t)))
|
|
126 (goto-char (point-max))
|
|
127 (Assert (eq 2 (re-search-backward "Ä\\|a" nil t)))
|
|
128 (goto-char (1- (point-max)))
|
|
129 (Assert (eq 1 (re-search-backward "ä\\|a" nil t)))
|
|
130 (goto-char (1- (point-max)))
|
|
131 (Assert (not (re-search-backward "Ä\\|a" nil t))))
|
|
132
|
|
133 ;; duplicate
|
|
134 (with-temp-buffer
|
|
135 ;; case insensitive
|
|
136 (Assert (string-match "^\\(ä\\)\\1$" "ää"))
|
|
137 (Assert (string-match "^\\(ä\\)\\1$" "äÄ"))
|
|
138 (Assert (string-match "^\\(ä\\)\\1$" "ÄÄ"))
|
|
139 (Assert (string-match "^\\(ä\\)\\1$" "Ää"))
|
|
140 (Assert (string-match "^\\(Ä\\)\\1$" "ää"))
|
|
141 (Assert (string-match "^\\(Ä\\)\\1$" "äÄ"))
|
|
142 (Assert (string-match "^\\(Ä\\)\\1$" "ÄÄ"))
|
|
143 (Assert (string-match "^\\(Ä\\)\\1$" "Ää"))
|
|
144 ;; case sensitive
|
|
145 (setq case-fold-search nil)
|
|
146 (Assert (string-match "^\\(ä\\)\\1$" "ää"))
|
|
147 (Assert (not (string-match "^\\(ä\\)\\1$" "äÄ")))
|
|
148 (Assert (not (string-match "^\\(ä\\)\\1$" "ÄÄ")))
|
|
149 (Assert (not (string-match "^\\(ä\\)\\1$" "Ää")))
|
|
150 (Assert (not (string-match "^\\(Ä\\)\\1$" "ää")))
|
|
151 (Assert (not (string-match "^\\(Ä\\)\\1$" "äÄ")))
|
|
152 (Assert (string-match "^\\(Ä\\)\\1$" "ÄÄ"))
|
|
153 (Assert (not (string-match "^\\(Ä\\)\\1$" "Ää"))))
|
|
154
|
|
155 ;; charset, charset_not
|
|
156 ;; Not called because it takes too much time.
|
|
157 (defun test-regexp-charset-paranoid ()
|
|
158 (let ((i 0)
|
|
159 (max (expt 2 (if (featurep 'mule) 19 8)))
|
|
160 (range "[a-z]")
|
|
161 (range-not "[^a-z]")
|
|
162 char string)
|
|
163 (while (< i max)
|
|
164 (when (setq char (int-to-char i))
|
|
165 (setq string (char-to-string char))
|
|
166 (if (or (and (<= 65 i)
|
|
167 (<= i 90))
|
|
168 (and (<= 97 i)
|
|
169 (<= i 122)))
|
|
170 (progn
|
|
171 (Assert (string-match range string))
|
|
172 (Assert (not (string-match range-not string))))
|
|
173 (Assert (not (string-match range string)))
|
|
174 (Assert (string-match range-not string))))
|
|
175 (setq i (1+ i)))))
|
|
176
|
|
177 ;; (test-regexp-charset-paranoid)
|
|
178
|
|
179 ;; charset_mule, charset_mule_not
|
|
180 ;; Not called because it takes too much time.
|
|
181 (defun test-regex-charset-mule-paranoid ()
|
|
182 (if (featurep 'mule)
|
|
183 (let ((i 0)
|
|
184 (max (expt 2 19))
|
|
185 (range (format "[%c-%c]"
|
|
186 (make-char 'japanese-jisx0208 36 34)
|
|
187 (make-char 'japanese-jisx0208 36 42)))
|
|
188 (range-not (format "[^%c-%c]"
|
|
189 (make-char 'japanese-jisx0208 36 34)
|
|
190 (make-char 'japanese-jisx0208 36 42)))
|
|
191 (min-int (char-to-int (make-char 'japanese-jisx0208 36 34)))
|
|
192 (max-int (char-to-int (make-char 'japanese-jisx0208 36 42)))
|
|
193 char string)
|
|
194 (while (< i max)
|
|
195 (when (setq char (int-to-char i))
|
|
196 (setq string (char-to-string char))
|
|
197 (if (and (<= min-int i)
|
|
198 (<= i max-int))
|
|
199 (progn
|
|
200 (Assert (string-match range string))
|
|
201 (Assert (not (string-match range-not string))))
|
|
202 (Assert (not (string-match range string)))
|
|
203 (Assert (string-match range-not string))))
|
|
204 (setq i (1+ i))))))
|
|
205
|
|
206 ;; (test-regex-charset-mule-paranoid)
|