blob: 3d948a59b2b05ea2eddee8a9fae31b93ee6e6867 [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 compile.scomp.som.checkin;
import compile.scomp.som.common.SomTestBase;
import org.apache.xmlbeans.SchemaTypeSystem;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlOptions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import static org.junit.Assert.*;
public class PartialSOMCheckinTest extends SomTestBase
{
@Before
public void setUp()
{
// initialize the built in schema type
builtin = XmlBeans.getBuiltinTypeSystem();
// populate the XmlOptions
if (errors == null)
{
errors = new ArrayList();
}
if (options == null)
{
options = (new XmlOptions()).setErrorListener(errors);
options.setCompileDownloadUrls();
options.setCompilePartialTypesystem();
options.setLoadLineNumbers();
}
// initialize the runid to be used for generating output files for the PSOM walk thro's
runid = new Date().getTime();
// clean the output from the previous run
// delete directories created by checkPSOMSave() and output text file created by inspectPSOM()
deleteDirRecursive(new File(somOutputRootDir));
}
@After
public void tearDown()
{
errors.clear();
}
@Test
public void testAddAttributeAndElements() throws Exception
{
System.out.println("Inside test case testAddAttributeAndElements()");
// Step 1 : create a Schema Type System with the base 'bad' xsd and create the Schema Type System (STS) for it
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("elemattr.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.",
baseSTS);
// the tests - Walk thro the SOM, save, validate against an xml instance
inspectSOM(baseSTS, 1, 1, 1, 0);
// test for recoverable errors
assertTrue("No Recovered Errors for Invalid Schema",
printRecoveredErrors());
// Test for saving of the PSOM - should not be able to save
assertFalse("Partial SOM " + baseSTS.getName() + "Save successful - should fail!",
checkPSOMSave(baseSTS));
// instance validation - should fail
assertFalse("Validation against instance Success - should fail ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), baseSTS));
// additional validation
assertFalse("Attribute found but not expected - 'testAttributeComplex'",
lookForAttributeInSTS(baseSTS,
"testAttributeComplex"));
assertFalse("Element found but not expected 'ComplexTypeElem'",
lookForElemInSTS(baseSTS,
"ComplexTypeElem"));
assertFalse("Element found but not expected 'SimpleTypeElem'",
lookForElemInSTS(baseSTS, "SimpleTypeElem"));
// Step 2: create a Schema Type System with the new xsd file that has additions to this schema
SchemaTypeSystem modifiedSTS = createNewSTS("elemattr_added.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.",
modifiedSTS);
// test the PSOM created : walk thro the PSOM, look for # of elements,attributes,types & attribute groups
inspectSOM(modifiedSTS, 3, 2, 1, 0);
// Test for successful saving of the PSOM
assertTrue("Valid Partial SOM " + modifiedSTS.getName() + "Save failed",
checkPSOMSave(modifiedSTS));
// Look for added attribute(s)/Element(s) by name in the STS
assertTrue("Attribute expected, not found 'testAttributeComplex'",
lookForAttributeInSTS(modifiedSTS,
"testAttributeComplex"));
assertTrue("Element expected, not found 'ComplexTypeElem'",
lookForElemInSTS(modifiedSTS,
"ComplexTypeElem"));
assertTrue("Element expected, not found 'SimpleTypeElem'",
lookForElemInSTS(modifiedSTS,
"SimpleTypeElem"));
// validate against an xml instance
assertTrue("Validation against instance failed ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), modifiedSTS));
// Step 3: now creat the Schema Type System with the original XSD again
SchemaTypeSystem finalSTS = createNewSTS("elemattr.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
//walk the SOM
inspectSOM(finalSTS, 1, 1, 1, 0);
// Test for saving of the PSOM - should not be able to save
assertFalse("Partial SOM " + finalSTS.getName() + "Save successful - should fail!",
checkPSOMSave(finalSTS));
// instance validation - should fail
assertFalse("Validation against instance Success - should fail ",
validateInstance(getTestCaseFile("instance_elemattr.xml"), finalSTS));
}
@Test
public void testModifyAttributeAndElements() throws Exception
{
System.out.println("Inside test case testModifyAttributeAndElements()");
// Step 1 : create a Schema Type System with the base 'good' xsd and create the Schema Type System (STS) for it
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("elemattr_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// the tests - Walk thro the SOM, save, validate against an xml instance
inspectSOM(baseSTS, 3, 2, 1, 0);
// validate successful save
assertTrue("Valid SOM " + baseSTS.getName() + "Save failed ",
checkPSOMSave(baseSTS));
// validate against instance successfully
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), baseSTS));
// Step 2: create a Schema Type System with the new xsd file with modifications to existing schema
SchemaTypeSystem modifiedSTS = createNewSTS("elemattr_modified.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// test for recoverable errors
assertTrue("No Recovered Errors for Invalid Schema",
printRecoveredErrors());
// test the PSOM created
inspectSOM(modifiedSTS, 2, 2, 1, 0); // walk thro the PSOM, look for # of elements,attributes,types & attribute groups
// Look for a modified attribute(s)/elements by name in the STS
assertTrue("Attribute expected, not found 'testAttributeComplex'",
lookForAttributeInSTS(modifiedSTS, "testAttributeComplex"));
assertTrue("Element expected, not found 'ComplexTypeElem'",
lookForElemInSTS(modifiedSTS, "ComplexTypeElem"));
assertFalse("Element expected, not found 'SimpleTypeElem'",
lookForElemInSTS(modifiedSTS, "SimpleTypeElem"));
// Test for saving of the PSOM - should not be able to save
assertFalse("Partial SOM " + modifiedSTS.getName() + " Save successful- should fail",
checkPSOMSave(modifiedSTS));
// validate against an xml instance - should fail
assertFalse("Validation against instance Success - should Fail",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), modifiedSTS));
// Step 3: now creat the Schema Type System with the original XSD again
SchemaTypeSystem finalSTS = createNewSTS("elemattr_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// walk the PSOM
inspectSOM(finalSTS, 3, 2, 1, 0);
// should be able to save as its a valid SOM
assertTrue("Partial SOM " + finalSTS.getName() + "Save failed for complete SOM",
checkPSOMSave(finalSTS));
// validate against instance successfully
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), finalSTS));
// compare this to the original schema here - the root dir names used to save the PSOMs are the same as the STS names
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testDeleteAttributeAndElements() throws Exception
{
System.out.println("Inside test case testDeleteAttributeAndElements()");
// Step 1 : create a Schema Type System with the base 'good' xsd and create the Schema Type System (STS) for it
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("elemattr_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// the tests - Walk thro the SOM, save, validate against an xml instance
inspectSOM(baseSTS, 3, 2, 1, 0);
// validate successful save
assertTrue("Valid SOM " + baseSTS.getName() + "Save failed ",
checkPSOMSave(baseSTS));
// validate against instance successfully
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), baseSTS));
// Step 2: create a Schema Type System with the new xsd file that has deletions
SchemaTypeSystem modifiedSTS = createNewSTS("elemattr.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// test for recoverable errors
assertTrue("No Recovered Errors for Invalid Schema",
printRecoveredErrors());
// test the PSOM created
inspectSOM(modifiedSTS, 1, 1, 1, 0); // walk thro the PSOM, look for # of elements,attributes,types & attribute groups
// Test for saving of the PSOM - should not be able to save
assertFalse("Invalid PSOM " + modifiedSTS.getName() + " Save successful - Should fail",
checkPSOMSave(modifiedSTS));
// verify types
assertFalse("Attribute found but not expected - 'testAttributeComplex'",
lookForAttributeInSTS(modifiedSTS, "testAttributeComplex"));
assertFalse("Element found but not expected 'ComplexTypeElem'",
lookForElemInSTS(modifiedSTS, "ComplexTypeElem"));
assertFalse("Element found but not expected 'SimpleTypeElem'",
lookForElemInSTS(modifiedSTS, "SimpleTypeElem"));
// validate against an xml instance - should fail
assertFalse("Validation against success - should Fail ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), modifiedSTS));
// Step 3: now creat the Schema Type System with the original XSD again
SchemaTypeSystem finalSTS = createNewSTS("elemattr_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// walk the SOM
inspectSOM(finalSTS, 3, 2, 1, 0);
// should be able to save as its a valid SOM
assertTrue("Partial SOM " + finalSTS.getName() + "Save failed for complete SOM",
checkPSOMSave(finalSTS));
// validate against instance
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_elemattr_valid.xml"), finalSTS));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testAddDataTypes() throws Exception
{
System.out.println("Inside test case testAddDataTypes()");
// Step 1 : create a PSOM from an incomplete/invalid xsd (datatypes.xsd) with unresolved references to various types
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("datatypes.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// recovearble errors should exist
assertTrue("No Recovered Errors for Invalid Schema",
printRecoveredErrors());
// Walk thro the SOM (pass #Elems, #Attr, #Types, #AttrGroups)
inspectSOM(baseSTS, 12, 1, 4, 1);
// Test for saving of the PSOM - should not be able to save
assertFalse("Partial SOM " + baseSTS.getName() + "Save successful - should fail!",
checkPSOMSave(baseSTS));
// instance validation - should fail
assertFalse("Validation against instance Success - should fail ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), baseSTS));
// additional validation - check to see if the unresolved references to types are 'anyType'
// validate unresolved types
assertEquals("Unresolved Simple Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testAtomicTypeElem"));
assertEquals("Unresolved Simple Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testUnionTypeElem"));
// moved to detailed PSOMDetailedTest class
//Assert.assertEquals("Unresolved List Type should be 'anySimpleType'", anySimpleType, getElementType(baseSTS, "testListTypeElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testComplexTypeSimpleContentElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testComplexTypeElementOnlyContentElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testComplexTypeMixedElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testComplexTypeEmptyElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testChoiceGroupElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(baseSTS, "testAllGroupElem"));
// Step 2 : create an incremental PSOM that is valid by loading datatypes_added.xsd
SchemaTypeSystem modifiedSTS = createNewSTS("datatypes_added.xsd_", baseSTS, "ModifiedSchemaTS", sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// no errors expected to be recovered - should be a valid SOM
assertFalse("Valid Schema Type System, Errors recovered",
printRecoveredErrors());
// test the PSOM created : walk thro the PSOM, look for # of elements,attributes,types & attribute groups
inspectSOM(modifiedSTS, 13, 1, 15, 1);
// test successful save
assertTrue("Valid SOM " + modifiedSTS.getName() + " Save failed",
checkPSOMSave(modifiedSTS));
// validate against an xml valid instance - should succeed
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), modifiedSTS));
// validate against an xml invalid instance - should fail
assertFalse("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_simple_types_invalid.xml"), modifiedSTS));
// additional validation - check to see if all types are resolved to their respective types
assertEquals("Unresolved Simple Type should be 'attachmentTypes'",
"attachmentTypes",
getElementType(modifiedSTS, "testAtomicTypeElem"));
assertEquals("Unresolved Simple Type should be 'union.attachmentUnionType'",
"union.attachmentUnionType",
getElementType(modifiedSTS, "testUnionTypeElem"));
assertEquals("Unresolved List Type should be 'attchmentExtensionListTypes'",
"attchmentExtensionListTypes",
getElementType(modifiedSTS, "testListTypeElem"));
assertEquals("Unresolved Complex Type should be 'headerType'",
"headerType",
getElementType(modifiedSTS, "testComplexTypeSimpleContentElem"));
assertEquals("Unresolved Complex Type should be 'mailsType'",
"mailsType",
getElementType(modifiedSTS, "testComplexTypeElementOnlyContentElem"));
assertEquals("Unresolved Complex Type should be 'mixedContentType'",
"mixedContentType",
getElementType(modifiedSTS, "testComplexTypeMixedElem"));
assertEquals("Unresolved Complex Type should be 'emptyContentType'",
"emptyContentType",
getElementType(modifiedSTS, "testComplexTypeEmptyElem"));
assertEquals("Unresolved Complex Type should be 'choiceGroupType'",
"choiceGroupType",
getElementType(modifiedSTS, "testChoiceGroupElem"));
assertEquals("Unresolved Complex Type should be 'allGroupType'",
"allGroupType",
getElementType(modifiedSTS, "testAllGroupElem"));
// Step 3 : create an incremental STS with the file in step 1
SchemaTypeSystem finalSTS = createNewSTS("datatypes.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// test the PSOM created : walk thro the PSOM, look for # of elements,attributes,types & attribute groups
inspectSOM(finalSTS, 12, 1, 4, 1);
// test save failure
assertFalse("Partial SOM " + finalSTS.getName() + "Save Success ",
checkPSOMSave(finalSTS));
// instance validation - should fail
assertFalse("Validation against instance Success - should fail ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), finalSTS));
}
@Test
public void testDeleteDataTypes() throws Exception
{
System.out.println("Inside test case testDeleteDataTypes()");
// Step 1: read a clean XSD file to get a valid SOM
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("datatypes_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertEquals("Recovered Errors for Valid Schema", false, printRecoveredErrors());
// the tests - Walk thro the SOM, save, validate against an xml instance
inspectSOM(baseSTS, 13, 1, 15, 1);
// Recovered Errors, Test for saving of the PSOM - should go thro
assertTrue("SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), baseSTS));
// additional validation - check to see if all types are resolved to their respective types
assertEquals("Unresolved Simple Type should be 'attachmentTypes'",
"attachmentTypes",
getElementType(baseSTS, "testAtomicTypeElem"));
assertEquals("Unresolved Simple Type should be 'union.attachmentUnionType'",
"union.attachmentUnionType",
getElementType(baseSTS, "testUnionTypeElem"));
assertEquals("Unresolved List Type should be 'attchmentExtensionListTypes'",
"attchmentExtensionListTypes",
getElementType(baseSTS, "testListTypeElem"));
assertEquals("Unresolved Complex Type should be 'headerType'",
"headerType",
getElementType(baseSTS, "testComplexTypeSimpleContentElem"));
assertEquals("Unresolved Complex Type should be 'mailsType'",
"mailsType",
getElementType(baseSTS, "testComplexTypeElementOnlyContentElem"));
assertEquals("Unresolved Complex Type should be 'mixedContentType'",
"mixedContentType",
getElementType(baseSTS, "testComplexTypeMixedElem"));
assertEquals("Unresolved Complex Type should be 'emptyContentType'",
"emptyContentType",
getElementType(baseSTS, "testComplexTypeEmptyElem"));
assertEquals("Unresolved Complex Type should be 'choiceGroupType'",
"choiceGroupType",
getElementType(baseSTS, "testChoiceGroupElem"));
assertEquals("Unresolved Complex Type should be 'allGroupType'",
"allGroupType",
getElementType(baseSTS, "testAllGroupElem"));
//Step 2 : delete/remove types from the schema - should result in STS with unresolved refs
SchemaTypeSystem modifiedSTS = createNewSTS("datatypes.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// PSOM - recovered errors are expected
assertEquals("Valid Schema Type System, Errors recovered", true, printRecoveredErrors());
// test the PSOM created : walk thro the PSOM, look for # of elements,attributes,types & attribute groups
inspectSOM(modifiedSTS, 12, 1, 4, 1);
// Test for saving of the PSOM - should not be able to save
assertFalse("PSOM " + modifiedSTS.getName() + " Save should fail",
checkPSOMSave(modifiedSTS));
// validate unresolved types
assertEquals("Unresolved Simple Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testAtomicTypeElem"));
assertEquals("Unresolved Simple Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testUnionTypeElem"));
// moved to detailed PSOMDetailedTest class
// Assert.assertEquals("Unresolved List Type should be 'anySimpleType'", anySimpleType, getElementType(modifiedSTS, "testListTypeElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testComplexTypeSimpleContentElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testComplexTypeElementOnlyContentElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testComplexTypeMixedElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testComplexTypeEmptyElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testChoiceGroupElem"));
assertEquals("Unresolved Complex Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testAllGroupElem"));
// validate against an xml valid instance - should fail
assertEquals("Validation against instance should Failed ", false, validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), modifiedSTS));
// Step 3 : reaload the xsd in Step 1
SchemaTypeSystem finalSTS = createNewSTS("datatypes_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
// should be able to save as its a valid SOM
assertNotNull("Schema Type System created is Null.", finalSTS);
// walk the PSOM
inspectSOM(finalSTS, 13, 1, 15, 1);
// should be able to save as its a valid SOM
assertTrue("SOM " + finalSTS.getName() + "Save failed",
checkPSOMSave(finalSTS));
// instance validation - should be fine
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), finalSTS));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
// additional validation - check to see if all types are resolved to their respective types
assertEquals("Unresolved Simple Type should be 'attachmentTypes'",
"attachmentTypes",
getElementType(baseSTS, "testAtomicTypeElem"));
assertEquals("Unresolved Simple Type should be 'union.attachmentUnionType'",
"union.attachmentUnionType",
getElementType(baseSTS, "testUnionTypeElem"));
assertEquals("Unresolved List Type should be 'attchmentExtensionListTypes'",
"attchmentExtensionListTypes",
getElementType(baseSTS, "testListTypeElem"));
assertEquals("Unresolved Complex Type should be 'headerType'",
"headerType",
getElementType(baseSTS, "testComplexTypeSimpleContentElem"));
assertEquals("Unresolved Complex Type should be 'mailsType'",
"mailsType",
getElementType(baseSTS, "testComplexTypeElementOnlyContentElem"));
assertEquals("Unresolved Complex Type should be 'mixedContentType'",
"mixedContentType",
getElementType(baseSTS, "testComplexTypeMixedElem"));
assertEquals("Unresolved Complex Type should be 'emptyContentType'",
"emptyContentType",
getElementType(baseSTS, "testComplexTypeEmptyElem"));
assertEquals("Unresolved Complex Type should be 'choiceGroupType'",
"choiceGroupType",
getElementType(baseSTS, "testChoiceGroupElem"));
assertEquals("Unresolved Complex Type should be 'allGroupType'",
"allGroupType",
getElementType(baseSTS, "testAllGroupElem"));
}
@Test
public void testModifyDataTypes() throws Exception
{
System.out.println("Inside test case testModifyDataTypes()");
// Step 1: read in a clean XSD datatypes_added.xsd, to create a base schema with no unresolved components
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("datatypes_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 13, 1, 15, 1);
// Recovered Errors, Test for saving of the SOM - should go thro
assertTrue("SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), baseSTS));
// check types before modify
assertEquals("Unresolved Simple Type should be 'attachmentTypes'",
"attachmentTypes",
getElementType(baseSTS, "testAtomicTypeElem"));
assertEquals("Unresolved List Type should be 'attchmentExtensionListTypes'",
"attchmentExtensionListTypes",
getElementType(baseSTS, "testListTypeElem"));
assertEquals("Unresolved Simple Type should be 'union.attachmentUnionType",
"union.attachmentUnionType",
getElementType(baseSTS, "testUnionTypeElem"));
//Step 2 : modify types from the schema - should result in STS with unresolved refs
//remove one of the constituent types for the union and test to see if union is anySimpleType
SchemaTypeSystem modifiedSTS = createNewSTS("datatypes_modified.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// test the PSOM created :walk thro the PSOM, look for # of elements,attributes,types & attribute groups
inspectSOM(modifiedSTS, 13, 1, 13, 1);
// Test for saving of the PSOM - should not be able to save
assertFalse("PSOM " + modifiedSTS.getName() + " Save should fail",
checkPSOMSave(modifiedSTS));
// validate unresolved types
assertEquals("Unresolved Simple Type - Atomic should be 'anyType'",
anyType,
getElementType(modifiedSTS, "testAtomicTypeElem"));
// moved to detailed PSOMDetailedTest class
//Assert.assertEquals("Unresolved List Type should be 'anySimpleType'", anySimpleType, getElementType(modifiedSTS, "testListTypeElem"));
//Assert.assertEquals("Unresolved Simple Type - Union should be 'anySimpleType'", anySimpleType, getElementType(modifiedSTS, "testUnionTypeElem"));
// validate against an xml valid instance - should fail
assertFalse("Validation against instance should Failed ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), modifiedSTS));
// step 3: reload the original STS
SchemaTypeSystem finalSTS = createNewSTS("datatypes_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// walk the SOM
inspectSOM(finalSTS, 13, 1, 15, 1);
// validate successful save
assertTrue("SOM " + finalSTS.getName() + "Save failed",
checkPSOMSave(finalSTS)); // should be able to save as its a valid SOM
// validate instance - should validate
assertTrue("Validation against instance Failed ",
validateInstance(getTestCaseFile("instance_datatypes_valid.xml"), finalSTS));
// check types after modify
assertEquals("Unresolved Simple Type should be 'attachmentTypes'",
"attachmentTypes",
getElementType(finalSTS, "testAtomicTypeElem"));
assertEquals("Unresolved List Type should be 'attchmentExtensionListTypes'",
"attchmentExtensionListTypes",
getElementType(finalSTS, "testListTypeElem"));
assertEquals("Unresolved Simple Type should be 'union.attachmentUnionType",
"union.attachmentUnionType",
getElementType(finalSTS, "testUnionTypeElem"));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testDeleteDerivedTypes() throws Exception
{
System.out.println("Inside test case testDeleteDerivedTypes()");
// Step 1: read in a clean XSD derived_types_added.xsd with base and derived types to create a base schema with no unresolved components
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("derived_types_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 13, 0, 14, 0);
// Recovered Errors, Test for saving of the SOM - should go thro
assertTrue("Valid SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_derived_types_valid.xml"), baseSTS));
// check types before deletion of base types
assertEquals("Elem Type should be 'ExtensionBaseType' (base)",
"ExtensionBaseType",
getElementType(baseSTS, "ExtensionBaseTypeElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedComplexContentType",
getElementType(baseSTS, "ExtensionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'ExtensionBaseMixedContentType' (base)",
"ExtensionBaseMixedContentType",
getElementType(baseSTS, "ExtensionBaseMixedContentTypElem"));
assertEquals("Elem Type should be 'ExtensionDerivedMixedContentType' (derived)",
"ExtensionDerivedMixedContentType",
getElementType(baseSTS, "ExtensionDerivedMixedContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionSimpleContentBaseType'",
"RestrictionSimpleContentBaseType", getElementType(baseSTS, "RestrictionSimpleContentBaseTypeElem"));
assertEquals("Elem Type should be 'RestrictionSimpleContentDerivedType'",
"RestrictionSimpleContentDerivedType", getElementType(baseSTS, "RestrictionSimpleContentDerivedTypeElem"));
assertEquals("Elem Type should be 'RestrictionBaseComplexContentType'",
"RestrictionBaseComplexContentType",
getElementType(baseSTS, "RestrictionBaseComplexContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedComplexContentType'",
"RestrictionDerivedComplexContentType",
getElementType(baseSTS, "RestrictionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionBaseMixedContentType'",
"RestrictionBaseMixedContentType", getElementType(baseSTS, "RestrictionBaseMixedContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedMixedContentType'",
"RestrictionDerivedMixedContentType", getElementType(baseSTS, "RestrictionDerivedMixedContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionBaseEmptyContentType'",
"RestrictionBaseEmptyContentType", getElementType(baseSTS, "RestrictionBaseEmptyContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedEmptyContentType'",
"RestrictionDerivedEmptyContentType", getElementType(baseSTS, "RestrictionDerivedEmptyContentTypeElem"));
// Step 2: create invalid PSOM with base type removed
SchemaTypeSystem modifiedSTS = createNewSTS("derived_types.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// recovearble errors
assertTrue("No Recovered Errors for Invalid PSOM",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 13, 0, 9, 0);
// Recovered Errors, Test for saving of the SOM
assertEquals("SOM " + modifiedSTS.getName() + "Save Success - should fail!",
false, checkPSOMSave(modifiedSTS));
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_derived_types_valid.xml"), modifiedSTS));
// check types - base should be 'anyType'
assertEquals("Elem Type should be 'anyType' (base)",
anyType,
getElementType(modifiedSTS, "ExtensionBaseTypeElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedComplexContentType",
getElementType(modifiedSTS, "ExtensionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'anyType' (base)",
anyType,
getElementType(modifiedSTS, "ExtensionBaseMixedContentTypElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedMixedContentType",
getElementType(modifiedSTS, "ExtensionDerivedMixedContentTypeElem"));
// Restriction Simple Content Base type commented does not result in recoverable SOM
// moved to Detailed Test
//Assert.assertEquals("Elem Type should be 'anyType'",
// anyType,
// getElementType(modifiedSTS, "RestrictionSimpleContentBaseTypeElem"));
//
assertEquals("Elem Type should be 'RestrictionSimpleContentDerivedType'",
"RestrictionSimpleContentDerivedType",
getElementType(modifiedSTS, "RestrictionSimpleContentDerivedTypeElem"));
assertEquals("Elem Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "RestrictionBaseComplexContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedComplexContentType'",
"RestrictionDerivedComplexContentType",
getElementType(modifiedSTS, "RestrictionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "RestrictionBaseMixedContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedMixedContentType'",
"RestrictionDerivedMixedContentType",
getElementType(modifiedSTS, "RestrictionDerivedMixedContentTypeElem"));
assertEquals("Elem Type should be 'anyType'", anyType,
getElementType(modifiedSTS, "RestrictionBaseEmptyContentTypeElem"));
assertEquals("Elem Type should be 'RestrictionDerivedEmptyContentType'",
"RestrictionDerivedEmptyContentType", getElementType(modifiedSTS, "RestrictionDerivedEmptyContentTypeElem"));
// step 3: reload the original STS
SchemaTypeSystem finalSTS = createNewSTS("derived_types_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(finalSTS, 13, 0, 14, 0);
// Recovered Errors, Test for saving of the SOM - should go thro
assertTrue("SOM " + finalSTS.getName() + "Save failed!",
checkPSOMSave(finalSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_derived_types_valid.xml"), finalSTS));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testAddDerivedTypes() throws Exception
{
System.out.println("Inside test case testAddDerivedTypes()");
// Step 1: start with invalid SOM - one that has derived types but the base types are not defined
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("derived_types.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
assertTrue("No Recovered Errors for Invalid PSOM",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 13, 0, 9, 0);
// Recovered Errors, Test for saving of the SOM
assertFalse("SOM " + baseSTS.getName() + "Save Success - should fail!",
checkPSOMSave(baseSTS));
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_derived_types_valid.xml"), baseSTS));
// check types - base should be 'anyType'
assertEquals("Elem Type should be 'anyType' (base)",
anyType,
getElementType(baseSTS, "ExtensionBaseTypeElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedComplexContentType",
getElementType(baseSTS, "ExtensionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'anyType' (base)",
anyType,
getElementType(baseSTS, "ExtensionBaseMixedContentTypElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedMixedContentType",
getElementType(baseSTS, "ExtensionDerivedMixedContentTypeElem"));
// Step 2: create valid PSOM now from xsd with base types defined
SchemaTypeSystem modifiedSTS = createNewSTS("derived_types_added.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 13, 0, 14, 0);
// Recovered Errors, Test for saving of the SOM - should go thro
assertTrue("SOM " + modifiedSTS.getName() + "Save failed!",
checkPSOMSave(modifiedSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_derived_types_valid.xml"), modifiedSTS));
// check types before deletion of base types
assertEquals("Elem Type should be 'ExtensionBaseType' (base)",
"ExtensionBaseType",
getElementType(modifiedSTS, "ExtensionBaseTypeElem"));
assertEquals("Elem Type should be 'ExtensionDerivedComplexContentType' (derived)",
"ExtensionDerivedComplexContentType",
getElementType(modifiedSTS, "ExtensionDerivedComplexContentTypeElem"));
assertEquals("Elem Type should be 'ExtensionBaseMixedContentType' (base)",
"ExtensionBaseMixedContentType",
getElementType(modifiedSTS, "ExtensionBaseMixedContentTypElem"));
assertEquals("Elem Type should be 'ExtensionDerivedMixedContentType' (derived)",
"ExtensionDerivedMixedContentType",
getElementType(modifiedSTS, "ExtensionDerivedMixedContentTypeElem"));
}
// moved to PSOMDetaiedTest
//public void testDeleteReusableGroups() throws Exception
//{}
//public void testModifyReusableGroups() throws Exception
@Test
public void testAddReusableGroups() throws Exception
{
System.out.println("Inside test case testAddReusableGroups()");
// Step 1: read in invalid XSD groups.xsd
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("groups.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// recovearble errors
assertTrue("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 7, 0, 4, 1);
// Recovered Errors, Test for saving of the SOM - should fail
assertFalse("Partial SOM " + baseSTS.getName() + "Save successful - should failed!",
checkPSOMSave(baseSTS));
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), baseSTS));
// verify types
// named model groups
assertEquals("Elem Type should be 'ModelGrpType'",
"ModelGrpType",
getElementType(baseSTS, "ModelGrpTypeElem"));
assertTrue("Elem Type should be 'AttributeGroup'",
getAttributeGroup(baseSTS, "AttributeGroup"));
// Step 2: create a SOM with valid xsd
SchemaTypeSystem modifiedSTS = createNewSTS("groups_added.xsd_",
baseSTS,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 7, 0, 5, 2);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + modifiedSTS.getName() + "Save failed!",
checkPSOMSave(modifiedSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), modifiedSTS));
// verify named model groups
assertEquals("Elem Type should be 'ModelGrpType'",
"ModelGrpType",
getElementType(modifiedSTS, "ModelGrpTypeElem"));
assertTrue("Elem Type should be 'AttributeGroup'",
getAttributeGroup(modifiedSTS, "AttributeGroup"));
}
@Test
public void testAddSubstitutionGroups() throws Exception
{
System.out.println("Inside test case testAddSubstitutionGroups()");
// step1: load an invalid PSOM by with incomplete/missing Subst Grp head elem definition
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("groups.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// errors recovered
assertTrue("No Recovered Errors for recovered PSOM",
printRecoveredErrors());
// Recovered Errors, Test for saving of the SOM
assertFalse("SOM " + baseSTS.getName() + "Save Success - should fail!",
checkPSOMSave(baseSTS));
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 7, 0, 4, 1);
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), baseSTS));
// verify types
assertEquals("Elem Type should be 'anyType'",
anyType,
getElementType(baseSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'anyType' (Member of Sub. Group)",
anyType,
getElementType(baseSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(baseSTS, "SubGrpMemberElem2"));
// named model groups
assertEquals("Elem Type should be 'ModelGrpType'",
"ModelGrpType",
getElementType(baseSTS, "ModelGrpTypeElem"));
assertTrue("Elem Type should be 'AttributeGroup'",
getAttributeGroup(baseSTS, "AttributeGroup"));
// Step 2: create a valid SOM and add to these
SchemaTypeSystem modifiedSTS = createNewSTS("groups_added.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 7, 0, 5, 2);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + modifiedSTS.getName() + "Save failed!",
checkPSOMSave(modifiedSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), modifiedSTS));
// verify types - substitution groups
assertEquals("Elem Type should be 'SubGrpHeadElemType' (base)",
"SubGrpHeadElemType",
getElementType(modifiedSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType' (derived)",
"SubGrpHeadElemType",
getElementType(modifiedSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(modifiedSTS, "SubGrpMemberElem2"));
// named model groups - moved to check in test
//Assert.assertEquals("Elem Type should be 'ModelGrpType'", "ModelGrpType", getElementType(baseSTS, "ModelGrpTypeElem"));
//Assert.assertEquals("Elem Type should be 'AttributeGroup'", "AttributeGroup", getAttributeGroup(baseSTS,"AttributeGroup"));
}
@Test
public void testDeleteSubstitutionGroups() throws Exception
{
System.out.println("Inside test case testDeleteSubstitutionGroups()");
// Step 1: read in a clean XSD groups_added.xsd
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("groups_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 7, 0, 5, 2);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), baseSTS));
// verify types - substitution groups
assertEquals("Elem Type should be 'SubGrpHeadElemType' (base)",
"SubGrpHeadElemType",
getElementType(baseSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType' (derived)",
"SubGrpHeadElemType",
getElementType(baseSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(baseSTS, "SubGrpMemberElem2"));
// named model groups
//Assert.assertEquals("Elem Type should be 'ModelGrpType'", "ModelGrpType", getElementType(baseSTS, "ModelGrpTypeElem"));
//Assert.assertEquals("Elem Type should be 'AttributeGroup'", "AttributeGroup", getAttributeGroup(baseSTS,"AttributeGroup"));
// step2: load an invalid PSOM by deleting the Subst Grp head elem definition
SchemaTypeSystem modifiedSTS = createNewSTS("groups.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
assertTrue("Recovered Errors for Valid Schema",
printRecoveredErrors());
// Recovered Errors, Test for saving of the SOM
assertFalse("SOM " + modifiedSTS.getName() + "Save Success - should fail!",
checkPSOMSave(modifiedSTS));
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 7, 0, 4, 1);
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), modifiedSTS));
// verify types
assertEquals("Elem Type should be 'anyType'",
anyType,
getElementType(modifiedSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'anyType' (Member of Sub. Group)",
anyType,
getElementType(modifiedSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(modifiedSTS, "SubGrpMemberElem2"));
// named model groups
assertEquals("Elem Type should be 'ModelGrpType'",
"ModelGrpType",
getElementType(modifiedSTS, "ModelGrpTypeElem"));
assertTrue("Elem Type should be 'AttributeGroup'",
getAttributeGroup(modifiedSTS, "AttributeGroup"));
// step 3: create a PSOM with the original xsd
SchemaTypeSystem finalSTS = createNewSTS("groups_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// Test for saving of the SOM - should go thro
assertEquals("SOM " + finalSTS.getName() + "Save failed!",
true,
checkPSOMSave(finalSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), finalSTS));
// verify types
assertEquals("Elem Type should be 'SubGrpHeadElemType' (base)",
"SubGrpHeadElemType",
getElementType(finalSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType' (derived)",
"SubGrpHeadElemType",
getElementType(finalSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(finalSTS, "SubGrpMemberElem2"));
// named model groups
//Assert.assertEquals("Elem Type should be 'ModelGrpType'", "ModelGrpType", getElementType(baseSTS, "ModelGrpTypeElem"));
//Assert.assertEquals("Elem Type should be 'AttributeGroup'", "AttributeGroup", getAttributeGroup(baseSTS,"AttributeGroup"));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testModifySubstitutionGroups() throws Exception
{
System.out.println("Inside test case testModifySubstitutionGroups()");
// Step 1: read in a clean XSD groups_added.xsd
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("groups_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 7, 0, 5, 2);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), baseSTS));
// verify types
assertEquals("Elem Type should be 'SubGrpHeadElemType' (base)",
"SubGrpHeadElemType",
getElementType(baseSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType' (derived)",
"SubGrpHeadElemType",
getElementType(baseSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(baseSTS, "SubGrpMemberElem2"));
// step2: load a modified xsd with type of head elem in subs grp changed
SchemaTypeSystem modifiedSTS = createNewSTS("groups_modified.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// Recovered Errors, Test for saving of the SOM - still a valid PSOM
assertTrue("SOM " + modifiedSTS.getName() + "Save Success - should fail!",
checkPSOMSave(modifiedSTS));
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 5, 0, 3, 0);
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), modifiedSTS));
// verify types
assertEquals("Elem Type should be 'SubGrpHeadElemType2'",
"SubGrpHeadElemType2",
getElementType(modifiedSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType2' (derived)",
"SubGrpHeadElemType2",
getElementType(modifiedSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType",
getElementType(modifiedSTS, "SubGrpMemberElem2"));
// step3 : reload the original xsd
SchemaTypeSystem finalSTS = createNewSTS("groups_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + finalSTS.getName() + "Save failed!",
checkPSOMSave(finalSTS));
// instance validation - should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_subst_grps_valid.xml"), finalSTS));
// the tests - Walk thro the valid SOM
inspectSOM(finalSTS, 7, 0, 5, 2);
// verify types
assertEquals("Elem Type should be 'SubGrpHeadElemType' (base)",
"SubGrpHeadElemType",
getElementType(finalSTS, "SubGrpHeadElem"));
assertEquals("Elem Type should be 'SubGrpHeadElemType' (derived)",
"SubGrpHeadElemType",
getElementType(finalSTS, "SubGrpMemberElem1"));
assertEquals("Elem Type should be 'ExtensionSubGrpHeadElemType' (base)",
"ExtensionSubGrpHeadElemType", getElementType(finalSTS, "SubGrpMemberElem2"));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
@Test
public void testModifyIdConstraints() throws Exception
{
System.out.println("Inside test case testModifyIdConstraints()");
// Step 1: read in a clean XSD groups_added.xsd
String sBaseSourceName = "testsourcename";
SchemaTypeSystem baseSTS = createNewSTS("constraints_added.xsd_",
null,
"BaseSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", baseSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(baseSTS, 5, 0, 2, 0);
assertTrue("Constraint 'uniqueConstraint' should be found",lookForIdentityConstraint(baseSTS,"uniqueConstraint"));
assertTrue("Constraint 'keyConstraint' should be found",lookForIdentityConstraint(baseSTS,"keyConstraint"));
assertTrue("Constraint 'KeyRefConstraint' should be found",lookForIdentityConstraint(baseSTS,"KeyRefConstraint"));
// Test for saving of the SOM - should go thro
assertTrue("SOM " + baseSTS.getName() + "Save failed!",
checkPSOMSave(baseSTS));
// instance validation against valid instance- should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_constraints_valid.xml"), baseSTS));
// validation against instance which violates the Constraints - should fail
assertFalse("Validation against invalid should fail",
validateInstance(getTestCaseFile("instance_constraints_invalid.xml"), baseSTS));
// Step 2: create an incremental PSOM with the constraint commented out
// Note: Partial SOMs cannot be created for Unique/Key constraints. They generate valid complete SOMs.
// The xsd includes these but the invalid SOM in this case is from a keyref definition referring to a
// non existant key
SchemaTypeSystem modifiedSTS = createNewSTS("constraints.xsd_",
baseSTS,
"ModifiedSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", modifiedSTS);
// recovearble errors
assertTrue("Recovered Errors for Valid Schema",
printRecoveredErrors());
// Recovered Errors, Test for saving of the SOM
assertFalse("valid PSOM " + modifiedSTS.getName() + "Save failed !",
checkPSOMSave(modifiedSTS));
// the tests - Walk thro the valid SOM
inspectSOM(modifiedSTS, 5, 0, 2, 0);
// instance validation - should fail
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_constraints_valid.xml"), modifiedSTS));
// Invalid instance validation - should fail bcos of Unique constraint definition missing
assertFalse("Validation against instance failed",
validateInstance(getTestCaseFile("instance_constraints_invalid.xml"), modifiedSTS));
assertFalse("KeyRef 'KeyRefConstraint' should not be resolved",
lookForIdentityConstraint(modifiedSTS, "KeyConstraint"));
// Step 3 : recreate SOM in first step and compare it
SchemaTypeSystem finalSTS = createNewSTS("constraints_added.xsd_",
modifiedSTS,
"FinalSchemaTS",
sBaseSourceName);
assertNotNull("Schema Type System created is Null.", finalSTS);
// there should be NO recovearble errors
assertFalse("Recovered Errors for Valid Schema",
printRecoveredErrors());
// the tests - Walk thro the valid SOM
inspectSOM(finalSTS, 5, 0, 2, 0);
// Test for saving of the SOM - should go thro
assertTrue("SOM " + finalSTS.getName() + "Save failed!",
checkPSOMSave(finalSTS));
// instance validation against valid instance- should be ok
assertTrue("Validation against instance failed",
validateInstance(getTestCaseFile("instance_constraints_valid.xml"), finalSTS));
// compare this to the original schema here
assertTrue(compareSavedSOMs("BaseSchemaTS","FinalSchemaTS"));
}
}