From 9152736201670fef70c2a29487eb3d4f1fe61c48 Mon Sep 17 00:00:00 2001 From: poorna2152 Date: Fri, 13 Sep 2024 11:16:03 +0530 Subject: [PATCH] Add more tests on finders --- .../compiler/api/impl/NodeFinder.java | 1 + .../compiler/api/impl/ReferenceFinder.java | 10 ++- .../compiler/desugar/ClassClosureDesugar.java | 15 +++++ .../compiler/desugar/ClosureDesugar.java | 25 ++++++-- .../compiler/desugar/Desugar.java | 9 +-- .../compiler/parser/BLangNodeBuilder.java | 2 +- .../compiler/parser/NodeCloner.java | 10 ++- .../api/test/ExpressionTypeTestNew.java | 7 ++- .../api/test/allreferences/XMLRefsTest.java | 6 +- .../SymbolsInXMLNavigationExprsTest.java | 17 +++++ .../resources/test-src/expressions_test.bal | 7 +++ .../find-all-ref/find_ref_xml_context.bal | 5 ++ .../symbols_in_xml_navigation_test.bal | 7 +++ .../test/types/xml/XMLAccessTest.java | 17 +++-- .../types/xml/xml-navigation-access.bal | 62 ++++++++++++------- 15 files changed, 147 insertions(+), 53 deletions(-) diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/NodeFinder.java b/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/NodeFinder.java index d8af6fd36cf1..00972ffff659 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/NodeFinder.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/NodeFinder.java @@ -1304,6 +1304,7 @@ public void visit(BLangXMLIndexedStepExtend xmlIndexedStepExtend) { @Override public void visit(BLangXMLFilterStepExtend xmlFilterStepExtend) { lookupNodes(xmlFilterStepExtend.filters); + setEnclosingNode(xmlFilterStepExtend, xmlFilterStepExtend.pos); } @Override diff --git a/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/ReferenceFinder.java b/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/ReferenceFinder.java index 4f81c3622a08..acb319fcd078 100644 --- a/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/ReferenceFinder.java +++ b/compiler/ballerina-lang/src/main/java/io/ballerina/compiler/api/impl/ReferenceFinder.java @@ -1349,7 +1349,12 @@ public void visit(BLangXMLFilterStepExtend xmlFilterStepExtend) { @Override public void visit(BLangXMLMethodCallStepExtend xmlMethodCallStepExtend) { - find(xmlMethodCallStepExtend.invocation); + BLangInvocation invocation = xmlMethodCallStepExtend.invocation; + List argExprs = invocation.argExprs; + for (int i = 1; i < argExprs.size(); i++) { + find(argExprs.get(i)); + } + addIfSameSymbol(invocation.symbol, invocation.name.pos); } @Override @@ -1521,8 +1526,7 @@ private boolean addIfSameSymbol(BSymbol symbol, Location location) { && this.targetSymbol.name.equals(symbol.name) && this.targetSymbol.pkgID.equals(symbol.pkgID) && this.targetSymbol.pos.equals(symbol.pos) - && (this.withDefinition || (symbol.getOrigin() != VIRTUAL && !symbol.pos.equals(location)))) { - this.referenceLocations.add(location); + && (this.withDefinition || (symbol.getOrigin() != VIRTUAL && !symbol.pos.equals(location)))) {this.referenceLocations.add(location); return true; } return false; diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java index b59c0b501c92..e76f5b4c76d6 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClassClosureDesugar.java @@ -105,6 +105,9 @@ import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLCommentLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementLiteral; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLFilterStepExtend; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLIndexedStepExtend; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLMethodCallStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLNavigationAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLProcInsLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLQName; @@ -1101,6 +1104,18 @@ public void visit(BLangExtendedXMLNavigationAccess extendedXMLNavigationAccess) extendedXMLNavigationAccess.stepExpr = rewriteExpr(extendedXMLNavigationAccess.stepExpr); result = extendedXMLNavigationAccess; } + + @Override + public void visit(BLangXMLIndexedStepExtend xmlIndexedStepExtend) { + xmlIndexedStepExtend.indexExpr = rewriteExpr(xmlIndexedStepExtend.indexExpr); + result = xmlIndexedStepExtend; + } + + @Override + public void visit(BLangXMLMethodCallStepExtend xmlMethodCallStepExtend) { + xmlMethodCallStepExtend.invocation = rewriteExpr(xmlMethodCallStepExtend.invocation); + result = xmlMethodCallStepExtend; + } @Override public void visit(BLangIndexBasedAccess.BLangJSONAccessExpr jsonAccessExpr) { diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java index 34c3859e3770..64bc08bfd455 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/ClosureDesugar.java @@ -123,6 +123,8 @@ import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLCommentLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLElementLiteral; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLIndexedStepExtend; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLMethodCallStepExtend; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLNavigationAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLProcInsLiteral; import org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLQName; @@ -1901,6 +1903,23 @@ public void visit(BLangIndexBasedAccess.BLangXMLAccessExpr xmlIndexAccessExpr) { result = xmlIndexAccessExpr; } + @Override + public void visit(BLangExtendedXMLNavigationAccess extendedXMLNavigationAccess) { + extendedXMLNavigationAccess.stepExpr = rewriteExpr(extendedXMLNavigationAccess.stepExpr); + result = extendedXMLNavigationAccess; + } + + @Override + public void visit(BLangXMLIndexedStepExtend xmlIndexedStepExtend) { + xmlIndexedStepExtend.indexExpr = rewriteExpr(xmlIndexedStepExtend.indexExpr); + result = xmlIndexedStepExtend; + } + + @Override + public void visit(BLangXMLMethodCallStepExtend xmlMethodCallStepExtend) { + xmlMethodCallStepExtend.invocation = rewriteExpr(xmlMethodCallStepExtend.invocation); + result = xmlMethodCallStepExtend; + } @Override public void visit(BLangXMLElementAccess xmlElementAccess) { @@ -1914,12 +1933,6 @@ public void visit(BLangXMLNavigationAccess xmlNavigation) { result = xmlNavigation; } - @Override - public void visit(BLangExtendedXMLNavigationAccess extendedXmlNavigationAccess) { - extendedXmlNavigationAccess.stepExpr = rewriteExpr(extendedXmlNavigationAccess.stepExpr); - result = extendedXmlNavigationAccess; - } - @Override public void visit(BLangIndexBasedAccess.BLangJSONAccessExpr jsonAccessExpr) { jsonAccessExpr.indexExpr = rewriteExpr(jsonAccessExpr.indexExpr); diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java index 1004437f4881..4893728bdfea 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/desugar/Desugar.java @@ -6644,6 +6644,7 @@ private BLangInvocation rewriteXMLAttributeOrElemNameAccess(BLangFieldBasedAcces } // Handle element name access. + // Accessing field name using the "_" has been disallowed in the compile time. if (fieldName.equals("_")) { return createLanglibXMLInvocation(fieldAccessExpr.pos, XML_INTERNAL_GET_ELEMENT_NAME_NIL_LIFTING, fieldAccessExpr.expr, Collections.emptyList(), Collections.emptyList()); @@ -10629,15 +10630,15 @@ protected void addTransactionInternalModuleImport() { private void createMapFunctionForStepExpr(BLangXMLNavigationAccess xmlNavigation, List extensions) { Location pos = xmlNavigation.pos; - ArrayList args = new ArrayList<>(); - ArrayList filters = expandFilters(xmlNavigation.filters); + List args; + List filters = expandFilters(xmlNavigation.filters); // xml/**/ if (xmlNavigation.navAccessType == XMLNavigationAccess.NavAccessType.DESCENDANTS) { - args.add(createArrowFunctionForNavigation(pos, extensions, XML_GET_DESCENDANTS, filters)); + args = List.of(createArrowFunctionForNavigation(pos, extensions, XML_GET_DESCENDANTS, filters)); } else { // xml/* - args.add(createArrowFunctionForNavigation(pos, extensions, XML_INTERNAL_CHILDREN, filters)); + args = List.of(createArrowFunctionForNavigation(pos, extensions, XML_INTERNAL_CHILDREN, filters)); } BLangInvocation elements = diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/BLangNodeBuilder.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/BLangNodeBuilder.java index 1854b2b48bd9..abe9415231de 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/BLangNodeBuilder.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/BLangNodeBuilder.java @@ -7097,7 +7097,7 @@ private List createBLangXMLStepExtends(NodeList nodes, XMLStepMethodCallExtendNode xmlStepMethodCallExtendNode = (XMLStepMethodCallExtendNode) node; SimpleNameReferenceNode methodName = xmlStepMethodCallExtendNode.methodName(); BLangInvocation bLangInvocation = createBLangInvocation(methodName, - xmlStepMethodCallExtendNode.parenthesizedArgList().arguments(), methodName.location(), + xmlStepMethodCallExtendNode.parenthesizedArgList().arguments(), pos, false); bLangInvocation.expr = curExpr == null ? expr : curExpr; curExpr = new BLangXMLMethodCallStepExtend(pos, bLangInvocation); diff --git a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/NodeCloner.java b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/NodeCloner.java index 6619a36c5ca2..5b7af5207a34 100644 --- a/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/NodeCloner.java +++ b/compiler/ballerina-lang/src/main/java/org/wso2/ballerinalang/compiler/parser/NodeCloner.java @@ -98,6 +98,7 @@ import org.wso2.ballerinalang.compiler.tree.expressions.BLangElvisExpr; import org.wso2.ballerinalang.compiler.tree.expressions.BLangErrorConstructorExpr; import org.wso2.ballerinalang.compiler.tree.expressions.BLangErrorVarRef; +import org.wso2.ballerinalang.compiler.tree.expressions.BLangExpression; import org.wso2.ballerinalang.compiler.tree.expressions.BLangExtendedXMLNavigationAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangFieldBasedAccess; import org.wso2.ballerinalang.compiler.tree.expressions.BLangGroupExpr; @@ -2316,20 +2317,17 @@ public void visit(BLangXMLElementFilter source) { @Override public void visit(BLangXMLIndexedStepExtend source) { - BLangXMLIndexedStepExtend clone = new BLangXMLIndexedStepExtend(source.pos, source.indexExpr); - source.cloneRef = clone; + source.cloneRef = new BLangXMLIndexedStepExtend(source.pos, clone(source.indexExpr)); } @Override public void visit(BLangXMLFilterStepExtend source) { - BLangXMLFilterStepExtend clone = new BLangXMLFilterStepExtend(source.pos, cloneList(source.filters)); - source.cloneRef = clone; + source.cloneRef = new BLangXMLFilterStepExtend(source.pos, cloneList(source.filters)); } @Override public void visit(BLangXMLMethodCallStepExtend source) { - BLangXMLMethodCallStepExtend clone = new BLangXMLMethodCallStepExtend(source.pos, clone(source.invocation)); - source.cloneRef = clone; + source.cloneRef = new BLangXMLMethodCallStepExtend(source.pos, clone(source.invocation)); } @Override diff --git a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/ExpressionTypeTestNew.java b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/ExpressionTypeTestNew.java index f109e468f6bb..11d8b7d6b187 100644 --- a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/ExpressionTypeTestNew.java +++ b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/ExpressionTypeTestNew.java @@ -603,7 +603,12 @@ public Object[][] getLogicalExprPos() { // Group expr {282, 12, 282, 34, INT}, {282, 14, 282, 28, INT}, - + // XML step expression with extension + {376, 17, 376, 18, INT}, + {377, 13, 377, 19, UNION}, + {377, 17, 377, 18, INT}, + {378, 9, 378, 31, XML}, + {378, 16, 378, 23, XML}, }; } diff --git a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/allreferences/XMLRefsTest.java b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/allreferences/XMLRefsTest.java index b935d1791e48..de07a0bd9b3b 100644 --- a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/allreferences/XMLRefsTest.java +++ b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/allreferences/XMLRefsTest.java @@ -39,13 +39,15 @@ public Object[][] getLookupPositions() { location(21, 24, 27), location(26, 17, 20), location(27, 17, 20), - location(29, 16, 19)) + location(29, 16, 19), + location(34, 23, 26)) }, {23, 25, location(19, 37, 40), List.of(location(19, 37, 40), location(23, 25, 28), location(27, 23, 26), - location(28, 17, 20)) + location(28, 17, 20), + location(32, 20, 23)) }, }; } diff --git a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/symbols/SymbolsInXMLNavigationExprsTest.java b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/symbols/SymbolsInXMLNavigationExprsTest.java index 10ac8ccd284c..039543ee64c1 100644 --- a/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/symbols/SymbolsInXMLNavigationExprsTest.java +++ b/tests/ballerina-compiler-api-test/src/test/java/io/ballerina/semantic/api/test/symbols/SymbolsInXMLNavigationExprsTest.java @@ -102,6 +102,23 @@ public Object[][] getStepExprPos() { }; } + @Test(dataProvider = "StepExprWithExtensionPosProvider") + public void testXmlStepExprWithExtension(int line, int col, SymbolKind kind, String name) { + assertSymbol(line, col, kind, name); + } + + @DataProvider(name = "StepExprWithExtensionPosProvider") + public Object[][] getStepExprWithExtensionPos() { + return new Object[][]{ + {49, 13, VARIABLE, "x1"}, + {49, 18, FUNCTION, "get"}, + {49, 22, VARIABLE, "indx"}, + {50, 23, XMLNS, "ns"}, + {51, 31, null, null}, + {51, 37, VARIABLE, "indx"} + }; + } + // utils private void assertSymbol(int line, int col, SymbolKind kind, String name) { diff --git a/tests/ballerina-compiler-api-test/src/test/resources/test-src/expressions_test.bal b/tests/ballerina-compiler-api-test/src/test/resources/test-src/expressions_test.bal index f95b4f4e5484..b6ee03566287 100644 --- a/tests/ballerina-compiler-api-test/src/test/resources/test-src/expressions_test.bal +++ b/tests/ballerina-compiler-api-test/src/test/resources/test-src/expressions_test.bal @@ -371,3 +371,10 @@ function testRegexp() { function name() { _ = xml ``; } + +function testXMLStepExprWithExtension() { + xml x = xml `10`; + xml x2 = x/*[0]; + x2 = x/*.get(0); + x2 = x/*[1].first().; +} diff --git a/tests/ballerina-compiler-api-test/src/test/resources/test-src/find-all-ref/find_ref_xml_context.bal b/tests/ballerina-compiler-api-test/src/test/resources/test-src/find-all-ref/find_ref_xml_context.bal index e40c32b18ac3..3b4a6225662f 100644 --- a/tests/ballerina-compiler-api-test/src/test/resources/test-src/find-all-ref/find_ref_xml_context.bal +++ b/tests/ballerina-compiler-api-test/src/test/resources/test-src/find-all-ref/find_ref_xml_context.bal @@ -28,4 +28,9 @@ function test() { xml x3 = x1.; xml x4 = x1/; var v1 = x1.ns0:id; + + int i = 1; + xml x6 = x1/**/; + xml x7 = x1/*[i]; + xml x8 = x1/..get(i); } diff --git a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_xml_navigation_test.bal b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_xml_navigation_test.bal index 18cf5a4813c2..5207dba40b5a 100644 --- a/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_xml_navigation_test.bal +++ b/tests/ballerina-compiler-api-test/src/test/resources/test-src/symbols/symbols_in_xml_navigation_test.bal @@ -44,3 +44,10 @@ function testXMLStepExpr() { int indx = 0; function getXML() returns xml => xml `Hello World!`; + +function testXmlStepExprWithExtension() { + xml x1 = xml `T-shirttextWatch`; + xml x2 = x1/*.get(indx); + x2 = x1/.; + x2 = x1/**/.[indx]; +} diff --git a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/xml/XMLAccessTest.java b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/xml/XMLAccessTest.java index 78b836d687a8..957655fcf47d 100644 --- a/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/xml/XMLAccessTest.java +++ b/tests/jballerina-unit-test/src/test/java/org/ballerinalang/test/types/xml/XMLAccessTest.java @@ -296,8 +296,13 @@ public void testXmlStepExtension(String function) { @DataProvider private Object[] xmlStepExtension() { - return new Object[]{"testXmlIndexedStepExtend", "testXmlFilterStepExtend", "testXmlIndexedAndFilterStepExtend", - "testXmlMethodCallStepExtend", "testXmlMethodCallIndexedAndFilterStepExtend"}; + return new Object[]{ + "testXmlIndexedStepExtend", + "testXmlFilterStepExtend", + "testXmlIndexedAndFilterStepExtend", + "testXmlMethodCallStepExtend", + "testXmlMethodCallIndexedAndFilterStepExtend" + }; } @Test @@ -311,20 +316,20 @@ public void testXMLNavExpressionNegative() { BAssertUtil.validateError(navigationNegative, i++, "undefined symbol 'j'", 8, 18); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'int', found 'string'", 17, 18); - BAssertUtil.validateError(navigationNegative, i++, "too many arguments in call to 'get()'", 18, 14); + BAssertUtil.validateError(navigationNegative, i++, "too many arguments in call to 'get()'", 18, 13); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'int', found 'string'", 19, 18); BAssertUtil.validateError(navigationNegative, i++, "undefined function 'foo' in type 'xml'", 21, 14); - BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found 'int'", 22, 14); + BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found 'int'", 22, 13); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'int', found 'string'", 23, 23); - BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found 'int'", 25, 23); + BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found 'int'", 25, 22); BAssertUtil.validateError(navigationNegative, i++, "undefined symbol 'r'", 29, 23); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'boolean', found 'xml:Element'", 31, 31); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml:ProcessingInstruction', found 'xml:Element'", 33, 60); - BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found '()'", 34, 19); + BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'xml', found '()'", 34, 18); BAssertUtil.validateError(navigationNegative, i++, "undefined symbol 'r'", 36, 26); BAssertUtil.validateError(navigationNegative, i++, "incompatible types: expected 'boolean', found 'xml:Element'", 38, 34); diff --git a/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal b/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal index 9893a065a969..f25ca9c6d052 100644 --- a/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal +++ b/tests/jballerina-unit-test/src/test/resources/test-src/types/xml/xml-navigation-access.bal @@ -24,7 +24,6 @@ function testXMLNavigationOnSingleElementWithNamespaces() returns [xml, xml, xml return [x2, x3, x4, x5, x6]; } - function testXMLNavigationOnSingleElementReferToDefaultNS() returns [xml, xml, xml, xml, xml, xml, int, xml] { xmlns "foo"; @@ -42,7 +41,6 @@ function testXMLNavigationOnSingleElementReferToDefaultNS() return [x2, x3, x4, x5, x6, x7, x8.length(), x9]; } - function testXMLNavigationOnSingleElementReferToDefaultNSViaPrefix() returns [xml, xml, xml, xml, xml] { xmlns "foo"; xmlns "bar" as k; @@ -435,7 +433,8 @@ function testXmlFilterStepExtend() { assert(x1/*.., xml ``); assert(x2/**/., xml `101530440`); - assert(x2/**/., xml `1015`);assert(x2/**/., xml `30`); + assert(x2/**/., xml `1015`); + assert(x2/**/., xml `30`); assert(x2/**/., xml `30`); assert(x2/**/., xml `1010151530440`); assert(x2/**/.., xml `101530440`); @@ -545,14 +544,14 @@ function testXmlMethodCallStepExtend() returns error? { Backpack34.993adidasyes textWatch49.992samsungno`; - assert(x1/*.cloneReadOnly(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); - assert(x1/*.get(0), xml `text`); - assert(x1/*.map(y => y), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); + assert(x1/*.cloneReadOnly(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); + assert(x1/*.get(0), xml `text`); + assert(x1/*.map(y => y), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); assert(x1/*.filter(y => y is xml:Element), xml `T-shirt19.991nikenoBackpack34.993adidasyesWatch49.992samsungno`); assert(x1/*.children().strip(), xml `T-shirt19.991nikenoBackpack34.993adidasyesWatch49.992samsungno`); - assert(x1/*.clone(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); - assert(x1/*.first(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); - assert(x1/*.last(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); + assert(x1/*.clone(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); + assert(x1/*.first(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); + assert(x1/*.last(), xml `T-shirt19.991nikenoBackpack34.993adidasyestextWatch49.992samsungno`); // assert(x1/*.text(), xml `text`); assert(x1/.get(k), xml `T-shirtBackpackWatch`); @@ -560,8 +559,21 @@ function testXmlMethodCallStepExtend() returns error? { assert(x1/.children(), xml `nikenoadidasyessamsungno`); assert(x1/.children().filter(y => (y).getName() == "local"), xml `noyesno`); - assert(x1/.map(y => y.elementChildren().get(0)), xml `nikeadidassamsung`); + var xmlObj1 = object { + xml j; + xml k; + xml l; + function init() { + self.j = x1/[0]; + self.k = x1/**/.map(y => y.elementChildren().get(0)); + self.l = x1/.; + } + + }; + assert(xmlObj1.j, xml `T-shirtBackpackWatch`); + assert(xmlObj1.k, xml `nikeadidassamsung`); + assert(xmlObj1.l, xml `132`); assert(x1/**/.get(1), xml `nikeadidassamsung`); assert(x1/**/.map(y => y), xml `noyesno`); @@ -583,7 +595,7 @@ function testXmlMethodCallStepExtend() returns error? { `; assert(x2/*.filter(y => y is xml:Element), xml `10153044050nikeno`); - assert(x2/*.map(y => y is xml:Text ? xml ``: y), + assert(x2/*.map(y => y is xml:Text ? xml `` : y), xml `10153044050nikeno`); assert(x2/*.filter(y => y is xml:Element), xml `10153044050nikeno`); assert(x2/*.children().strip(), xml `10153044050nikeno`); @@ -606,7 +618,6 @@ function testXmlMethodCallStepExtend() returns error? { assert(x3/.children().clone(), xml ``); assert(x3/**/.get(k), xml ``); - xml:ProcessingInstruction x4 = xml ``; assert(x4/*.map(y => y), xml ``); assert(x4/*.strip(), xml ``); @@ -643,6 +654,9 @@ function testXmlMethodCallIndexedAndFilterStepExtend() { assert(x1/**/.filter(y => (y).data() == "yes"), xml `yes`); assert(x1/**/<*>.elementChildren()[0], xml `nikeadidassamsung`); assert(x1/**/.slice(0, 1)., xml `34.99`); + var xmlObj1 = object { + xml x2 = x1/*.; + }; xml:Element x2 = xml ` xml text @@ -661,23 +675,23 @@ function testXmlMethodCallIndexedAndFilterStepExtend() { assert(x2/[0].children()., xml `10`); assert(x2/.map(y => y).children()., xml `4`); assert(x2/.filter(function(xml y) returns boolean { - int|error val = int:fromString((y).data()); - if val is int { - return val > 5; - } - return false; - })[0], + int|error val = int:fromString((y).data()); + if val is int { + return val > 5; + } + return false; + })[0], xml `40`); assert(x2/**/.get(1).children()[0], xml `15`); assert(x2/**/.map(y => y)[0], xml `10`); assert(x2/**/.children()..filter(function(xml y) returns boolean { - int|error val = int:fromString((y).data()); - if val is int { - return val > 5; - } - return false; - }), xml `30`); + int|error val = int:fromString((y).data()); + if val is int { + return val > 5; + } + return false; + }), xml `30`); xml:Comment x3 = xml ``; assert(x3/*.map(y => y)[0]., xml ``);