vgritsenko 2003/12/21 18:14:08
Modified: java/tests/src/org/apache/xindice UnitTests.java
java/tests/src/org/apache/xindice/client/xmldb
DatabaseImplTest.java
java/tests/src/org/apache/xindice/core/meta/inline
InlineHeaderBuilderTest.java
ResourceTypeReaderTest.java
java/tests/src/org/apache/xindice/core/query
XPathQueryResolverTest.java
java/tests/src/org/apache/xindice/xml/sax
SAXEventGeneratorTest.java
Added: java/tests/src/org/apache/xindice/core DatabaseTest.java
java/tests/src/org/apache/xindice/core/filer
BTreeFilerTest.java FSFilerTest.java
FilerTestBase.java HashFilerTest.java
MemFilerTest.java
Removed: java/tests/src/org/apache/xindice/core/filer
FilerTestCase.java FilerTestSetup.java
java/tests/src/org/apache/xindice/core/meta/inline
InlineMetaTests.java
Log:
Unit test modifications:
* (Almost) remove programmatic test suite composition. Let Ant do it. Result
is
that it is easier to add new tests, and report looks more readable.
* Add DatabaseTest
* Add more tests to the XPathQuery test.
* Fix (newly discovered) SAXEventGen test.
Revision Changes Path
1.18 +8 -36
xml-xindice/java/tests/src/org/apache/xindice/UnitTests.java
Index: UnitTests.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/UnitTests.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- UnitTests.java 18 Dec 2003 14:47:22 -0000 1.17
+++ UnitTests.java 22 Dec 2003 02:14:07 -0000 1.18
@@ -59,30 +59,18 @@
package org.apache.xindice;
-import java.io.File;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-import junitx.extensions.TestSetup;
-
import org.apache.xindice.client.xmldb.DatabaseImplTest;
import org.apache.xindice.client.xmldb.ResourceIteratorImplTest;
-import org.apache.xindice.core.data.KeyTest;
-import org.apache.xindice.core.data.ValueTest;
-import org.apache.xindice.core.filer.BTreeFiler;
-import org.apache.xindice.core.filer.FSFiler;
import org.apache.xindice.core.filer.Filer;
-import org.apache.xindice.core.filer.FilerTestCase;
-import org.apache.xindice.core.filer.FilerTestSetup;
-import org.apache.xindice.core.filer.HashFiler;
-import org.apache.xindice.core.filer.MemFiler;
-import org.apache.xindice.core.meta.inline.InlineMetaTests;
+import org.apache.xindice.core.filer.FilerTestBase;
import org.apache.xindice.core.meta.MetaTest;
-import org.apache.xindice.core.query.XPathQueryResolverTest;
import org.apache.xindice.tools.XMLToolsTest;
import org.apache.xindice.util.ConfigurationTest;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
/**
* @version CVS $Revision$, $Date$
* @author Vladimir R. Bossicard <[EMAIL PROTECTED]>
@@ -97,31 +85,15 @@
public static Test suite() {
TestSuite suite = new TestSuite("Xindice unit tests");
- suite.addTest(new TestSuite(KeyTest.class));
- suite.addTest(new TestSuite(ValueTest.class));
- suite.addTest(new TestSuite(XPathQueryResolverTest.class));
- suite.addTest(InlineMetaTests.suite());
-
- suite.addTest(new FilerTestSetup(new TestSuite(FilerTestCase.class),
new BTreeFiler()));
- suite.addTest(new FilerTestSetup(new TestSuite(FilerTestCase.class),
new FSFiler()));
- // TODO: see what to do with the HashFiler
- suite.addTest(new FilerTestSetup(new TestSuite(FilerTestCase.class),
new HashFiler()));
- suite.addTest(new FilerTestSetup(new TestSuite(FilerTestCase.class),
new MemFiler()));
-
// If the Berkeley filer was built in then test it too.
try {
Class filerClass =
Class.forName("org.apache.xindice.core.filer.BerkeleyBTreeFiler");
Filer filer = (Filer) filerClass.newInstance();
- suite.addTest(new FilerTestSetup(new
TestSuite(FilerTestCase.class), filer));
+ suite.addTest(new FilerTestBase("BerkeleyFilerTestCase", filer));
} catch (Exception e) {
// If the class wasn't built just ignore it.
}
- suite.addTest(new TestSuite(DatabaseImplTest.class));
- suite.addTest(new TestSuite(ResourceIteratorImplTest.class));
- suite.addTest(new TestSuite(XMLToolsTest.class));
- suite.addTest(new TestSuite(ConfigurationTest.class));
- suite.addTest(new TestSuite(MetaTest.class));
return suite;
}
}
1.5 +10 -19
xml-xindice/java/tests/src/org/apache/xindice/client/xmldb/DatabaseImplTest.java
Index: DatabaseImplTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/client/xmldb/DatabaseImplTest.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DatabaseImplTest.java 7 Aug 2003 20:13:26 -0000 1.4
+++ DatabaseImplTest.java 22 Dec 2003 02:14:07 -0000 1.5
@@ -65,23 +65,19 @@
* @version CVS $Revision$, $Date$
* @author Vladimir R. Bossicard <[EMAIL PROTECTED]>
*/
-public class DatabaseImplTest
- extends TestCase {
+public class DatabaseImplTest extends TestCase {
private DatabaseImpl db;
- public void setUp()
- throws Exception {
+ public void setUp() throws Exception {
db = new DatabaseImpl();
}
- public void testGetName()
- throws Exception {
+ public void testGetName() throws Exception {
assertEquals("xindice, xindice-embed, xindice-managed", db.getName());
}
- public void testAcceptXmlRpcURI()
- throws Exception {
+ public void testAcceptXmlRpcURI() throws Exception {
assertTrue(db.acceptsURI("xindice://"));
assertTrue(db.acceptsURI("xindice://"));
@@ -91,8 +87,7 @@
assertFalse(db.acceptsURI(null));
}
- public void testAcceptEmbedURI()
- throws Exception {
+ public void testAcceptEmbedURI() throws Exception {
assertTrue(db.acceptsURI("xindice-embed://"));
assertFalse(db.acceptsURI("xindice://"));
@@ -102,8 +97,7 @@
assertFalse(db.acceptsURI(null));
}
- public void testFailAcceptCorbaURI()
- throws Exception {
+ public void testFailAcceptCorbaURI() throws Exception {
assertFalse(db.acceptsURI("xindice-corba://"));
assertFalse(db.acceptsURI("xindice-corba://"));
@@ -111,8 +105,7 @@
assertFalse(db.acceptsURI(null));
}
- public void testFailAcceptNullURI()
- throws Exception {
+ public void testFailAcceptNullURI() throws Exception {
assertFalse(db.acceptsURI(null));
assertFalse(db.acceptsURI("xindice-corba://"));
@@ -120,13 +113,11 @@
assertFalse(db.acceptsURI(null));
}
- public void testFailAcceptEmptyURI()
- throws Exception {
+ public void testFailAcceptEmptyURI() throws Exception {
assertFalse(db.acceptsURI(""));
assertFalse(db.acceptsURI("xindice-corba://"));
assertFalse(db.acceptsURI(""));
assertFalse(db.acceptsURI(null));
}
-
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/DatabaseTest.java
Index: DatabaseTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: DatabaseTest.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core;
import org.apache.xindice.util.Configuration;
import org.apache.xindice.xml.dom.DOMParser;
import junit.framework.TestCase;
/**
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class DatabaseTest extends TestCase {
final String DATABASE =
"<root-collection dbroot=\"db/\" name=\"db\">" +
"<queryengine>" +
"<resolver autoindex=\"false\"
class=\"org.apache.xindice.core.query.XPathQueryResolver\" />" +
"<resolver
class=\"org.apache.xindice.core.xupdate.XUpdateQueryResolver\" />" +
"</queryengine>" +
"</root-collection>";
final String COLLECTIONA =
"<collection compressed=\"true\" name=\"CollectionA\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
final String COLLECTIONB =
"<collection compressed=\"true\" name=\"CollectionB\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
final String COLLECTIONC =
"<collection compressed=\"true\" name=\"CollectionC\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
private static Database db;
private Configuration configurationA;
private Configuration configurationB;
private Configuration configurationC;
public DatabaseTest(String name) {
super(name);
}
public void setUp() throws Exception {
db = new Database();
db.setConfig(new Configuration(DOMParser.toDocument(DATABASE)));
configurationA = new Configuration(DOMParser.toDocument(COLLECTIONA));
configurationB = new Configuration(DOMParser.toDocument(COLLECTIONB));
configurationC = new Configuration(DOMParser.toDocument(COLLECTIONC));
}
public void testCreateCollection() throws Exception {
Collection collection = db.createCollection("CollectionA",
configurationA);
assertNotNull("Collection expected", collection);
assertEquals("Collection name", "CollectionA", collection.getName());
}
public void testFailCreateCollection() throws Exception {
Collection collection = null;
try {
collection = db.createCollection("somepath", configurationA);
fail("Exception expected");
} catch (DBException e) {
// Expected
}
}
public void testMTGetCollection() throws Exception {
Collection a = db.createCollection("CollectionA", configurationA);
Collection b = db.createCollection("CollectionB", configurationB);
Collection c = db.createCollection("CollectionC", configurationC);
final int THREADS = 20;
final int ITERATIONS = 50;
final boolean[] result = new boolean[]{ true };
Thread[] threads = new Thread[THREADS];
for (int i = 0; i < THREADS; i++) {
threads[i] = new Thread() {
public void run() {
for (int ii = 0; ii < ITERATIONS && result[0]; ii++) {
Collection c;
try {
c = db.getCollection("CollectionA");
if (!c.getName().equals("CollectionA")) {
System.out.println("Expected CollectionA, got
" + c.getName());
result[0] = false;
}
c = db.getCollection("CollectionB");
if (!c.getName().equals("CollectionB")) {
System.out.println("Expected CollectionB, got
" + c.getName());
result[0] = false;
}
c = db.getCollection("CollectionC");
if (!c.getName().equals("CollectionC")) {
System.out.println("Expected CollectionC, got
" + c.getName());
result[0] = false;
}
} catch (Exception e) {
e.printStackTrace();
result[0] = false;
fail();
}
}
}
};
threads[i].setName("DatabaseTest" + i);
}
// Start all the threads at once
for (int i = 0; i < THREADS; i++) {
threads[i].start();
}
Thread.sleep(1000);
for (int i = 0; i < THREADS; i++) {
threads[i].join();
}
db.dropCollection(a);
db.dropCollection(b);
db.dropCollection(c);
assertTrue("Test Failed", result[0]);
}
public void tearDown() throws Exception {
try {
db.dropCollection(db.getCollection("CollectionA"));
} catch (Exception e) {
}
try {
db.dropCollection(db.getCollection("CollectionB"));
} catch (Exception e) {
}
try {
db.dropCollection(db.getCollection("CollectionC"));
} catch (Exception e) {
}
}
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/filer/BTreeFilerTest.java
Index: BTreeFilerTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: BTreeFilerTest.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core.filer;
/**
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class BTreeFilerTest extends FilerTestBase {
public BTreeFilerTest(String name) {
super(name, new BTreeFiler());
}
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/filer/FSFilerTest.java
Index: FSFilerTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: FSFilerTest.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core.filer;
/**
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class FSFilerTest extends FilerTestBase {
public FSFilerTest(String name) {
super(name, new FSFiler());
}
public void testLargeKey() throws Exception {
// Kay size is limited by the file system used
LARGE_KEY_SIZE = 128;
super.testLargeKey();
}
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/filer/FilerTestBase.java
Index: FilerTestBase.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: FilerTestBase.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core.filer;
import org.apache.xindice.core.data.Key;
import org.apache.xindice.core.data.Record;
import org.apache.xindice.core.data.RecordSet;
import org.apache.xindice.core.data.Value;
import org.apache.xindice.util.Configuration;
import org.apache.xindice.xml.dom.DOMParser;
import junit.framework.TestCase;
import java.util.List;
import java.util.Vector;
import java.io.File;
/**
* Base class for filer test cases
*
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Kimbro Staken</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Vladimir R. Bossicard</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class FilerTestBase extends TestCase {
static public final String TEST_COLLECTION_NAME = "tests";
static public final Key TEST_KEY = new Key("test.xml");
static public final Value TEST_VALUE = new
Value("<test><test></test><test>Just a test</test></test>");
static public final Value TEST_VALUE_2 = new
Value("<test><test></test><test>Just a test 2</test></test>");
static public final Value TEST_VALUE_3 = new
Value("<test><test></test><test>Just a test 3</test></test>");
/**
* Key size for the testLargeKey. FSFiler will set smaller value for its
test.
*/
protected int LARGE_KEY_SIZE = 8192 + 32;
private static final File root = new File(TEST_COLLECTION_NAME);
private Filer filer;
public FilerTestBase(String name, Filer filer) {
super(name);
this.filer = filer;
}
public void setUp() throws Exception {
root.mkdir();
filer.setLocation(root, TEST_COLLECTION_NAME);
filer.setConfig(new Configuration(DOMParser.toDocument("<filer
location=\"" + TEST_COLLECTION_NAME + "\"/>")));
if (!filer.exists()) {
filer.create();
}
filer.open();
RecordSet set = filer.getRecordSet();
while (set.hasMoreRecords()) {
Key key = set.getNextKey();
filer.deleteRecord(key);
}
assertEquals(0, filer.getRecordCount());
}
protected void tearDown() throws Exception {
if (filer != null) {
filer.close();
}
String[] files = root.list();
for (int i = 0; i < files.length; i++) {
new File(root, files[i]).delete();
}
root.delete();
super.tearDown();
}
public String getName() {
return this.filer.getName() + " " + super.getName();
}
public void testSuccessWriteRecord() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
Record result = filer.readRecord(TEST_KEY);
assertEquals(TEST_VALUE, result.getValue());
RecordSet set = filer.getRecordSet();
assertEquals(result.getValue(), set.getNextRecord().getValue());
assertTrue(set.hasMoreRecords() == false);
filer.deleteRecord(TEST_KEY);
assertEquals(0, filer.getRecordCount());
}
public void testFailReadDeletedRecord() throws Exception {
Record result = filer.readRecord(TEST_KEY);
assertNull(result);
}
public void testFailWriteRecordNullKey() throws Exception {
try {
filer.writeRecord(null, TEST_VALUE);
fail("Expecting FilerException");
} catch (FilerException e) {
// Ok
}
}
public void testFailWriteRecordNullValue() throws Exception {
try {
filer.writeRecord(TEST_KEY, null);
fail("Expecting FilerException");
} catch (FilerException e) {
// Ok
}
}
public void testFailWriteRecordNullValueKey() throws Exception {
try {
filer.writeRecord(null, null);
fail("Expecting FilerException");
} catch (FilerException e) {
// Ok
}
}
public void testReadRecord() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// Valid key
Record result = filer.readRecord(TEST_KEY);
assertEquals(TEST_VALUE, result.getValue());
}
public void testFailReadRecordNullKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// Null key
Record result = filer.readRecord(null);
assertNull(result);
}
public void testFailReadRecordEmptyKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// Empty key
Record result = filer.readRecord(new Key(""));
assertNull(result);
}
public void testFailReadRecordUnknownKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// Non-existant key
Record result = filer.readRecord(new Key("non-existant-key"));
assertNull(result);
}
public void testDeleteRecord() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// Valid key
filer.deleteRecord(TEST_KEY);
assertEquals(0, filer.getRecordCount());
Record result = filer.readRecord(TEST_KEY);
assertNull(result);
}
public void testDeleteRecordNullKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// These should all just fail silently.
assertTrue(false == filer.deleteRecord(null));
assertEquals(1, filer.getRecordCount());
}
public void testDeleteRecordEmptyKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// These should all just fail silently.
assertTrue(false == filer.deleteRecord(new Key("")));
assertEquals(1, filer.getRecordCount());
}
public void testDeleteRecordWrongKey() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertEquals(1, filer.getRecordCount());
// These should all just fail silently.
assertTrue(false == filer.deleteRecord(new Key("non-existant-key")));
assertEquals(1, filer.getRecordCount());
}
public void testGetRecordCount() throws Exception {
assertEquals(0, filer.getRecordCount());
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertTrue(filer.writeRecord(new Key("test1"), TEST_VALUE));
assertTrue(filer.writeRecord(new Key("test2"), TEST_VALUE));
assertEquals(3, filer.getRecordCount());
assertTrue(filer.writeRecord(new Key("test3"), TEST_VALUE));
assertEquals(4, filer.getRecordCount());
assertTrue(filer.deleteRecord(new Key("test3")));
assertEquals(3, filer.getRecordCount());
assertTrue(filer.deleteRecord(TEST_KEY));
assertTrue(filer.deleteRecord(new Key("test1")));
assertTrue(filer.deleteRecord(new Key("test2")));
assertEquals(0, filer.getRecordCount());
}
public void testGetRecordSet() throws Exception {
assertTrue(filer.writeRecord(TEST_KEY, TEST_VALUE));
assertTrue(filer.writeRecord(new Key("test2"), TEST_VALUE_2));
assertTrue(filer.writeRecord(new Key("test3"), TEST_VALUE_3));
RecordSet result = filer.getRecordSet();
assertNotNull(result);
List results = new Vector();
while (result.hasMoreRecords()) {
results.add(result.getNextRecord().getValue());
}
assertEquals(3, results.size());
assertTrue(results.contains(TEST_VALUE));
assertTrue(results.contains(TEST_VALUE_2));
assertTrue(results.contains(TEST_VALUE_3));
assertTrue(filer.deleteRecord(TEST_KEY));
assertTrue(filer.deleteRecord(new Key("test2")));
assertTrue(filer.deleteRecord(new Key("test3")));
result = filer.getRecordSet();
assertTrue(!result.hasMoreRecords());
}
public void testInsertManyDocuments() throws Exception {
int iterations = 1000;
for (int i = 0; i < iterations; i++) {
assertTrue(filer.writeRecord(new Key("key" + i), TEST_VALUE));
}
assertTrue(filer.getRecordCount() == iterations);
for (int i = 0; i < iterations; i++) {
assertTrue(filer.deleteRecord(new Key("key" + i)));
}
assertTrue(filer.getRecordCount() == 0);
}
public void testConcurrentInsert() throws Exception {
assertTrue(filer.getRecordCount() == 0);
final int THREADS = 30;
final int ITERATIONS = 65;
Thread[] threads = new Thread[THREADS];
for (int i = 0; i < THREADS; i++) {
final int threadID = i;
threads[i] = new Thread() {
public void run() {
for (int ii = 0; ii < ITERATIONS; ii++) {
Key key = new Key("T" + threadID + "I" + ii);
Value value = new Value("<test thread=\"" + threadID
+ "\" iteration=\"" + ii + "\"/>");
try {
filer.writeRecord(key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
// System.out.println(getName() + " done.");
}
};
threads[i].setName("FilerTest" + i);
}
// Start all the threads at once
for (int i = 0; i < THREADS; i++) {
threads[i].start();
}
Thread.sleep(1000);
for (int i = 0; i < THREADS; i++) {
threads[i].join();
}
filer.flush();
// Check results
assertEquals(filer.getRecordCount(), THREADS * ITERATIONS);
for (int i = 0; i < THREADS; i++) {
for (int ii = 0; ii < ITERATIONS; ii++) {
Key key = new Key("T" + i + "I" + ii);
Value value = new Value("<test thread=\"" + i + "\"
iteration=\"" + ii + "\"/>");
Record record = filer.readRecord(key);
assertNotNull("Record with key '" + key + "' was not found",
record);
assertEquals("Expected record with key '" + key + "', found
record with key '" + record.getKey() + "'",
key, record.getKey());
assertEquals("Expected record with value '" + value + "',
found record with value '" + record.getValue() + "'",
value, record.getValue());
}
}
}
public void testLargeKey() throws Exception {
assertTrue(filer.getRecordCount() == 0);
StringBuffer sb = new StringBuffer(LARGE_KEY_SIZE);
sb.append("KEY");
for (int k = 0; k < LARGE_KEY_SIZE - 3; k++) {
sb.append('0');
}
final Key key = new Key(sb.toString());
final Value value = new Value("<test/>");
assertTrue(filer.writeRecord(key, value));
assertEquals(filer.getRecordCount(), 1);
Record record = filer.readRecord(key);
assertNotNull("Record with key '" + key + "' was not found",
record);
assertEquals("Expected record with key '" + key + "', found record
with key '" + record.getKey() + "'",
key, record.getKey());
assertEquals("Expected record with value '" + value + "', found
record with value '" + record.getValue() + "'",
value, record.getValue());
}
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/filer/HashFilerTest.java
Index: HashFilerTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: HashFilerTest.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core.filer;
/**
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class HashFilerTest extends FilerTestBase {
public HashFilerTest(String name) {
super(name, new HashFiler());
}
public void testLargeKey() throws Exception {
// HashFiler large key can not be large than page size (less page
header)
LARGE_KEY_SIZE = 4030;
super.testLargeKey();
}
}
1.1
xml-xindice/java/tests/src/org/apache/xindice/core/filer/MemFilerTest.java
Index: MemFilerTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Xindice" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation and was
* originally based on software copyright (c) 1999-2001, The dbXML
* Group, L.L.C., http://www.dbxmlgroup.com. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* CVS $Id: MemFilerTest.java,v 1.1 2003/12/22 02:14:07 vgritsenko Exp $
*/
package org.apache.xindice.core.filer;
/**
* @version CVS $Revision: 1.1 $, $Date: 2003/12/22 02:14:07 $
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
*/
public class MemFilerTest extends FilerTestBase {
public MemFilerTest(String name) {
super(name, new MemFiler());
}
}
1.3 +4 -5
xml-xindice/java/tests/src/org/apache/xindice/core/meta/inline/InlineHeaderBuilderTest.java
Index: InlineHeaderBuilderTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/meta/inline/InlineHeaderBuilderTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InlineHeaderBuilderTest.java 7 Aug 2003 20:13:26 -0000 1.2
+++ InlineHeaderBuilderTest.java 22 Dec 2003 02:14:07 -0000 1.3
@@ -68,8 +68,7 @@
* @version CVS $Revision$, $Date$
* @author Gary Shea <[EMAIL PROTECTED]>
*/
-public class InlineHeaderBuilderTest
- extends TestCase {
+public class InlineHeaderBuilderTest extends TestCase {
public void testInlineHeaderBuilderCreateValue() {
byte[] metadata = new byte[] {
@@ -104,4 +103,4 @@
assertEquals("i=" + i, data[i + 2], valueBytes[i + 5]);
}
}
-}
\ No newline at end of file
+}
1.3 +4 -6
xml-xindice/java/tests/src/org/apache/xindice/core/meta/inline/ResourceTypeReaderTest.java
Index: ResourceTypeReaderTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/meta/inline/ResourceTypeReaderTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ResourceTypeReaderTest.java 7 Aug 2003 20:13:26 -0000 1.2
+++ ResourceTypeReaderTest.java 22 Dec 2003 02:14:07 -0000 1.3
@@ -59,7 +59,6 @@
* CVS $Id$
*/
-
import org.apache.xindice.core.meta.inline.InlineMetaException;
import org.apache.xindice.core.meta.inline.InlineMetaMap;
import org.apache.xindice.core.meta.inline.ResourceTypeReader;
@@ -70,8 +69,7 @@
* @version CVS $Revision$, $Date$
* @author Gary Shea <[EMAIL PROTECTED]>
*/
-public class ResourceTypeReaderTest
- extends TestCase {
+public class ResourceTypeReaderTest extends TestCase {
public void testResourceTypeReaderRead() throws Exception {
@@ -99,4 +97,4 @@
// expected exception
}
}
-}
\ No newline at end of file
+}
1.6 +193 -69
xml-xindice/java/tests/src/org/apache/xindice/core/query/XPathQueryResolverTest.java
Index: XPathQueryResolverTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/query/XPathQueryResolverTest.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XPathQueryResolverTest.java 15 Dec 2003 14:21:48 -0000 1.5
+++ XPathQueryResolverTest.java 22 Dec 2003 02:14:07 -0000 1.6
@@ -54,92 +54,214 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- *
+ * CVS $Id$
*/
-package org.apache.xindice.core.query;
-import junit.framework.TestCase;
+package org.apache.xindice.core.query;
import org.apache.xindice.core.Collection;
import org.apache.xindice.core.Database;
import org.apache.xindice.core.data.NodeSet;
import org.apache.xindice.util.Configuration;
import org.apache.xindice.xml.dom.DOMParser;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-/** This TestCase should test the correct Work of the XPathQueryResolver.
- * During setUp it generates a database and adds one Collection.
- * The two Tests Simple and Complex query will be raun against this
Collection.
- * The complex query string is taken from the Bug 14878 in Bugzilla
- *
+import junit.framework.TestCase;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * This TestCase should test the correct Work of the XPathQueryResolver.
+ *
+ * During setUp it generates a database and adds one Collection.
+ * The two Tests Simple and Complex query will be raun against this
Collection.
+ * The complex query string is taken from the Bug 14878 in Bugzilla
+ *
+ * @version CVS $Revision$, $Date$
* @author Alexander Sterff <[EMAIL PROTECTED]>
*/
public class XPathQueryResolverTest extends TestCase {
- protected Database db;
- protected Configuration conf;
- Collection col;
+ final String DATABASE =
+ "<root-collection dbroot=\"db/\" name=\"db\">" +
+ "<queryengine>" +
+ "<resolver autoindex=\"false\"
class=\"org.apache.xindice.core.query.XPathQueryResolver\" />" +
+ "<resolver
class=\"org.apache.xindice.core.xupdate.XUpdateQueryResolver\" />" +
+ "</queryengine>" +
+ "</root-collection>";
+
+ final String COLLECTION =
+ "<collection compressed=\"true\" name=\"testcol\">" +
+ "<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
+ "<indexes />" +
+ "</collection>";
+
+ final String DOCUMENT =
+ "<terrainmap>" +
+ "<coordinates>" +
+ "some text" +
+ "<top-left>" +
+ "<latlong>" +
+ "some more text" +
+ "<latitude>80</latitude>" +
+ "<longitude>-100</longitude>" +
+ "</latlong>" +
+ "</top-left>" +
+ "<bottom-right>" +
+ "<latlong>" +
+ "a" +
+ "<latitude>-200</latitude>" +
+ "b" +
+ "<longitude>90</longitude>" +
+ "c" +
+ "</latlong>" +
+ "</bottom-right>" +
+ "</coordinates>" +
+ "</terrainmap>";
+
+ final String[] ELEMENT_QUERY = {
+ "/terrainmap",
+ "/terrainxmap",
+ "/terrainmap/coordinates",
+ "/terrainmap/coordinates/top-left",
+ "/terrainmap/coordinates/*",
+ "/terrainmap/coordinates/bottom-right/latlong",
+ "/terrainmap/coordinates/bottom-right/latlong/*",
+ "/terrainmap/coordinates/bottom-right/latlong/..",
+ };
+
+ final int[] ELEMENT_COUNT = {
+ 1,
+ 0,
+ 1,
+ 1,
+ 2,
+ 1,
+ 2,
+ 1,
+ };
+
+ final String[] ELEMENT_NAMES = {
+ "terrainmap",
+ null,
+ "coordinates",
+ "top-left",
+ "bottom-right",
+ "latlong",
+ "longitude",
+ "bottom-right",
+ };
+
+ final String[] NUMBER_QUERY = {
+ "2 + 2",
+ "count(/terrainmap)",
+ "count(/terrainmap/coordinates) + count(//latlong)",
+ "number(//latitude[1]/text())",
+ "number(//longitude[ancestor::bottom-right]/text())",
+ };
+
+ final int[] NUMBER_VALUE = {
+ 4,
+ 1,
+ 3,
+ 80,
+ 90,
+ };
+
+ final String[] TEXT_QUERY = {
+ "/terrainmap/coordinates/text()",
+ "/terrainmap/coordinates//text()[contains(., 'more')]",
+ "//text()",
+ "//latlong/text()",
+ "//latlong/text()[2]",
+ };
+
+ final int[] TEXT_COUNT = {
+ 1,
+ 1,
+ 9,
+ 4,
+ 1,
+ };
+
+ final String[] TEXT_VALUE = {
+ "some text",
+ "some more text",
+ "c",
+ "c",
+ "b",
+ };
+
+
+ private static int tests;
+ private static Database db;
+ private static Collection col;
+
+ private XPathQueryResolver resolver;
+
+
+ public XPathQueryResolverTest(String name) {
+ super(name);
+ tests++;
+ }
public void setUp() throws Exception {
- // FIXME: This will create a new database for each test method. It's
overkill; one DB is enough
-
- db = new Database();
- Document doc = null;
-
- String xml =
- "<root-collection dbroot=\"db/\" name=\"db\">"
- + "<queryengine>"
- + "<resolver autoindex=\"false\"
class=\"org.apache.xindice.core.query.XPathQueryResolver\" />"
- + "<resolver
class=\"org.apache.xindice.core.xupdate.XUpdateQueryResolver\" />"
- + "</queryengine>"
- + "</root-collection>";
-
- doc = DOMParser.toDocument(xml);
-
- conf = new Configuration(doc);
- db.setConfig(conf);
-
- xml =
- "<collection compressed=\"true\" name=\"testcol\">"
- + "<filer class=\"org.apache.xindice.core.filer.BTreeFiler\"
/>"
- + "<indexes />"
- + "</collection>";
-
- doc = DOMParser.toDocument(xml);
-
- conf = new Configuration(doc);
- col = db.createCollection("testcol", conf);
- Document sampleXML = null;
- String sampleXMLString =
- "<terrainmap>"
- + "<coordinates>"
- + "<top-left>"
- + "<latlong>"
- + "<latitude>80</latitude>"
- + "<longitude>-100</longitude>"
- + "</latlong>"
- + "</top-left>"
- + "<bottom-right>"
- + "<latlong>"
- + "<latitude>-200</latitude>"
- + "<longitude>90</longitude>"
- + "</latlong>"
- + "</bottom-right>"
- + "</coordinates>"
- + "</terrainmap>";
- sampleXML = DOMParser.toDocument(sampleXMLString);
- col.insertDocument(sampleXML);
+ if (db == null) {
+ Database db = new Database();
+ db.setConfig(new Configuration(DOMParser.toDocument(DATABASE)));
+ col = db.createCollection("testcol", new
Configuration(DOMParser.toDocument(COLLECTION)));
+ col.insertDocument(DOMParser.toDocument(DOCUMENT));
+
+ XPathQueryResolverTest.db = db;
+ }
+
+ resolver = new XPathQueryResolver();
+ }
+
+ public void testElementXPathQuery() throws Exception {
+ for (int i = 0; i < ELEMENT_QUERY.length; i++) {
+ NodeSet nodeSet = resolver.query(col, ELEMENT_QUERY[i], null,
null);
+ int results = 0;
+ Element element = null;
+ while(nodeSet.hasMoreNodes()) {
+ element = (Element)nodeSet.getNextNode();
+ assertNotNull("NodeSet.getNextNode must be not null",
element);
+ results++;
+ }
+
+ assertEquals("Results count", ELEMENT_COUNT[i], results);
+ if (results > 0) {
+ assertEquals("Result element name", ELEMENT_NAMES[i],
element.getNodeName());
+ }
+ }
}
- public void testSimpleXPathQuery() throws Exception {
- Object node = null;
- XPathQueryResolver queryResolv = new XPathQueryResolver();
- NodeSet nodeSet = queryResolv.query(col, "/terrainmap", null, null);
- if (nodeSet.hasMoreNodes()) {
- node = nodeSet.getNextNode();
+ public void testNumberXPathQuery() throws Exception {
+ for (int i = 0; i < NUMBER_QUERY.length; i++) {
+ NodeSet nodeSet = resolver.query(col, NUMBER_QUERY[i], null,
null);
+ Double element = null;
+ assertTrue("Expected one result", nodeSet.hasMoreNodes());
+ element = (Double)nodeSet.getNextNode();
+ assertNotNull("NodeSet.getNextNode must be not null", element);
+ assertEquals("Result value", new Double(NUMBER_VALUE[i]),
element);
+ }
+ }
+
+ public void testTextXPathQuery() throws Exception {
+ for (int i = 0; i < TEXT_QUERY.length; i++) {
+ NodeSet nodeSet = resolver.query(col, TEXT_QUERY[i], null, null);
+ int results = 0;
+ Text element = null;
+ while(nodeSet.hasMoreNodes()) {
+ element = (Text)nodeSet.getNextNode();
+ assertNotNull("NodeSet.getNextNode must be not null",
element);
+ results++;
+ }
+
+ assertEquals("Results count for " + TEXT_QUERY[i],
TEXT_COUNT[i], results);
+ if (results > 0) {
+ assertEquals("Result value for " + TEXT_QUERY[i],
TEXT_VALUE[i], element.getNodeValue());
+ }
}
- assertNotNull("Simple query didn't return a node", node);
}
public void testComplexXPathQuery() throws Exception {
@@ -158,6 +280,8 @@
}
public void tearDown() throws Exception {
- db.dropCollection(col);
+ if (--tests == 0) {
+ db.dropCollection(col);
+ }
}
}
1.2 +60 -110
xml-xindice/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java
Index: SAXEventGeneratorTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/xml/sax/SAXEventGeneratorTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SAXEventGeneratorTest.java 25 Dec 2002 20:53:30 -0000 1.1
+++ SAXEventGeneratorTest.java 22 Dec 2003 02:14:08 -0000 1.2
@@ -26,32 +26,31 @@
public class SAXEventGeneratorTest extends TestCase {
private static final String XML =
- "<?xml version=\"1.0\"?>"
+ "<?xml version=\"1.0\"?>"
+ "<n1:n1 "
- + "xmlns:n1=\"http://apache.org/xindice/mockns/n1\" "
- + "xmlns:n2=\"http://apache.org/xindice/mockns/n1/n2\" "
- + "xmlns:n3=\"http://apache.org/xindice/mockns/n1/n3\" "
- + "xmlns:n4=\"http://apache.org/xindice/mockns/n1/n4\" "
- + "xmlns:n5=\"http://apache.org/xindice/mockns/n1/n5\" "
- + "xmlns:n6=\"http://apache.org/xindice/mockns/n1/n6\" "
- + "xmlns:n7=\"http://apache.org/xindice/mockns/n7\" "
- + "n7:aaa=\"n1\" "
- + "n7:bbb=\"something\">"
- + ""
- + ""
- + "<n2:aaa />"
- + "<n2:bbb />"
- + "<n2:ccc with=\"an attribute\">Whatever</n2:ccc>"
- + "<n2:ddd>Hello World!</n2:ddd>"
- + "<n2:eee />"
- + "<n1:aaa>0</n1:aaa>"
- + "<n1:bbb>More text</n1:bbb>"
- + "<n3:aaa />"
- + "<n3:bbb />"
- + "<n4:aaa />"
- + "<n4:bbb />"
- + "<n5:aaa>Even more text, with newlines\n and stuff</n5:aaa>"
- + "<n6:aaa />"
+ + "xmlns:n1=\"http://apache.org/xindice/mockns/n1\" "
+ + "xmlns:n2=\"http://apache.org/xindice/mockns/n1/n2\" "
+ + "xmlns:n3=\"http://apache.org/xindice/mockns/n1/n3\" "
+ + "xmlns:n4=\"http://apache.org/xindice/mockns/n1/n4\" "
+ + "xmlns:n5=\"http://apache.org/xindice/mockns/n1/n5\" "
+ + "xmlns:n6=\"http://apache.org/xindice/mockns/n1/n6\" "
+ + "xmlns:n7=\"http://apache.org/xindice/mockns/n7\" "
+ + "n7:aaa=\"n1\" "
+ + "n7:bbb=\"something\">"
+ + ""
+ + "<n2:aaa />"
+ + "<n2:bbb />"
+ + "<n2:ccc with=\"an attribute\">Whatever</n2:ccc>"
+ + "<n2:ddd>Hello World!</n2:ddd>"
+ + "<n2:eee />"
+ + "<n1:aaa>0</n1:aaa>"
+ + "<n1:bbb>More text</n1:bbb>"
+ + "<n3:aaa />"
+ + "<n3:bbb />"
+ + "<n4:aaa />"
+ + "<n4:bbb />"
+ + "<n5:aaa>Even more text, with newlines\n and stuff</n5:aaa>"
+ + "<n6:aaa />"
+ "</n1:n1>";
@@ -67,7 +66,6 @@
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
-
// Xindice parsing
doc = DOMParser.toDocument(XML);
generator = new SAXEventGenerator(doc);
@@ -125,7 +123,6 @@
public void testComment() {
assertEquals(jaxpHandler.commentCount, xindiceHandler.commentCount);
}
-
}
/**
@@ -150,125 +147,78 @@
int commentCount = 0;
ArrayList nameSpacesList = new ArrayList();
- /**
- * @see
org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
- */
public void setDocumentLocator(Locator arg0) {
}
- /**
- * @see org.xml.sax.ContentHandler#startDocument()
- */
+
public void startDocument() throws SAXException {
}
- /**
- * @see org.xml.sax.ContentHandler#endDocument()
- */
+
public void endDocument() throws SAXException {
}
- /**
- * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String,
java.lang.String)
- */
+
public void startPrefixMapping(String arg0, String arg1)
- throws SAXException {
- startPrefixMappingCount++;
+ throws SAXException {
+ startPrefixMappingCount++;
}
- /**
- * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
- */
+
public void endPrefixMapping(String arg0) throws SAXException {
- endPrefixMappingCount++;
+ endPrefixMappingCount++;
}
- /**
- * @see org.xml.sax.ContentHandler#startElement(java.lang.String,
java.lang.String, java.lang.String, org.xml.sax.Attributes)
- */
- public void startElement(
- String nsUri,
- String localName,
- String name,
- Attributes attrs)
- throws SAXException {
-
+
+ public void startElement(String nsUri, String localName, String name,
Attributes attrs)
+ throws SAXException {
startElementCount++;
-
- if (!nameSpacesList.contains(nsUri))
+ if (!nameSpacesList.contains(nsUri)) {
nameSpacesList.add(nsUri);
-
- attributesCount += attrs.getLength();
-
+ }
+ // Do not count namespace declaration attributes
+ for (int i=0; i <attrs.getLength(); i++) {
+ if (!attrs.getQName(i).startsWith("xmlns:"))
+ attributesCount ++;
+ }
}
- /**
- * @see org.xml.sax.ContentHandler#endElement(java.lang.String,
java.lang.String, java.lang.String)
- */
- public void endElement(
- String nsUri,
- String localName,
- String name)
- throws SAXException {
-
- endElementCount++;
+ public void endElement(String nsUri, String localName, String name)
+ throws SAXException {
+ endElementCount++;
}
- /**
- * @see org.xml.sax.ContentHandler#characters(char[], int, int)
- */
public void characters(char[] ch, int start, int end)
- throws SAXException {
- charactersCount += new String(ch, start, end).length();
+ throws SAXException {
+ charactersCount += new String(ch, start, end).length();
}
- /**
- * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
- */
+
public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
- throws SAXException {
+ throws SAXException {
}
- /**
- * @see
org.xml.sax.ContentHandler#processingInstruction(java.lang.String,
java.lang.String)
- */
+
public void processingInstruction(String arg0, String arg1)
- throws SAXException {
+ throws SAXException {
}
- /**
- * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
- */
+
public void skippedEntity(String arg0) throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String,
java.lang.String, java.lang.String)
- */
+
public void startDTD(String arg0, String arg1, String arg2)
- throws SAXException {
+ throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#endDTD()
- */
+
public void endDTD() throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String)
- */
+
public void startEntity(String arg0) throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String)
- */
+
public void endEntity(String arg0) throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#startCDATA()
- */
+
public void startCDATA() throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#endCDATA()
- */
+
public void endCDATA() throws SAXException {
}
- /**
- * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int)
- */
+
public void comment(char[] ch, int start, int end) throws SAXException {
commentCount += new String(ch, start, end).length();
}
-
-}
\ No newline at end of file
+}