package org.exist.xquery;
import org.exist.test.ExistXmldbEmbeddedServer;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.xmldb.api.base.*;
import org.xmldb.api.modules.CollectionManagementService;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.modules.XQueryService;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class EntitiesTest {
@ClassRule
public static final ExistXmldbEmbeddedServer existEmbeddedServer = new ExistXmldbEmbeddedServer(false, true);
private Collection testCollection;
@SuppressWarnings("unused")
private String query;
@Before
public void setUp() throws ClassNotFoundException, IllegalAccessException, InstantiationException, XMLDBException {
final CollectionManagementService service =
(CollectionManagementService) existEmbeddedServer.getRoot().getService(
"CollectionManagementService",
"1.0");
testCollection = service.createCollection("test");
assertNotNull(testCollection);
}
@After
public void tearDown() throws Exception {
final CollectionManagementService service =
(CollectionManagementService) existEmbeddedServer.getRoot().getService(
"CollectionManagementService",
"1.0");
service.removeCollection("test");
testCollection = null;
}
/** Helper that performs an XQuery and does JUnit assertion on result size.
* @see #queryResource(XQueryService, String, String, int, String)
*/
@SuppressWarnings("unused")
private ResourceSet queryResource(XQueryService service, String resource,
String query, int expected) throws XMLDBException {
return queryResource(service, resource, query, expected, null);
}
/** Helper that performs an XQuery and does JUnit assertion on result size.
* @param service XQuery service
* @param resource database resource (collection) to query
* @param query
* @param expected size of result
* @param message for JUnit
* @return a ResourceSet, allowing to do more assertions if necessary.
* @throws XMLDBException
*/
private ResourceSet queryResource(XQueryService service, String resource,
String query, int expected, String message) throws XMLDBException {
ResourceSet result = service.queryResource(resource, query);
if(message == null) {
assertEquals(query, expected, result.getSize());
} else {
assertEquals(message, expected, result.getSize());
}
return result;
}
/** For queries without associated data */
private ResourceSet queryAndAssert(XQueryService service, String query,
int expected, String message) throws XMLDBException {
ResourceSet result = service.query(query);
if(message == null) {
assertEquals(expected, result.getSize());
} else {
assertEquals(message, expected, result.getSize());
}
return result;
}
/** For queries without associated data */
private XQueryService getQueryService() throws XMLDBException {
XQueryService service = (XQueryService) testCollection.getService(
"XPathQueryService", "1.0");
return service;
}
/** stores XML String and get Query Service
* @param documentName to be stored in the DB
* @param content to be stored in the DB
* @return the XQuery Service
* @throws XMLDBException
*/
@SuppressWarnings("unused")
private XQueryService storeXMLStringAndGetQueryService(String documentName,
String content) throws XMLDBException {
XMLResource doc =
(XMLResource) testCollection.createResource(
documentName, "XMLResource" );
doc.setContent(content);
testCollection.storeResource(doc);
XQueryService service =
(XQueryService) testCollection.getService(
"XPathQueryService",
"1.0");
return service;
}
@Test
public void attributeConstructor() throws XMLDBException {
XQueryService service = getQueryService();
@SuppressWarnings("unused")
ResourceSet result;
result = queryAndAssert( service,
"<foo "+
" ampEntity=\"{('&')}\"" +
" string=\"{(string('&'))}\"" +
" ltEntity=\"{('<')}\"" +
" gtEntity=\"{('>')}\"" +
" aposEntity=\"{(''')}\"" +
" quotEntity=\"{('"')}\"" +
"/>",
1, null );
// TODO: could check result
}
@Test
public void stringConstructor() throws XMLDBException {
XQueryService service = getQueryService();
@SuppressWarnings("unused")
ResourceSet result;
result = queryAndAssert( service, "'&'",1,null);
result = queryAndAssert( service, "'<'",1,null);
result = queryAndAssert( service, "'>'",1,null);
result = queryAndAssert( service, "'''",1,null);
result = queryAndAssert( service, "'"'",1,null);
// TODO: could check result
}
@Test
public void uriConstructor() throws XMLDBException {
XQueryService service = getQueryService();
ResourceSet result;
result = queryAndAssert(service, "xs:anyURI(\"index.xql?a=1&b=2\")", 1, null);
// TODO: could check result
result = queryAndAssert(service, "xs:anyURI('a') le xs:anyURI('b')", 1, null);
assertEquals("true",result.getResource(0).getContent());
}
}