From: Martin Ciglan Date: Wed, 14 Jan 2015 14:43:10 +0000 (+0100) Subject: Bug 2431: YangTools grammar misses unknown statement in some statements X-Git-Tag: release/lithium~343^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;ds=sidebyside;h=daab3990bca2ec02bbb32c10d5058c7b650edf56;p=yangtools.git Bug 2431: YangTools grammar misses unknown statement in some statements 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 --- diff --git a/yang/yang-parser-impl/src/main/antlr/YangParser.g4 b/yang/yang-parser-impl/src/main/antlr/YangParser.g4 index 9a26c172f3..8dd5a7fc11 100644 --- a/yang/yang-parser-impl/src/main/antlr/YangParser.g4 +++ b/yang/yang-parser-impl/src/main/antlr/YangParser.g4 @@ -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) )*; diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java index b3f408ef4e..760bee4bb0 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserTest.java @@ -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 yangs = new ArrayList(); + 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 index 0000000000..5a89db54fd --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements-sub.yang @@ -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 index 0000000000..a8ff5cfec5 --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements.yang @@ -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 index 0000000000..32edea6e2f --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/yang-grammar-test/stmtsep-in-statements2.yang @@ -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