vladimir 2003/04/05 21:39:13
Modified: java/tests/src/org/apache/xindice/integration/client/services XUpdateQueryTest.java Added: java/tests/src/org/apache/xindice/integration/client/services XPathQueryTest.java Log: new tests for XUpdate. It will be easier to test for XUpdate problems now Revision Changes Path 1.2 +79 -36 xml-xindice/java/tests/src/org/apache/xindice/integration/client/services/XUpdateQueryTest.java Index: XUpdateQueryTest.java =================================================================== RCS file: /home/cvs/xml-xindice/java/tests/src/org/apache/xindice/integration/client/services/XUpdateQueryTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- XUpdateQueryTest.java 28 Nov 2002 08:12:26 -0000 1.1 +++ XUpdateQueryTest.java 6 Apr 2003 05:39:13 -0000 1.2 @@ -71,54 +71,97 @@ public class XUpdateQueryTest extends AbstractXmlDbClientTest { - public void testUpdateDocument() + protected void setUp() throws Exception { - String document = "<?xml version=\"1.0\"?>" + - "<person>" + - "<fname>John</fname>" + - "<lname>Smith</lname>" + - "<phone type=\"work\">563-456-7890</phone>" + - "<phone type=\"home\">534-567-8901</phone>" + - "<email type=\"home\">[EMAIL PROTECTED]</email>" + - "<email type=\"work\">[EMAIL PROTECTED]</email>" + - "<address type=\"home\">34 S. Colon St.</address>" + - "<address type=\"work\">9967 W. Shrimp Ave.</address>" + + super.setUp(); + + String document1 = "<?xml version=\"1.0\"?>" + + "<person status=\"single\">" + + "<first>John</first>" + + "<last>Smith</last>" + + "<phone type=\"work\">555-345-6789</phone>" + + "</person>"; + String document2 = "<?xml version=\"1.0\"?>" + + "<person status=\"married\">" + + "<first>Sally</first>" + + "<last>Benton</last>" + + "<phone type=\"work\">555-345-6789</phone>" + "</person>"; - this.client.insertDocument(TEST_COLLECTION_PATH, "xupdatedoc", document); - assertEquals(1, this.client.countDocument(TEST_COLLECTION_PATH)); + this.client.insertDocument(TEST_COLLECTION_PATH, "doc1", document1); + this.client.insertDocument(TEST_COLLECTION_PATH, "doc2", document2); + } + + protected void tearDown() + throws Exception { + this.client.removeDocument(TEST_COLLECTION_PATH, "doc1"); + this.client.removeDocument(TEST_COLLECTION_PATH, "doc2"); + + super.tearDown(); + } - String xupdate = "<xu:modifications version=\"1.0\"" + - " xmlns:xu=\"http://www.xmldb.org/xupdate\">" + - " <xu:remove select=\"/person/[EMAIL PROTECTED] = 'home']\"/>" + - " <xu:update select=\"/person/[EMAIL PROTECTED] = 'work']\">" + - " 480-300-3003" + - " </xu:update>" + - "</xu:modifications>"; - - String updatedDocument = "<?xml version=\"1.0\"?>" + - "<person>" + - "<fname>John</fname>" + - "<lname>Smith</lname>" + - "<phone type=\"work\">408-300-3003</phone>" + - "<email type=\"home\">[EMAIL PROTECTED]</email>" + - "<email type=\"work\">[EMAIL PROTECTED]</email>" + - "<address type=\"home\">34 S. Colon St.</address>" + - "<address type=\"work\">9967 W. Shrimp Ave.</address>" + + public void testUpdateDocument() + throws Exception { + String query = + "<xupdate:modifications version=\"1.0\" xmlns:xupdate=\"http://www.xmldb.org/xupdate\">" + + " <xupdate:update select=\"/person/@status\">married</xupdate:update>" + + " <xupdate:update select=\"/person/first\">Ben</xupdate:update>" + + " <xupdate:update select=\"/person/[EMAIL PROTECTED] = 'work']\">480-300-3003</xupdate:update>" + + "</xupdate:modifications>"; + + String updatedDocument = "<?xml version=\"1.0\"?>\n" + + "<person status=\"married\">" + + "<first>Ben</first>" + + "<last>Smith</last>" + + "<phone type=\"work\">480-300-3003</phone>" + "</person>"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XUpdateQueryService service = (XUpdateQueryService) col.getService("XUpdateQueryService", "1.0"); - long count = service.update(xupdate); + long count = service.updateResource("doc1", query); assertEquals(1, count); - String doc = this.client.getDocument(TEST_COLLECTION_PATH, "xupdatedoc"); + String doc = this.client.getDocument(TEST_COLLECTION_PATH, "doc1"); assertNotNull(doc); assertEquals(updatedDocument, doc); + } - this.client.removeDocument(TEST_COLLECTION_PATH, "xupdatedoc"); - assertEquals(0, this.client.countDocument(TEST_COLLECTION_PATH)); + public void testUpdateCollection() + throws Exception { + String query = + "<xupdate:modifications version=\"1.0\" xmlns:xupdate=\"http://www.xmldb.org/xupdate\">" + + " <xupdate:update select=\"/person/@status\">divorced</xupdate:update>" + + " <xupdate:update select=\"/person/first\">Ben</xupdate:update>" + + " <xupdate:update select=\"/person/[EMAIL PROTECTED] = 'work']\">480-300-3003</xupdate:update>" + + "</xupdate:modifications>"; + + String updatedDocument1 = "<?xml version=\"1.0\"?>\n" + + "<person status=\"divorced\">" + + "<first>Ben</first>" + + "<last>Smith</last>" + + "<phone type=\"work\">480-300-3003</phone>" + + "</person>"; + String updatedDocument2 = "<?xml version=\"1.0\"?>\n" + + "<person status=\"divorced\">" + + "<first>Ben</first>" + + "<last>Benton</last>" + + "<phone type=\"work\">480-300-3003</phone>" + + "</person>"; + + Collection col = this.client.getCollection(TEST_COLLECTION_PATH); + XUpdateQueryService service = (XUpdateQueryService) col.getService("XUpdateQueryService", "1.0"); + + long count = service.update(query); + assertEquals(6, count); + + String doc = this.client.getDocument(TEST_COLLECTION_PATH, "doc1"); + assertNotNull(doc); + assertEquals(updatedDocument1, doc); + + doc = this.client.getDocument(TEST_COLLECTION_PATH, "doc2"); + assertNotNull(doc); + assertEquals(updatedDocument2, doc); } } 1.1 xml-xindice/java/tests/src/org/apache/xindice/integration/client/services/XPathQueryTest.java Index: XPathQueryTest.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/>. * * $Id: XPathQueryTest.java,v 1.1 2003/04/06 05:39:13 vladimir Exp $ */ package org.apache.xindice.integration.client.services; import org.apache.xindice.integration.client.AbstractXmlDbClientTest; import org.xmldb.api.base.Collection; import org.xmldb.api.base.ResourceIterator; import org.xmldb.api.base.ResourceSet; import org.xmldb.api.modules.XPathQueryService; import java.util.ArrayList; import java.util.List; /** * @version $Revision: 1.1 $, $Date: 2003/04/06 05:39:13 $ * @author Vladimir R. Bossicard <[EMAIL PROTECTED]> */ public class XPathQueryTest extends AbstractXmlDbClientTest { protected void setUp() throws Exception { super.setUp(); String document1 = "<?xml version=\"1.0\"?>" + "<person>" + "<first>John</first>" + "<last>Smith</last>" + "<age>30</age>" + "<phone type=\"work\">555-345-6789</phone>" + "</person>"; String document2 = "<?xml version=\"1.0\"?>" + "<person>" + "<first>Sally</first>" + "<last>Smith</last>" + "<age>20</age>" + "<phone type=\"work\">555-345-6789</phone>" + "</person>"; this.client.insertDocument(TEST_COLLECTION_PATH, "doc1", document1); this.client.insertDocument(TEST_COLLECTION_PATH, "doc2", document2); } protected void tearDown() throws Exception { this.client.removeDocument(TEST_COLLECTION_PATH, "doc1"); this.client.removeDocument(TEST_COLLECTION_PATH, "doc2"); super.tearDown(); } public void testSimpleQuery() throws Exception { String query = "//person[last='Smith']"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testSimpleAndQuery() throws Exception { String query = "//person[first='John' and last='Smith']"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(1, res.size()); } public void testSimpleOrQuery() throws Exception { String query = "//person[first='John' or last='Smith']"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testMultipleOrQuery() throws Exception { String query = "//person[first='John' or first='Sally']"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testAndOrQuery() throws Exception { String query = "//person[last='Smith' and (first='John' or first='Sally')]"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testSimpleWildcardSearchQuery() throws Exception { // search all records whose last name contains 'Smi' String query = "//person[contains(last, 'Smi')]"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testStartsWithSearchQuery() throws Exception { String document3 = "<?xml version=\"1.0\"?>" + "<person>" + "<first>Sally</first>" + "<last>aSm</last>" + "<phone type=\"work\">555-345-6789</phone>" + "</person>"; this.client.insertDocument(TEST_COLLECTION_PATH, "doc3", document3); // search all records whose last name begins with 'Smi' String query = "//person[(string-length(//person/last) >= 3) and (substring(//person/last, 1, 3)='Smi')]"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); this.client.removeDocument(TEST_COLLECTION_PATH, "doc3"); } public void testEndsWithSearchQuery() throws Exception { // search all records whose last name begins with 'ith' String query = "//person[(string-length(//person/last) >= 4) and (substring(//person/last, 2)='mith')]"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(2, res.size()); } public void testGreaterSearchQuery() throws Exception { String query = "//person[age > 25]"; Collection col = this.client.getCollection(TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); ResourceSet resultSet = xpathservice.query(query); ResourceIterator results = resultSet.getIterator(); List res = asList(results); assertEquals(1, res.size()); } public static List asList(ResourceIterator iter) throws Exception { if (iter == null) { return null; } List result = null; result = new ArrayList(); while (iter.hasMoreResources()) { result.add(iter.nextResource()); } return result; } }