blob: 8d115a88e18e5043d4313138dddb547b6cb1aaa5 [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
// * to you 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 org.apache.juneau.xml;
import static org.junit.Assert.*;
import java.util.*;
import org.apache.juneau.*;
import org.apache.juneau.xml.annotation.*;
import org.junit.*;
import org.junit.runner.*;
import org.junit.runners.*;
/**
* Verifies that the correct error messages are displayed when you do something wrong with the @Xml annotation.
*/
@RunWith(Parameterized.class)
@SuppressWarnings({"javadoc"})
public class InvalidXmlBeansTest {
private static final XmlSerializer
s1 = XmlSerializer.DEFAULT_SQ;
@Parameterized.Parameters
public static Collection<Object[]> getParameters() {
return Arrays.asList(new Object[][] {
{
"BeanWithAttrFormat",
new BeanWithAttrFormat(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithAttrFormat: Invalid format specified in @Xml annotation on bean: ATTR. Must be one of the following: DEFAULT,ATTRS,ELEMENTS,VOID",
},
{
"BeanWithElementFormat",
new BeanWithElementFormat(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementFormat: Invalid format specified in @Xml annotation on bean: ELEMENT. Must be one of the following: DEFAULT,ATTRS,ELEMENTS,VOID",
},
{
"BeanWithCollapsedFormat",
new BeanWithCollapsedFormat(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithCollapsedFormat: Invalid format specified in @Xml annotation on bean: COLLAPSED. Must be one of the following: DEFAULT,ATTRS,ELEMENTS,VOID",
},
{
"BeanWithMixedFormat",
new BeanWithMixedFormat(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMixedFormat: Invalid format specified in @Xml annotation on bean: MIXED. Must be one of the following: DEFAULT,ATTRS,ELEMENTS,VOID",
},
{
"BeanWithMultipleAttrs",
new BeanWithMultipleAttrs(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMultipleAttrs: Multiple instances of ATTRS properties defined on class. Only one property can be designated as such.",
},
{
"BeanWithWrongAttrsType",
new BeanWithWrongAttrsType(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongAttrsType: Invalid type for ATTRS property. Only properties of type Map and bean can be used.",
},
{
"BeanWithMulipleElements",
new BeanWithMulipleElements(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleElements: Multiple instances of ELEMENTS properties defined on class. Only one property can be designated as such.",
},
{
"BeanWithWrongElementsType",
new BeanWithWrongElementsType(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongElementsType: Invalid type for ELEMENTS property. Only properties of type Collection and array can be used.",
},
{
"BeanWithMulipleMixed",
new BeanWithMulipleMixed(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleMixed: Multiple instances of MIXED properties defined on class. Only one property can be designated as such.",
},
{
"BeanWithConflictingChildNames",
new BeanWithConflictingChildNames(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithConflictingChildNames: Multiple properties found with the child name 'X'.",
},
{
"BeanWithElementsAndMixed",
new BeanWithElementsAndMixed(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndMixed: ELEMENTS and MIXED properties found on the same bean. Only one property can be designated as such.",
},
{
"BeanWithElementsAndElement",
new BeanWithElementsAndElement(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndElement: ELEMENTS and ELEMENT properties found on the same bean. These cannot be mixed.",
},
{
"BeanWithElementsAndDefault",
new BeanWithElementsAndDefault(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndDefault: ELEMENTS and ELEMENT properties found on the same bean. These cannot be mixed.",
},
{
"BeanWithElementsAndCollapsed",
new BeanWithElementsAndCollapsed(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndCollapsed: ELEMENTS and COLLAPSED properties found on the same bean. These cannot be mixed.",
},
{
"BeanWithChildAndPropNameConflict",
new BeanWithChildAndPropNameConflict(),
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithChildAndPropNameConflict: Child element name conflicts found with another property.",
},
});
}
private String label, expected;
private Object in;
public InvalidXmlBeansTest(String label, Object in, String expected) throws Exception {
this.label = label;
this.in = in;
this.expected = expected;
}
@Test
public void test() {
try {
s1.serialize(in);
fail(label + ": Expected exception didn't occur.");
} catch (Exception e) {
assertEquals(label + ": Wrong error message.", expected, e.getLocalizedMessage());
}
}
//--------------------------------------------------------------------------------
// Test beans
//--------------------------------------------------------------------------------
@Xml(format=XmlFormat.ATTR)
public static class BeanWithAttrFormat {
public int f1;
}
@Xml(format=XmlFormat.ELEMENT)
public static class BeanWithElementFormat {
public int f1;
}
@Xml(format=XmlFormat.COLLAPSED)
public static class BeanWithCollapsedFormat {
public int f1;
}
@Xml(format=XmlFormat.MIXED)
public static class BeanWithMixedFormat {
public int f1;
}
public static class BeanWithMultipleAttrs {
@Xml(format=XmlFormat.ATTRS)
public ObjectMap f1;
@Xml(format=XmlFormat.ATTRS)
public ObjectMap f2;
}
public static class BeanWithWrongAttrsType {
@Xml(format=XmlFormat.ATTRS)
public ObjectList f1;
}
public static class BeanWithMulipleElements {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f1;
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f2;
}
public static class BeanWithWrongElementsType {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectMap f1;
}
public static class BeanWithMulipleMixed {
@Xml(format=XmlFormat.MIXED)
public ObjectList f1;
@Xml(format=XmlFormat.MIXED)
public ObjectList f2;
}
public static class BeanWithConflictingChildNames {
@Xml(format=XmlFormat.COLLAPSED, childName="X")
public ObjectList f1;
@Xml(format=XmlFormat.COLLAPSED, childName="X")
public ObjectList f2;
}
public static class BeanWithElementsAndMixed {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f1;
@Xml(format=XmlFormat.MIXED)
public ObjectList f2;
}
public static class BeanWithElementsAndElement {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f1;
@Xml(format=XmlFormat.ELEMENT)
public ObjectList f2;
}
public static class BeanWithElementsAndDefault {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f1;
public ObjectList f2;
}
public static class BeanWithElementsAndCollapsed {
@Xml(format=XmlFormat.ELEMENTS)
public ObjectList f1;
@Xml(format=XmlFormat.COLLAPSED)
public ObjectList f2;
}
public static class BeanWithChildAndPropNameConflict {
@Xml(format=XmlFormat.COLLAPSED, childName="f2")
public ObjectList f1;
public ObjectList f2;
}
}