Bug 2431: YangTools grammar misses unknown statement in some statements 44/14144/2
authorMartin Ciglan <mciglan@cisco.com>
Wed, 14 Jan 2015 14:43:10 +0000 (15:43 +0100)
committerRobert Varga <nite@hq.sk>
Fri, 16 Jan 2015 14:46:04 +0000 (14:46 +0000)
Based on existing YANG grammar review, these statements missed unknown statement, wrapped in
statement separator (stmtsep):

submodule-stmt
import-stmt
include-stmt
belongs-to-stmt
revision-stmt

Now fixed.

Change-Id: If0ef7325428b10f10cada5ace427798da6917fe0
Signed-off-by: Martin Ciglan <mciglan@cisco.com>
yang/yang-parser-impl/src/main/antlr/YangParser.g4
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java
yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements-sub.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements.yang [new file with mode: 0644]
yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements2.yang [new file with mode: 0644]

index 9a26c172f3ec4bcbe42d22bb0bd37ceff3d1e122..8dd5a7fc1114f7df92a22e8a7eac64976c0d1f4e 100644 (file)
@@ -125,17 +125,17 @@ yin_element_stmt : YIN_ELEMENT_KEYWORD yin_element_arg stmtend;
 argument_stmt : ARGUMENT_KEYWORD string (SEMICOLON | (LEFT_BRACE identifier_stmt* yin_element_stmt? identifier_stmt* RIGHT_BRACE));
 extension_stmt : EXTENSION_KEYWORD string (SEMICOLON | (LEFT_BRACE  (argument_stmt | status_stmt | description_stmt | reference_stmt | unknown_statement)* RIGHT_BRACE));
 revision_date_stmt : REVISION_DATE_KEYWORD string stmtend;
-revision_stmt : REVISION_KEYWORD string (SEMICOLON | (LEFT_BRACE  (description_stmt )? (reference_stmt )? RIGHT_BRACE));
+revision_stmt : REVISION_KEYWORD string (SEMICOLON | (LEFT_BRACE stmtsep* (description_stmt )? (reference_stmt )? RIGHT_BRACE));
 units_stmt : UNITS_KEYWORD string stmtend;
 reference_stmt : REFERENCE_KEYWORD string stmtend;
 description_stmt : DESCRIPTION_KEYWORD string stmtend;
 contact_stmt : CONTACT_KEYWORD string stmtend;
 organization_stmt : ORGANIZATION_KEYWORD string stmtend;
-belongs_to_stmt : BELONGS_TO_KEYWORD string LEFT_BRACE  prefix_stmt  RIGHT_BRACE;
+belongs_to_stmt : BELONGS_TO_KEYWORD string LEFT_BRACE  stmtsep* prefix_stmt  RIGHT_BRACE;
 prefix_stmt : PREFIX_KEYWORD string stmtend;
 namespace_stmt : NAMESPACE_KEYWORD string stmtend;
-include_stmt : INCLUDE_KEYWORD string (SEMICOLON | (LEFT_BRACE  (revision_date_stmt )? RIGHT_BRACE));
-import_stmt : IMPORT_KEYWORD string LEFT_BRACE  prefix_stmt  (revision_date_stmt )? RIGHT_BRACE;
+include_stmt : INCLUDE_KEYWORD string (SEMICOLON | (LEFT_BRACE stmtsep* (revision_date_stmt )? RIGHT_BRACE));
+import_stmt : IMPORT_KEYWORD string LEFT_BRACE stmtsep* prefix_stmt  (revision_date_stmt )? RIGHT_BRACE;
 yang_version_stmt : YANG_VERSION_KEYWORD string stmtend;
 data_def_stmt : container_stmt | leaf_stmt | leaf_list_stmt | list_stmt | choice_stmt | anyxml_stmt | uses_stmt;
 body_stmts : (( identifier_stmt| extension_stmt | feature_stmt | identity_stmt | typedef_stmt | grouping_stmt | data_def_stmt | augment_stmt | rpc_stmt | notification_stmt | deviation_stmt) )*;
index b3f408ef4e6771bb5e171405afdb0971c8f199a5..760bee4bb05bb2999a51b5f46f7a443252d8a750 100644 (file)
@@ -961,4 +961,23 @@ public class YangParserTest {
             fail("YangParseException should not be thrown");
         }
     }
+
+    @Test
+    public void unknownStatementsInStatementsTest() throws IOException, URISyntaxException {
+        File yangModule1 = new File(getClass().getResource("/yang-grammar-test/stmtsep-in-statements.yang").toURI());
+        File yangModule2 = new File(getClass().getResource("/yang-grammar-test/stmtsep-in-statements2.yang").toURI());
+        File yangSubModule = new File(getClass().getResource("/yang-grammar-test/stmtsep-in-statements-sub.yang").toURI());
+
+        List<File> yangs = new ArrayList<File>();
+        yangs.add(yangModule1);
+        yangs.add(yangModule2);
+        yangs.add(yangSubModule);
+
+        try {
+            YangParserImpl.getInstance().parseFiles(yangs);
+        } catch (YangParseException e) {
+            e.printStackTrace();
+            fail("YangParseException should not be thrown");
+        }
+    }
 }
diff --git a/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements-sub.yang b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements-sub.yang
new file mode 100644 (file)
index 0000000..5a89db5
--- /dev/null
@@ -0,0 +1,28 @@
+submodule subtest {
+    aaa {
+       bbb {
+        yang-version 1;
+       }
+    }
+
+    yang-version: 1;
+
+    belongs-to test {
+        aaa {
+           bbb {
+            yang-version 1;
+           }
+        }
+       prefix test;
+    }
+
+    revision 2015-01-14 {
+        ccc {
+            ddd {
+                yang-version 1;
+            }
+        }
+
+        description "Initial revision.";
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements.yang b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements.yang
new file mode 100644 (file)
index 0000000..a8ff5cf
--- /dev/null
@@ -0,0 +1,40 @@
+module test {
+    aaa {
+        bbb {
+            yang-version 1;
+        }
+    }
+
+    yang-version: 1;
+    namespace "tst";
+    prefix test;
+
+    include subtest {
+        ccc {
+            ddd {
+                yang-version 1;
+            }
+        }
+        revision-date 2015-01-14;
+    }
+
+    import test2 {
+        eee {
+           fff {
+            yang-version 1;
+           }
+        }
+        prefix test2;
+        revision-date 2015-01-14;
+    }
+
+    revision 2015-01-14 {
+        ggg {
+            hhh {
+                yang-version 1;
+            }
+        }
+
+        description "Initial revision.";
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements2.yang b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements2.yang
new file mode 100644 (file)
index 0000000..32edea6
--- /dev/null
@@ -0,0 +1,21 @@
+module test2 {
+    aaa {
+        bbb {
+            yang-version 1;
+        }
+    }
+
+    yang-version: 1;
+    namespace "tst2";
+    prefix test2;
+
+    revision 2015-01-14 {
+        ccc {
+            ddd {
+                yang-version 1;
+            }
+        }
+
+        description "Initial revision.";
+    }
+}
\ No newline at end of file