IDEA-67335: XPath 2: function arguments of wrong non-number type are green

This commit is contained in:
sweinreuter
2011-04-06 16:44:52 +02:00
parent d5c7d0469a
commit 80e1b9cdd5
4 changed files with 38 additions and 7 deletions
@@ -102,7 +102,7 @@ public class FunctionDeclarationParsing {
XPathType r = null;
if ("numeric".equals(type)) {
r = XPathType.NUMBER;
r = XPath2Type.NUMERIC;
} else if (type.startsWith("xs:")) {
final String base = type.substring(3);
r = XPath2Type.fromName(new QName(XPath2Type.XMLSCHEMA_NS, base));
@@ -23,20 +23,46 @@ import org.intellij.lang.xpath.psi.XPathType;
public class XPath2StaticTypeTest extends TestCase {
public void testStatic() throws Throwable {
assertTrue(XPathType.isAssignable(XPath2Type.ITEM, XPath2Type.STRING));
assertTrue(XPathType.isAssignable(XPath2Type.NODE, XPath2Type.ITEM));
assertTrue(XPathType.isAssignable(XPath2Type.STRING, XPath2Type.ANYURI));
assertFalse(XPathType.isAssignable(XPath2Type.NODE, XPath2Type.STRING));
}
public void testBooleanAssignability() {
// via "effective boolean value"
assertTrue(XPathType.isAssignable(XPath2Type.BOOLEAN, XPath2Type.STRING));
assertTrue(XPathType.isAssignable(XPath2Type.BOOLEAN, XPath2Type.NUMERIC));
assertTrue(XPathType.isAssignable(XPath2Type.BOOLEAN, XPath2Type.INTEGER));
assertFalse(XPathType.isAssignable(XPath2Type.BOOLEAN_STRICT, XPath2Type.STRING));
}
public void testAnyAssignability() {
assertTrue(XPathType.isAssignable(XPath2Type.ITEM, XPath2Type.STRING));
assertTrue(XPathType.isAssignable(XPath2Type.ITEM, XPath2Type.BOOLEAN));
assertTrue(XPathType.isAssignable(XPath2Type.ITEM, XPath2Type.DATE));
}
public void testNumericAssignability() {
assertTrue(XPathType.isAssignable(XPath2Type.FLOAT, XPath2Type.INTEGER));
assertTrue(XPathType.isAssignable(XPath2Type.DOUBLE, XPath2Type.FLOAT));
assertTrue(XPathType.isAssignable(XPath2Type.DOUBLE, XPath2Type.INTEGER));
assertTrue(XPathType.isAssignable(XPath2SequenceType.create(XPath2Type.STRING), XPath2SequenceType.create(XPath2Type.STRING)));
assertTrue(XPathType.isAssignable(XPath2Type.FLOAT, XPath2Type.DOUBLE));
assertFalse(XPathType.isAssignable(XPath2Type.NUMERIC, XPath2Type.BOOLEAN));
}
public void testStringAssignability() {
assertTrue(XPathType.isAssignable(XPath2Type.STRING, XPath2Type.ANYURI));
assertTrue(XPathType.isAssignable(XPath2Type.STRING, XPath2SequenceType.create(XPath2Type.STRING)));
assertTrue(XPathType.isAssignable(XPath2SequenceType.create(XPath2Type.STRING), XPath2SequenceType.create(XPath2Type.STRING)));
assertTrue(XPathType.isAssignable(XPath2SequenceType.create(XPath2Type.STRING), XPath2Type.STRING));
assertFalse(XPathType.isAssignable(XPath2SequenceType.create(XPath2Type.STRING), XPath2SequenceType.create(XPath2Type.INTEGER)));
assertFalse(XPathType.isAssignable(XPath2Type.STRING, XPath2Type.INTEGER));
assertFalse(XPathType.isAssignable(XPath2Type.NODE, XPath2Type.STRING));
assertFalse(XPathType.isAssignable(XPath2SequenceType.create(XPath2Type.STRING), XPath2SequenceType.create(XPath2Type.INTEGER)));
}
}
@@ -89,6 +89,10 @@ public class XPath2TypeTest extends XPath2HighlightingTestBase {
doXPathHighlighting();
}
public void testToNumericIDEA67335() throws Throwable {
doXPathHighlighting();
}
@Override
protected String getSubPath() {
return "xpath/highlighting/types";
@@ -0,0 +1 @@
ceiling(<error descr="Expected type 'xs:numeric?', got 'xs:boolean'">0 = 1</error>) + floor(<error descr="Expected type 'xs:numeric?', got 'xs:string'">'a'</error>) + round(.)