Commit | Line | Data |
---|---|---|
adec429a CY |
1 | ;;; compile-tests.el --- Test suite for font parsing. |
2 | ||
acaf905b | 3 | ;; Copyright (C) 2011-2012 Free Software Foundation, Inc. |
adec429a CY |
4 | |
5 | ;; Author: Chong Yidong <cyd@stupidchicken.com> | |
6 | ;; Keywords: internal | |
7 | ;; Human-Keywords: internal | |
8 | ||
9 | ;; This file is part of GNU Emacs. | |
10 | ||
11 | ;; GNU Emacs is free software: you can redistribute it and/or modify | |
12 | ;; it under the terms of the GNU General Public License as published by | |
13 | ;; the Free Software Foundation, either version 3 of the License, or | |
14 | ;; (at your option) any later version. | |
15 | ||
16 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | ;; GNU General Public License for more details. | |
20 | ||
21 | ;; You should have received a copy of the GNU General Public License | |
22 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |
23 | ||
24 | ;;; Code: | |
25 | ||
26 | (require 'ert) | |
27 | (require 'compile) | |
28 | ||
29 | (defvar compile-tests--test-regexps-data | |
30 | ;; The computed column numbers are zero-indexed, so subtract 1 from | |
31 | ;; what's reported in the string. The end column numbers are for | |
32 | ;; the character after, so it matches what's reported in the string. | |
33 | '(;; absoft | |
34 | ("Error on line 3 of t.f: Execution error unclassifiable statement" | |
35 | 1 nil 3 "t.f") | |
36 | ("Line 45 of \"foo.c\": bloofle undefined" | |
37 | 1 nil 45 "foo.c") | |
38 | ("error on line 19 of fplot.f: spelling error?" | |
39 | 1 nil 19 "fplot.f") | |
40 | ("warning on line 17 of fplot.f: data type is undefined for variable d" | |
41 | 1 nil 17 "fplot.f") | |
42 | ;; Ada & Mpatrol | |
43 | ("foo.adb:61:11: [...] in call to size declared at foo.ads:11" | |
5c09001c | 44 | 1 11 61 "foo.adb") |
adec429a CY |
45 | ("foo.adb:61:11: [...] in call to size declared at foo.ads:11" |
46 | 52 nil 11 "foo.ads") | |
47 | (" 0x8008621 main+16 at error.c:17" | |
48 | 23 nil 17 "error.c") | |
49 | ;; aix | |
50 | ("****** Error number 140 in line 8 of file errors.c ******" | |
51 | 25 nil 8 "errors.c") | |
52 | ;; ant | |
53 | ("[javac] /src/DataBaseTestCase.java:27: unreported exception ..." | |
54 | 13 nil 27 "/src/DataBaseTestCase.java") | |
55 | ("[javac] /src/DataBaseTestCase.java:49: warning: finally clause cannot complete normally" | |
56 | 13 nil 49 "/src/DataBaseTestCase.java") | |
57 | ("[jikes] foo.java:3:5:7:9: blah blah" | |
5c09001c | 58 | 14 (5 . 10) (3 . 7) "foo.java") |
adec429a CY |
59 | ;; bash |
60 | ("a.sh: line 1: ls-l: command not found" | |
61 | 1 nil 1 "a.sh") | |
62 | ;; borland | |
63 | ("Error ping.c 15: Unable to open include file 'sys/types.h'" | |
64 | 1 nil 15 "ping.c") | |
65 | ("Warning pong.c 68: Call to function 'func' with no prototype" | |
66 | 1 nil 68 "pong.c") | |
67 | ("Error E2010 ping.c 15: Unable to open include file 'sys/types.h'" | |
68 | 1 nil 15 "ping.c") | |
69 | ("Warning W1022 pong.c 68: Call to function 'func' with no prototype" | |
70 | 1 nil 68 "pong.c") | |
71 | ;; caml | |
72 | ("File \"foobar.ml\", lines 5-8, characters 20-155: blah blah" | |
5c09001c | 73 | 1 (20 . 156) (5 . 8) "foobar.ml") |
d9ac1a1e | 74 | ("File \"F:\\ocaml\\sorting.ml\", line 65, characters 2-145:\nWarning 26: unused variable equ." |
5c09001c | 75 | 1 (2 . 146) 65 "F:\\ocaml\\sorting.ml") |
adec429a CY |
76 | ("File \"/usr/share/gdesklets/display/TargetGauge.py\", line 41, in add_children" |
77 | 1 nil 41 "/usr/share/gdesklets/display/TargetGauge.py") | |
78 | ("File \\lib\\python\\Products\\PythonScripts\\PythonScript.py, line 302, in _exec" | |
79 | 1 nil 302 "\\lib\\python\\Products\\PythonScripts\\PythonScript.py") | |
80 | ("File \"/tmp/foo.py\", line 10" | |
81 | 1 nil 10 "/tmp/foo.py") | |
82 | ;; comma | |
83 | ("\"foo.f\", line 3: Error: syntax error near end of statement" | |
84 | 1 nil 3 "foo.f") | |
85 | ("\"vvouch.c\", line 19.5: 1506-046 (S) Syntax error." | |
5c09001c | 86 | 1 5 19 "vvouch.c") |
adec429a | 87 | ("\"foo.c\", line 32 pos 1; (E) syntax error; unexpected symbol: \"lossage\"" |
5c09001c | 88 | 1 1 32 "foo.c") |
adec429a | 89 | ("\"foo.adb\", line 2(11): warning: file name does not match ..." |
5c09001c | 90 | 1 11 2 "foo.adb") |
adec429a | 91 | ("\"src/swapping.c\", line 30.34: 1506-342 (W) \"/*\" detected in comment." |
5c09001c | 92 | 1 34 30 "src/swapping.c") |
adec429a CY |
93 | ;; cucumber |
94 | ("Scenario: undefined step # features/cucumber.feature:3" | |
95 | 29 nil 3 "features/cucumber.feature") | |
96 | (" /home/gusev/.rvm/foo/bar.rb:500:in `_wrap_assertion'" | |
97 | 1 nil 500 "/home/gusev/.rvm/foo/bar.rb") | |
98 | ;; edg-1 edg-2 | |
99 | ("build/intel/debug/../../../struct.cpp(42): error: identifier \"foo\" is undefined" | |
100 | 1 nil 42 "build/intel/debug/../../../struct.cpp") | |
101 | ("build/intel/debug/struct.cpp(44): warning #1011: missing return statement at end of" | |
102 | 1 nil 44 "build/intel/debug/struct.cpp") | |
103 | ("build/intel/debug/iptr.h(302): remark #981: operands are evaluated in unspecified order" | |
104 | 1 nil 302 "build/intel/debug/iptr.h") | |
105 | (" detected during ... at line 62 of \"build/intel/debug/../../../trace.h\"" | |
106 | 31 nil 62 "build/intel/debug/../../../trace.h") | |
107 | ;; epc | |
108 | ("Error 24 at (2:progran.f90) : syntax error" | |
109 | 1 nil 2 "progran.f90") | |
110 | ;; ftnchek | |
111 | (" Dummy arg W in module SUBA line 8 file arrayclash.f is array" | |
112 | 32 nil 8 "arrayclash.f") | |
113 | (" L4 used at line 55 file test/assign.f; never set" | |
114 | 16 nil 55 "test/assign.f") | |
115 | ("Warning near line 10 file arrayclash.f: Module contains no executable" | |
116 | 1 nil 10 "arrayclash.f") | |
117 | ("Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit" | |
5c09001c | 118 | 24 9 31 "assign.f") |
adec429a CY |
119 | ;; iar |
120 | ("\"foo.c\",3 Error[32]: Error message" | |
121 | 1 nil 3 "foo.c") | |
122 | ("\"foo.c\",3 Warning[32]: Error message" | |
123 | 1 nil 3 "foo.c") | |
124 | ;; ibm | |
125 | ("foo.c(2:0) : informational EDC0804: Function foo is not referenced." | |
5c09001c | 126 | 1 0 2 "foo.c") |
adec429a | 127 | ("foo.c(3:8) : warning EDC0833: Implicit return statement encountered." |
5c09001c | 128 | 1 8 3 "foo.c") |
adec429a | 129 | ("foo.c(5:5) : error EDC0350: Syntax error." |
5c09001c | 130 | 1 5 5 "foo.c") |
adec429a CY |
131 | ;; irix |
132 | ("ccom: Error: foo.c, line 2: syntax error" | |
133 | 1 nil 2 "foo.c") | |
134 | ("cc: Severe: /src/Python-2.3.3/Modules/_curses_panel.c, line 17: Cannot find file <panel.h> ..." | |
135 | 1 nil 17 "/src/Python-2.3.3/Modules/_curses_panel.c") | |
136 | ("cc: Info: foo.c, line 27: ..." | |
137 | 1 nil 27 "foo.c") | |
138 | ("cfe: Warning 712: foo.c, line 2: illegal combination of pointer and ..." | |
139 | 1 nil 2 "foo.c") | |
140 | ("cfe: Warning 600: xfe.c: 170: Not in a conditional directive while ..." | |
141 | 1 nil 170 "xfe.c") | |
142 | ("/usr/lib/cmplrs/cc/cfe: Error: foo.c: 1: blah blah" | |
143 | 1 nil 1 "foo.c") | |
144 | ("/usr/lib/cmplrs/cc/cfe: warning: foo.c: 1: blah blah" | |
145 | 1 nil 1 "foo.c") | |
146 | ("foo bar: baz.f, line 27: ..." | |
147 | 1 nil 27 "baz.f") | |
148 | ;; java | |
149 | ("\tat org.foo.ComponentGateway.doGet(ComponentGateway.java:172)" | |
150 | 5 nil 172 "ComponentGateway.java") | |
151 | ("\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:740)" | |
152 | 5 nil 740 "HttpServlet.java") | |
153 | ("==1332== at 0x4040743C: System::getErrorString() (../src/Lib/System.cpp:217)" | |
154 | 13 nil 217 "../src/Lib/System.cpp") | |
155 | ("==1332== by 0x8008621: main (vtest.c:180)" | |
156 | 13 nil 180 "vtest.c") | |
157 | ;; jikes-file jikes-line | |
158 | ("Found 2 semantic errors compiling \"../javax/swing/BorderFactory.java\":" | |
159 | 1 nil nil "../javax/swing/BorderFactory.java") | |
160 | ("Issued 1 semantic warning compiling \"java/awt/Toolkit.java\":" | |
161 | 1 nil nil "java/awt/Toolkit.java") | |
162 | ;; gcc-include | |
163 | ("In file included from /usr/include/c++/3.3/backward/warn.h:4," | |
164 | 1 nil 4 "/usr/include/c++/3.3/backward/warn.h") | |
165 | (" from /usr/include/c++/3.3/backward/iostream.h:31:0," | |
5c09001c | 166 | 1 0 31 "/usr/include/c++/3.3/backward/iostream.h") |
adec429a CY |
167 | (" from test_clt.cc:1:" |
168 | 1 nil 1 "test_clt.cc") | |
169 | ;; gnu | |
170 | ("foo.c:8: message" 1 nil 8 "foo.c") | |
171 | ("../foo.c:8: W: message" 1 nil 8 "../foo.c") | |
172 | ("/tmp/foo.c:8:warning message" 1 nil 8 "/tmp/foo.c") | |
173 | ("foo/bar.py:8: FutureWarning message" 1 nil 8 "foo/bar.py") | |
174 | ("foo.py:8: RuntimeWarning message" 1 nil 8 "foo.py") | |
175 | ("foo.c:8:I: message" 1 nil 8 "foo.c") | |
5c09001c CY |
176 | ("foo.c:8.23: note: message" 1 23 8 "foo.c") |
177 | ("foo.c:8.23: info: message" 1 23 8 "foo.c") | |
178 | ("foo.c:8:23:information: message" 1 23 8 "foo.c") | |
179 | ("foo.c:8.23-45: Informational: message" 1 (23 . nil) (8 . 45) "foo.c") | |
adec429a | 180 | ("foo.c:8-23: message" 1 nil (8 . 23) "foo.c") |
5c09001c CY |
181 | ("foo.c:8-45.3: message" 1 (nil . 4) (8 . 45) "foo.c") |
182 | ("foo.c:8.23-9.1: message" 1 (23 . 2) (8 . 9) "foo.c") | |
adec429a | 183 | ("jade:dbcommon.dsl:133:17:E: missing argument for function call" |
5c09001c | 184 | 1 17 133 "dbcommon.dsl") |
adec429a CY |
185 | ("G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found." |
186 | 1 nil 54 "G:/cygwin/dev/build-myproj.xml") | |
187 | ("file:G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found." | |
188 | 1 nil 54 "G:/cygwin/dev/build-myproj.xml") | |
189 | ("{standard input}:27041: Warning: end of file not at end of a line; newline inserted" | |
190 | 1 nil 27041 "{standard input}") | |
191 | ;; lcc | |
5c09001c CY |
192 | ("E, file.cc(35,52) Illegal operation on pointers" 1 52 35 "file.cc") |
193 | ("W, file.cc(36,52) blah blah" 1 52 36 "file.cc") | |
adec429a CY |
194 | ;; makepp |
195 | ("makepp: Scanning `/foo/bar.c'" 19 nil nil "/foo/bar.c") | |
196 | ("makepp: warning: bla bla `/foo/bar.c' and `/foo/bar.h'" 27 nil nil "/foo/bar.c") | |
197 | ("makepp: bla bla `/foo/Makeppfile:12' bla" 18 nil 12 "/foo/Makeppfile") | |
198 | ("makepp: bla bla `/foo/bar.c' and `/foo/bar.h'" 35 nil nil "/foo/bar.h") | |
199 | ;; maven | |
200 | ("FooBar.java:[111,53] no interface expected here" | |
5c09001c | 201 | 1 53 111 "FooBar.java") |
adec429a CY |
202 | ;; mips-1 mips-2 |
203 | ("TrimMask (255) in solomon.c may be indistinguishable from TrimMasks (93) in solomo.c due to truncation" | |
204 | 11 nil 255 "solomon.c") | |
205 | ("TrimMask (255) in solomon.c may be indistinguishable from TrimMasks (93) in solomo.c due to truncation" | |
206 | 70 nil 93 "solomo.c") | |
207 | ("name defined but never used: LinInt in cmap_calc.c(199)" | |
208 | 40 nil 199 "cmap_calc.c") | |
209 | ;; msft | |
210 | ("keyboard handler.c(537) : warning C4005: 'min' : macro redefinition" | |
211 | 1 nil 537 "keyboard handler.c") | |
212 | ("d:\\tmp\\test.c(23) : error C2143: syntax error : missing ';' before 'if'" | |
213 | 1 nil 23 "d:\\tmp\\test.c") | |
214 | ("d:\\tmp\\test.c(1145) : see declaration of 'nsRefPtr'" | |
215 | 1 nil 1145 "d:\\tmp\\test.c") | |
216 | ;; watcom | |
217 | ("..\src\ctrl\lister.c(109): Error! E1009: Expecting ';' but found '{'" | |
218 | 1 nil 109 "..\src\ctrl\lister.c") | |
219 | ("..\src\ctrl\lister.c(120): Warning! W201: Unreachable code" | |
220 | 1 nil 120 "..\src\ctrl\lister.c") | |
221 | ;; oracle | |
222 | ("Semantic error at line 528, column 5, file erosacqdb.pc:" | |
5c09001c | 223 | 1 5 528 "erosacqdb.pc") |
adec429a | 224 | ("Error at line 41, column 10 in file /usr/src/sb/ODBI_BHP.hpp" |
5c09001c | 225 | 1 10 41 "/usr/src/sb/ODBI_BHP.hpp") |
adec429a | 226 | ("PCC-02150: error at line 49, column 27 in file /usr/src/sb/ODBI_dxfgh.pc" |
5c09001c | 227 | 1 27 49 "/usr/src/sb/ODBI_dxfgh.pc") |
adec429a CY |
228 | ("PCC-00003: invalid SQL Identifier at column name in line 12 of file /usr/src/sb/ODBI_BHP.hpp" |
229 | 1 nil 12 "/usr/src/sb/ODBI_BHP.hpp") | |
230 | ("PCC-00004: mismatched IF/ELSE/ENDIF block at line 27 in file /usr/src/sb/ODBI_BHP.hpp" | |
231 | 1 nil 27 "/usr/src/sb/ODBI_BHP.hpp") | |
232 | ("PCC-02151: line 21 column 40 file /usr/src/sb/ODBI_BHP.hpp:" | |
5c09001c | 233 | 1 40 21 "/usr/src/sb/ODBI_BHP.hpp") |
adec429a CY |
234 | ;; perl |
235 | ("syntax error at automake line 922, near \"':'\"" | |
236 | 14 nil 922 "automake") | |
237 | ("Died at test.pl line 27." | |
238 | 6 nil 27 "test.pl") | |
239 | ("store::odrecall('File_A', 'x2') called at store.pm line 90" | |
240 | 40 nil 90 "store.pm") | |
241 | ("\t(in cleanup) something bad at foo.pl line 3 during global destruction." | |
242 | 29 nil 3 "foo.pl") | |
243 | ("GLib-GObject-WARNING **: /build/buildd/glib2.0-2.14.5/gobject/gsignal.c:1741: instance `0x8206790' has no handler with id `1234' at t-compilation-perl-gtk.pl line 3." | |
244 | 130 nil 3 "t-compilation-perl-gtk.pl") | |
245 | ;; php | |
246 | ("Parse error: parse error, unexpected $ in main.php on line 59" | |
247 | 1 nil 59 "main.php") | |
248 | ("Fatal error: Call to undefined function: mysql_pconnect() in db.inc on line 66" | |
249 | 1 nil 66 "db.inc") | |
250 | ;; ruby | |
251 | ("plain-exception.rb:7:in `fun': unhandled exception" | |
252 | 1 nil 7 "plain-exception.rb") | |
253 | ("\tfrom plain-exception.rb:3:in `proxy'" 2 nil 3 "plain-exception.rb") | |
254 | ("\tfrom plain-exception.rb:12" 2 nil 12 "plain-exception.rb") | |
255 | ;; ruby-Test::Unit | |
256 | ;; FIXME | |
257 | (" [examples/test-unit.rb:28:in `here_is_a_deep_assert'" | |
258 | 5 nil 28 "examples/test-unit.rb") | |
259 | (" examples/test-unit.rb:19:in `test_a_deep_assert']:" | |
260 | 6 nil 19 "examples/test-unit.rb") | |
261 | ("examples/test-unit.rb:10:in `test_assert_raise'" | |
262 | 1 nil 10 "examples/test-unit.rb") | |
263 | ;; rxp | |
264 | ("Error: Mismatched end tag: expected </geroup>, got </group>\nin unnamed entity at line 71 char 8 of file:///home/reto/test/group.xml" | |
5c09001c | 265 | 1 8 71 "/home/reto/test/group.xml") |
adec429a | 266 | ("Warning: Start tag for undeclared element geroup\nin unnamed entity at line 4 char 8 of file:///home/reto/test/group.xml" |
5c09001c | 267 | 1 8 4 "/home/reto/test/group.xml") |
adec429a CY |
268 | ;; sparc-pascal-file sparc-pascal-line sparc-pascal-example |
269 | ("Thu May 14 10:46:12 1992 mom3.p:" | |
270 | 1 nil nil "mom3.p") | |
271 | ;; sun | |
272 | ("cc-1020 CC: REMARK File = CUI_App.h, Line = 735" | |
273 | 13 nil 735 "CUI_App.h") | |
274 | ("cc-1070 cc: WARNING File = linkl.c, Line = 38" | |
275 | 13 nil 38 "linkl.c") | |
276 | ("cf90-113 f90comp: ERROR NSE, File = Hoved.f90, Line = 16, Column = 3" | |
5c09001c | 277 | 18 3 16 "Hoved.f90") |
adec429a CY |
278 | ;; sun-ada |
279 | ("/home3/xdhar/rcds_rc/main.a, line 361, char 6:syntax error: \",\" inserted" | |
5c09001c | 280 | 1 6 361 "/home3/xdhar/rcds_rc/main.a") |
adec429a CY |
281 | ;; 4bsd |
282 | ("/usr/src/foo/foo.c(8): warning: w may be used before set" | |
283 | 1 nil 8 "/usr/src/foo/foo.c") | |
284 | ("/usr/src/foo/foo.c(9): error: w is used before set" | |
285 | 1 nil 9 "/usr/src/foo/foo.c") | |
286 | ("strcmp: variable # of args. llib-lc(359) :: /usr/src/foo/foo.c(8)" | |
287 | 44 nil 8 "/usr/src/foo/foo.c") | |
288 | ("bloofle defined( /users/wolfgang/foo.c(4) ), but never used" | |
289 | 18 nil 4 "/users/wolfgang/foo.c") | |
290 | ;; perl--Pod::Checker | |
291 | ;; FIXME | |
292 | ;; *** ERROR: Spurious text after =cut at line 193 in file foo.pm | |
293 | ;; *** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm | |
294 | ;; *** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod | |
295 | ;; perl--Test | |
296 | ("# Failed test 1 in foo.t at line 6" | |
297 | 1 nil 6 "foo.t") | |
298 | ;; perl--Test::Harness | |
299 | ("NOK 1# Test 1 got: \"1234\" (t/foo.t at line 46)" | |
300 | 1 nil 46 "t/foo.t") | |
301 | ;; weblint | |
302 | ("index.html (13:1) Unknown element <fdjsk>" | |
5c09001c | 303 | 1 1 13 "index.html")) |
adec429a CY |
304 | "List of tests for `compilation-error-regexp-alist'. |
305 | Each element has the form (STR POS COLUMN LINE FILENAME), where | |
306 | STR is an error string, POS is the position of the error in STR, | |
307 | COLUMN and LINE are the reported column and line numbers (or nil) | |
308 | for that error, and FILENAME is the reported filename. | |
309 | ||
310 | LINE can also be of the form (LINE . END-LINE) meaning a range of | |
311 | lines. COLUMN can also be of the form (COLUMN . END-COLUMN) | |
312 | meaning a range of columns starting on LINE and ending on | |
313 | END-LINE, if that matched.") | |
314 | ||
315 | (defun compile--test-error-line (test) | |
316 | (erase-buffer) | |
317 | (setq compilation-locs (make-hash-table)) | |
318 | (insert (car test)) | |
319 | (compilation-parse-errors (point-min) (point-max)) | |
320 | (let ((msg (get-text-property (nth 1 test) 'compilation-message))) | |
321 | (when msg | |
322 | (let ((loc (compilation--message->loc msg)) | |
323 | (col (nth 2 test)) | |
324 | (line (nth 3 test)) | |
325 | (file (nth 4 test)) | |
326 | end-col end-line) | |
327 | (if (consp col) | |
328 | (setq end-col (cdr col) col (car col))) | |
329 | (if (consp line) | |
330 | (setq end-line (cdr line) line (car line))) | |
331 | (and (equal (compilation--loc->col loc) col) | |
332 | (equal (compilation--loc->line loc) line) | |
333 | (equal (caar (compilation--loc->file-struct loc)) file) | |
334 | (or (null end-col) | |
335 | (equal (car (cadr (nth 2 (compilation--loc->file-struct loc)))) | |
336 | end-col)) | |
337 | (equal (car (nth 2 (compilation--loc->file-struct loc))) | |
338 | (or end-line line))))))) | |
339 | ||
340 | (ert-deftest compile-test-error-regexps () | |
341 | "Test the `compilation-error-regexp-alist' regexps. | |
342 | The test data is in `compile-tests--test-regexps-data'." | |
343 | (with-temp-buffer | |
344 | (font-lock-mode -1) | |
345 | (dolist (test compile-tests--test-regexps-data) | |
346 | (should (compile--test-error-line test))))) | |
347 | ||
348 | ;;; compile-tests.el ends here. |