⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mappertest.java

📁 一个javabean的转换与copy非常的好用希望大家好好研究一下
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/*
 * Copyright 2005-2007 the original author or authors.
 *
 * 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 net.sf.dozer.util.mapping;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.dozer.util.mapping.util.TestDataFactory;
import net.sf.dozer.util.mapping.vo.AnotherTestObject;
import net.sf.dozer.util.mapping.vo.AnotherTestObjectPrime;
import net.sf.dozer.util.mapping.vo.Apple;
import net.sf.dozer.util.mapping.vo.Car;
import net.sf.dozer.util.mapping.vo.CustomConverterWrapper;
import net.sf.dozer.util.mapping.vo.CustomConverterWrapperPrime;
import net.sf.dozer.util.mapping.vo.CustomDoubleObject;
import net.sf.dozer.util.mapping.vo.CustomDoubleObjectIF;
import net.sf.dozer.util.mapping.vo.DehydrateTestObject;
import net.sf.dozer.util.mapping.vo.FurtherTestObject;
import net.sf.dozer.util.mapping.vo.FurtherTestObjectPrime;
import net.sf.dozer.util.mapping.vo.HintedOnly;
import net.sf.dozer.util.mapping.vo.HydrateTestObject;
import net.sf.dozer.util.mapping.vo.MethodFieldTestObject;
import net.sf.dozer.util.mapping.vo.MethodFieldTestObject2;
import net.sf.dozer.util.mapping.vo.NoCustomMappingsObject;
import net.sf.dozer.util.mapping.vo.NoCustomMappingsObjectPrime;
import net.sf.dozer.util.mapping.vo.NoDefaultConstructor;
import net.sf.dozer.util.mapping.vo.NoReadMethod;
import net.sf.dozer.util.mapping.vo.NoReadMethodPrime;
import net.sf.dozer.util.mapping.vo.NoSuperClass;
import net.sf.dozer.util.mapping.vo.NoWriteMethod;
import net.sf.dozer.util.mapping.vo.NoWriteMethodPrime;
import net.sf.dozer.util.mapping.vo.OneWayObject;
import net.sf.dozer.util.mapping.vo.OneWayObjectPrime;
import net.sf.dozer.util.mapping.vo.Orange;
import net.sf.dozer.util.mapping.vo.SubClass;
import net.sf.dozer.util.mapping.vo.SubClassPrime;
import net.sf.dozer.util.mapping.vo.TestCustomConverterHashMapObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterHashMapPrimeObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterObjectPrime;
import net.sf.dozer.util.mapping.vo.TestObject;
import net.sf.dozer.util.mapping.vo.TestObjectPrime;
import net.sf.dozer.util.mapping.vo.TestReferenceFoo;
import net.sf.dozer.util.mapping.vo.TestReferenceFooPrime;
import net.sf.dozer.util.mapping.vo.TestReferenceObject;
import net.sf.dozer.util.mapping.vo.TestReferencePrimeObject;
import net.sf.dozer.util.mapping.vo.TheFirstSubClass;
import net.sf.dozer.util.mapping.vo.Van;
import net.sf.dozer.util.mapping.vo.Vehicle;
import net.sf.dozer.util.mapping.vo.WeirdGetter;
import net.sf.dozer.util.mapping.vo.WeirdGetter2;
import net.sf.dozer.util.mapping.vo.WeirdGetterPrime;
import net.sf.dozer.util.mapping.vo.WeirdGetterPrime2;
import net.sf.dozer.util.mapping.vo.deep.DestDeepObj;
import net.sf.dozer.util.mapping.vo.deep.HomeDescription;
import net.sf.dozer.util.mapping.vo.deep.House;
import net.sf.dozer.util.mapping.vo.deep.Person;
import net.sf.dozer.util.mapping.vo.deep.Room;
import net.sf.dozer.util.mapping.vo.deep.SrcDeepObj;
import net.sf.dozer.util.mapping.vo.deep.SrcNestedDeepObj;
import net.sf.dozer.util.mapping.vo.inheritance.AnotherSubClass;
import net.sf.dozer.util.mapping.vo.inheritance.AnotherSubClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.BaseSubClassCombined;
import net.sf.dozer.util.mapping.vo.inheritance.GenericAbstractSuper;
import net.sf.dozer.util.mapping.vo.inheritance.GenericIF;
import net.sf.dozer.util.mapping.vo.inheritance.S2Class;
import net.sf.dozer.util.mapping.vo.inheritance.S2ClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.SClass;
import net.sf.dozer.util.mapping.vo.inheritance.SClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.Specific3;
import net.sf.dozer.util.mapping.vo.inheritance.SpecificObject;
import net.sf.dozer.util.mapping.vo.inheritance.WrapperSpecific;
import net.sf.dozer.util.mapping.vo.inheritance.WrapperSpecificPrime;
import net.sf.dozer.util.mapping.vo.map.CustomMap;
import net.sf.dozer.util.mapping.vo.map.CustomMapIF;
import net.sf.dozer.util.mapping.vo.map.MapTestObject;
import net.sf.dozer.util.mapping.vo.map.MapTestObjectPrime;
import net.sf.dozer.util.mapping.vo.map.MapToProperty;
import net.sf.dozer.util.mapping.vo.map.PropertyToMap;
import net.sf.dozer.util.mapping.vo.self.Account;
import net.sf.dozer.util.mapping.vo.self.SimpleAccount;

import org.apache.commons.lang.SerializationUtils;

/**
 * @author garsombke.franz
 * @author sullins.ben
 * @author tierney.matt
 * 
 * Having good unit tests is very important for the bean mapper since there are so many mapping combinations.
 */
public class MapperTest extends DozerTestBase {
  private static MapperIF mapper;

  protected void setUp() throws Exception {
    super.setUp();
    if (mapper == null) {
      mapper = getNewMapper(new String[] { "dozerBeanMapping.xml" });
    }
  }

  public void testNoSourceObject() throws Exception {
    try {
      mapper.map(null, TestObjectPrime.class);
    } catch (MappingException e) {
      assertEquals("source object must not be null", e.getMessage());
    }
  }

  public void testNoDestinationClass() throws Exception {
    try {
      mapper.map(new TestObjectPrime(), null);
    } catch (MappingException e) {
      assertEquals("destination class must not be null", e.getMessage());
    }
  }

  public void testNoDefaultConstructor() throws Exception {
    try {
      mapper.map("test", NoDefaultConstructor.class);
    } catch (MappingException e) {

      assertEquals("java.lang.InstantiationException: net.sf.dozer.util.mapping.vo.NoDefaultConstructor", e
          .getMessage());

    }
  }

  public void testNoSourceValueIterateFieldMap() throws Exception {
    DehydrateTestObject inputDto = new DehydrateTestObject();
    HydrateTestObject hto = (HydrateTestObject) mapper.map(inputDto, HydrateTestObject.class);
    assertEquals(TestDataFactory.getExpectedTestNoSourceValueIterateFieldMapHydrateTestObject(), hto);
  }

  public void testCustomGetterSetterMap() throws Exception {
    WeirdGetter inputDto = new WeirdGetter();
    inputDto.placeValue("theValue");
    inputDto.setWildValue("wild");

    WeirdGetterPrime prime = (WeirdGetterPrime) mapper.map(inputDto, WeirdGetterPrime.class);
    assertNull(prime.getWildValue()); // testing global wildcard, expect this to be null
    assertEquals(inputDto.buildValue(), prime.getValue());

    inputDto = (WeirdGetter) mapper.map(prime, WeirdGetter.class);
    assertEquals(inputDto.buildValue(), prime.getValue());

    WeirdGetterPrime2 inputDto2 = new WeirdGetterPrime2();
    inputDto2.placeValue("theValue");
    WeirdGetter2 prime2 = (WeirdGetter2) mapper.map(inputDto2, WeirdGetter2.class);
    assertEquals(inputDto2.buildValue(), prime2.getValue());

    inputDto2 = (WeirdGetterPrime2) mapper.map(prime2, WeirdGetterPrime2.class);
    assertEquals(inputDto2.buildValue(), prime2.getValue());

  }

  public void testIncompatibleMapping() throws Exception {
    mapper.map(new Vehicle(), TestObject.class);
    // can not assert anything...no exception should be thrown and we should have a log statement
  }

  public void testNoClassMappings() throws Exception {
    // Should attempt mapping even though it is not in the beanmapping.xml file
    NoCustomMappingsObjectPrime dest1 = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestNoClassMappingsNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest1, NoCustomMappingsObject.class);
    NoCustomMappingsObjectPrime dest3 = (NoCustomMappingsObjectPrime) mapper.map(source,
        NoCustomMappingsObjectPrime.class);
    assertEquals(dest1, dest3);

    // This tests that we implicitly map an inner object to an inner object without defining it in the mapping file
    TestObject to = new TestObject();
    to.setNoMappingsObj(TestDataFactory.getInputTestNoClassMappingsNoCustomMappingsObject());
    TestObjectPrime dest2 = (TestObjectPrime) mapper.map(to, TestObjectPrime.class);
    TestObject source2 = (TestObject) mapper.map(dest2, TestObject.class);
    TestObjectPrime dest4 = (TestObjectPrime) mapper.map(source2, TestObjectPrime.class);
    assertEquals(dest2, dest4);
  }

  public void testMapField() throws Exception {
    NoCustomMappingsObjectPrime dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestMapFieldWithMapNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);

    NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    NoCustomMappingsObjectPrime dest2 = (NoCustomMappingsObjectPrime) mapper.map(source,
        NoCustomMappingsObjectPrime.class);

    assertEquals(dest2, dest);

    dest = (NoCustomMappingsObjectPrime) mapper.map(new NoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);

    // empty Map
    dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestMapFieldWithEmptyMapNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);
  }

  public void testSetField() throws Exception {
    // basic set --> set
    NoCustomMappingsObjectPrime dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestSetFieldWithSetNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    NoCustomMappingsObjectPrime dest2 = (NoCustomMappingsObjectPrime) mapper.map(source,
        NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);

    // null set --> set
    dest = (NoCustomMappingsObjectPrime) mapper.map(new NoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);

    // empty set --> set
    dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestSetFieldWithSetEmptyCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);

    // complex type set -->
    dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
        .getInputTestSetFieldComplexSetNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
    source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
    dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
    assertEquals(dest2, dest);
  }

  public void testListField() throws Exception {
    // test empty list --> empty list
    TestObjectPrime dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListFieldEmptyListTestObject(),
        TestObjectPrime.class);
    TestObject source = (TestObject) mapper.map(dest, TestObject.class);
    TestObjectPrime dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
    assertEquals(dest2, dest);

    // test empty array --> empty list
    dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListFieldArrayListTestObject(),
        TestObjectPrime.class);
    source = (TestObject) mapper.map(dest, TestObject.class);
    dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
    assertEquals(dest2, dest);
  }

  public void testListUsingDestHint() throws Exception {
    TestObjectPrime dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListUsingDestHintTestObject(),
        TestObjectPrime.class);
    TestObject source = (TestObject) mapper.map(dest, TestObject.class);
    TestObjectPrime dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
    assertEquals(dest, dest2);
  }

  public void testExcludeFields() throws Exception {
    // Map
    TestObjectPrime prime = (TestObjectPrime) mapper.map(TestDataFactory.getInputGeneralMappingTestObject(),
        TestObjectPrime.class);
    assertEquals("excludeMe", prime.getExcludeMe());
    assertEquals("excludeMeOneWay", prime.getExcludeMeOneWay());
    // map back
    TestObject to = (TestObject) mapper.map( prime, TestObject.class);
    assertNull(to.getExcludeMe());
    assertEquals("excludeMeOneWay", to.getExcludeMeOneWay());
  }

  public void testGeneralMapping() throws Exception {
    // Map
    TestObject to = TestDataFactory.getInputGeneralMappingTestObject();
    TestObjectPrime prime = (TestObjectPrime) mapper.map(to, TestObjectPrime.class);
    // valdidate that we copied by object reference -
    TestObject source = (TestObject) mapper.map(prime, TestObject.class);
    TestObjectPrime prime2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
    assertEquals(prime2, prime);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -