1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package validation.jdk8037819;
18 
19 import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
20 import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
21 import org.xml.sax.SAXException;
22 import org.testng.annotations.AfterClass;
23 import org.testng.annotations.BeforeClass;
24 import org.testng.annotations.Test;
25 import validation.BaseTest;
26 
27 public class IdentityConstraintCheckingTest extends BaseTest {
28     // These values are unstable, since they're not actually error keys, but
29     // simply
30     // the first part of the error message.
31     public static final String DUPLICATE_UNIQUE = "cvc-identity-constraint.4.1";
32 
33     public static final String DUPLICATE_KEY = "cvc-identity-constraint.4.2.2";
34 
35     public static final String INVALID_KEYREF = "cvc-identity-constraint.4.3";
36 
getXMLDocument()37     protected String getXMLDocument() {
38         return "idc.xml";
39     }
40 
getSchemaFile()41     protected String getSchemaFile() {
42         return "idc.xsd";
43     }
44 
getRelevantErrorIDs()45     protected String[] getRelevantErrorIDs() {
46         return new String[] { DUPLICATE_UNIQUE, DUPLICATE_KEY, INVALID_KEYREF };
47     }
48 
IdentityConstraintCheckingTest(String name)49     public IdentityConstraintCheckingTest(String name) {
50         super(name);
51     }
52 
53     @BeforeClass
setUp()54     protected void setUp() throws Exception {
55         super.setUp();
56     }
57 
58     @AfterClass
tearDown()59     protected void tearDown() throws Exception {
60         super.tearDown();
61     }
62 
63     @Test
testDefault()64     public void testDefault() {
65         try {
66             reset();
67             validateDocument();
68         } catch (Exception e) {
69             fail("Validation failed: " + e.getMessage());
70         }
71 
72         checkDefault();
73     }
74 
75     @Test
testSetFalse()76     public void testSetFalse() {
77         try {
78             reset();
79             fValidator.setFeature(IDC_CHECKING, false);
80             validateDocument();
81         } catch (Exception e) {
82             fail("Validation failed: " + e.getMessage());
83         }
84 
85         checkValidResult();
86     }
87 
88     @Test
testSetTrue()89     public void testSetTrue() {
90         try {
91             reset();
92             fValidator.setFeature(IDC_CHECKING, true);
93             validateDocument();
94         } catch (Exception e) {
95             fail("Validation failed: " + e.getMessage());
96         }
97 
98         checkDefault();
99     }
100 
checkDefault()101     private void checkDefault() {
102         assertError(DUPLICATE_UNIQUE);
103         assertError(DUPLICATE_KEY);
104         assertError(INVALID_KEYREF);
105 
106         assertValidity(ItemPSVI.VALIDITY_INVALID, fRootNode.getValidity());
107         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
108                 .getValidationAttempted());
109         assertElementName("itemList", fRootNode.getElementDeclaration()
110                 .getName());
111         assertTypeName("itemListType", fRootNode.getTypeDefinition().getName());
112 
113         // this one is valid because it's the first one to define the unique
114         // value
115         PSVIElementNSImpl child = super.getChild(1);
116         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
117         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
118                 .getValidationAttempted());
119         assertElementName("item", child.getElementDeclaration().getName());
120         assertTypeName("itemType", child.getTypeDefinition().getName());
121 
122         // invalid because it repeats the unique value
123         child = super.getChild(2);
124         assertValidity(ItemPSVI.VALIDITY_INVALID, child.getValidity());
125         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
126                 .getValidationAttempted());
127         assertElementName("item", child.getElementDeclaration().getName());
128         assertTypeName("itemType", child.getTypeDefinition().getName());
129 
130         // invalid because it repeats the key
131         child = super.getChild(3);
132         assertValidity(ItemPSVI.VALIDITY_INVALID, child.getValidity());
133         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
134                 .getValidationAttempted());
135         assertElementName("item", child.getElementDeclaration().getName());
136         assertTypeName("itemType", child.getTypeDefinition().getName());
137 
138         // valid because key references aren't figured out until the validation
139         // root
140         child = super.getChild(4);
141         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
142         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
143                 .getValidationAttempted());
144         assertElementName("itemRef", child.getElementDeclaration().getName());
145         assertTypeName("string", child.getTypeDefinition().getName());
146     }
147 
checkValidResult()148     private void checkValidResult() {
149         assertNoError(DUPLICATE_UNIQUE);
150         assertNoError(DUPLICATE_KEY);
151         assertNoError(INVALID_KEYREF);
152 
153         assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
154         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
155                 .getValidationAttempted());
156         assertElementName("itemList", fRootNode.getElementDeclaration()
157                 .getName());
158         assertTypeName("itemListType", fRootNode.getTypeDefinition().getName());
159 
160         PSVIElementNSImpl child = super.getChild(1);
161         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
162         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
163                 .getValidationAttempted());
164         assertElementName("item", child.getElementDeclaration().getName());
165         assertTypeName("itemType", child.getTypeDefinition().getName());
166 
167         child = super.getChild(2);
168         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
169         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
170                 .getValidationAttempted());
171         assertElementName("item", child.getElementDeclaration().getName());
172         assertTypeName("itemType", child.getTypeDefinition().getName());
173 
174         child = super.getChild(3);
175         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
176         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
177                 .getValidationAttempted());
178         assertElementName("item", child.getElementDeclaration().getName());
179         assertTypeName("itemType", child.getTypeDefinition().getName());
180 
181         child = super.getChild(4);
182         assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
183         assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
184                 .getValidationAttempted());
185         assertElementName("itemRef", child.getElementDeclaration().getName());
186         assertTypeName("string", child.getTypeDefinition().getName());
187     }
188 }
189