defect for Assertions during Junit tests
----------------------------------------
Key: XERCESJ-1432
URL: https://issues.apache.org/jira/browse/XERCESJ-1432
Project: Xerces2-J
Issue Type: Bug
Environment: Windows, Junit
Reporter: Kun Xu
Priority: Minor
When we do JUnit tests for Schema 1.1, assertions on derived simple type
definitions as following will cause failures for other test cases.
For example.
<?xml version="1.1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="baseType">
<xs:restriction base="xs:string">
<xs:maxLength value="25"/>
<xs:assertion test="ends-with($value, 'xyz')"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="derivedType">
<xs:restriction base="baseType">
<xs:assertion test="string-length($value) gt 3 "/>
</xs:restriction>
</xs:simpleType>
<xs:element name="root" type="derivedType" />
</xs:schema>
The reason is that we put fschemaFactory into the schemafactory pool for the
first two test cases (one DOM and one SAX), then for other test cases, we just
reuse the schemafactory stored in the pool. When we have above schema which
contains a base type including a assertion, we use a global vector "private
Vector baseAsserts = new Vector();" to hold all the asserts up in the type
hierarchy. We should clear up this vector after validating each test case.
There are two options to fix it .
@version $Id: XSDAbstractTraverser.java 912155 2010-02-20 17:20:39Z mrglavas $
1. clear it up in the reset method:
void reset(SymbolTable symbolTable, boolean validateAnnotations, Locale locale)
{
baseAsserts.clear(); // clear vector baseAsserts
fSymbolTable = symbolTable;
fValidateAnnotations = validateAnnotations;
fValidationState.setExtraChecking(false);
fValidationState.setSymbolTable(symbolTable);
fValidationState.setLocale(locale);
fValidationState.setTypeValidatorHelper(fSchemaHandler.fTypeValidatorHelper);
}
2. clear it up every time after we use it.
// retrieve all assert definitions from all base types all the way up
in the
// type hierarchy. sets a global variable, 'baseAsserts' with all the
base
// asserts.
if (fSchemaHandler.fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
getAssertsFromBaseTypes(baseValidator);
// add all base assertions to the list of assertions to be processed
if (baseAsserts.size() > 0) {
if (assertData == null) {
assertData = new Vector();
}
assertData.addAll(baseAsserts);
baseAsserts.clear(); // clear vector baseAsserts
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]