/**********************************************************************
* Copyright (c) 2005-2009 ant4eclipse project team.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nils Hartmann, Daniel Kasmeroglu, Gerd Wuetherich
**********************************************************************/
package org.ant4eclipse.lib.core.xquery;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.ant4eclipse.lib.core.CoreExceptionCode;
import org.ant4eclipse.lib.core.exception.Ant4EclipseException;
import org.ant4eclipse.lib.core.xquery.XQuery;
import org.ant4eclipse.lib.core.xquery.XQueryHandler;
import org.junit.Test;
import java.io.InputStream;
/**
* A simple handler used to verify the functionality of the XQueryHandler class.
*/
public class XQueryHandlerTest {
/**
* Runs the tests.
*
* @throws Exception
* Testing failed for some reason.
*/
@Test
public void accessXmlFile() throws Exception {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("xquery/data.xml");
XQueryHandler handler = new XQueryHandler();
// retrieve the attributes 'name' and 'age'. the resulting arrays will have the
// same length because their length depends on the number of 'element' elements.
XQuery query1 = handler.createQuery("/database/element/@name");
XQuery query2 = handler.createQuery("/database/element/@age");
// get the data values of 'file' and 'length' elements. the arrays are having
// different lengths.
XQuery query3 = handler.createQuery("/database/folder/file");
XQuery query4 = handler.createQuery("/database/folder/length");
// this query generates a data entry for the 'length' element in case it
// is missing within a 'folder' element. this way the array length can
// be guaruanteed for multiple data entries.
XQuery query5 = handler.createQuery("/database/{folder}/length");
// similar but using a condition.
XQuery query6 = handler.createQuery("/database/{folder[@name='device:B']}/length");
// wildcard examples.
XQuery query7 = handler.createQuery("/*/element/@name");
XQuery query8 = handler.createQuery("/*/*/file");
// get an attribute of an indexed element.
XQuery query9 = handler.createQuery("/database/element[1]/@name");
// function query. this one creates numbers indicating the occurrence of 'entry'
// elements within 'group' elements.
XQuery query10 = handler.createQuery("/database/group/entry[count()]");
// run the SAX parser while evaluating the queries
XQueryHandler.queryInputStream(inputStream, handler);
String[] values1 = query1.getResult();
assertNotNull(values1);
assertEquals(3, values1.length);
assertEquals("Pjotr", values1[0]);
assertEquals("Frijda", values1[1]);
assertEquals("Hugo", values1[2]);
String[] values2 = query2.getResult();
assertNotNull(values2);
assertEquals(3, values2.length);
assertEquals(null, values2[0]);
assertEquals("27", values2[1]);
assertEquals(null, values2[2]);
String[] values3 = query3.getResult();
assertNotNull(values3);
assertEquals(2, values3.length);
assertEquals("diary.txt", values3[0]);
assertEquals("public.pgp", values3[1]);
String[] values4 = query4.getResult();
assertNotNull(values4);
assertEquals(1, values4.length);
assertEquals("77618", values4[0]);
String[] values5 = query5.getResult();
assertNotNull(values5);
assertEquals(2, values5.length);
assertEquals("77618", values5[0]);
assertEquals(null, values5[1]);
String[] values6 = query6.getResult();
assertNotNull(values6);
assertEquals(1, values6.length);
assertEquals(null, values6[0]);
String[] values7 = query7.getResult();
assertNotNull(values7);
assertEquals(3, values7.length);
assertEquals("Pjotr", values7[0]);
assertEquals("Frijda", values7[1]);
assertEquals("Hugo", values7[2]);
String[] values8 = query8.getResult();
assertNotNull(values8);
assertEquals(2, values8.length);
assertEquals("diary.txt", values8[0]);
assertEquals("public.pgp", values8[1]);
String[] values9 = query9.getResult();
assertNotNull(values9);
assertEquals(1, values9.length);
assertEquals("Frijda", values9[0]);
String[] values10 = query10.getResult();
assertNotNull(values10);
assertEquals(2, values10.length);
assertEquals("2", values10[0]);
assertEquals("4", values10[1]);
}
@Test
public void invalidQueries() {
XQueryHandler handler = new XQueryHandler();
try {
handler.createQuery("database/element/@name");
} catch (Ant4EclipseException ex) {
assertEquals(CoreExceptionCode.X_QUERY_INVALID_QUERY_EXCEPTION, ex.getExceptionCode());
}
}
} /* ENDCLASS */