You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2004/09/23 23:46:44 UTC

cvs commit: jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/io/read TestBindTimeTypeMapping.java

rdonkin     2004/09/23 14:46:44

  Added:       betwixt/src/test/org/apache/commons/betwixt/io/read
                        TestBindTimeTypeMapping.java
  Log:
  Improved support for derived beans.
  
  Revision  Changes    Path
  1.1                  jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/io/read/TestBindTimeTypeMapping.java
  
  Index: TestBindTimeTypeMapping.java
  ===================================================================
  /*
   * 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 org.apache.commons.betwixt.io.read;
  
  import java.io.StringReader;
  import java.io.StringWriter;
  import java.util.Iterator;
  
  import org.apache.commons.betwixt.AbstractTestCase;
  import org.apache.commons.betwixt.ElementDescriptor;
  import org.apache.commons.betwixt.XMLBeanInfo;
  import org.apache.commons.betwixt.XMLIntrospector;
  import org.apache.commons.betwixt.io.BeanReader;
  import org.apache.commons.betwixt.io.BeanWriter;
  import org.apache.commons.betwixt.strategy.MappingDerivationStrategy;
  import org.xml.sax.InputSource;
  
  /**
   * @author <a href='http://jakarta.apache.org/commons'>Jakarta Commons Team</a>, <a href='http://www.apache.org'>Apache Software Foundation</a>
   */
  public class TestBindTimeTypeMapping extends AbstractTestCase {
      
      
      
      public TestBindTimeTypeMapping(String testName) {
          super(testName);
      }
  
      //todo: note to self need to consider how the design of the introspection will work when you have strategy which takes 
      // singular property which is not know until after the digestion
      
      public void testDefaultMappingDerivationStrategy() throws Exception {
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(Animals.class);
          ElementDescriptor animalsDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use bind time type", true, animalsDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = animalsDescriptor.getElementDescriptors()[0];
          assertEquals("Use bind time type", true, animalDescriptor.isUseBindTimeTypeForMapping());
      }
      
      public void testIntrospectionTimeMappingDerivationStrategy() throws Exception {
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          xmlIntrospector.getConfiguration().setMappingDerivationStrategy(MappingDerivationStrategy.USE_INTROSPECTION_TIME_TYPE);
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(Animals.class);
          ElementDescriptor animalsDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use introspection time type", false, animalsDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = animalsDescriptor.getElementDescriptors()[0];
          assertEquals("Use introspection time type", false, animalDescriptor.isUseBindTimeTypeForMapping());
      }
  
      public void testBindTypeMappingDerivationStrategy() throws Exception {
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          xmlIntrospector.getConfiguration().setMappingDerivationStrategy(MappingDerivationStrategy.USE_BIND_TIME_TYPE);
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(Animals.class);
          ElementDescriptor animalsDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use bind time type", true, animalsDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = animalsDescriptor.getElementDescriptors()[0];
          assertEquals("Use bind time type", true, animalDescriptor.isUseBindTimeTypeForMapping());
      }
      
      public void testBindTypeMappingDerivationDotBetwixt() throws Exception {
          String mappingDocument="<?xml version='1.0'?><info>" +
          		"<element name='pet-record'>" +
          		"	<element name='pet' property='pet' mappingDerivation='bind'/>" +
          		"</element>" +
          		"</info>";
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          xmlIntrospector.getConfiguration().setMappingDerivationStrategy(MappingDerivationStrategy.USE_INTROSPECTION_TIME_TYPE);
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(PetBean.class, new InputSource(new StringReader(mappingDocument)));
          ElementDescriptor petDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use type from strategy", true, petDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = petDescriptor.getElementDescriptors()[0];
          assertEquals("Use type from document", true, animalDescriptor.isUseBindTimeTypeForMapping());
      }
      
      public void testIntrospectionTypeMappingDerivationDotBetwixt() throws Exception {
          String mappingDocument="<?xml version='1.0'?><info>" +
          		"<element name='pet-record'>" +
          		"	<element name='pet' property='pet' mappingDerivation='introspection'/>" +
          		"</element>" +
          		"</info>";
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          xmlIntrospector.getConfiguration().setMappingDerivationStrategy(MappingDerivationStrategy.USE_BIND_TIME_TYPE);
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(PetBean.class, new InputSource(new StringReader(mappingDocument)));
          ElementDescriptor petDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use type from strategy", true, petDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = petDescriptor.getElementDescriptors()[0];
          assertEquals("Use type from document", false, animalDescriptor.isUseBindTimeTypeForMapping());
      }
      
      public void testMappingDerivationDotBetwixtAddDefaults() throws Exception {
          String mappingDocument="<?xml version='1.0'?><info>" +
          		"<element name='pet-record'>" +
          		"	<element name='pet' property='pet' mappingDerivation='introspection'/>" +
          		"   <addDefaults/>" +
          		"</element>" +
          		"</info>";
          XMLIntrospector xmlIntrospector = new XMLIntrospector();
          xmlIntrospector.getConfiguration().setMappingDerivationStrategy(MappingDerivationStrategy.USE_BIND_TIME_TYPE);
          XMLBeanInfo xmlBeanInfo = xmlIntrospector.introspect(PetBean.class, new InputSource(new StringReader(mappingDocument)));
          ElementDescriptor petDescriptor = xmlBeanInfo.getElementDescriptor();
          assertEquals("Use type from strategy", true, petDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor animalDescriptor = petDescriptor.getElementDescriptors()[0];
          assertEquals("Use type from document", false, animalDescriptor.isUseBindTimeTypeForMapping());
          ElementDescriptor personDescriptor = petDescriptor.getElementDescriptors()[1];
          assertEquals("Use type from document", true, personDescriptor.isUseBindTimeTypeForMapping());
      }
      
      public void testBindTimeTypeWrite() throws Exception {
          StringWriter out = new StringWriter();
          out.write("<?xml version='1.0'?>");
          
          Animals animals = new Animals();
          animals.addAnimal(new FerretBean("albino", "Lector"));
          animals.addAnimal(new CatBean("Sam", "black"));
          animals.addAnimal(new DogBean("Bobby"));
         
          BeanWriter writer = new BeanWriter(out);
          writer.getXMLIntrospector().getConfiguration()
          		.setMappingDerivationStrategy(MappingDerivationStrategy.USE_BIND_TIME_TYPE);
          writer.getXMLIntrospector().getConfiguration()
          		.setWrapCollectionsInElement(false);
          writer.getBindingConfiguration().setMapIDs(false);
          writer.write(animals);
          
          String expected = "<?xml version='1.0'?>" +
          		"<Animals>" +
          		"	<animal>" +
          		"		<call>Dook</call><colour>albino</colour>" +
          		"		<latinName>Mustela putoris furo</latinName><name>Lector</name>" +
          		"	</animal>" +
          		"	<animal>" +
          		"		<call>Meow</call><colour>black</colour>" +
          		"		<latinName>Felis catus</latinName><name>Sam</name>" +
          		"	</animal>" +
          		"	<animal>" +
          		"		<breed>mongrol</breed><call>Woof</call><latinName>Canis familiaris</latinName>" +
          		"		<name>Bobby</name><pedigree>false</pedigree>" +
          		"	</animal>" +
          		"</Animals>";
          
          xmlAssertIsomorphicContent(parseString(expected), parseString(out));
      }
      
      public void testBindTimeTypeRead() throws Exception {
          String xml = "<?xml version='1.0'?>" +
  		"<Animals>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.FerretBean'>" +
  		"		<call>Dook</call><colour>albino</colour>" +
  		"		<latinName>Mustela putoris furo</latinName><name>Lector</name>" +
  		"	</animal>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.CatBean'>" +
  		"		<call>Meow</call><colour>black</colour>" +
  		"		<latinName>Felis catus</latinName><name>Sam</name>" +
  		"	</animal>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.DogBean'>" +
  		"		<breed>mongrol</breed><call>Woof</call><latinName>Canis familiaris</latinName>" +
  		"		<name>Bobby</name><pedigree>false</pedigree>" +
  		"	</animal>" +
  		"</Animals>";
          
          BeanReader reader = new BeanReader();
          reader.getXMLIntrospector().getConfiguration()
          		.setMappingDerivationStrategy(MappingDerivationStrategy.USE_BIND_TIME_TYPE);
          reader.getXMLIntrospector().getConfiguration()
  			.setWrapCollectionsInElement(false);
          reader.getBindingConfiguration().setMapIDs(false);
          
          reader.registerBeanClass(Animals.class);
          Animals animals = (Animals) reader.parse(new StringReader(xml));
          assertEquals("Expexted three animals", 3, animals.size()); 
          Iterator it=animals.getAnimals(); 
          Animal animalOne = (Animal) it.next();
          assertTrue("Expected ferret", animalOne instanceof FerretBean);
          FerretBean ferretBean = (FerretBean) animalOne;
          assertEquals("Latin name property mapped", "Mustela putoris furo" , ferretBean.getLatinName());
          assertEquals("Call property mapped", "Dook" , ferretBean.getCall());
          assertEquals("Colour property mapped", "albino", ferretBean.getColour());
          assertEquals("Name property mapped", "Lector", ferretBean.getName());
          Animal animalTwo = (Animal) it.next();
          assertTrue("Expected cat", animalTwo instanceof CatBean);
          CatBean catBean = (CatBean) animalTwo;
          assertEquals("Latin name property mapped", "Felis catus" , catBean.getLatinName());
          assertEquals("Call property mapped", "Meow" , catBean.getCall());
          assertEquals("Colour property mapped", "black", catBean.getColour());
          assertEquals("Name property mapped", "Sam", catBean.getName());
          Animal animalThree = (Animal) it.next();
          assertTrue("Expected dog", animalThree instanceof DogBean);
          DogBean dogBean = (DogBean) animalThree;
          assertEquals("Latin name property mapped", "Canis familiaris" , dogBean.getLatinName());
          assertEquals("Call property mapped", "Woof" , dogBean.getCall());
          assertEquals("Breed property mapped", "mongrol", dogBean.getBreed());
          assertEquals("Name property mapped", "Bobby", dogBean.getName());
      }
      
      public void testIntrospectionTimeTypeWrite() throws Exception {
          StringWriter out = new StringWriter();
          out.write("<?xml version='1.0'?>");
          
          Animals animals = new Animals();
          animals.addAnimal(new FerretBean("albino", "Lector"));
          animals.addAnimal(new CatBean("Sam", "black"));
          animals.addAnimal(new DogBean("Bobby"));
         
          BeanWriter writer = new BeanWriter(out);
          writer.getXMLIntrospector().getConfiguration()
          		.setMappingDerivationStrategy(MappingDerivationStrategy.USE_INTROSPECTION_TIME_TYPE);
          writer.getXMLIntrospector().getConfiguration()
          		.setWrapCollectionsInElement(false);
          writer.getBindingConfiguration().setMapIDs(false);
          writer.write(animals);
          
          String expected = "<?xml version='1.0'?><Animals>" +
          		"	<animal><call>Dook</call><latinName>Mustela putoris furo</latinName></animal>" +
          		"	<animal><call>Meow</call><latinName>Felis catus</latinName></animal>" +
          		"	<animal><call>Woof</call><latinName>Canis familiaris</latinName></animal>" +
          		"</Animals>";
          
          xmlAssertIsomorphicContent(parseString(expected), parseString(out));        
      }
      
      public void testIntrospectionTimeTypeRead() throws Exception {
          String xml = "<?xml version='1.0'?>" +
  		"<Animals>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.FerretBean'>" +
  		"		<call>Dook</call><colour>albino</colour>" +
  		"		<latinName>Mustela putoris furo</latinName><name>Lector</name>" +
  		"	</animal>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.CatBean'>" +
  		"		<call>Meow</call><colour>black</colour>" +
  		"		<latinName>Felis catus</latinName><name>Sam</name>" +
  		"	</animal>" +
  		"	<animal className='org.apache.commons.betwixt.io.read.DogBean'>" +
  		"		<breed>mongrol</breed><call>Woof</call><latinName>Canis familiaris</latinName>" +
  		"		<name>Bobby</name><pedigree>false</pedigree>" +
  		"	</animal>" +
  		"</Animals>";
          
          BeanReader reader = new BeanReader();
          reader.getXMLIntrospector().getConfiguration()
          		.setMappingDerivationStrategy(MappingDerivationStrategy.USE_INTROSPECTION_TIME_TYPE);
          reader.getXMLIntrospector().getConfiguration()
  			.setWrapCollectionsInElement(false);
          reader.getBindingConfiguration().setMapIDs(false);
          
          reader.registerBeanClass(Animals.class);
          Animals animals = (Animals) reader.parse(new StringReader(xml));
          assertEquals("Expexted three animals", 3, animals.size()); 
          Iterator it=animals.getAnimals(); 
          Animal animalOne = (Animal) it.next();
          assertTrue("Expected ferret", animalOne instanceof FerretBean);
          FerretBean ferretBean = (FerretBean) animalOne;
          assertEquals("Latin name property mapped", "Mustela putoris furo" , ferretBean.getLatinName());
          assertEquals("Call property mapped", "Dook" , ferretBean.getCall());
          assertNull("Colour property not mapped", ferretBean.getColour());
          assertNull("Name property not mapped", ferretBean.getName());
          Animal animalTwo = (Animal) it.next();
          assertTrue("Expected cat", animalTwo instanceof CatBean);
          CatBean catBean = (CatBean) animalTwo;
          assertEquals("Latin name property mapped", "Felis catus" , catBean.getLatinName());
          assertEquals("Call property mapped", "Meow" , catBean.getCall());
          assertNull("Colour property not mapped", catBean.getColour());
          assertNull("Name property not mapped", catBean.getName());
          Animal animalThree = (Animal) it.next();
          assertTrue("Expected dog", animalThree instanceof DogBean);
          DogBean dogBean = (DogBean) animalThree;
          assertEquals("Latin name property mapped", "Canis familiaris" , dogBean.getLatinName());
          assertEquals("Call property mapped", "Woof" , dogBean.getCall());
          assertNull("Breed property not mapped", dogBean.getBreed());
          assertNull("Name property not mapped", dogBean.getName());
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org