blob: 86dc19776441d349850329ca1dc50840720c7384 [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.commons.beanutils2;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
/**
* Test class for {@code IntrospectionContext}.
*
*/
public class DefaultIntrospectionContextTestCase extends TestCase {
/** Constant for the name of a property. */
private static final String PROP = "foo";
/** The context to be tested. */
private DefaultIntrospectionContext context;
@Override
protected void setUp() throws Exception {
super.setUp();
context = new DefaultIntrospectionContext(getClass());
}
/**
* Creates a property descriptor object for a property with the given name.
*
* @param propName the property name
* @return the descriptor for this property
*/
private static PropertyDescriptor createDescriptor(final String propName) {
try {
return new PropertyDescriptor(propName,
DefaultIntrospectionContextTestCase.class, null, null);
} catch (final IntrospectionException e) {
throw new IllegalStateException("Unexpected exception: " + e);
}
}
/**
* Tests a newly created instance.
*/
public void testInit() {
assertEquals("Wrong current class", getClass(),
context.getTargetClass());
assertTrue("Got property names", context.propertyNames().isEmpty());
}
/**
* Tests whether a property descriptor can be added.
*/
public void testAddPropertyDescriptor() {
final PropertyDescriptor desc = createDescriptor(PROP);
context.addPropertyDescriptor(desc);
assertTrue("Property not found", context.hasProperty(PROP));
assertSame("Wrong descriptor", desc,
context.getPropertyDescriptor(PROP));
}
/**
* Tries to add a null descriptor.
*/
public void testAddPropertyDescriptorNull() {
try {
context.addPropertyDescriptor(null);
fail("Could add null descriptor!");
} catch (final IllegalArgumentException iex) {
// ok
}
}
/**
* Tests whether multiple descriptors can be added.
*/
public void testAddPropertyDescriptors() {
final int count = 4;
final PropertyDescriptor[] descs = new PropertyDescriptor[count];
final Set<PropertyDescriptor> descSet = new HashSet<>();
for (int i = 0; i < count; i++) {
descs[i] = createDescriptor(PROP + i);
descSet.add(descs[i]);
}
context.addPropertyDescriptors(descs);
final PropertyDescriptor d = createDescriptor(PROP);
context.addPropertyDescriptor(d);
descSet.add(d);
final Set<String> names = context.propertyNames();
assertEquals("Wrong number of property names", count + 1, names.size());
assertTrue("Property not found: " + PROP, names.contains(PROP));
for (int i = 0; i < count; i++) {
assertTrue("Property not found: " + (PROP + i),
names.contains(PROP + i));
}
final PropertyDescriptor[] addedDescs = context.getPropertyDescriptors();
assertEquals("Wrong number of added descriptors", count + 1,
addedDescs.length);
for (final PropertyDescriptor pd : addedDescs) {
assertTrue("Unexpected descriptor: " + pd, descSet.remove(pd));
}
}
/**
* Tries to add a null array with property descriptors.
*/
public void testAddPropertyDescriptorsNull() {
try {
context.addPropertyDescriptors(null);
fail("Could add a null array with descriptors!");
} catch (final IllegalArgumentException iex) {
// ok
}
}
/**
* Tests hasProperty() if the expected result is false.
*/
public void testHasPropertyFalse() {
assertFalse("Wrong result (1)", context.hasProperty(PROP));
context.addPropertyDescriptor(createDescriptor(PROP));
assertFalse("Wrong result (2)", context.hasProperty("other"));
}
/**
* Tests getPropertyDescriptor() if the property name is unknown.
*/
public void testGetPropertyDescriptorUnknown() {
assertNull("Got a property (1)", context.getPropertyDescriptor(PROP));
context.addPropertyDescriptor(createDescriptor(PROP));
assertNull("Got a property (2)", context.getPropertyDescriptor("other"));
}
/**
* Tests that the set with property names cannot be changed.
*/
public void testPropertyNamesModify() {
final Set<String> names = context.propertyNames();
try {
names.add(PROP);
fail("Could modify property names set!");
} catch (final UnsupportedOperationException uex) {
// ok
}
}
/**
* Tests whether a descriptor can be removed.
*/
public void testRemovePropertyDescriptor() {
context.addPropertyDescriptor(createDescriptor(PROP));
context.removePropertyDescriptor(PROP);
assertTrue("Got property names", context.propertyNames().isEmpty());
assertEquals("Got descriptors", 0,
context.getPropertyDescriptors().length);
}
}