test_parser: do not crash on syntax error
authorJean Privat <jean@pryen.org>
Tue, 9 Jul 2013 22:30:09 +0000 (00:30 +0200)
committerJean Privat <jean@pryen.org>
Wed, 10 Jul 2013 22:10:25 +0000 (00:10 +0200)
Signed-off-by: Jean Privat <jean@pryen.org>

src/test_parser.nit
tests/sav/test_parser.res [moved from tests/sav/test_parser.sav with 100% similarity]
tests/sav/test_parser_args1.res [moved from tests/sav/test_parser_args1.sav with 86% similarity]
tests/sav/test_parser_args2.res [moved from tests/sav/test_parser_args2.sav with 88% similarity]
tests/sav/test_parser_args3.res [new file with mode: 0644]
tests/sav/test_parser_args4.res [new file with mode: 0644]
tests/sav/test_parser_args5.res [new file with mode: 0644]
tests/test_parser.args

index 8824764..98669e2 100644 (file)
@@ -87,6 +87,12 @@ else
                        var tree = parser.parse
                        f.close
 
+                       var error = tree.n_eof
+                       if error isa AError then
+                               print("Error at {error.location}:\n\t{error.message}")
+                               return
+                       end
+
                        if not no_print then
                                (new PrintTreeVisitor).enter_visit(tree)
                        end
similarity index 86%
rename from tests/sav/test_parser_args1.sav
rename to tests/sav/test_parser_args1.res
index 5ce5f8f..ecf3dad 100644 (file)
@@ -1,5 +1,5 @@
-../src/test_parser.nit:17,1--96,1
-  ../src/test_parser.nit:17,1--95,3
+../src/test_parser.nit:17,1--102,1
+  ../src/test_parser.nit:17,1--101,3
     ../src/test_parser.nit:17,1--18,19
       ../src/test_parser.nit:17,1--18,0
         '# Program used to test the NIT parser
               literal value '0' ... ../src/test_parser.nit:40,11
           keyword 'end' ... ../src/test_parser.nit:41,2--4
       keyword 'end' ... ../src/test_parser.nit:42,1--3
-    ../src/test_parser.nit:44,1--95,3
-      ../src/test_parser.nit:44,1--95,3
-        ../src/test_parser.nit:44,1--95,3
+    ../src/test_parser.nit:44,1--101,3
+      ../src/test_parser.nit:44,1--101,3
+        ../src/test_parser.nit:44,1--101,3
           ../src/test_parser.nit:44,1--20
             keyword 'var' ... ../src/test_parser.nit:44,1--3
             identifier 'no_print' ... ../src/test_parser.nit:44,5--12
                 identifier 'shift' ... ../src/test_parser.nit:61,7--11
                 ../src/test_parser.nit:61,2
               keyword 'end' ... ../src/test_parser.nit:62,1--3
-          ../src/test_parser.nit:64,1--95,3
+          ../src/test_parser.nit:64,1--101,3
             keyword 'if' ... ../src/test_parser.nit:64,1--2
             ../src/test_parser.nit:64,4--29
               ../src/test_parser.nit:64,4--16
                   ../src/test_parser.nit:71,8--29
                     literal value '"  -h       print this help"' ... ../src/test_parser.nit:71,8--29
                   ')' ... ../src/test_parser.nit:71,30
-            ../src/test_parser.nit:73,2--95,3
-              ../src/test_parser.nit:73,2--94,4
+            ../src/test_parser.nit:73,2--101,3
+              ../src/test_parser.nit:73,2--100,4
                 keyword 'for' ... ../src/test_parser.nit:73,2--4
                 identifier 'a' ... ../src/test_parser.nit:73,6
                 ../src/test_parser.nit:73,11--14
                   identifier 'args' ... ../src/test_parser.nit:73,11--14
                   ../src/test_parser.nit:73,11
                 keyword 'do' ... ../src/test_parser.nit:73,16--17
-                ../src/test_parser.nit:74,3--94,4
+                ../src/test_parser.nit:74,3--100,4
                   ../src/test_parser.nit:74,3--30
                     keyword 'var' ... ../src/test_parser.nit:74,3--5
                     identifier 'f' ... ../src/test_parser.nit:74,7
                               ../src/test_parser.nit:75,43
                             ')' ... ../src/test_parser.nit:75,44
                         ')' ... ../src/test_parser.nit:75,45
-                  ../src/test_parser.nit:76,3--93,5
+                  ../src/test_parser.nit:76,3--99,5
                     keyword 'if' ... ../src/test_parser.nit:76,3--4
                     ../src/test_parser.nit:76,6--15
                       ../src/test_parser.nit:76,6
                           ../src/test_parser.nit:84,4
                         identifier 'close' ... ../src/test_parser.nit:84,6--10
                         ../src/test_parser.nit:84,4
-                    ../src/test_parser.nit:86,4--93,5
+                    ../src/test_parser.nit:86,4--99,5
                       ../src/test_parser.nit:86,4--33
                         keyword 'var' ... ../src/test_parser.nit:86,4--6
                         identifier 'parser' ... ../src/test_parser.nit:86,8--13
                           ../src/test_parser.nit:88,4
                         identifier 'close' ... ../src/test_parser.nit:88,6--10
                         ../src/test_parser.nit:88,4
-                      ../src/test_parser.nit:90,4--92,6
-                        keyword 'if' ... ../src/test_parser.nit:90,4--5
-                        ../src/test_parser.nit:90,7--18
-                          keyword 'not' ... ../src/test_parser.nit:90,7--9
-                          ../src/test_parser.nit:90,11--18
-                            ../src/test_parser.nit:90,11
-                            identifier 'no_print' ... ../src/test_parser.nit:90,11--18
-                            ../src/test_parser.nit:90,11
-                        ../src/test_parser.nit:91,5--44
-                          ../src/test_parser.nit:91,5--44
-                            ../src/test_parser.nit:91,5--26
-                              '(' ... ../src/test_parser.nit:91,5
-                              ../src/test_parser.nit:91,6--25
-                                keyword 'new' ... ../src/test_parser.nit:91,6--8
-                                ../src/test_parser.nit:91,10--25
-                                  type identifier 'PrintTreeVisitor' ... ../src/test_parser.nit:91,10--25
-                                ../src/test_parser.nit:91,6
-                              ')' ... ../src/test_parser.nit:91,26
-                            identifier 'enter_visit' ... ../src/test_parser.nit:91,28--38
-                            ../src/test_parser.nit:91,39--44
-                              '(' ... ../src/test_parser.nit:91,39
-                              ../src/test_parser.nit:91,40--43
-                                ../src/test_parser.nit:91,40
-                                identifier 'tree' ... ../src/test_parser.nit:91,40--43
-                                ../src/test_parser.nit:91,40
-                              ')' ... ../src/test_parser.nit:91,44
-                        ../src/test_parser.nit:92,4--6
-                          keyword 'end' ... ../src/test_parser.nit:92,4--6
-                      keyword 'end' ... ../src/test_parser.nit:93,3--5
-                  keyword 'end' ... ../src/test_parser.nit:94,2--4
-              keyword 'end' ... ../src/test_parser.nit:95,1--3
-  end of file ... ../src/test_parser.nit:96,1
+                      ../src/test_parser.nit:90,4--25
+                        keyword 'var' ... ../src/test_parser.nit:90,4--6
+                        identifier 'error' ... ../src/test_parser.nit:90,8--12
+                        '=' ... ../src/test_parser.nit:90,14
+                        ../src/test_parser.nit:90,16--25
+                          ../src/test_parser.nit:90,16--19
+                            ../src/test_parser.nit:90,16
+                            identifier 'tree' ... ../src/test_parser.nit:90,16--19
+                            ../src/test_parser.nit:90,16
+                          identifier 'n_eof' ... ../src/test_parser.nit:90,21--25
+                          ../src/test_parser.nit:90,16
+                      ../src/test_parser.nit:91,4--94,6
+                        keyword 'if' ... ../src/test_parser.nit:91,4--5
+                        ../src/test_parser.nit:91,7--22
+                          ../src/test_parser.nit:91,7--11
+                            ../src/test_parser.nit:91,7
+                            identifier 'error' ... ../src/test_parser.nit:91,7--11
+                            ../src/test_parser.nit:91,7
+                          ../src/test_parser.nit:91,17--22
+                            type identifier 'AError' ... ../src/test_parser.nit:91,17--22
+                        ../src/test_parser.nit:92,5--93,10
+                          ../src/test_parser.nit:92,5--58
+                            ../src/test_parser.nit:92,11
+                            identifier 'print' ... ../src/test_parser.nit:92,5--9
+                            ../src/test_parser.nit:92,10--58
+                              '(' ... ../src/test_parser.nit:92,10
+                              ../src/test_parser.nit:92,11--57
+                                ../src/test_parser.nit:92,11--21
+                                  literal value '"Error at {' ... ../src/test_parser.nit:92,11--21
+                                ../src/test_parser.nit:92,22--35
+                                  ../src/test_parser.nit:92,22--26
+                                    ../src/test_parser.nit:92,22
+                                    identifier 'error' ... ../src/test_parser.nit:92,22--26
+                                    ../src/test_parser.nit:92,22
+                                  identifier 'location' ... ../src/test_parser.nit:92,28--35
+                                  ../src/test_parser.nit:92,22
+                                ../src/test_parser.nit:92,36--42
+                                  literal value '}:\n\t{' ... ../src/test_parser.nit:92,36--42
+                                ../src/test_parser.nit:92,43--55
+                                  ../src/test_parser.nit:92,43--47
+                                    ../src/test_parser.nit:92,43
+                                    identifier 'error' ... ../src/test_parser.nit:92,43--47
+                                    ../src/test_parser.nit:92,43
+                                  identifier 'message' ... ../src/test_parser.nit:92,49--55
+                                  ../src/test_parser.nit:92,43
+                                ../src/test_parser.nit:92,56--57
+                                  '}"' ... ../src/test_parser.nit:92,56--57
+                              ')' ... ../src/test_parser.nit:92,58
+                          ../src/test_parser.nit:93,5--10
+                            keyword 'return' ... ../src/test_parser.nit:93,5--10
+                        ../src/test_parser.nit:94,4--6
+                          keyword 'end' ... ../src/test_parser.nit:94,4--6
+                      ../src/test_parser.nit:96,4--98,6
+                        keyword 'if' ... ../src/test_parser.nit:96,4--5
+                        ../src/test_parser.nit:96,7--18
+                          keyword 'not' ... ../src/test_parser.nit:96,7--9
+                          ../src/test_parser.nit:96,11--18
+                            ../src/test_parser.nit:96,11
+                            identifier 'no_print' ... ../src/test_parser.nit:96,11--18
+                            ../src/test_parser.nit:96,11
+                        ../src/test_parser.nit:97,5--44
+                          ../src/test_parser.nit:97,5--44
+                            ../src/test_parser.nit:97,5--26
+                              '(' ... ../src/test_parser.nit:97,5
+                              ../src/test_parser.nit:97,6--25
+                                keyword 'new' ... ../src/test_parser.nit:97,6--8
+                                ../src/test_parser.nit:97,10--25
+                                  type identifier 'PrintTreeVisitor' ... ../src/test_parser.nit:97,10--25
+                                ../src/test_parser.nit:97,6
+                              ')' ... ../src/test_parser.nit:97,26
+                            identifier 'enter_visit' ... ../src/test_parser.nit:97,28--38
+                            ../src/test_parser.nit:97,39--44
+                              '(' ... ../src/test_parser.nit:97,39
+                              ../src/test_parser.nit:97,40--43
+                                ../src/test_parser.nit:97,40
+                                identifier 'tree' ... ../src/test_parser.nit:97,40--43
+                                ../src/test_parser.nit:97,40
+                              ')' ... ../src/test_parser.nit:97,44
+                        ../src/test_parser.nit:98,4--6
+                          keyword 'end' ... ../src/test_parser.nit:98,4--6
+                      keyword 'end' ... ../src/test_parser.nit:99,3--5
+                  keyword 'end' ... ../src/test_parser.nit:100,2--4
+              keyword 'end' ... ../src/test_parser.nit:101,1--3
+  end of file ... ../src/test_parser.nit:102,1
similarity index 88%
rename from tests/sav/test_parser_args2.sav
rename to tests/sav/test_parser_args2.res
index 96121b3..5c9bc73 100644 (file)
@@ -484,32 +484,69 @@ Read token at ../src/test_parser.nit:88,11--89,0 text='
 '
 Read token at ../src/test_parser.nit:89,1--90,0 text='
 '
-Read token at ../src/test_parser.nit:90,4--5 text='if'
-Read token at ../src/test_parser.nit:90,7--9 text='not'
-Read token at ../src/test_parser.nit:90,11--18 text='no_print'
-Read token at ../src/test_parser.nit:90,20--23 text='then'
-Read token at ../src/test_parser.nit:90,24--91,0 text='
-'
-Read token at ../src/test_parser.nit:91,5 text='('
-Read token at ../src/test_parser.nit:91,6--8 text='new'
-Read token at ../src/test_parser.nit:91,10--25 text='PrintTreeVisitor'
-Read token at ../src/test_parser.nit:91,26 text=')'
-Read token at ../src/test_parser.nit:91,27 text='.'
-Read token at ../src/test_parser.nit:91,28--38 text='enter_visit'
-Read token at ../src/test_parser.nit:91,39 text='('
-Read token at ../src/test_parser.nit:91,40--43 text='tree'
-Read token at ../src/test_parser.nit:91,44 text=')'
-Read token at ../src/test_parser.nit:91,45--92,0 text='
-'
-Read token at ../src/test_parser.nit:92,4--6 text='end'
-Read token at ../src/test_parser.nit:92,7--93,0 text='
-'
-Read token at ../src/test_parser.nit:93,3--5 text='end'
-Read token at ../src/test_parser.nit:93,6--94,0 text='
-'
-Read token at ../src/test_parser.nit:94,2--4 text='end'
-Read token at ../src/test_parser.nit:94,5--95,0 text='
-'
-Read token at ../src/test_parser.nit:95,1--3 text='end'
-Read token at ../src/test_parser.nit:95,4--96,0 text='
+Read token at ../src/test_parser.nit:90,4--6 text='var'
+Read token at ../src/test_parser.nit:90,8--12 text='error'
+Read token at ../src/test_parser.nit:90,14 text='='
+Read token at ../src/test_parser.nit:90,16--19 text='tree'
+Read token at ../src/test_parser.nit:90,20 text='.'
+Read token at ../src/test_parser.nit:90,21--25 text='n_eof'
+Read token at ../src/test_parser.nit:90,26--91,0 text='
+'
+Read token at ../src/test_parser.nit:91,4--5 text='if'
+Read token at ../src/test_parser.nit:91,7--11 text='error'
+Read token at ../src/test_parser.nit:91,13--15 text='isa'
+Read token at ../src/test_parser.nit:91,17--22 text='AError'
+Read token at ../src/test_parser.nit:91,24--27 text='then'
+Read token at ../src/test_parser.nit:91,28--92,0 text='
+'
+Read token at ../src/test_parser.nit:92,5--9 text='print'
+Read token at ../src/test_parser.nit:92,10 text='('
+Read token at ../src/test_parser.nit:92,11--21 text='"Error at {'
+Read token at ../src/test_parser.nit:92,22--26 text='error'
+Read token at ../src/test_parser.nit:92,27 text='.'
+Read token at ../src/test_parser.nit:92,28--35 text='location'
+Read token at ../src/test_parser.nit:92,36--42 text='}:\n\t{'
+Read token at ../src/test_parser.nit:92,43--47 text='error'
+Read token at ../src/test_parser.nit:92,48 text='.'
+Read token at ../src/test_parser.nit:92,49--55 text='message'
+Read token at ../src/test_parser.nit:92,56--57 text='}"'
+Read token at ../src/test_parser.nit:92,58 text=')'
+Read token at ../src/test_parser.nit:92,59--93,0 text='
+'
+Read token at ../src/test_parser.nit:93,5--10 text='return'
+Read token at ../src/test_parser.nit:93,11--94,0 text='
+'
+Read token at ../src/test_parser.nit:94,4--6 text='end'
+Read token at ../src/test_parser.nit:94,7--95,0 text='
+'
+Read token at ../src/test_parser.nit:95,1--96,0 text='
+'
+Read token at ../src/test_parser.nit:96,4--5 text='if'
+Read token at ../src/test_parser.nit:96,7--9 text='not'
+Read token at ../src/test_parser.nit:96,11--18 text='no_print'
+Read token at ../src/test_parser.nit:96,20--23 text='then'
+Read token at ../src/test_parser.nit:96,24--97,0 text='
+'
+Read token at ../src/test_parser.nit:97,5 text='('
+Read token at ../src/test_parser.nit:97,6--8 text='new'
+Read token at ../src/test_parser.nit:97,10--25 text='PrintTreeVisitor'
+Read token at ../src/test_parser.nit:97,26 text=')'
+Read token at ../src/test_parser.nit:97,27 text='.'
+Read token at ../src/test_parser.nit:97,28--38 text='enter_visit'
+Read token at ../src/test_parser.nit:97,39 text='('
+Read token at ../src/test_parser.nit:97,40--43 text='tree'
+Read token at ../src/test_parser.nit:97,44 text=')'
+Read token at ../src/test_parser.nit:97,45--98,0 text='
+'
+Read token at ../src/test_parser.nit:98,4--6 text='end'
+Read token at ../src/test_parser.nit:98,7--99,0 text='
+'
+Read token at ../src/test_parser.nit:99,3--5 text='end'
+Read token at ../src/test_parser.nit:99,6--100,0 text='
+'
+Read token at ../src/test_parser.nit:100,2--4 text='end'
+Read token at ../src/test_parser.nit:100,5--101,0 text='
+'
+Read token at ../src/test_parser.nit:101,1--3 text='end'
+Read token at ../src/test_parser.nit:101,4--102,0 text='
 '
diff --git a/tests/sav/test_parser_args3.res b/tests/sav/test_parser_args3.res
new file mode 100644 (file)
index 0000000..100c6c8
--- /dev/null
@@ -0,0 +1,2 @@
+Error at ./error_syntax.nit:19,2:
+       Syntax error: unknown token ?.
diff --git a/tests/sav/test_parser_args4.res b/tests/sav/test_parser_args4.res
new file mode 100644 (file)
index 0000000..9618d89
--- /dev/null
@@ -0,0 +1,38 @@
+Read token at ./error_syntax.nit:1,1--2,0 text='# This file is part of NIT ( http://www.nitlanguage.org ).
+'
+Read token at ./error_syntax.nit:2,1--3,0 text='#
+'
+Read token at ./error_syntax.nit:3,1--4,0 text='# Copyright 2009 Jean Privat <jean@pryen.org>
+'
+Read token at ./error_syntax.nit:4,1--5,0 text='#
+'
+Read token at ./error_syntax.nit:5,1--6,0 text='# Licensed under the Apache License, Version 2.0 (the "License");
+'
+Read token at ./error_syntax.nit:6,1--7,0 text='# you may not use this file except in compliance with the License.
+'
+Read token at ./error_syntax.nit:7,1--8,0 text='# You may obtain a copy of the License at
+'
+Read token at ./error_syntax.nit:8,1--9,0 text='#
+'
+Read token at ./error_syntax.nit:9,1--10,0 text='#     http://www.apache.org/licenses/LICENSE-2.0
+'
+Read token at ./error_syntax.nit:10,1--11,0 text='#
+'
+Read token at ./error_syntax.nit:11,1--12,0 text='# Unless required by applicable law or agreed to in writing, software
+'
+Read token at ./error_syntax.nit:12,1--13,0 text='# distributed under the License is distributed on an "AS IS" BASIS,
+'
+Read token at ./error_syntax.nit:13,1--14,0 text='# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+Read token at ./error_syntax.nit:14,1--15,0 text='# See the License for the specific language governing permissions and
+'
+Read token at ./error_syntax.nit:15,1--16,0 text='# limitations under the License.
+'
+Read token at ./error_syntax.nit:16,1--17,0 text='
+'
+Read token at ./error_syntax.nit:17,1--5 text='class'
+Read token at ./error_syntax.nit:17,7 text='A'
+Read token at ./error_syntax.nit:17,8--18,0 text='
+'
+Read token at ./error_syntax.nit:18,2--19,0 text='#alt1#once
+'
diff --git a/tests/sav/test_parser_args5.res b/tests/sav/test_parser_args5.res
new file mode 100644 (file)
index 0000000..2b55dba
--- /dev/null
@@ -0,0 +1,2 @@
+Error at ./error_syntax3.nit:1,1--4:
+       Syntax error: unexpected keyword 'else'.
index 78cd96e..9ee0788 100644 (file)
@@ -1,2 +1,5 @@
 ../src/test_parser.nit
 -l ../src/test_parser.nit
+./error_syntax.nit
+-l ./error_syntax.nit
+./error_syntax3.nit