package com.bagri.xqj; import static org.junit.Assert.*; import java.math.BigDecimal; import java.math.BigInteger; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xquery.XQConnection; import javax.xml.xquery.XQDataSource; import javax.xml.xquery.XQExpression; import javax.xml.xquery.XQSequence; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Attr; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.Element; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; public class BagriXQDynamicContextTest { private XQConnection xqc; @Before public void setUp() throws Exception { XQDataSource xqds = new BagriXQDataSource(); 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 testBindObject_AllTypes() throws Exception { XQExpression xqe; XQSequence xqs; 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.bindObject(new QName("v"), Boolean.valueOf(true), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:boolean"); xqs.next(); assertTrue(msg, xqs.getBoolean()); 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(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new Float(1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:float"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new Double(1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:double"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new Integer(1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:int"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new Long(1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:long"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new Short((short) 1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:short"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), "Hello world!", null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:string"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new BigDecimal("1"), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:decimal"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), new BigInteger("1"), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:integer"); xqs.next(); assertTrue(msg, xqs.getBoolean()); XQExpression xqe_temp; XQSequence xqs_temp; 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.bindObject(new QName("v"), new QName("abc"), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:QName"); xqs.next(); assertTrue(msg, xqs.getBoolean()); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element element = document.createElement("e"); document.appendChild(element); DocumentFragment documentFragment = document.createDocumentFragment(); Attr attribute = document.createAttribute("a"); Comment comment = document.createComment("comment"); ProcessingInstruction pi = document.createProcessingInstruction("target", "data"); Text text = document.createTextNode("text"); xqe.bindObject(new QName("v"), document, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of document-node()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), documentFragment, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of document-node()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), element, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of element()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), attribute, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of attribute()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), comment, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of comment()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), pi, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of processing-instruction()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.bindObject(new QName("v"), text, null); xqs = xqe.executeQuery("declare variable $v external; $v instance of text()"); xqs.next(); assertTrue(msg, xqs.getBoolean()); xqe.close(); } }