Author: cbegin
Date: Sat Dec  5 02:22:23 2009
New Revision: 887483

URL: http://svn.apache.org/viewvc?rev=887483&view=rev
Log:
IBATIS-686  Unit tests:  Solution for enums is to use toString in the OGJL.  
Not entirely ideal, but it's a simple approach that works without hacking OGNL. 
 Perhaps a more intuitive solution in the future.

Added:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/CreateDB.sql
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,15 @@
+create table person (
+  id int,
+  firstName varchar(100),
+  lastName varchar(100),
+  personType varchar(100) DEFAULT NULL
+);
+
+INSERT INTO person (id, firstName, lastName, personType)
+VALUES (1, 'John', 'Smith', 'DIRECTOR');
+
+INSERT INTO person (id, firstName, lastName, personType)
+VALUES (2, 'Christian', 'Poitras', null);
+
+INSERT INTO person (id, firstName, lastName, personType)
+VALUES (3, 'Clinton', 'Begin', 'EMPLOYEE');

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/EnumWithOgnlTest.java
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,95 @@
+package org.apache.ibatis.submitted.ognl_enum;
+
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.List;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.jdbc.ScriptRunner;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.apache.ibatis.submitted.ognl_enum.Person.Type;
+import org.apache.ibatis.submitted.ognl_enum.PersonMapper.PersonType;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class EnumWithOgnlTest {
+    
+    private static SqlSessionFactory sqlSessionFactory;
+    
+    @BeforeClass
+    public static void initDatabase() throws Exception {
+        Connection conn = null;
+
+        try {
+            Class.forName("org.hsqldb.jdbcDriver");
+            conn = DriverManager.getConnection("jdbc:hsqldb:mem:ognl_enum", 
"sa",
+                    "");
+
+            Reader reader = 
Resources.getResourceAsReader("org/apache/ibatis/submitted/ognl_enum/CreateDB.sql");
+
+            ScriptRunner runner = new ScriptRunner(conn);
+            runner.setLogWriter(null);
+            runner.setErrorLogWriter(new PrintWriter(System.err));
+            runner.runScript(reader);
+            conn.commit();
+            reader.close();
+
+            reader = 
Resources.getResourceAsReader("org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml");
+            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
+            reader.close();
+        } finally {
+            if (conn != null) {
+                conn.close();
+            }
+        }
+    }
+    
+    @Test
+    public void testEnumWithOgnl() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+        List<Person> persons = personMapper.selectAllByType(null);
+        Assert.assertEquals("Persons must contain 3 persons", 3, 
persons.size());
+    }
+    @Test
+    public void testEnumWithOgnlDirector() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+        List<Person> persons = 
personMapper.selectAllByType(Person.Type.DIRECTOR);
+        Assert.assertEquals("Persons must contain 1 persons", 1, 
persons.size());
+    }
+    @Test
+    public void testEnumWithOgnlDirectorNameAttribute() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+        List<Person> persons = 
personMapper.selectAllByTypeNameAttribute(Person.Type.DIRECTOR);
+        Assert.assertEquals("Persons must contain 1 persons", 1, 
persons.size());
+    }
+    @Test
+    public void testEnumWithOgnlDirectorWithInterface() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+        List<Person> persons = personMapper.selectAllByTypeWithInterface(new 
PersonType() {
+            public Type getType() {
+                return Person.Type.DIRECTOR;
+            }
+        });
+        Assert.assertEquals("Persons must contain 1 persons", 1, 
persons.size());
+    }
+    @Test
+    public void testEnumWithOgnlDirectorNameAttributeWithInterface() {
+        SqlSession sqlSession = sqlSessionFactory.openSession();
+        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+        List<Person> persons = 
personMapper.selectAllByTypeNameAttributeWithInterface(new PersonType() {
+            public Type getType() {
+                return Person.Type.DIRECTOR;
+            }
+        });
+        Assert.assertEquals("Persons must contain 1 persons", 1, 
persons.size());
+    }
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.java
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,30 @@
+package org.apache.ibatis.submitted.ognl_enum;
+
+public class Person {
+    public enum Type {
+        EMPLOYEE,
+        DIRECTOR
+    }
+    
+    private Long id;
+    private String firstName;
+    private String lastName;
+    public String getFirstName() {
+        return firstName;
+    }
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+    public String getLastName() {
+        return lastName;
+    }
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+    public Long getId() {
+        return id;
+    }
+    public void setId(Long id) {
+        this.id = id;
+    }
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/Person.xml
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE mapper
+    PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd";>
+
+<mapper namespace="org.apache.ibatis.submitted.ognl_enum.PersonMapper">
+    
+    <resultMap id="personMap" type="Person">
+        <id property="id" column="id"/>
+        <result property="firstName" column="firstName"/>
+        <result property="lastName" column="lastName"/>
+    </resultMap>
+    
+    
+    <select id="selectAllByType" resultMap="personMap" 
parameterType="org.apache.ibatis.submitted.ognl_enum.Person$Type">
+        SELECT id, firstName, lastName, personType
+        FROM person
+        <where>
+            <if test="_parameter != null and _parameter.toString() == 
'EMPLOYEE'">
+                AND personType = #{type}
+            </if>
+            <if test="_parameter != null and _parameter.toString() == 
'DIRECTOR'">
+                AND personType = #{type}
+            </if>
+        </where>
+    </select>
+    <select id="selectAllByTypeNameAttribute" resultMap="personMap" 
parameterType="org.apache.ibatis.submitted.ognl_enum.Person$Type">
+        SELECT id, firstName, lastName, personType
+        FROM person
+        <where>
+            <if test="name == 'EMPLOYEE'">
+                AND personType = #{type}
+            </if>
+            <if test="name == 'DIRECTOR'">
+                AND personType = #{type}
+            </if>
+        </where>
+    </select>
+    
+    <select id="selectAllByTypeWithInterface" resultMap="personMap" 
parameterType="org.apache.ibatis.submitted.ognl_enum.PersonMapper$PersonType">
+        SELECT id, firstName, lastName, personType
+        FROM person
+        <where>
+            <if test="type.toString() == 'EMPLOYEE'">
+                AND personType = #{type}
+            </if>
+            <if test="type.toString() == 'DIRECTOR'">
+                AND personType = #{type}
+            </if>
+        </where>
+    </select>
+    <select id="selectAllByTypeNameAttributeWithInterface" 
resultMap="personMap" 
parameterType="org.apache.ibatis.submitted.ognl_enum.PersonMapper$PersonType">
+        SELECT id, firstName, lastName, personType
+        FROM person
+        <where>
+            <if test="type.toString() == 'EMPLOYEE'">
+                AND personType = #{type}
+            </if>
+            <if test="type.toString() == 'DIRECTOR'">
+                AND personType = #{type}
+            </if>
+        </where>
+    </select>
+</mapper>

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/PersonMapper.java
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,15 @@
+package org.apache.ibatis.submitted.ognl_enum;
+
+import java.util.List;
+
+public interface PersonMapper {
+    
+    public interface PersonType {
+        public Person.Type getType();
+    }
+    
+    public List<Person> selectAllByType(Person.Type type);
+    public List<Person> selectAllByTypeNameAttribute(Person.Type type);
+    public List<Person> selectAllByTypeWithInterface(PersonType personType);
+    public List<Person> selectAllByTypeNameAttributeWithInterface(PersonType 
personType);
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml?rev=887483&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/ognl_enum/ibatisConfig.xml
 Sat Dec  5 02:22:23 2009
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE configuration
+    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd";>
+
+<configuration>
+    <typeAliases>
+        <typeAlias alias="Person" 
type="org.apache.ibatis.submitted.ognl_enum.Person"/>
+    </typeAliases>
+    
+    <environments default="test">
+        <environment id="test">
+            <transactionManager type="JDBC"></transactionManager>
+            <dataSource type="UNPOOLED">
+                <property name="driver" value="org.hsqldb.jdbcDriver"/>
+                <property name="url" value="jdbc:hsqldb:mem:ognl_enum"/>
+                <property name="username" value="sa"/>
+            </dataSource>
+        </environment>
+    </environments>
+    
+    <mappers>
+        <mapper resource="org/apache/ibatis/submitted/ognl_enum/Person.xml"/>
+    </mappers>
+</configuration>


Reply via email to