1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20 package tests;
21
22 import junit.framework.TestCase;
23 import org.apache.ws.commons.schema.*;
24
25 import javax.xml.namespace.QName;
26 import javax.xml.transform.stream.StreamSource;
27 import java.io.FileInputStream;
28 import java.io.InputStream;
29 import java.util.HashSet;
30 import java.util.Set;
31
32 /*
33 * Copyright 2004,2007 The Apache Software Foundation.
34 * Copyright 2006 International Business Machines Corp.
35 *
36 * Licensed under the Apache License, Version 2.0 (the "License");
37 * you may not use this file except in compliance with the License.
38 * You may obtain a copy of the License at
39 *
40 * http://www.apache.org/licenses/LICENSE-2.0
41 *
42 * Unless required by applicable law or agreed to in writing, software
43 * distributed under the License is distributed on an "AS IS" BASIS,
44 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45 * See the License for the specific language governing permissions and
46 * limitations under the License.
47 *
48 */
49 public class SimpleContentRestrictionTest extends TestCase {
50
51 /**
52 * This method will test the simple content restriction.
53 *
54 * @throws Exception Any exception encountered
55 */
56 public void testSimpleContentRestriction() throws Exception {
57
58 /*
59 <schema xmlns="http://www.w3.org/2001/XMLSchema"
60 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
61 xmlns:tns="http://soapinterop.org/types"
62 targetNamespace="http://soapinterop.org/types"
63 attributeFormDefault="qualified">
64
65 <simpleType name="drinksize">
66 <restriction base="string">
67 <enumeration value="small"/>
68 <enumeration value="medium"/>
69 <enumeration value="large"/>
70 </restriction>
71 </simpleType>
72
73 <complexType name="dietdrinksize">
74 <simpleContent>
75 <restriction base="tns:drinksize">
76 <enumeration value="small"/>
77 <enumeration value="medium"/>
78 <attribute name="units" type="string" use="required"/>
79 <attribute name="id" type="integer" use="required" default="001"/>
80 </restriction>
81 </simpleContent>
82 </complexType>
83
84 </schema>
85 */
86
87 QName TYPE_QNAME = new QName("http://soapinterop.org/types",
88 "dietdrinksize");
89 InputStream is = new FileInputStream(Resources.asURI("screstriction.xsd"));
90 XmlSchemaCollection schemaCol = new XmlSchemaCollection();
91 XmlSchema schema = schemaCol.read(new StreamSource(is), null);
92
93 XmlSchemaComplexType xsct =
94 (XmlSchemaComplexType)schema.getTypeByName(TYPE_QNAME);
95 assertNotNull(xsct);
96
97 XmlSchemaSimpleContent xssc = (XmlSchemaSimpleContent)xsct.getContentModel();
98 assertNotNull(xssc);
99
100 XmlSchemaSimpleContentRestriction xsscr
101 = (XmlSchemaSimpleContentRestriction)xssc.getContent();
102 assertNotNull(xsscr);
103 assertEquals(new QName("http://soapinterop.org/types", "drinksize"),
104 xsscr.getBaseTypeName());
105 XmlSchemaObjectCollection xsoc = xsscr.getAttributes();
106 assertNotNull(xsoc);
107 assertEquals(2, xsoc.getCount());
108
109 Set s = new HashSet();
110 s.add("units");
111 s.add("id");
112 for (int i = 0; i < xsoc.getCount(); i++) {
113 XmlSchemaAttribute xsa = (XmlSchemaAttribute)xsoc.getItem(i);
114 String name = xsa.getName();
115 if (name.equals("units")) {
116 assertEquals(new QName("http://soapinterop.org/types", "units"),
117 xsa.getQName());
118 assertEquals(new QName("http://www.w3.org/2001/XMLSchema", "string"),
119 xsa.getSchemaTypeName());
120 assertNull(xsa.getDefaultValue());
121 assertEquals("required", xsa.getUse().getValue());
122 assertNull(xsa.getFixedValue());
123 } else if (name.equals("id")) {
124 assertEquals(new QName("http://soapinterop.org/types", "id"),
125 xsa.getQName());
126 assertEquals(new QName("http://www.w3.org/2001/XMLSchema", "integer"),
127 xsa.getSchemaTypeName());
128 assertEquals("001", xsa.getDefaultValue());
129 assertEquals("required", xsa.getUse().getValue());
130 assertNull(xsa.getFixedValue());
131 } else {
132 fail("The name \"" + name + "\" was not expected.");
133 }
134 assertTrue(s.remove(name));
135 }
136 assertTrue("The set should have been empty, but instead contained: "
137 + s + ".",
138 s.isEmpty());
139
140 XmlSchemaObjectCollection xsoc2 = xsscr.getFacets();
141 assertNotNull(xsoc2);
142 assertEquals(2, xsoc2.getCount());
143
144 s.clear();
145 s.add("small");
146 s.add("medium");
147 for (int i = 0; i < xsoc2.getCount(); i++) {
148 XmlSchemaEnumerationFacet xsef =
149 (XmlSchemaEnumerationFacet)xsoc2.getItem(i);
150 String value = (String)xsef.getValue();
151 if (!(value.equals("small") || value.equals("medium"))) {
152 fail("Unexpected enumeration value of \"" + value
153 + "\" found.");
154 }
155 assertTrue(s.remove(value));
156 }
157 assertTrue("The set should have been empty, but instead contained: "
158 + s + ".",
159 s.isEmpty());
160
161 }
162
163 }