From 836328ea2ca7c6780307abf258503201c91e5a96 Mon Sep 17 00:00:00 2001 From: lresende Date: Tue, 10 Nov 2009 19:20:03 +0000 Subject: moving SDO branches git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@834615 13f79535-47bb-0310-9956-ffa450edef68 --- .../sdo/test/ChangeSummaryPropertyTestCase.java | 219 +++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 sdo-java/branches/sdo-1.1.1-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java (limited to 'sdo-java/branches/sdo-1.1.1-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java') diff --git a/sdo-java/branches/sdo-1.1.1-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java b/sdo-java/branches/sdo-1.1.1-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java new file mode 100644 index 0000000000..ace509d1b4 --- /dev/null +++ b/sdo-java/branches/sdo-1.1.1-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryPropertyTestCase.java @@ -0,0 +1,219 @@ +/** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sdo.test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.net.URL; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.tuscany.sdo.util.SDOUtil; + +import commonj.sdo.ChangeSummary; +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Sequence; +import commonj.sdo.Type; +import commonj.sdo.helper.DataFactory; +import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.XMLHelper; +import commonj.sdo.helper.XSDHelper; + +public class ChangeSummaryPropertyTestCase extends TestCase { + private final String TEST_MODEL = "/simpleWithChangeSummary.xsd"; + private final String TEST_NAMESPACE = "http://www.example.com/simpleCS"; + + private final String TEST_DATA_BEFORE_UNDO = "/simpleWithChangeSummary.xml"; + private final String TEST_DATA_AFTER_UNDO = "/simpleWithChangeSummaryUndone.xml"; + + HelperContext hc; + DataFactory dataFactory; + XMLHelper xmlHelper; + + void verify(ChangeSummary cs, DataObject quote, String nameSpace, String element, String beforeUndo, String afterUndo) throws IOException { + // Stop logging changes and serialize the resulting data graph + // + cs.endLogging(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + xmlHelper.save(quote, nameSpace, element, baos); + //xmlHelper.save(quote, nameSpace, element, System.out); + + byte[] bytes = baos.toByteArray(); + URL url = getClass().getResource(beforeUndo); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(bytes), url)); + + DataObject loaded = xmlHelper.load(new ByteArrayInputStream(bytes)).getRootObject(); + baos.reset(); + xmlHelper.save(loaded, nameSpace, element, baos); + //xmlHelper.save(loaded, nameSpace, element, System.out); + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), url)); + + // Undo all changes and then serialize the resulting data graph again + // + cs.undoChanges(); + + baos.reset(); + xmlHelper.save(quote, nameSpace, element, baos); + //xmlHelper.save(quote, nameSpace, element, System.out); + + assertTrue(TestUtil.equalXmlFiles(new ByteArrayInputStream(baos.toByteArray()), getClass().getResource(afterUndo))); + } + + /** + * ChangeSummary property test. + */ + protected final void change(String nameSpace, String beforeUndo, String afterUndo) throws Exception { + Type quoteType = hc.getTypeHelper().getType(nameSpace, "RootQuote"); + DataObject quote = dataFactory.create(quoteType); + + ChangeSummary cs = quote.getChangeSummary(); + ChangeSummary csp = (ChangeSummary)quote.get("changes"); + + assertSame(cs, csp); + + quote.setString("symbol", "fbnt"); + quote.setString("companyName", "FlyByNightTechnology"); + quote.setBigDecimal("price", new BigDecimal("1000.0")); + DataObject child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("1500.0")); + child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.0")); + child = child.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2000.99")); + child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("2500.0")); + + // Begin logging changes + // + cs.beginLogging(); + + // Modify the data graph in various ways + // + quote.setString("symbol", "FBNT"); + quote.setBigDecimal("price", new BigDecimal("999.0")); + quote.setDouble("volume", 1000); + + child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("3000.0")); + child = quote.createDataObject("quotes"); + child.setBigDecimal("price", new BigDecimal("4000.0")); + + quote.getDataObject("quotes[2]").delete(); + + verify(cs, quote, nameSpace, "stockQuote", beforeUndo, afterUndo); + } + + /** + * Simple ChangeSummary property test. + */ + public void testChangeSummary() throws Exception { + change(TEST_NAMESPACE, TEST_DATA_BEFORE_UNDO, TEST_DATA_AFTER_UNDO); + } + + static final String SequenceTest_NameSpace = "http://www.example.com/sequenceCS"; + + /** + * Mixed ChangeSummary property test. + */ + public void testMixedChangeSummary() throws Exception { + change(SequenceTest_NameSpace, "/mixedChangeSummary.xml", "/mixedChangeSummaryUndone.xml"); + } + + protected final DataObject createDataObject(Type quoteType, Object value, Sequence sequence, Property property) { + DataObject child = dataFactory.create(quoteType); + child.set("symbol", value); + sequence.add(property, child); + return child; + } + + static final String SequenceTest_ELEMENT = "openQuote"; + + private XSDHelper xsdHelper; + + /** + * Open/any ChangeSummary property test. + */ + public void testOpenChangeSummary() throws Exception { + DataObject quote = dataFactory.create(xsdHelper.getGlobalProperty(SequenceTest_NameSpace, SequenceTest_ELEMENT, true).getType()); + + ChangeSummary cs = quote.getChangeSummary(); + ChangeSummary csp = (ChangeSummary)quote.get("changes"); + + assertSame(cs, csp); + + quote.set("symbol", "fbnt"); + Property property = xsdHelper.getGlobalProperty("http://www.example.com/open", "openStockQuote", true); + Type quoteType = property.getType(); + List openStockQuotes = ((DataObject)quote).getList(property); + + addQuote(openStockQuotes, quoteType, "1500.0"); + DataObject osq2 = addQuote(openStockQuotes, quoteType, "2000.0"); + addQuote(osq2.getList(property), quoteType, "2000.99"); + addQuote(openStockQuotes, quoteType, "2500.0"); + + // Begin logging changes + // + cs.beginLogging(); + + // Modify the data graph in various ways + // + quote.set("symbol", "FBNT"); + + addQuote(openStockQuotes, quoteType, "3000.0"); + addQuote(openStockQuotes, quoteType, "4000.0"); + + openStockQuotes.remove(osq2); + + + verify(cs, quote, SequenceTest_NameSpace, SequenceTest_ELEMENT, "/openChangeSummary.xml", "/openChangeSummaryUndone.xml"); + } + + private DataObject addQuote(List openStockQuotes, Type quoteType, + Object value) { + DataObject osq = dataFactory.create(quoteType); + osq.set("symbol", value); + openStockQuotes.add(osq); + return osq; + } + + void define(String model) throws Exception { + // Populate the meta data for the test model + URL url = getClass().getResource(model); + xsdHelper.define(url.openStream(), url.toString()); + } + + protected void setUp() throws Exception { + super.setUp(); + hc = SDOUtil.createHelperContext(); + xsdHelper = hc.getXSDHelper(); + dataFactory = hc.getDataFactory(); + xmlHelper = hc.getXMLHelper(); + + // Populate the meta data for the test (Stock Quote) model + define(TEST_MODEL); + + define("/SequenceChangeSummary.xsd"); + } +} -- cgit v1.2.3