org.soybeanMilk.test.unit.web.TestWebGenericConverter.java Source code

Java tutorial

Introduction

Here is the source code for org.soybeanMilk.test.unit.web.TestWebGenericConverter.java

Source

/**
 * 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.soybeanMilk.test.unit.web;

import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;
import org.soybeanMilk.core.bean.ConvertException;
import org.soybeanMilk.core.bean.Converter;
import org.soybeanMilk.core.bean.GenericConvertException;
import org.soybeanMilk.core.bean.MapConvertException;
import org.soybeanMilk.web.WebObjectSource;
import org.soybeanMilk.web.bean.WebGenericConverter;
import org.soybeanMilk.web.os.DefaultWebObjectSource;
import org.soybeanMilk.web.os.ParamFilterMap;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;

/**
 * @author earthangry@gmail.com
 * @date 2012-5-10
 */
public class TestWebGenericConverter {
    private WebGenericConverter converter;

    @Before
    public void setUp() {
        converter = new WebGenericConverter();
    }

    @Test
    public void convert_arrayToNotArrayObject() throws Exception {
        String[] src = new String[] { "12345", "56789" };

        Integer dest = converter.convert(src, int.class);
        Assert.assertEquals(src[0], dest.toString());
    }

    @Test
    public void convert_arrayToNotArrayObject_srcArrayEmpty() throws Exception {
        String[] src = new String[0];

        Integer dest = converter.convert(src, Integer.class);
        Assert.assertNull(dest);
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_srcElementSingleStringArray() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] name = new String[] { "jack" };
        String[] age = new String[] { "15" };
        String[] birth = new String[] { "1900-10-21" };

        src.put("name", name);
        src.put("age", age);
        src.put("birth", birth);

        JavaBean dest = converter.convert(src, JavaBean.class);

        Assert.assertEquals(name[0], dest.getName());
        Assert.assertEquals(new Integer(age[0]), dest.getAge());
        Assert.assertEquals(new SimpleDateFormat("yyyy-MM-dd").parse(birth[0]), dest.getBirth());
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_srcElementMultiStringArray() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] name = new String[] { "jack", "tom" };
        String[] age = new String[] { "15", "18" };
        String[] birth = new String[] { "1900-10-21", "1900-10-22" };

        src.put("name", name);
        src.put("age", age);
        src.put("birth", birth);

        JavaBean dest = converter.convert(src, JavaBean.class);

        Assert.assertEquals("jack", dest.getName());
        Assert.assertEquals(age[0], dest.getAge().toString());
        Assert.assertEquals(birth[0], new SimpleDateFormat("yyyy-MM-dd").format(dest.getBirth()));
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_collectionProperty_simpleKeyArrayValueMap()
            throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] id = new String[] { "1" };
        String[] name = new String[] { "jack" };
        String[] simpleCollectionProperty = new String[] { "1", "3", "9" };

        String[] propsJavaBean2Collection_id = new String[] { "2", "5", "7" };
        String[] propsJavaBean2Collection_name = new String[] { "aaa", "bbb", "ccc" };

        String[] propsJavaBean2Collection_propsJavaBean_name = new String[] { "1-1", "1-2", "1-3" };
        String[] propsJavaBean2Collection_propsJavaBean_age = new String[] { "11", "12", "13" };

        src.put("id", id);
        src.put("name", name);

        src.put("simpleArray", simpleCollectionProperty);
        src.put("simpleList", simpleCollectionProperty);
        src.put("simpleSet", simpleCollectionProperty);

        src.put("javaBean2Array.id", propsJavaBean2Collection_id);
        src.put("javaBean2Array.name", propsJavaBean2Collection_name);
        src.put("javaBean2Array.javaBean.name", propsJavaBean2Collection_propsJavaBean_name);
        src.put("javaBean2Array.javaBean.age", propsJavaBean2Collection_propsJavaBean_age);

        src.put("javaBean2List.id", propsJavaBean2Collection_id);
        src.put("javaBean2List.name", propsJavaBean2Collection_name);
        src.put("javaBean2List.javaBean.name", propsJavaBean2Collection_propsJavaBean_name);
        src.put("javaBean2List.javaBean.age", propsJavaBean2Collection_propsJavaBean_age);

        src.put("javaBean2Set.id", propsJavaBean2Collection_id);
        src.put("javaBean2Set.name", propsJavaBean2Collection_name);
        src.put("javaBean2Set.javaBean.name", propsJavaBean2Collection_propsJavaBean_name);
        src.put("javaBean2Set.javaBean.age", propsJavaBean2Collection_propsJavaBean_age);

        ComplexJavaBean dest = converter.convert(src, ComplexJavaBean.class);

        Assert.assertEquals(Integer.parseInt(id[0]), dest.getId());
        Assert.assertEquals(name[0], dest.getName());

        {
            Integer[] p = dest.getSimpleArray();
            for (int i = 0; i < p.length; i++)
                Assert.assertEquals(new Integer(simpleCollectionProperty[i]), p[i]);
        }
        {
            List<Integer> p = dest.getSimpleList();
            for (int i = 0; i < p.size(); i++)
                Assert.assertEquals(new Integer(simpleCollectionProperty[i]), p.get(i));
        }

        {
            Set<Integer> p = dest.getSimpleSet();
            for (Integer it : p) {
                int idx = -1;
                for (int i = 0; i < simpleCollectionProperty.length; i++)
                    if (new Integer(simpleCollectionProperty[i]).equals(it))
                        idx = i;

                Assert.assertTrue(idx > -1);
            }
        }

        {
            JavaBean2[] p = dest.getJavaBean2Array();

            for (int i = 0; i < p.length; i++) {
                Assert.assertEquals(Integer.parseInt(propsJavaBean2Collection_id[i]), p[i].getId());
                Assert.assertEquals(propsJavaBean2Collection_name[i], p[i].getName());
                Assert.assertEquals(propsJavaBean2Collection_propsJavaBean_name[i], p[i].getJavaBean().getName());
                Assert.assertEquals(propsJavaBean2Collection_propsJavaBean_age[i],
                        p[i].getJavaBean().getAge().toString());
            }
        }

        {
            List<JavaBean2> p = dest.getJavaBean2List();

            for (int i = 0; i < p.size(); i++) {
                Assert.assertEquals(Integer.parseInt(propsJavaBean2Collection_id[i]), p.get(i).getId());
                Assert.assertEquals(propsJavaBean2Collection_name[i], p.get(i).getName());
                Assert.assertEquals(propsJavaBean2Collection_propsJavaBean_name[i],
                        p.get(i).getJavaBean().getName());
                Assert.assertEquals(propsJavaBean2Collection_propsJavaBean_age[i],
                        p.get(i).getJavaBean().getAge().toString());
            }
        }

        {
            Set<JavaBean2> p = dest.getJavaBean2Set();
            for (JavaBean2 jb : p) {
                int idx = -1;
                for (int i = 0; i < propsJavaBean2Collection_id.length; i++) {
                    if (Integer.parseInt(propsJavaBean2Collection_id[i]) == jb.getId()
                            && propsJavaBean2Collection_name[i].equals(jb.getName())
                            && propsJavaBean2Collection_propsJavaBean_name[i].equals(jb.getJavaBean().getName())
                            && propsJavaBean2Collection_propsJavaBean_age[i]
                                    .equals(jb.getJavaBean().getAge().toString()))
                        idx = i;
                }

                Assert.assertTrue(idx > -1);
            }
        }
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_srcArrayPropertyContainIllegalValue() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] id = new String[] { "1" };
        String[] name = new String[] { "jack" };
        String[] simpleCollectionProperty = new String[] { "1", "illegalValue", "9" };

        src.put("id", id);
        src.put("name", name);

        src.put("simpleArray", simpleCollectionProperty);

        MapConvertException re = null;
        try {
            converter.convert(src, ComplexJavaBean.class);
        } catch (MapConvertException e) {
            re = e;
        }

        Assert.assertEquals("simpleArray", re.getKey());
        Assert.assertEquals("illegalValue", re.getSourceObject());
        Assert.assertEquals(Integer.class, re.getTargetType());
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_srcContainInexistentJavaBeanProperty() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] id = new String[] { "1" };
        String[] name = new String[] { "jack" };
        String[] simpleCollectionProperty = new String[] { "1", "3", "9" };

        src.put("id", id);
        src.put("name", name);
        src.put("simpleArray", simpleCollectionProperty);
        src.put("notAnyProperty", "aaaajskjewr");

        ComplexJavaBean dest = converter.convert(src, ComplexJavaBean.class);

        Assert.assertEquals(id[0], dest.getId() + "");
        Assert.assertEquals(name[0], dest.getName());
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_srcContainInexistentSubJavaBeanProperty_inSubArrayProperty()
            throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();
        String[] id = new String[] { "1" };
        String[] name = new String[] { "jack" };

        String[] cmplexCollectionProperty_id = new String[] { "2", "5", "7" };
        String[] cmplexCollectionProperty_name = new String[] { "aaa", "bbb", "ccc" };

        src.put("id", id);
        src.put("name", name);

        src.put("javaBean2Array.id", cmplexCollectionProperty_id);
        src.put("javaBean2Array.name", cmplexCollectionProperty_name);
        src.put("javaBean2Array.notExistsProperty", cmplexCollectionProperty_name);

        GenericConvertException re = null;
        try {
            converter.convert(src, ComplexJavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find property \"notExistsProperty\"")));
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_paramFilterMap() throws Exception {
        Map<String, Object> src = new ParamFilterMap<Object>();

        String[] name = new String[] { "jack" };
        String[] age = new String[] { "15" };
        String[] birth = new String[] { "1900-10-21" };

        src.put("name", name);
        src.put("age", age);
        src.put("birth", birth);
        src.put("illegalProperty", "1");

        GenericConvertException re = null;

        try {
            converter.convert(src, JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue(re.getMessage().startsWith("can not find property \"illegalProperty\""));
    }

    @Test
    public void convert_noSupportConverter_mapToGeneric_JavaBeanIsGeneric() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String[] id = { "11" };
        String[] property = { "12", "13" };

        src.put("id", id);
        src.put("list", property);
        src.put("array", property);
        src.put("obj", property[0]);

        GenericJavaBeanSub dest = converter.convert(src, GenericJavaBeanSub.class);

        Assert.assertEquals(new Integer(id[0]), dest.getId());
        Assert.assertEquals(new Double(property[0]), dest.getObj());
        for (int i = 0; i < property.length; i++) {
            Assert.assertEquals(new Double(property[i]), dest.getList().get(i));
            Assert.assertEquals(new Double(property[i]), dest.getArray()[i]);

        }
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_customType_stringArray() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String name = "aa";
        String age = "11";
        String birth = "1900-07-21";

        src.put("name", name);
        src.put("age", age);
        src.put("birth", birth);

        src.put("class", new String[] { JavaBean.class.getName(), JavaBean2.class.getName() });

        JavaBean dest = converter.convert(src, null);

        Assert.assertEquals(name, dest.getName());
    }

    @Test
    public void convert_noSupportConverter_mapToJavaBean_customType_classArray() throws Exception {
        Map<String, Object> src = new HashMap<String, Object>();

        String name = "aa";
        String age = "11";
        String birth = "1900-07-21";

        src.put("name", name);
        src.put("age", age);
        src.put("birth", birth);

        src.put("class", new Type[] { JavaBean.class, JavaBean2.class });

        JavaBean dest = converter.convert(src, null);

        Assert.assertEquals(name, dest.getName());
    }

    @Test
    public void convert_requestToTarget_noConverter() throws Exception {
        GenericConvertException re = null;

        try {
            converter.convert(new MockHttpServletRequest(), JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find Converter for converting")));
    }

    @Test
    public void convert_requestToTarget_hasConverter() throws Exception {
        final JavaBean bean = new JavaBean();

        converter.addConverter(HttpServletRequest.class, JavaBean.class, new Converter() {
            @SuppressWarnings("unchecked")
            public <T> T convert(Object sourceObj, Type targetType) throws ConvertException {
                return (T) bean;
            }
        });

        JavaBean re = converter.convert(new MockHttpServletRequest(), JavaBean.class);

        Assert.assertTrue((re == bean));
    }

    @Test
    public void convert_sessionToTarget_noConverter() throws Exception {
        GenericConvertException re = null;

        try {
            converter.convert(new MockHttpServletRequest().getSession(), JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find Converter for converting")));
    }

    @Test
    public void convert_sessionToTarget_hasConverter() throws Exception {
        final JavaBean bean = new JavaBean();

        converter.addConverter(HttpSession.class, JavaBean.class, new Converter() {
            @SuppressWarnings("unchecked")
            public <T> T convert(Object sourceObj, Type targetType) throws ConvertException {
                return (T) bean;
            }
        });

        JavaBean re = converter.convert(new MockHttpServletRequest().getSession(), JavaBean.class);

        Assert.assertTrue((re == bean));
    }

    @Test
    public void convert_servletContextToTarget_noConverter() throws Exception {
        GenericConvertException re = null;

        try {
            converter.convert(new MockServletContext(), JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find Converter for converting")));
    }

    @Test
    public void convert_servletContextToTarget_hasConverter() throws Exception {
        final JavaBean bean = new JavaBean();

        converter.addConverter(ServletContext.class, JavaBean.class, new Converter() {
            @SuppressWarnings("unchecked")
            public <T> T convert(Object sourceObj, Type targetType) throws ConvertException {
                return (T) bean;
            }
        });

        JavaBean re = converter.convert(new MockServletContext(), JavaBean.class);

        Assert.assertTrue((re == bean));
    }

    @Test
    public void convert_responseToTarget_noConverter() throws Exception {
        GenericConvertException re = null;

        try {
            converter.convert(new MockHttpServletResponse(), JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find Converter for converting")));
    }

    @Test
    public void convert_responseToTarget_hasConverter() throws Exception {
        final JavaBean bean = new JavaBean();

        converter.addConverter(HttpServletResponse.class, JavaBean.class, new Converter() {
            @SuppressWarnings("unchecked")
            public <T> T convert(Object sourceObj, Type targetType) throws ConvertException {
                return (T) bean;
            }
        });

        JavaBean re = converter.convert(new MockHttpServletResponse(), JavaBean.class);

        Assert.assertTrue((re == bean));
    }

    @Test
    public void convert_objectSourceToTarget_noConverter() throws Exception {
        GenericConvertException re = null;

        try {
            converter.convert(new DefaultWebObjectSource(), JavaBean.class);
        } catch (GenericConvertException e) {
            re = e;
        }

        Assert.assertTrue((re.getMessage().startsWith("can not find Converter for converting")));
    }

    @Test
    public void convert_objectSourceToTarget_hasConverter() throws Exception {
        final JavaBean bean = new JavaBean();

        converter.addConverter(WebObjectSource.class, JavaBean.class, new Converter() {
            @SuppressWarnings("unchecked")
            public <T> T convert(Object sourceObj, Type targetType) throws ConvertException {
                return (T) bean;
            }
        });

        JavaBean re = converter.convert(new DefaultWebObjectSource(), JavaBean.class);

        Assert.assertTrue((re == bean));
    }

    public static class JavaBean implements Comparable<JavaBean> {
        private String name;
        private Integer age;
        private Date birth;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public Date getBirth() {
            return birth;
        }

        public void setBirth(Date birth) {
            this.birth = birth;
        }

        //@Override
        public int compareTo(JavaBean o) {
            if (o == null)
                return 1;

            int re = this.name.compareTo(o.getName());
            if (re == 0)
                re = this.age.compareTo(o.getAge());
            if (re == 0)
                re = this.birth.compareTo(o.getBirth());

            return re;
        }

        //@Override
        public String toString() {
            return "JavaBean [name=" + name + ", age=" + age + ", birth=" + birth + "]";
        }
    }

    public static class JavaBean2 implements Comparable<JavaBean2> {
        private int id;
        private String name;
        private JavaBean javaBean;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public JavaBean getJavaBean() {
            return javaBean;
        }

        public void setJavaBean(JavaBean javaBean) {
            this.javaBean = javaBean;
        }

        //@Override
        public int compareTo(JavaBean2 o) {
            if (o == null)
                return 1;

            int re = this.id == o.id ? 0 : (this.id > o.id ? 1 : -1);
            if (re == 0)
                re = this.name.compareTo(o.name);

            return re;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            JavaBean2 other = (JavaBean2) obj;
            if (id != other.id)
                return false;
            if (javaBean == null) {
                if (other.javaBean != null)
                    return false;
            } else if (!javaBean.equals(other.javaBean))
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }

        //@Override
        public String toString() {
            return "JavaBean2 [id=" + id + ", name=" + name + ", javaBean=" + javaBean + "]";
        }
    }

    public static class ComplexJavaBean implements Comparable<ComplexJavaBean> {
        private int id;
        private String name;

        private Integer[] simpleArray;

        private List<Integer> simpleList;

        private Set<Integer> simpleSet;

        private Map<String, Integer> simpleMap;

        private JavaBean2[] javaBean2Array;

        private List<JavaBean2> javaBean2List;

        private Set<JavaBean2> javaBean2Set;

        private Map<Integer, JavaBean2> javaBean2Map;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer[] getSimpleArray() {
            return simpleArray;
        }

        public void setSimpleArray(Integer[] simpleArray) {
            this.simpleArray = simpleArray;
        }

        public JavaBean2[] getJavaBean2Array() {
            return javaBean2Array;
        }

        public void setJavaBean2Array(JavaBean2[] javaBean2Array) {
            this.javaBean2Array = javaBean2Array;
        }

        public List<JavaBean2> getJavaBean2List() {
            return javaBean2List;
        }

        public void setJavaBean2List(List<JavaBean2> javaBean2List) {
            this.javaBean2List = javaBean2List;
        }

        public Map<String, Integer> getSimpleMap() {
            return simpleMap;
        }

        public void setSimpleMap(Map<String, Integer> simpleMap) {
            this.simpleMap = simpleMap;
        }

        public Set<JavaBean2> getJavaBean2Set() {
            return javaBean2Set;
        }

        public void setJavaBean2Set(Set<JavaBean2> javaBean2Set) {
            this.javaBean2Set = javaBean2Set;
        }

        public List<Integer> getSimpleList() {
            return simpleList;
        }

        public void setSimpleList(List<Integer> simpleList) {
            this.simpleList = simpleList;
        }

        public Set<Integer> getSimpleSet() {
            return simpleSet;
        }

        public void setSimpleSet(Set<Integer> simpleSet) {
            this.simpleSet = simpleSet;
        }

        public Map<Integer, JavaBean2> getJavaBean2Map() {
            return javaBean2Map;
        }

        public void setJavaBean2Map(Map<Integer, JavaBean2> javaBean2Map) {
            this.javaBean2Map = javaBean2Map;
        }

        //@Override
        public int compareTo(ComplexJavaBean o) {
            if (o == null)
                return 1;

            int re = this.id == o.id ? 0 : (this.id > o.id ? 1 : -1);
            if (re == 0)
                re = this.name.compareTo(o.name);

            return re;
        }
    }

    public static class GenericJavaBean<T> {
        private Integer id;
        private List<T> list;
        private T[] array;
        private T obj;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public List<T> getList() {
            return list;
        }

        public void setList(List<T> list) {
            this.list = list;
        }

        public T[] getArray() {
            return array;
        }

        public void setArray(T[] array) {
            this.array = array;
        }

        public T getObj() {
            return obj;
        }

        public void setObj(T obj) {
            this.obj = obj;
        }
    }

    public static class GenericJavaBeanSub extends GenericJavaBean<Double> {
    }
}