package net.xqj.basex.local;
import static javax.xml.xquery.XQItemType.*;
import static org.junit.Assert.*;
import java.net.*;
import javax.xml.xquery.*;
import org.junit.*;
import org.w3c.dom.*;
/**
* Testing Basic XQItemAccessor functionality.
*
* @author Charles Foster
*/
public final class XQItemAccessorTest extends XQJBaseTest {
// --------------------------------------------------------------------------
// Atomic Tests
// --------------------------------------------------------------------------
/**
* Tests xs:anyURI.
* @throws XQException XQuery exception
*/
@Test
public void testAnyURI() throws XQException {
atomicTest("xs:anyURI('http://a/b/c')", "http://a/b/c", XQBASETYPE_ANYURI);
}
/**
* Tests xs:base64Binary.
* @throws XQException XQuery exception
*/
@Test
public void testBase64Binary() throws XQException {
atomicTest("xs:base64Binary('AAAA')", "AAAA", XQBASETYPE_BASE64BINARY);
}
/**
* Tests xs:boolean.
* @throws XQException XQuery exception
*/
@Test
public void testBoolean() throws XQException {
atomicTest("xs:boolean('true')", "true", XQBASETYPE_BOOLEAN);
}
/**
* Tests xs:byte.
* @throws XQException XQuery exception
*/
@Test
public void testByte() throws XQException {
atomicTest("xs:byte('1')", "1", XQBASETYPE_BYTE);
}
/**
* Tests xs:date.
* @throws XQException XQuery exception
*/
@Test
public void testDate() throws XQException {
atomicTest("xs:date('2000-12-31')", "2000-12-31", XQBASETYPE_DATE);
}
/**
* Tests xs:dateTime.
* @throws XQException XQuery exception
*/
@Test
public void testDateTime() throws XQException {
atomicTest(
"xs:dateTime('2000-12-31T12:00:00')", "2000-12-31T12:00:00",
XQBASETYPE_DATETIME
);
}
/**
* Tests xs:decimal.
* @throws XQException XQuery exception
*/
@Test
public void testDecimal() throws XQException {
atomicTest("xs:decimal('1')", "1", XQBASETYPE_DECIMAL);
}
/**
* Tests xs:double.
* @throws XQException XQuery exception
*/
@Test
public void testDouble() throws XQException {
atomicTest("xs:double('1')", "1", XQBASETYPE_DOUBLE);
}
/**
* Tests xs:ENTITY.
* @throws XQException XQuery exception
*/
@Test
public void testENTITY() throws XQException {
atomicTest("xs:ENTITY('AAA')", "AAA", XQBASETYPE_ENTITY);
}
/**
* Tests xs:float.
* @throws XQException XQuery exception
*/
@Test
public void testFloat() throws XQException {
atomicTest("xs:float('1')", "1", XQBASETYPE_FLOAT);
}
/**
* Tests xs:gDay.
* @throws XQException XQuery exception
*/
@Test
public void testGDay() throws XQException {
atomicTest("xs:gDay('---11')", "---11", XQBASETYPE_GDAY);
}
/**
* Tests xs:gMonth.
* @throws XQException XQuery exception
*/
@Test
public void testGMonth() throws XQException {
atomicTest("xs:gMonth('--11')", "--11", XQBASETYPE_GMONTH);
}
/**
* Tests xs:gMonthDay.
* @throws XQException XQuery exception
*/
@Test
public void testGMonthDay() throws XQException {
atomicTest("xs:gMonthDay('--01-01')", "--01-01", XQBASETYPE_GMONTHDAY);
}
/**
* Tests xs:gYear.
* @throws XQException XQuery exception
*/
@Test
public void testGYear() throws XQException {
atomicTest("xs:gYear('2000')", "2000", XQBASETYPE_GYEAR);
}
/**
* Tests xs:gYearMonth.
* @throws XQException XQuery exception
*/
@Test
public void testGYearMonth() throws XQException {
atomicTest("xs:gYearMonth('2000-01')", "2000-01", XQBASETYPE_GYEARMONTH);
}
/**
* Tests xs:hexBinary.
* @throws XQException XQuery exception
*/
@Test
public void testHexBinary() throws XQException {
atomicTest("xs:hexBinary('AA')", "AA", XQBASETYPE_HEXBINARY);
}
/**
* Tests xs:ID.
* @throws XQException XQuery exception
*/
@Test
public void testID() throws XQException {
atomicTest("xs:ID('AA')", "AA", XQBASETYPE_ID);
}
/**
* Tests xs:IDREF.
* @throws XQException XQuery exception
*/
@Test
public void testIDREF() throws XQException {
atomicTest("xs:IDREF('AA')", "AA", XQBASETYPE_IDREF);
}
/**
* Tests xs:int.
* @throws XQException XQuery exception
*/
@Test
public void testInt() throws XQException {
atomicTest("xs:int('1')", "1", XQBASETYPE_INT);
}
/**
* Tests xs:integer.
* @throws XQException XQuery exception
*/
@Test
public void testInteger() throws XQException {
atomicTest("xs:integer('1')", "1", XQBASETYPE_INTEGER);
}
/**
* Tests xs:language.
* @throws XQException XQuery exception
*/
@Test
public void testLanguage() throws XQException {
atomicTest("xs:language('en-GB')", "en-GB", XQBASETYPE_LANGUAGE);
}
/**
* Tests xs:long.
* @throws XQException XQuery exception
*/
@Test
public void testLong() throws XQException {
atomicTest("xs:long('1')", "1", XQBASETYPE_LONG);
}
/**
* Tests xs:Name.
* @throws XQException XQuery exception
*/
@Test
public void testName() throws XQException {
atomicTest("xs:Name('AAA')", "AAA", XQBASETYPE_NAME);
}
/**
* Tests xs:NCName.
* @throws XQException XQuery exception
*/
@Test
public void testNCName() throws XQException {
atomicTest("xs:NCName('AAA')", "AAA", XQBASETYPE_NCNAME);
}
/**
* Tests xs:negativeInteger.
* @throws XQException XQuery exception
*/
@Test
public void testNegativeInteger() throws XQException {
atomicTest("xs:negativeInteger('-1')", "-1", XQBASETYPE_NEGATIVE_INTEGER);
}
/**
* Tests xs:NMTOKEN.
* @throws XQException XQuery exception
*/
@Test
public void testNMTOKEN() throws XQException {
atomicTest("xs:NMTOKEN('AAA')", "AAA", XQBASETYPE_NMTOKEN);
}
/**
* Tests xs:nonNegativeInteger.
* @throws XQException XQuery exception
*/
@Test
public void testNonNegativeInteger() throws XQException {
atomicTest("xs:nonNegativeInteger('1')", "1",
XQBASETYPE_NONNEGATIVE_INTEGER);
}
/**
* Tests xs:nonPositiveInteger.
* @throws XQException XQuery exception
*/
@Test
public void testNonPositiveInteger() throws XQException {
atomicTest("xs:nonPositiveInteger('-1')", "-1",
XQBASETYPE_NONPOSITIVE_INTEGER);
}
/**
* Tests xs:normalizedString.
* @throws XQException XQuery exception
*/
@Test
public void testNormalizedString() throws XQException {
atomicTest("xs:normalizedString('AAA')", "AAA", XQBASETYPE_NORMALIZED_STRING);
}
/**
* Tests xs:positiveInteger.
* @throws XQException XQuery exception
*/
@Test
public void testPositiveInteger() throws XQException {
atomicTest("xs:positiveInteger('1')", "1", XQBASETYPE_POSITIVE_INTEGER);
}
/**
* Tests xs:QName.
* @throws XQException XQuery exception
*/
@Test
public void testQName() throws XQException {
atomicTest("xs:QName('AAA')", "AAA", XQBASETYPE_QNAME);
}
/**
* Tests xs:short.
* @throws XQException XQuery exception
*/
@Test
public void testShort() throws XQException {
atomicTest("xs:short('1')", "1", XQBASETYPE_SHORT);
}
/**
* Tests xs:string.
* @throws XQException XQuery exception
*/
@Test
public void testString() throws XQException {
atomicTest("'Hello World'", "Hello World", XQBASETYPE_STRING);
}
/**
* Tests xs:time.
* @throws XQException XQuery exception
*/
@Test
public void testTime() throws XQException {
atomicTest("xs:time('12:12:12')", "12:12:12", XQBASETYPE_TIME);
}
/**
* Tests xs:token.
* @throws XQException XQuery exception
*/
@Test
public void testToken() throws XQException {
atomicTest("xs:token('AAA')", "AAA", XQBASETYPE_TOKEN);
}
/**
* Tests xs:unsignedByte.
* @throws XQException XQuery exception
*/
@Test
public void testUnsignedByte() throws XQException {
atomicTest("xs:unsignedByte('1')", "1", XQBASETYPE_UNSIGNED_BYTE);
}
/**
* Tests xs:unsignedInt.
* @throws XQException XQuery exception
*/
@Test
public void testUnsignedInt() throws XQException {
atomicTest("xs:unsignedInt('1')", "1", XQBASETYPE_UNSIGNED_INT);
}
/**
* Tests xs:unsignedLong.
* @throws XQException XQuery exception
*/
@Test
public void testUnsignedLong() throws XQException {
atomicTest("xs:unsignedLong('1')", "1", XQBASETYPE_UNSIGNED_LONG);
}
/**
* Tests xs:unsignedShort.
* @throws XQException XQuery exception
*/
@Test
public void testUnsignedShort() throws XQException {
atomicTest("xs:unsignedShort('1')", "1", XQBASETYPE_UNSIGNED_SHORT);
}
/**
* Tests xs:dayTimeDuration.
* @throws XQException XQuery exception
*/
@Test
public void testDayTimeDuration() throws XQException {
atomicTest("xs:dayTimeDuration('PT5H')", "PT5H", XQBASETYPE_DAYTIMEDURATION);
}
/**
* Tests xs:untypedAtomic.
* @throws XQException XQuery exception
*/
@Test
public void testUntypedAtomic() throws XQException {
atomicTest("xs:untypedAtomic('AAA')", "AAA", XQBASETYPE_UNTYPEDATOMIC);
}
/**
* Tests xs:yearMonthDuration.
* @throws XQException XQuery exception
*/
@Test
public void testYearMonthDuration() throws XQException {
atomicTest("xs:yearMonthDuration('P1M')", "P1M", XQBASETYPE_YEARMONTHDURATION);
}
// --------------------------------------------------------------------------
// Node tests
// --------------------------------------------------------------------------
/**
* Tests comment().
* @throws XQException XQuery exception
*/
@Test
public void testComment() throws XQException {
nodeTest("<!-- comment -->", "<!-- comment -->", XQITEMKIND_COMMENT);
}
/**
* Tests element().
* @throws XQException XQuery exception
*/
@Test
public void testElement() throws XQException {
nodeTest("<e>AAA</e>", "<e>AAA</e>", XQITEMKIND_ELEMENT);
}
/**
* Tests document(element()).
* @throws XQException XQuery exception
*/
@Test
public void testDocumentElement() throws XQException {
nodeTest("document{<e>AAA</e>}", "<e>AAA</e>", XQITEMKIND_DOCUMENT_ELEMENT);
}
/**
* Tests processing-instruction().
* @throws XQException XQuery exception
*/
@Test
public void testProcessingInstruction() throws XQException {
nodeTest("processing-instruction {'a'} {'b'}", "<?a b?>",
XQITEMKIND_PI);
}
/**
* Tests text().
* @throws XQException XQuery exception
*/
@Test
public void testText() throws XQException {
nodeTest("text { 'AAA' }", "AAA", XQITEMKIND_TEXT);
}
/**
* Tests document().
* @throws XQException XQuery exception
*/
@Test
public void testDocumentNode() throws XQException {
nodeTest("document { text { 'AAA' } }", "AAA", XQITEMKIND_DOCUMENT);
}
/**
* Tests attribute().
* @throws XQException XQuery exception
*/
@Test
public void testAttribute() throws XQException {
final XQResultSequence rs = xqc.createExpression().executeQuery(
"attribute a { 'AAA' }"
);
assertTrue(rs.next());
final XQItemType type = rs.getItemType();
assertEquals(XQITEMKIND_ATTRIBUTE, type.getItemKind());
assertEquals("a", type.getNodeName().getLocalPart());
assertEquals("AAA", ((Attr) rs.getItem().getNode()).getValue());
}
// --------------------------------------------------------------------------
// Node URI tests
// --------------------------------------------------------------------------
/**
* Tests the URI of a QName.
* @throws XQException XQuery exception
*/
@Test
public void testQNameURI() throws XQException {
uriTest("fn:QName('http://a/b/c','a:b')", "http://a/b/c");
}
/**
* Tests the URI of an attribute.
* @throws XQException XQuery exception
*/
@Test
public void testAttributeURI() throws XQException {
final XQResultSequence rs = xqc.createExpression().executeQuery(
"attribute { fn:QName('http://a/b/c', 'a:b') } { 'AAA' }"
);
rs.next();
final XQItemType type = rs.getItemType();
assertEquals("http://a/b/c", rs.getNodeUri().toString());
assertEquals("a", type.getNodeName().getPrefix());
assertEquals("b", type.getNodeName().getLocalPart());
}
// --------------------------------------------------------------------------
// Helper methods
// --------------------------------------------------------------------------
/**
* Runs an atomic test.
* @param query query string
* @param expectedValue expected value
* @param expectedBaseType expected base type
* @throws XQException XQuery exception
*/
private void atomicTest(final String query, final String expectedValue,
final int expectedBaseType) throws XQException {
final XQResultSequence rs = xqc.createExpression().executeQuery(query);
assertTrue(rs.next());
final XQItemType type = rs.getItemType();
assertEquals(XQITEMKIND_ATOMIC, type.getItemKind());
assertEquals(expectedBaseType, type.getBaseType());
assertEquals(expectedValue, rs.getItemAsString(null));
}
/**
* Runs a node test.
* @param query query string
* @param expectedValue expected value
* @param expectedItemKind expected item kind
* @throws XQException XQuery exception
*/
private void nodeTest(final String query, final String expectedValue,
final int expectedItemKind) throws XQException {
final XQResultSequence rs = xqc.createExpression().executeQuery(query);
assertTrue(rs.next());
final XQItemType type = rs.getItemType();
assertEquals(expectedItemKind, type.getItemKind());
assertEquals(expectedValue, rs.getItemAsString(null));
}
/**
* Runs a URI test.
* @param query query string
* @param expectedURI expected URI
* @throws XQException XQuery exception
*/
private void uriTest(final String query, final String expectedURI) throws XQException {
final XQResultSequence rs = xqc.createExpression().executeQuery(query);
assertTrue(rs.next());
final URI uri = rs.getNodeUri();
assertNotNull(uri);
assertEquals(expectedURI, uri.toString());
}
// --------------------------------------------------------------------------
}