Improve error handling on unexpected 'postfix' 88/121688/1
authorToineSiebelink <toine.siebelink@est.tech>
Thu, 3 Jun 2021 15:05:08 +0000 (16:05 +0100)
committerToineSiebelink <toine.siebelink@est.tech>
Thu, 3 Jun 2021 15:09:41 +0000 (16:09 +0100)
Issue-ID: CPS-450
Signed-off-by: ToineSiebelink <toine.siebelink@est.tech>
Change-Id: Ia8be460f4235f7f0c24498f861dbe42137111772

cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4
cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java
cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy

index 8609545..a4fd58e 100644 (file)
@@ -25,7 +25,7 @@ ancestorAxis: SLASH KW_ANCESTOR COLONCOLON ancestorPath ;
 
 ancestorPath: yangElement (SLASH yangElement)* ;
 
-cpsPathWithSingleLeafCondition: prefix singleValueCondition ;
+cpsPathWithSingleLeafCondition: prefix singleValueCondition postfix? ;
 
 /*
 No need to ditinguish between cpsPathWithDescendant | cpsPathWithDescendantAndLeafConditions really!
@@ -40,6 +40,8 @@ descendant: SLASH prefix ;
 
 prefix: (SLASH yangElement)* SLASH containerName ;
 
+postfix: (SLASH yangElement)+ ;
+
 yangElement: containerName listElementRef? ;
 
 containerName: QName ;
index a67cbeb..afe01f6 100644 (file)
@@ -28,6 +28,7 @@ import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.CpsPathWithDescendantCon
 import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.CpsPathWithSingleLeafConditionContext;
 import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.LeafConditionContext;
 import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.MultipleValueConditionsContext;
+import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.PostfixContext;
 import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.PrefixContext;
 import org.onap.cps.cpspath.parser.antlr4.CpsPathParser.SingleValueConditionContext;
 
@@ -42,6 +43,11 @@ public class CpsPathBuilder extends CpsPathBaseListener {
         cpsPathQuery.setXpathPrefix(ctx.getText());
     }
 
+    @Override
+    public void exitPostfix(final PostfixContext ctx) {
+        throw new IllegalStateException(String.format("Unsupported postfix %s encountered in CpsPath.", ctx.getText()));
+    }
+
     @Override
     public void exitLeafCondition(final LeafConditionContext ctx) {
         Object comparisonValue = null;
index 0e7fc35..116c916 100644 (file)
@@ -84,6 +84,7 @@ class CpsPathQuerySpec extends Specification {
             'end with descendant and more than one attribute separated by "or"' | '//child[@int-leaf=5 or @leaf-name="leaf value"]'
             'missing attribute value'                                           | '//child[@int-leaf=5 and @name]'
             'incomplete ancestor value'                                         | '//books/ancestor::'
+            'unsupported postfix after single value condition (JIRA CPS-450)'   | '/parent/child[@id=1]/somePostFix'
     }
 
     def 'Parse cps path using ancestor by schema node identifier with a #scenario.'() {