blob: 823eab5f86624cd5d101c5e4ad54b03d6f954312 [file] [log] [blame]
/**
* 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 tests;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaAnnotation;
import org.apache.ws.commons.schema.XmlSchemaAnnotationItem;
import org.apache.ws.commons.schema.XmlSchemaAppInfo;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.XmlSchemaDocumentation;
import org.apache.ws.commons.schema.XmlSchemaObject;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
import org.junit.Assert;
import org.junit.Test;
public class AnnotationTest extends Assert {
/**
* This method will test for when the appinfo element of an annotation doesn't include a source attribute
* and doesn't contain any content.
*
* @throws Exception Any exception encountered
*/
@Test
public void testEmptyAppInfo() throws Exception {
/*
* <simpleType name="emptyAppinfo"> <annotation> <documentation source="http://test/source/doc"
* xml:lang="en">testing987</documentation> <appinfo/> </annotation> <restriction base="string">
* <length value="1"/> </restriction> </simpleType>
*/
QName typeQName = new QName("http://soapinterop.org/types", "emptyAppinfo");
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
schemaCol.read(new StreamSource(is));
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName);
assertNotNull(simpleType);
XmlSchemaAnnotation xsa = simpleType.getAnnotation();
assertNotNull(xsa);
List<XmlSchemaAnnotationItem> col = xsa.getItems();
assertEquals(1, col.size());
Set<String> s = new HashSet<String>();
s.add(XmlSchemaDocumentation.class.getName());
for (int i = 0; i < col.size(); i++) {
XmlSchemaObject o = col.get(i);
if (o instanceof XmlSchemaAppInfo) {
fail("The appinfo element did not contain a source"
+ " attribute or any content, so this element" + " was not exptected to be found.");
} else if (o instanceof XmlSchemaDocumentation) {
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage());
assertEquals("http://test/source/doc", ((XmlSchemaDocumentation)o).getSource());
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing987", n.getNodeValue());
}
}
}
assertTrue(s.remove(o.getClass().getName()));
}
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty());
}
/**
* This method will test for when the documentation element of an annotation doesn't include a source
* attribute or xml:lang attribute and doesn't contain any content.
*
* @throws Exception Any exception encountered
*/
@Test
public void testEmptyDocumentation() throws Exception {
/*
* <simpleType name="emptyDocumentation"> <annotation> <documentation/> <appinfo
* source="http://test/source/appinfo">testing123</appinfo> </annotation> <restriction base="string">
* <length value="2"/> </restriction> </simpleType>
*/
QName typeQName = new QName("http://soapinterop.org/types", "emptyDocumentation");
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
schemaCol.read(new StreamSource(is));
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName);
assertNotNull(simpleType);
XmlSchemaAnnotation xsa = simpleType.getAnnotation();
assertNotNull(xsa);
List<XmlSchemaAnnotationItem> col = xsa.getItems();
assertEquals(1, col.size());
Set<String> s = new HashSet<String>();
s.add(XmlSchemaAppInfo.class.getName());
for (int i = 0; i < col.size(); i++) {
XmlSchemaObject o = col.get(i);
if (o instanceof XmlSchemaAppInfo) {
assertEquals("http://test/source/appinfo", ((XmlSchemaAppInfo)o).getSource());
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing123", n.getNodeValue());
}
}
} else if (o instanceof XmlSchemaDocumentation) {
fail("The documentation element did not contain a source"
+ " attribute or any content, so this element" + " was not exptected to be found.");
}
assertTrue(s.remove(o.getClass().getName()));
}
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty());
}
/**
* This method will test for when the documentation and appinfo elements of an annotation don't include
* anything.
*
* @throws Exception Any exception encountered
*/
@Test
public void testEmptyAppinfoDocumentation() throws Exception {
/*
* <simpleType name="emptyAppinfoDocumentation"> <annotation> <documentation/> <appinfo/>
* </annotation> <restriction base="string"> <length value="1"/> </restriction> </simpleType>
*/
QName typeQName = new QName("http://soapinterop.org/types", "emptyAppinfoDocumentation");
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
schemaCol.read(new StreamSource(is));
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName);
assertNotNull(simpleType);
XmlSchemaAnnotation xsa = simpleType.getAnnotation();
assertNotNull(xsa);
List<XmlSchemaAnnotationItem> col = xsa.getItems();
assertEquals(0, col.size());
}
/**
* This method will test for when the documentation and appinfo elements contain all the information.
*
* @throws Exception Any exception encountered
*/
@Test
public void testFullDocumentationAppinfo() throws Exception {
/*
* <simpleType name="annotationTest"> <annotation> <documentation source="http://test/source/doc"
* xml:lang="en">testing987</documentation> <appinfo
* source="http://test/source/appinfo">testing123</appinfo> </annotation> <restriction base="string">
* <length value="1"/> </restriction> </simpleType>
*/
QName typeQName = new QName("http://soapinterop.org/types", "annotationTest");
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
schemaCol.read(new StreamSource(is));
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType)schemaCol.getTypeByQName(typeQName);
assertNotNull(simpleType);
XmlSchemaAnnotation xsa = simpleType.getAnnotation();
assertNotNull(xsa);
List<XmlSchemaAnnotationItem> col = xsa.getItems();
assertEquals(2, col.size());
Set<String> s = new HashSet<String>();
s.add(XmlSchemaAppInfo.class.getName());
s.add(XmlSchemaDocumentation.class.getName());
for (int i = 0; i < col.size(); i++) {
XmlSchemaObject o = col.get(i);
if (o instanceof XmlSchemaAppInfo) {
assertEquals("http://test/source/appinfo", ((XmlSchemaAppInfo)o).getSource());
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing123", n.getNodeValue());
}
}
} else if (o instanceof XmlSchemaDocumentation) {
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage());
assertEquals("http://test/source/doc", ((XmlSchemaDocumentation)o).getSource());
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing987", n.getNodeValue());
}
}
}
assertTrue(s.remove(o.getClass().getName()));
}
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty());
}
/**
* This method will test for when an annotation is added to the Xml Schema Element.
*
* @throws Exception Any exception encountered
*/
@Test
public void testXmlSchemaElementAnnotation() throws Exception {
/*
* <annotation id="schemaAnnotation"> <documentation source="http://test101/source/doc"
* xml:lang="en">testing101</documentation> <appinfo
* source="http://test101/source/appinfo">testing101</appinfo> </annotation>
*/
InputStream is = new FileInputStream(Resources.asURI("annotation.xsd"));
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
XmlSchema schema = schemaCol.read(new StreamSource(is));
XmlSchemaAnnotation xsa = schema.getAnnotation();
List<XmlSchemaAnnotationItem> col = xsa.getItems();
assertEquals(2, col.size());
Set<String> s = new HashSet<String>();
s.add(XmlSchemaAppInfo.class.getName());
s.add(XmlSchemaDocumentation.class.getName());
for (int i = 0; i < col.size(); i++) {
XmlSchemaObject o = col.get(i);
if (o instanceof XmlSchemaAppInfo) {
assertEquals("http://test101/source/appinfo", ((XmlSchemaAppInfo)o).getSource());
NodeList nl = ((XmlSchemaAppInfo)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing101", n.getNodeValue());
}
}
} else if (o instanceof XmlSchemaDocumentation) {
assertEquals("en", ((XmlSchemaDocumentation)o).getLanguage());
assertEquals("http://test101/source/doc", ((XmlSchemaDocumentation)o).getSource());
NodeList nl = ((XmlSchemaDocumentation)o).getMarkup();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.TEXT_NODE) {
assertEquals("testing101", n.getNodeValue());
}
}
}
assertTrue(s.remove(o.getClass().getName()));
}
assertTrue("The set should have been empty, but instead contained: " + s + ".", s.isEmpty());
}
}