From e52d0cbf970f1de982fb64f1a052646457b81f52 Mon Sep 17 00:00:00 2001 From: ToineSiebelink Date: Mon, 19 Dec 2022 14:19:29 +0000 Subject: Fix Delete uses case with '/' in path -Extend and use cpsPath parser (util) classes instead of regex Issue-ID: CPS-1409 Signed-off-by: ToineSiebelink Change-Id: I230c9eb71cc34264983830b39149511b95c4b4a6 --- .../onap/cps/cpspath/parser/CpsPathUtilSpec.groovy | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathUtilSpec.groovy (limited to 'cps-path-parser/src/test/groovy/org') diff --git a/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathUtilSpec.groovy b/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathUtilSpec.groovy new file mode 100644 index 0000000000..31c1ed4a3a --- /dev/null +++ b/cps-path-parser/src/test/groovy/org/onap/cps/cpspath/parser/CpsPathUtilSpec.groovy @@ -0,0 +1,74 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.cpspath.parser + +import spock.lang.Specification + +class CpsPathUtilSpec extends Specification { + + def 'Normalized xpaths for list index values using #scenario'() { + when: 'xpath with #scenario is parsed' + def result = CpsPathUtil.getNormalizedXpath(xpath) + then: 'normalized path uses single quotes for leave values' + result == "/parent/child[@common-leaf-name='123']" + where: 'the following xpaths are used' + scenario | xpath + 'no quotes' | '/parent/child[@common-leaf-name=123]' + 'double quotes' | '/parent/child[@common-leaf-name="123"]' + 'single quotes' | "/parent/child[@common-leaf-name='123']" + } + + def 'Normalized parent xpaths'() { + when: 'a given xpath with #scenario is parsed' + def result = CpsPathUtil.getNormalizedParentXpath(xpath) + then: 'the result is the expected parent path' + result == expectedParentPath + where: 'the following xpaths are used' + scenario | xpath || expectedParentPath + 'no child' | '/parent' || '' + 'child and parent' | '/parent/child' || '/parent' + 'grand child' | '/parent/child/grandChild' || '/parent/child' + 'parent & top is list element' | '/parent[@id=1]/child' || "/parent[@id='1']" + 'parent is list element' | '/parent/child[@id=1]/grandChild' || "/parent/child[@id='1']" + 'parent is list element with /' | "/parent/child[@id='a/b']/grandChild" || "/parent/child[@id='a/b']" + 'parent is list element with [' | "/parent/child[@id='a[b']/grandChild" || "/parent/child[@id='a[b']" + 'parent is list element using "' | '/parent/child[@id="x"]/grandChild' || "/parent/child[@id='x']" + } + + def 'Recognizing (absolute) xpaths to List elements'() { + expect: 'check for list returns the correct values' + assert CpsPathUtil.isPathToListElement(xpath) == expectList + where: 'the following xpaths are used' + xpath || expectList + '/parent[@id=1]' || true + '/parent[@id=1]/child' || false + '/parent/child[@id=1]' || true + '//child[@id=1]' || false + } + + def 'Parsing Exception'() { + when: 'a invalid xpath is parsed' + CpsPathUtil.getNormalizedXpath('///') + then: 'a path parsing exception is thrown' + thrown(PathParsingException) + } + +} -- cgit 1.2.3-korg