Commit | Line | Data |
---|---|---|
c07b2710 | 1 | ;;; occur-tests.el --- Test suite for occur. |
5275ff8b | 2 | |
73b0cd50 | 3 | ;; Copyright (C) 2010-2011 Free Software Foundation, Inc. |
5275ff8b JL |
4 | |
5 | ;; Author: Juri Linkov <juri@jurta.org> | |
6 | ;; Keywords: matching, internal | |
7 | ||
8 | ;; This file is part of GNU Emacs. | |
9 | ||
10 | ;; GNU Emacs is free software: you can redistribute it and/or modify | |
11 | ;; it under the terms of the GNU General Public License as published by | |
12 | ;; the Free Software Foundation, either version 3 of the License, or | |
13 | ;; (at your option) any later version. | |
14 | ||
15 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | ;; GNU General Public License for more details. | |
19 | ||
20 | ;; You should have received a copy of the GNU General Public License | |
21 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |
22 | ||
5275ff8b JL |
23 | ;;; Code: |
24 | ||
c07b2710 JL |
25 | (require 'ert) |
26 | ||
5275ff8b JL |
27 | (defconst occur-tests |
28 | '( | |
29 | ;; * Test one-line matches (at bob, eob, bol, eol). | |
30 | ("x" 0 "\ | |
31 | xa | |
32 | b | |
33 | cx | |
34 | xd | |
35 | xex | |
36 | fx | |
37 | " "\ | |
c07b2710 | 38 | 5 matches for \"x\" in buffer: *temp*<2> |
5275ff8b JL |
39 | 1:xa |
40 | 3:cx | |
41 | 4:xd | |
42 | 5:xex | |
43 | 6:fx | |
44 | ") | |
45 | ;; * Test multi-line matches, this is the first test from | |
46 | ;; http://lists.gnu.org/archive/html/emacs-devel/2005-06/msg01008.html | |
47 | ;; where numbers are replaced with letters. | |
48 | ("a\na" 0 "\ | |
49 | a | |
50 | a | |
51 | a | |
52 | a | |
53 | a | |
54 | " "\ | |
c07b2710 | 55 | 2 matches for \"a^Ja\" in buffer: *temp*<2> |
5275ff8b JL |
56 | 1:a |
57 | :a | |
58 | 3:a | |
59 | :a | |
60 | ") | |
61 | ;; * Test multi-line matches, this is the second test from | |
62 | ;; http://lists.gnu.org/archive/html/emacs-devel/2005-06/msg01008.html | |
63 | ;; where numbers are replaced with letters. | |
64 | ("a\nb" 0 "\ | |
65 | a | |
66 | b | |
67 | c | |
68 | a | |
69 | b | |
70 | " "\ | |
c07b2710 | 71 | 2 matches for \"a^Jb\" in buffer: *temp*<2> |
5275ff8b JL |
72 | 1:a |
73 | :b | |
74 | 4:a | |
75 | :b | |
76 | ") | |
77 | ;; * Test line numbers for multi-line matches with empty last match line. | |
78 | ("a\n" 0 "\ | |
79 | a | |
80 | ||
81 | c | |
82 | a | |
83 | ||
84 | " "\ | |
c07b2710 | 85 | 2 matches for \"a^J\" in buffer: *temp*<2> |
5275ff8b JL |
86 | 1:a |
87 | : | |
88 | 4:a | |
89 | : | |
90 | ") | |
91 | ;; * Test multi-line matches with 3 match lines. | |
92 | ("x\n.x\n" 0 "\ | |
93 | ax | |
94 | bx | |
95 | c | |
96 | d | |
97 | ex | |
98 | fx | |
99 | " "\ | |
c07b2710 | 100 | 2 matches for \"x^J.x^J\" in buffer: *temp*<2> |
5275ff8b JL |
101 | 1:ax |
102 | :bx | |
103 | :c | |
104 | 5:ex | |
105 | :fx | |
106 | : | |
107 | ") | |
dc2d2590 JL |
108 | ;; * Test non-overlapping context lines with matches at bob/eob. |
109 | ("x" 1 "\ | |
110 | ax | |
111 | b | |
112 | c | |
113 | d | |
114 | ex | |
115 | f | |
116 | g | |
117 | hx | |
118 | " "\ | |
c07b2710 | 119 | 3 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
120 | 1:ax |
121 | :b | |
122 | ------- | |
123 | :d | |
124 | 5:ex | |
125 | :f | |
126 | ------- | |
127 | :g | |
128 | 8:hx | |
129 | ") | |
130 | ;; * Test non-overlapping context lines with matches not at bob/eob. | |
131 | ("x" 1 "\ | |
132 | a | |
133 | bx | |
134 | c | |
135 | d | |
136 | ex | |
137 | f | |
138 | " "\ | |
c07b2710 | 139 | 2 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
140 | :a |
141 | 2:bx | |
142 | :c | |
143 | ------- | |
144 | :d | |
145 | 5:ex | |
146 | :f | |
147 | ") | |
148 | ;; * Test overlapping context lines with matches at bob/eob. | |
149 | ("x" 2 "\ | |
150 | ax | |
151 | bx | |
152 | c | |
153 | dx | |
154 | e | |
155 | f | |
156 | gx | |
157 | h | |
158 | i | |
159 | j | |
160 | kx | |
161 | " "\ | |
c07b2710 | 162 | 5 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
163 | 1:ax |
164 | 2:bx | |
165 | :c | |
166 | 4:dx | |
167 | :e | |
168 | :f | |
169 | 7:gx | |
170 | :h | |
171 | :i | |
172 | :j | |
173 | 11:kx | |
174 | ") | |
175 | ;; * Test overlapping context lines with matches not at bob/eob. | |
176 | ("x" 2 "\ | |
177 | a | |
178 | b | |
179 | cx | |
180 | d | |
181 | e | |
182 | f | |
183 | gx | |
184 | h | |
185 | i | |
186 | " "\ | |
c07b2710 | 187 | 2 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
188 | :a |
189 | :b | |
190 | 3:cx | |
191 | :d | |
192 | :e | |
193 | :f | |
194 | 7:gx | |
195 | :h | |
196 | :i | |
197 | ") | |
198 | ;; * Test overlapping context lines with empty first and last line.. | |
199 | ("x" 2 "\ | |
200 | ||
201 | b | |
202 | cx | |
203 | d | |
204 | e | |
205 | f | |
206 | gx | |
207 | h | |
208 | ||
209 | " "\ | |
c07b2710 | 210 | 2 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
211 | : |
212 | :b | |
213 | 3:cx | |
214 | :d | |
215 | :e | |
216 | :f | |
217 | 7:gx | |
218 | :h | |
219 | : | |
220 | ") | |
221 | ;; * Test multi-line overlapping context lines. | |
222 | ("x\n.x" 2 "\ | |
223 | ax | |
224 | bx | |
225 | c | |
226 | d | |
227 | ex | |
228 | fx | |
229 | g | |
230 | h | |
231 | i | |
232 | jx | |
233 | kx | |
234 | " "\ | |
c07b2710 | 235 | 3 matches for \"x^J.x\" in buffer: *temp*<2> |
dc2d2590 JL |
236 | 1:ax |
237 | :bx | |
238 | :c | |
239 | :d | |
240 | 5:ex | |
241 | :fx | |
242 | :g | |
243 | :h | |
244 | :i | |
245 | 10:jx | |
246 | :kx | |
247 | ") | |
248 | ;; * Test multi-line non-overlapping context lines. | |
249 | ("x\n.x" 2 "\ | |
250 | ax | |
251 | bx | |
252 | c | |
253 | d | |
254 | e | |
255 | f | |
256 | gx | |
257 | hx | |
258 | " "\ | |
c07b2710 | 259 | 2 matches for \"x^J.x\" in buffer: *temp*<2> |
dc2d2590 JL |
260 | 1:ax |
261 | :bx | |
262 | :c | |
263 | :d | |
264 | ------- | |
265 | :e | |
266 | :f | |
267 | 7:gx | |
268 | :hx | |
269 | ") | |
270 | ;; * Test non-overlapping negative (before-context) lines. | |
271 | ("x" -2 "\ | |
272 | a | |
273 | bx | |
274 | c | |
275 | d | |
276 | e | |
277 | fx | |
278 | g | |
279 | h | |
280 | ix | |
281 | " "\ | |
c07b2710 | 282 | 3 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
283 | :a |
284 | 2:bx | |
285 | ------- | |
286 | :d | |
287 | :e | |
288 | 6:fx | |
289 | ------- | |
290 | :g | |
291 | :h | |
292 | 9:ix | |
293 | ") | |
294 | ;; * Test overlapping negative (before-context) lines. | |
295 | ("x" -3 "\ | |
296 | a | |
297 | bx | |
298 | c | |
299 | dx | |
300 | e | |
301 | f | |
302 | gx | |
303 | h | |
304 | " "\ | |
c07b2710 | 305 | 3 matches for \"x\" in buffer: *temp*<2> |
dc2d2590 JL |
306 | :a |
307 | 2:bx | |
308 | :c | |
309 | 4:dx | |
310 | :e | |
311 | :f | |
312 | 7:gx | |
313 | ") | |
314 | ||
315 | ) | |
5275ff8b JL |
316 | "List of tests for `occur'. |
317 | Each element has the format: | |
318 | \(REGEXP NLINES INPUT-BUFFER-STRING OUTPUT-BUFFER-STRING).") | |
319 | ||
c07b2710 JL |
320 | (defun occur-test-case (test) |
321 | (let ((regexp (nth 0 test)) | |
322 | (nlines (nth 1 test)) | |
323 | (input-buffer-string (nth 2 test)) | |
324 | (output-buffer-string (nth 3 test))) | |
325 | (save-window-excursion | |
326 | (with-temp-buffer | |
327 | (insert input-buffer-string) | |
328 | (occur regexp nlines) | |
329 | (equal output-buffer-string | |
330 | (with-current-buffer "*Occur*" | |
331 | (buffer-string))))))) | |
332 | ||
333 | (ert-deftest occur-tests () | |
334 | "Test the functionality of `occur'. | |
335 | The test data is in the `occur-tests' constant." | |
336 | (let ((occur-hook nil)) | |
5275ff8b | 337 | (dolist (test occur-tests) |
c07b2710 | 338 | (should (occur-test-case test))))) |
5275ff8b | 339 | |
c07b2710 | 340 | (provide 'occur-tests) |
5275ff8b | 341 | |
c07b2710 | 342 | ;;; occur-tests.el ends here |