blob: b105f7e569fa7f93052b9251860884eb8958aa2c [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.elements.detailed;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.impl.values.XmlValueNotNillableException;
import org.junit.Test;
import scomp.common.BaseCase;
import xbean.scomp.element.nillTest.*;
import static org.junit.Assert.*;
/**
* this test illustrates somewhat inconsistent behavior
* of nillable:
*/
public class NillTest extends BaseCase {
/**
* Tests exceptions when setting values to
* null for non-nillable elems
* * CR CR192914:
* Regardless of Schema definition,
* setXXX(null) will clear the value of the
* XXX attribute/element and if the container is an
* element, will also add the "xsi:nil" attribute.
*/
// for all nillable tests, the validation falls thro only if the ValidateOnSet option is turned on
@Test
public void testNotNillableLocalElem() {
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// local element, not nillable. If setXXX is set to null & validateOnSet is true, it should throw XmlValueNotNillableException
Contact contact = Contact.Factory.newInstance(options);
try{
contact.setFirstName(null);
fail("XmlValueNotNillableException Expected here");
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
}
// with validate turned off, this should to thro
Contact contactWithValidateOff = Contact.Factory.newInstance();
try{
contactWithValidateOff.setFirstName(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException NOT Expected here");
}
assertEquals("<firstName " +
"xsi:nil=\"true\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
contactWithValidateOff.xmlText());
}
@Test
public void testNotNillableGlobalElem() {
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// global element, not nillable. If setXXX is set to null & validateOnSet is true, it should throw XmlValueNotNillableException
CityNameDocument cityName = CityNameDocument.Factory.newInstance(options);
try{
cityName.setCityName(null);
fail("XmlValueNotNillableException Expected here");
}
catch (XmlValueNotNillableException e) {
}
// with validate turned off, this should to thro
CityNameDocument cityNameWithValidateOff = CityNameDocument.Factory.newInstance();
try{
cityNameWithValidateOff.setCityName(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException NOT Expected here");
}
assertEquals("<nil:cityName " +
"xsi:nil=\"true\" " +
"xmlns:nil=\"http://xbean/scomp/element/NillTest\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
cityNameWithValidateOff.xmlText());
}
@Test
public void testNillableGlobalElement()
{
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// global element, nillable. If setXXX is set to null & validateOnSet is true, it should NOT throw XmlValueNotNillableException
GlobalEltNillableDocument testElt = GlobalEltNillableDocument
.Factory.newInstance(options);
try{
testElt.setGlobalEltNillable(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException Not Expected here");
}
assertEquals("<nil:GlobalEltNillable " +
"xsi:nil=\"true\" " +
"xmlns:nil=\"http://xbean/scomp/element/NillTest\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
testElt.xmlText());
// without the validateOnSet - no exception in this case either
GlobalEltNillableDocument testEltWithValidateOff = GlobalEltNillableDocument
.Factory.newInstance();
try{
testEltWithValidateOff.setGlobalEltNillable(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException Not Expected here");
}
assertEquals("<nil:GlobalEltNillable " +
"xsi:nil=\"true\" " +
"xmlns:nil=\"http://xbean/scomp/element/NillTest\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
testElt.xmlText());
}
@Test
public void testNillableLocalElement()
{
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// global element, nillable. If setXXX is set to null & validateOnSet is true, it should NOT throw XmlValueNotNillableException
Contact contact = Contact
.Factory.newInstance(options);
try{
contact.setLocalNillableElem(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException Not Expected here");
}
assertEquals("<LocalNillableElem " +
"xsi:nil=\"true\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
contact.xmlText());
// without the validateOnSet - no exception in this case either
Contact contactWithValidationOff = Contact
.Factory.newInstance();
try{
contactWithValidationOff.setLocalNillableElem(null);
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
fail("XmlValueNotNillableException Not Expected here");
}
assertEquals("<LocalNillableElem " +
"xsi:nil=\"true\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"/>",
contactWithValidationOff.xmlText());
}
@Test
public void testDefaultValElement()
{
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// default value element, not nillable. If setXXX is set to null & validateOnSet is true, it should
// throw XmlValueNotNillableException and validation should fail
GlobalEltDefaultDocument elt = GlobalEltDefaultDocument
.Factory.newInstance(options);
try{
elt.setGlobalEltDefault(null);
System.out.println("Elt Text:" + elt.xmlText());
assertFalse(elt.validate());
fail("XmlValueNotNillableException Expected here");
}
catch (XmlValueNotNillableException e) {
}
}
@Test
public void testNotNillableFixedValueElement()
{
XmlOptions options = new XmlOptions();
options.setValidateOnSet();
// fixed value element, not nillable. If setXXX is set to null & validateOnSet is true, it should
// throw XmlValueNotNillableException and validation should fail
GlobalEltFixedDocument elt = GlobalEltFixedDocument
.Factory.newInstance(options);
try{
elt.setGlobalEltFixed(null);
System.out.println("Elt Text:" + elt.xmlText());
assertFalse(elt.validate());
fail("XmlValueNotNillableException Expected here");
}
catch (XmlValueNotNillableException e) {
e.printStackTrace();
}
}
}