package com.bagri.xqj;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.StringReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Properties;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQExpression;
import javax.xml.xquery.XQItem;
import javax.xml.xquery.XQItemType;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQSequence;
import javax.xml.xquery.XQStaticContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class BagriXQItemAccessorTest {
private XQConnection xqc;
@Before
public void setUp() throws Exception {
XQDataSource xqds = new BagriXQDataSource();
//xqds.setProperty(BagriXQDataSource.HOST, "127.0.0.1");
//xqds.setProperty(BagriXQDataSource.PORT, "5701");
xqds.setProperty(BagriXQDataSource.ADDRESS, "localhost:10500");
xqds.setProperty(BagriXQDataSource.SCHEMA, "default");
xqds.setProperty(BagriXQDataSource.USER, "guest");
xqds.setProperty(BagriXQDataSource.PASSWORD, "password");
xqds.setProperty(BagriXQDataSource.XQ_PROCESSOR, "com.bagri.xquery.saxon.XQProcessorClient");
xqds.setProperty(BagriXQDataSource.XDM_REPOSITORY, "com.bagri.client.hazelcast.impl.SchemaRepositoryImpl");
xqc = xqds.getConnection();
}
@After
public void tearDown() throws Exception {
if (xqc != null) {
xqc.close();
}
}
@Test
public void testGetByte() throws XQException {
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("'1'");
xqs.next();
try {
xqs.getByte();
fail("A-XQIA-1.1: conversion to byte should fail");
} catch (XQException e) {
// Expect an XQException
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("xs:byte('1')");
//try {
//xqs.getByte();
//fail("A-XQIA-1.2: getXXX() should fail when not positioned on an item");
xqs.next();
Object o = xqs.getObject();
assertTrue("expected Byte but got " + o.getClass().getName(), o instanceof Byte);
//} catch (XQException e) {
// Expect an XQException
//}
xqe.close();
XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindByte(new QName("v"), (byte)1, xqc.createAtomicType(XQItemType.XQBASETYPE_INTEGER));
} catch (XQException e) {
fail("A-XQDC-1.7: bindByte() failed with message: " + e.getMessage());
}
xqs = xqpe.executeQuery();
xqs.next();
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind());
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_INTEGER, xqs.getItemType().getBaseType());
assertEquals("A-XQDC-1.7: Successful bindXXX.", "1", xqs.getAtomicValue());
xqpe.close();
}
@Test
public void testGetInt() throws XQException {
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("xs:int('1'), 10.0");
xqs.next();
try {
assertEquals("A-XQIA-1.6: getInt on xs:int failed", 1, xqs.getInt());
} catch (XQException e) {
fail("A-XQIA-1.6: getInt on xs:int failed with message: " + e.getMessage());
}
xqs.next();
try {
assertEquals("A-XQIA-1.6: getInt on xs:decimal failed", 10, xqs.getInt());
} catch (XQException e) {
fail("A-XQIA-1.6: getInt on xs:decimal failed with message: " + e.getMessage());
}
xqe.close();
}
@Test
public void testGetDouble() throws XQException {
XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindDouble(new QName("v"), 1d, xqc.createAtomicType(XQItemType.XQBASETYPE_DOUBLE));
} catch (XQException e) {
fail("A-XQDC-1.7: bindDouble() failed with message: " + e.getMessage());
}
XQSequence xqs = xqpe.executeQuery();
xqs.next();
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind());
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_DOUBLE, xqs.getItemType().getBaseType());
assertTrue("A-XQDC-1.7: Successful bindXXX.", 1d == xqs.getDouble());
xqpe.close();
}
@Test
public void testGetBoolean() throws XQException {
XQExpression xqe = xqc.createExpression();
xqe.bindObject(new QName("v"), Boolean.valueOf(true), null);
xqe.bindBoolean(new QName("v"), true, xqc.createAtomicType(XQItemType.XQBASETYPE_BOOLEAN));
XQSequence xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:boolean");
xqs.next();
assertTrue("expected true but got false", xqs.getBoolean());
//xqe.close();
//xqe = xqc.createExpression();
xqe.bindObject(new QName("v"), new Byte((byte)1), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:byte");
xqs.next();
assertTrue("expected true (byte) but got false", xqs.getBoolean());
}
@Test
public void testSequence() throws XQException {
String query = "<e>Hello world!</e>";
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery(query);
assertTrue(xqs.next());
String value = xqs.getItemAsString(null);
xqe.close();
assertEquals(query, value);
}
@Test
public void testNamespace() throws XQException {
XQStaticContext xqsc = xqc.getStaticContext();
xqsc.declareNamespace("foo", "http://www.foo.com");
XQExpression xqe = xqc.createExpression(xqsc);
XQSequence xqs = xqe.executeQuery("<foo:e/>");
xqe.close();
}
@Test
public void testBinding() throws XQException {
XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v");
xqpe.bindString(new QName("v"), "Hello world!", xqc.createAtomicType(XQItemType.XQBASETYPE_STRING));
XQSequence xqs = xqpe.executeQuery();
assertTrue(xqs.next());
assertEquals("Hello world!", xqs.getAtomicValue());
xqpe.close();
xqpe = xqc.prepareExpression("declare variable $v external; $v");
xqpe.bindString(new QName("v"), "Hello", xqc.createAtomicType(XQItemType.XQBASETYPE_NCNAME));
xqs = xqpe.executeQuery();
xqs.next();
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind());
assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_NCNAME, xqs.getItemType().getBaseType());
assertEquals("A-XQDC-1.7: Successful bindXXX.", "Hello", xqs.getObject());
xqpe.close();
}
@Test
public void testBasicType() throws XQException {
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("1,2");
boolean b = xqs.next();
assertEquals("A-XQS-18.1: next() failed", true, b);
int type = xqs.getInt();
assertEquals("A-XQS-18.1: next() failed", 1, type);
}
@Test
public void testGetNode() throws XQException, ParserConfigurationException, SAXException, IOException {
Node node = null;
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("<e/>, <e a=''/>/@*");
xqs.next();
try {
node = xqs.getNode();
} catch (XQException e) {
fail("A-XQIA-3.1: getNode on element() failed with message: " + e.getMessage());
}
assertEquals("A-XQIA-3.1: getNode on element() failed", true, node instanceof Element);
assertEquals("A-XQIA-3.1: getNode on element() failed", "e", node.getLocalName());
xqs.next();
try {
node = xqs.getNode();
} catch (XQException e) {
fail("A-XQIA-3.1: getNode on attribute() failed with message: " + e.getMessage());
}
assertEquals("A-XQIA-3.1: getNode on attribute() failed", true, node instanceof Attr);
assertEquals("A-XQIA-3.1: getNode on attribute() failed", "a", node.getLocalName());
xqe.close();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(new InputSource(new StringReader("<e>Hello world!</e>")));
//assertEquals("getLocalName on element() failed", "e", document.getDocumentElement().getLocalName());
XQItem xqi = null;
try {
xqi = xqc.createItemFromNode(document, null);
} catch (XQException e) {
fail("A-XQDF-1.5: createItemFromNode() failed with message: " + e.getMessage());
}
String result = xqi.getItemAsString(null);
assertTrue("A-XQDF-1.5: Expects serialized result contains '<e>Hello world!</e>', but it is '" + result + "'", result.indexOf("<e>Hello world!</e>") != -1);
}
@Test
public void testInstanceOf() throws XQException {
XQItemType xqstringtype = xqc.createAtomicType(XQItemType.XQBASETYPE_STRING);
XQItemType xqinttype = xqc.createAtomicType(XQItemType.XQBASETYPE_INT);
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("'Hello world!'");
xqs.next();
try {
assertEquals("A-XQIA-7.3: instanceOf failed", true, xqs.instanceOf(xqstringtype));
} catch (XQException e) {
fail("A-XQIA-7.3: instanceOf() failed with message: " + e.getMessage());
}
try {
assertEquals("A-XQIA-7.4: instanceOf failed", false, xqs.instanceOf(xqinttype));
} catch (XQException e) {
fail("A-XQIA-7.4: instanceOf() failed with message: " + e.getMessage());
}
xqe.close();
}
@Test
public void testItemType() throws XQException {
XQItemType xqtype = xqc.createDocumentType() ;
assertFalse("A-XQIT-8.1: isAnonymousType() reports if the type is anonymous.", xqtype.isAnonymousType());
assertFalse("A-XQIT-9.1: isElementNillable() reports if the element is nillable.", xqtype.isElementNillable());
//xqtype.getPIName();
}
@Test
public void testGetString() throws XQException {
XQExpression xqe = xqc.createExpression();
XQSequence xqs = xqe.executeQuery("<e a='Hello world!'/>/@*");
xqs.next();
try {
xqs.getItemAsString(new Properties());
fail("A-XQIA-8.1: serialization process fails when sequence contains a top-level attribute");
} catch (XQException xq) {
// Expect an XQException
} catch (Exception ex) {
fail("Expecting XQException, but got: " + ex.getMessage());
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e>Hello world!</e>");
xqs.next();
String result = null;
try {
result = xqs.getItemAsString(new Properties());
System.out.println("first result: " + result);
} catch (XQException e) {
fail("A-XQIA-10.1: getItemAsString failed with message: " + e.getMessage());
}
assertTrue("A-XQIA-10.1: Expects serialized result contains '<e>Hello world!</e>', but it is '" + result + "'", result.indexOf("<e>Hello world!</e>") != -1);
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e>Hello world!</e>");
xqs.next();
try {
String result2 = xqs.getItemAsString(null);
System.out.println("second result: " + result2);
assertEquals("A-XQIA-10.2: null properties argument is equivalent to empty properties argument", result, result2);
} catch (XQException e) {
fail("A-XQIA-10.2: getItemAsString failed with message: " + e.getMessage());
}
xqe.close();
}
@Test
public void testBindNode() throws XQException, IOException, SAXException, ParserConfigurationException {
XQPreparedExpression xqpe;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(new InputSource(new StringReader(
"<e>Hello world!</e>")));
xqpe = xqc.prepareExpression("declare variable $v external; $v");
xqpe.close();
try {
xqpe.bindNode(new QName("v"), document, null);
fail("A-XQDC-1.1: bindNode() throws an XQException when the dynamic context is in closed state.");
} catch (XQException e) {
// Expect an XQException
}
xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindNode(null, document, null);
fail("A-XQDC-1.2: null argument is invalid and throws an XQException.");
} catch (XQException e) {
// Expect an XQException
}
xqpe.close();
boolean bindFailed = false;
xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindNode(new QName("v"), document, xqc.createCommentType());
} catch (XQException e) {
bindFailed = true;
// Expect an XQException
}
if (!bindFailed) {
XQSequence xqs = xqpe.executeQuery();
xqs.next();
if (xqs.getItemType().getItemKind() != XQItemType.XQITEMKIND_COMMENT) {
fail("A-XQDC-1.3: The conversion is subject to the following constraints. Either it fails with an XQException, either it is successful in which case it must result in an instance of XDT.");
}
}
xqpe.close();
xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindNode(new QName("foo"), document, null);
fail("A-XQDC-1.5: The bound variable must be declared external in the prepared expression.");
} catch (XQException e) {
// Expect an XQException
}
xqpe.close();
xqpe = xqc.prepareExpression("declare variable $v as xs:decimal external; $v");
try {
xqpe.bindNode(new QName("v"), document, null);
xqpe.executeQuery().getSequenceAsString(null);
fail("A-XQDC-1.6: The dynamic type of the bound value is not compatible with the static type of the variable and must fail.");
} catch (XQException e) {
// Expect an XQException
}
xqpe.close();
xqpe = xqc.prepareExpression("declare variable $v external; $v");
try {
xqpe.bindNode(new QName("v"), document, null);
} catch (XQException e) {
fail("A-XQDC-1.7: bindNode() failed with message: " + e.getMessage());
}
String result = xqpe.executeQuery().getSequenceAsString(null);
assertTrue("A-XQDC-1.7: Expects serialized result contains '<e>Hello world!</e>', but it is '"
+ result + "'", result.indexOf("<e>Hello world!</e>") != -1);
xqpe.close();
}
@Test
public void testBindDate() throws XQException {
XQExpression xqe;
XQExpression xqe_temp;
XQSequence xqs;
XQSequence xqs_temp;
String msg = "A-XQDC-4.1: bindObject implements casting rules of '14.2 Mapping a Java Data Type to an XQuery Data Type'";
xqe = xqc.createExpression();
xqe_temp = xqc.createExpression();
xqs_temp = xqe_temp.executeQuery("xs:dayTimeDuration('PT5H'), "
+ "xs:yearMonthDuration('P1M'), "
+ "xs:date('2000-12-31'),"
+ "xs:dateTime('2000-12-31T12:00:00'),"
+ "xs:gDay('---11'),"
+ "xs:gMonth('--11'),"
+ "xs:gMonthDay('--01-01'),"
+ "xs:gYear('2000'),"
+ "xs:gYearMonth('2000-01'),"
+ "xs:time('12:12:12')");
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:dayTimeDuration");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:yearMonthDuration");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:date");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:dateTime");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:gDay");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:gMonth");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:gMonthDay");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:gYear");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:gYearMonth");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqs_temp.next();
xqe.bindObject(new QName("v"), xqs_temp.getObject(), null);
xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:time");
xqs.next();
assertTrue(msg, xqs.getBoolean());
xqe_temp.close();
xqe.close();
}
@Test
public void testGetObject() throws XQException {
XQExpression xqe;
XQSequence xqs;
xqe = xqc.createExpression();
xqs = xqe.executeQuery("xs:anyURI('http://www.foo.org')," +
"xs:base64Binary('AAAA')," +
"xs:boolean('true')," +
"xs:byte('1')," +
"xs:date('2000-12-31')," +
"xs:dateTime('2000-12-31T12:00:00')," +
"xs:decimal('1')," +
"xs:double('1')," +
// "xs:duration()" +
"xs:ENTITY('AAA')," +
"xs:float('1')," +
"xs:gDay('---11')," +
"xs:gMonth('--11')," +
"xs:gMonthDay('--01-01')," +
"xs:gYear('2000')," +
"xs:gYearMonth('2000-01')," +
"xs:hexBinary('AA')," +
"xs:ID('AA')," +
"xs:IDREF('AA')," +
"xs:int('1')," +
"xs:integer('1')," +
"xs:language('en-US')," +
"xs:long('1')," +
"xs:Name('AAA')," +
"xs:NCName('AAA')," +
"xs:negativeInteger('-1')," +
"xs:NMTOKEN('AAA')," +
"xs:nonNegativeInteger('1')," +
"xs:nonPositiveInteger('-1')," +
"xs:normalizedString('AAA')," +
// "xs:NOTATION()," +
"xs:positiveInteger('1')," +
"xs:QName('AAA')," +
"xs:short('1')," +
"xs:string('AAA')," +
"xs:time('12:12:12')," +
"xs:token('AAA')," +
"xs:unsignedByte('1')," +
"xs:unsignedInt('1')," +
"xs:unsignedLong('1')," +
"xs:unsignedShort('1')," +
"xs:dayTimeDuration('PT5H')," +
"xs:untypedAtomic('AAA')," +
"xs:yearMonthDuration('P1M')," +
"<e a=\"{''}\"/>/@a," +
"<!-- comment -->, " +
"document{<e/>}," +
"<e/>, " +
"processing-instruction {'a'} {'b'}," +
"<e>text</e>/text()");
try {
String msg = "A-XQIA-4.1: getObject implements casting rules of '14.4 Mapping an XQuery Atomic Value to a Java Object Type' ";
xqs.next();
assertTrue(msg + "for xs:anyURI", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:base64Binary", xqs.getObject() instanceof byte[]);
xqs.next();
assertTrue(msg + "for xs:boolean", xqs.getObject() instanceof Boolean);
xqs.next();
assertTrue(msg + "for xs:byte", xqs.getObject() instanceof Byte);
xqs.next();
assertTrue(msg + "for xs:date", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:dateTime", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:decimal", xqs.getObject() instanceof BigDecimal);
xqs.next();
assertTrue(msg + "for xs:double", xqs.getObject() instanceof Double);
xqs.next();
assertTrue(msg + "for xs:ENTITY", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:float", xqs.getObject() instanceof Float);
xqs.next();
assertTrue(msg + "for xs:gDay", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:gMonth", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:MonthDay", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:Year", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:YearMonth", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:hexBinary", xqs.getObject() instanceof byte[]);
xqs.next();
assertTrue(msg + "for xs:ID", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:IDREF", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:int", xqs.getObject() instanceof Integer);
xqs.next();
assertTrue(msg + "for xs:integer", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:language", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:long", xqs.getObject() instanceof Long);
xqs.next();
assertTrue(msg + "for xs:Name", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:NCName", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:negativeInteger", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:NMTOKEN", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:nonNegativeInteger", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:nonPostiveInteger", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:normalizedString", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:postiveInteger", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:QName", xqs.getObject() instanceof QName);
xqs.next();
assertTrue(msg + "for xs:short", xqs.getObject() instanceof Short);
xqs.next();
assertTrue(msg + "for xs:string", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:time", xqs.getObject() instanceof XMLGregorianCalendar);
xqs.next();
assertTrue(msg + "for xs:token", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:unsignedByte", xqs.getObject() instanceof Short);
xqs.next();
assertTrue(msg + "for xs:unsignedInt", xqs.getObject() instanceof Long);
xqs.next();
assertTrue(msg + "for xs:unsignedLong", xqs.getObject() instanceof BigInteger);
xqs.next();
assertTrue(msg + "for xs:unsignedShort", xqs.getObject() instanceof Integer);
xqs.next();
assertTrue(msg + "for xs:dayTimeDuration", xqs.getObject() instanceof Duration);
xqs.next();
assertTrue(msg + "for xs:untypedAtomic", xqs.getObject() instanceof String);
xqs.next();
assertTrue(msg + "for xs:yearMonthDuration", xqs.getObject() instanceof Duration);
xqs.next();
assertTrue(msg + "for attribute", xqs.getObject() instanceof Attr);
xqs.next();
assertTrue(msg + "for comment", xqs.getObject() instanceof Comment);
xqs.next();
assertTrue(msg + "for document", xqs.getObject() instanceof Document);
xqs.next();
assertTrue(msg + "for element", xqs.getObject() instanceof Element);
xqs.next();
assertTrue(msg + "for processing instruction", xqs.getObject() instanceof ProcessingInstruction);
xqs.next();
assertTrue(msg + "for text", xqs.getObject() instanceof Text);
} catch (XQException e) {
e.printStackTrace();
fail("A-XQIA-4.1: getObject on element() failed with message: " + e.getMessage());
}
}
@Test
public void testGetNodeUri() throws XQException {
XQExpression xqe;
XQSequence xqs;
xqe = xqc.createExpression();
xqs = xqe.executeQuery("'1'");
xqs.next();
try {
xqs.getNodeUri();
fail("A-XQIA-5.1: getNodeUri() should fail if current item is not a node");
} catch (XQException e) {
// Expect an XQException
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e/>");
try {
xqs.getNodeUri();
fail("A-XQIA-5.2: getNodeUri() should fail when not positioned on an item");
} catch (XQException e) {
// Expect an XQException
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e/>");
xqs.next();
xqs.close();
try {
xqs.getNodeUri();
fail("A-XQIA-5.3: closed item accessor supports getNodeUri()");
} catch (XQException e) {
// Expect an XQException
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e/>");
xqs.next();
try {
xqs.getNodeUri(); // returned value is implementation defined
} catch (XQException e) {
fail("A-XQIA-5.4: getNodeUri() failed with message: " + e.getMessage());
}
xqe.close();
xqe = xqc.createExpression();
xqs = xqe.executeQuery("<e/>");
xqs.next();
XQItem item = xqs.getItem();
try {
xqs.getNodeUri(); // returned value is implementation defined
} catch (XQException e) {
fail("A-XQIA-5.5: getNodeUri() failed with message: " + e.getMessage());
}
xqe.close();
}
}