aboutsummaryrefslogtreecommitdiffstats
path: root/cps-path-parser/src
diff options
context:
space:
mode:
authorToineSiebelink <toine.siebelink@est.tech>2021-06-03 16:05:08 +0100
committerToineSiebelink <toine.siebelink@est.tech>2021-06-03 16:09:41 +0100
commitcfc500b4192c356a3499040ebb714ec0b5f26584 (patch)
treeadb749f9fb884fdbe00a61fa841d09a1a1a9b96d /cps-path-parser/src
parent6a6e2fe266d954c8f8bdd7584371f103d78b4e62 (diff)
Improve error handling on unexpected 'postfix'
Issue-ID: CPS-450 Signed-off-by: ToineSiebelink <toine.siebelink@est.tech> Change-Id: Ia8be460f4235f7f0c24498f861dbe42137111772
Diffstat (limited to 'cps-path-parser/src')
-rw-r--r--cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g44
-rw-r--r--cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java6
-rw-r--r--cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy1
3 files changed, 10 insertions, 1 deletions
diff --git a/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4 b/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4
index 86095459ee..a4fd58e9c0 100644
--- a/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4
+++ b/cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4
@@ -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 ;
diff --git a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java
index a67cbeb870..afe01f644c 100644
--- a/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java
+++ b/cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java
@@ -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;
@@ -43,6 +44,11 @@ public class CpsPathBuilder extends CpsPathBaseListener {
}
@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;
if (ctx.IntegerLiteral() != null) {
diff --git a/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy b/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy
index 0e7fc35cf4..116c9168e8 100644
--- a/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy
+++ b/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathQuerySpec.groovy
@@ -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.'() {