package net.xqj.basex.local; import static net.xqj.basex.BaseXXQInsertOptions.*; import static org.junit.Assert.*; import javax.xml.xquery.*; import org.junit.*; import com.xqj2.*; /** * Testing XQJ insert. * * @author Charles Foster */ public final class InsertTest extends XQJBaseTest { /** Name of test database. */ private static final String DB = "xqj-test-database"; /** Name of test document. */ private static final String URI = "doc.xml"; @Before @Override public void setUp() throws XQException { super.setUp(); final XQExpression xqpe = xqc.createExpression(); xqpe.executeCommand("CREATE DB " + DB); xqpe.executeCommand("SET DEFAULTDB true"); xqpe.executeCommand("OPEN " + DB); xqpe.close(); } @After @Override public void tearDown() throws XQException { final XQExpression xqpe = xqc.createExpression(); xqpe.executeCommand("DROP DB " + DB); super.tearDown(); } /** * Testing regular insert. * @throws XQException query exception **/ @Test public void testInsert() throws XQException { final XQConnection2 xqc2 = (XQConnection2) xqc; xqc2.insertItem(URI, createDocument("<e>hello</e>"), null); assertTrue(docAvailable(URI)); assertTrue(dbExists(DB, URI)); } /** * Testing insert via ADD strategy. * @throws XQException query exception **/ @Test public void testAdd() throws XQException { final XQConnection2 xqc2 = (XQConnection2) xqc; xqc2.insertItem(URI, createDocument("<e>a</e>"), options(ADD)); assertTrue(docAvailable(URI)); assertTrue(dbExists(DB, URI)); xqc2.insertItem(URI, createDocument("<e>b</e>"), options(ADD)); assertEquals(2, countUris(DB, URI)); } /** * Testing insert via REPLACE strategy. * @throws XQException query exception **/ @Test public void testReplace() throws XQException { final XQConnection2 xqc2 = (XQConnection2) xqc; xqc2.insertItem(URI, createDocument("<e>a</e>"), options(REPLACE)); assertTrue(docAvailable(URI)); assertTrue(dbExists(DB, URI)); xqc2.insertItem(URI, createDocument("<e>b</e>"), options(REPLACE)); assertEquals(1, countUris(DB, URI)); } /** * Testing insert via STORE strategy. * @throws XQException query exception **/ @Test public void testStore() throws XQException { final XQConnection2 xqc2 = (XQConnection2) xqc; xqc2.insertItem(URI, createDocument("<e>a</e>"), options(STORE)); assertTrue(dbExists(DB, URI)); xqc2.insertItem(URI, createDocument("<e>b</e>"), options(STORE)); assertEquals(1, countUris(DB, URI)); } // -------------------------------------------------------------------------- // Helper methods // -------------------------------------------------------------------------- /** * Checks if a resource exists. * @param db database * @param uri URI * @return result of check * @throws XQException query exception */ private boolean dbExists(final String db, final String uri) throws XQException { final XQResultSequence rs = xqc.createExpression().executeQuery( "db:exists('" + db + "', '" + uri + "')" ); rs.next(); return rs.getBoolean(); } /** * Counts the resources in the specified database and URI. * @param db database * @param uri URI * @return number of resources * @throws XQException query exception */ private int countUris(final String db, final String uri) throws XQException { final XQResultSequence rs = xqc.createExpression().executeQuery( "xs:int(fn:count(db:list('" + db + "', '" + uri + "')))" ); rs.next(); return rs.getInt(); } // -------------------------------------------------------------------------- }