blob: acd2788aa96f7c5ec1789c4d0927bc03d95b41e8 [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* Licensed 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 scomp.idConstraint.detailed;
import org.apache.xmlbeans.XmlErrorCodes;
import org.apache.xmlbeans.XmlString;
import org.junit.Test;
import scomp.common.BaseCase;
import xbean.scomp.idConstraint.constraint.*;
import static org.junit.Assert.assertTrue;
public class KeyKeyref extends BaseCase {
@Test
public void testUnique() throws Throwable {
String input =
"<con:productList xmlns:con=\"http://xbean/scomp/idConstraint/Constraint\">" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"<con:product>" +
" <con:department con:name=\"7345\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"</con:productList>";
ProductListDocument doc = ProductListDocument.Factory.parse(input);
try {
assertTrue(doc.validate(validateOptions));
} catch (Throwable t) {
showErrors();
throw t;
}
}
/**
* field combo not unique in instance (a and c are the same)
*/
@Test
public void testUniqueIllegal() throws Throwable {
ProductListDocument doc = ProductListDocument.Factory.newInstance();
ProductListType products = ProductListType.Factory.newInstance();
ProductType a = products.addNewProduct();
ProductType.Department dep = ProductType.Department.Factory.newInstance();
XmlString val = XmlString.Factory.newInstance();
val.setStringValue("FooDep");
dep.setName(val);
a.setDepartmentArray(new ProductType.Department[]{dep});
a.setId("0");
ProductType b = products.addNewProduct();
b.setDepartmentArray(new ProductType.Department[]{dep});
b.setId("1");
ProductType c = products.addNewProduct();
c.setDepartmentArray(new ProductType.Department[]{dep});
c.setId("0");
doc.setProductList(products);
System.out.println(doc.xmlText());
assertTrue(!doc.validate(validateOptions));
showErrors();
String[] errExpected = new String[]{
XmlErrorCodes.IDENTITY_CONSTRAINT_VALID$DUPLICATE_UNIQUE
};
assertTrue(compareErrorCodes(errExpected));
}
/**
* Selector selects a non-unique field in instance
* Only one dept can appear in the first product
*/
@Test
public void testUniqueIllegal2() throws Throwable {
String input =
"<con:productList xmlns:con=\"http://xbean/scomp/idConstraint/Constraint\">" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:department con:name=\"Management\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"<con:product>" +
" <con:department con:name=\"7345\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"</con:productList>";
ProductListDocument doc = ProductListDocument
.Factory.parse(input);
assertTrue(!doc.validate(validateOptions));
showErrors();
}
@Test
public void testKey() throws Throwable {
String input =
"<con:KeyProductList xmlns:con=\"http://xbean/scomp/idConstraint/Constraint\">" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"<con:product>" +
" <con:department con:name=\"7345\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"</con:KeyProductList>";
KeyProductListDocument doc = KeyProductListDocument.Factory.parse(input);
try {
assertTrue(doc.validate(validateOptions));
} catch (Throwable t) {
showErrors();
throw t;
}
}
/**
* null key in instance:missing dept in first product
*/
@Test
public void testKeyIllegal() throws Throwable {
String input =
"<xs:KeyProductList xmlns:xs=\"http://xbean/scomp/idConstraint/Constraint\">" +
" <xs:product>" +
" <xs:id>FooBarChart</xs:id>" +
"</xs:product>" +
"<xs:product>" +
" <xs:department xs:name=\"7345\"/>" +
" <xs:id>FooBarChart</xs:id>" +
"</xs:product>" +
"</xs:KeyProductList>";
KeyProductListDocument doc = KeyProductListDocument.Factory.parse(input);
assertTrue(!doc.validate(validateOptions));
showErrors();
//TODO: is this the right error
String[] errExpected = new String[]{
XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$EXPECTED_DIFFERENT_ELEMENT,
XmlErrorCodes.ELEM_COMPLEX_TYPE_LOCALLY_VALID$MISSING_ELEMENT
};
assertTrue(compareErrorCodes(errExpected));
}
@Test
public void testKeyRef() throws Throwable {
String input =
"<con:CompanyDB xmlns:con=\"http://xbean/scomp/idConstraint/Constraint\">" +
"<con:KeyProductList >" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"<con:product>" +
" <con:department con:name=\"7345\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"</con:KeyProductList>" +
"<con:order>" +
" <con:customerName>Bozo</con:customerName>" +
" <con:item con:deptId=\"7345\"" +
" con:SKU='FooBarChart'>" +
" </con:item>" +
"</con:order>" +
"<con:order>" +
" <con:customerName>Bozo</con:customerName>" +
" <con:item con:deptId=\"7345\"" +
" con:SKU=\"FooBarChart\">" +
" </con:item>" +
"</con:order>" +
"</con:CompanyDB>";
CompanyDBDocument doc = CompanyDBDocument.Factory.parse(input);
try {
assertTrue(doc.validate(validateOptions));
} catch (Throwable t) {
showErrors();
throw t;
}
}
// Invalid xml instance with 2 problems :
// a) the values for the key & key ref elems are not the same
// b) The keyref/key elems are duplicated
@Test
public void testKeyRefIllegal() throws Throwable {
String input =
"<con:CompanyDB xmlns:con=\"http://xbean/scomp/idConstraint/Constraint\">" +
"<con:KeyProductList >" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
" <con:product>" +
" <con:department con:name=\"Marketing\"/>" +
" <con:id>FooBarChart</con:id>" +
"</con:product>" +
"</con:KeyProductList>" +
"<con:order>" +
" <con:customerName>Bozo</con:customerName>" +
" <con:item con:deptId=\"7345\"" +
" con:SKU=\"ID1\">" +
" </con:item>" +
"</con:order>" +
"<con:order>" +
" <con:customerName>Bozo</con:customerName>" +
" <con:item con:deptId=\"7345\"" +
" con:SKU=\"ID1\">" +
" </con:item>" +
"</con:order>" +
"</con:CompanyDB>";
CompanyDBDocument doc = CompanyDBDocument.Factory.parse(input);
assertTrue(!doc.validate(validateOptions));
showErrors();
String[] errExpected = new String[]{
XmlErrorCodes.IDENTITY_CONSTRAINT_VALID$DUPLICATE_KEY,
XmlErrorCodes.IDENTITY_CONSTRAINT_VALID$KEYREF_KEY_NOT_FOUND
};
assertTrue(compareErrorCodes(errExpected));
}
}