package com.thoughtworks.xstream.core; import com.thoughtworks.acceptance.objects.Hardware; import com.thoughtworks.acceptance.objects.Software; import com.thoughtworks.acceptance.someobjects.FunnyConstructor; import com.thoughtworks.acceptance.someobjects.X; import com.thoughtworks.acceptance.someobjects.Y; import com.thoughtworks.acceptance.someobjects.somemoreobjects.Fruit; import com.thoughtworks.acceptance.someobjects.somemoreobjects.BunchOfStuff; import com.thoughtworks.acceptance.someobjects.somemoreobjects.Cheese; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.XppDriver; import junit.framework.TestCase; /** * * @author greg * @author $Author: $ (last edit) * @version $Revision: $ */ public class PackageAliasClassMapperTest extends TestCase { private PackageAliasClassMapper mapper; protected void setUp() throws Exception { super.setUp(); mapper = new PackageAliasClassMapper(); mapper.aliasPackage(X.class.getPackage()); } public void testLookupNameShouldReturnClassNameWithoutPackage() { String funny = mapper.lookupName(FunnyConstructor.class); assertEquals("FunnyConstructor", funny); String y = mapper.lookupName(Y.class); assertEquals("Y", y); } public void testLookupNameShouldReturnOnlySubpackages() { String fruit = mapper.lookupName(Fruit.class); assertEquals("somemoreobjects.Fruit", fruit); } public void testLookupNameShouldStillReturnFullPackageNameForOtherPackages() { String software = mapper.lookupName(Software.class); assertEquals("com.thoughtworks.acceptance.objects.Software", software); } public void testLookupNameShouldAlsoWorkWithMultiplePackagesAliases() { mapper.aliasPackage(Hardware.class.getPackage()); String software = mapper.lookupName(Software.class); assertEquals("Software", software); String y = mapper.lookupName(Y.class); assertEquals("Y", y); } public void testLookupType() { Class y = mapper.lookupType("Y"); assertEquals(Y.class, y); } public void testLookupTypeInSubpackage() { Class fruit = mapper.lookupType("somemoreobjects.Fruit"); assertEquals(Fruit.class, fruit); } public void testLookupTypeShouldAlsoWorkWithMultiplePackagesAliases() { mapper.aliasPackage(Hardware.class.getPackage()); Class software = mapper.lookupType("Software"); assertEquals(Software.class, software); Class y = mapper.lookupType("Y"); assertEquals(Y.class, y); } public void testShouldWorkWithArrays() { String yArray = mapper.lookupName(Y[][].class); assertEquals("Y-array-array", yArray); Class yArrayClass = mapper.lookupType("Y-array-array-array"); assertEquals(Y[][][].class, yArrayClass); } public void testShouldGiveSameResultsAsWithRegularAliases() { BunchOfStuff bunchOfStuff = new BunchOfStuff(new Cheese("yellow", "smelly"), new Fruit("green", "square"), new FunnyConstructor(123), new Hardware("blah", "bleh"), new Software("bloh", "bluh")); XStream xStream = new XStream(); xStream.alias("BunchOfStuff", BunchOfStuff.class); xStream.alias("Cheese", Cheese.class); xStream.alias("Fruit", Fruit.class); xStream.alias("Hardware", Hardware.class); xStream.alias("Software", Software.class); String xmlWithRegularAliases = xStream.toXML(bunchOfStuff); PackageAliasClassMapper packageAliasClassMapper = new PackageAliasClassMapper(Fruit.class.getPackage()); packageAliasClassMapper.aliasPackage(FunnyConstructor.class.getPackage()); packageAliasClassMapper.aliasPackage(Hardware.class.getPackage()); XStream xStream2 = new XStream(JVM.bestReflectionProvider(), packageAliasClassMapper, new XppDriver()); String xmlWithPackageAliases = xStream2.toXML(bunchOfStuff); assertEquals(xmlWithRegularAliases, xmlWithPackageAliases); } }