/** * * 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 test.sdo21.tests.api.XMLHelper; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.After; import org.junit.Before; import org.junit.Test; import test.sdo21.framework.CTSTestCase; import commonj.sdo.DataObject; import commonj.sdo.Type; import commonj.sdo.helper.XMLDocument; public class QNameTestCase extends CTSTestCase { private final String xsdString = " " + " " + " " + " " + " " + " " + " " + " " + ""; private final String xmlString = " " + " " + "fbnt " + "simple:stockQuote " + ""; private final String TEST_NAMESPACE = "http://www.example.com/simple"; /** * Based on Spec 2.1, section 9.4.1, the return value of DataObject.get() on XSD QName property * should be http://www.example.com/simple#stockQuote * * @see 2.1 spec section 9.4.1 * @throws IOException */ @Test public void testLoad() throws IOException { XMLDocument doc = getScope().getXMLHelper().load(xmlString); DataObject root = doc.getRootObject(); assertEquals("http://www.example.com/simple#stockQuote", root.get("policy")); } /** * After serialization, the value of XSD QName property in XML should be :stockQuote */ @Test public void testSave() throws IOException { Type quoteType = getScope().getTypeHelper().getType(TEST_NAMESPACE, "Quote"); DataObject quote = getScope().getDataFactory().create(quoteType); quote.setString("symbol", "fbnt"); quote.set("policy", "http://www.example.com/simple#stockQuote"); String str = getScope().getXMLHelper().save(quote, TEST_NAMESPACE, "stockQuote"); int start = str.indexOf(""); int end = str.indexOf(""); assertTrue(start != -1 && end != -1); String policyValue = str.substring(start + "".length(), end); Pattern pattern = Pattern.compile(".*:stockQuote"); // prefix can be anything Matcher matcher = pattern.matcher(policyValue); assertTrue(matcher.find()); } /** * Test the scenario that the xsd:QName property value contains non-existent namespace */ @Test public void testSave2() throws IOException { Type quoteType = getScope().getTypeHelper().getType(TEST_NAMESPACE, "Quote"); DataObject quote = getScope().getDataFactory().create(quoteType); quote.setString("symbol", "fbnt"); quote.set("policy", "http://www.example.com/simple2#stockQuote"); String str = getScope().getXMLHelper().save(quote, TEST_NAMESPACE, "stockQuote"); // Make sure the non-existent namespace was serialized Pattern pattern = Pattern.compile(".*xmlns:.*=\"http://www.example.com/simple2\""); Matcher matcher = pattern.matcher(str); assertTrue(matcher.find()); } @Before @Override public void setUp() throws Exception { super.setUp(); getScope().getXSDHelper().define(xsdString); } @Override @After public void tearDown() throws Exception { super.tearDown(); } }