View Javadoc
1   /**
2    *    Copyright 2009-2019 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.apache.ibatis.builder;
17  
18  import java.util.Map;
19  import org.junit.jupiter.api.Assertions;
20  import org.junit.jupiter.api.Test;
21  
22  class ParameterExpressionTest {
23  
24    @Test
25    void simpleProperty() {
26      Map<String, String> result = new ParameterExpression("id");
27      Assertions.assertEquals(1, result.size());
28      Assertions.assertEquals("id", result.get("property"));
29    }
30  
31    @Test
32    void propertyWithSpacesInside() {
33      Map<String, String> result = new ParameterExpression(" with spaces ");
34      Assertions.assertEquals(1, result.size());
35      Assertions.assertEquals("with spaces", result.get("property"));
36    }
37  
38    @Test
39    void simplePropertyWithOldStyleJdbcType() {
40      Map<String, String> result = new ParameterExpression("id:VARCHAR");
41      Assertions.assertEquals(2, result.size());
42      Assertions.assertEquals("id", result.get("property"));
43      Assertions.assertEquals("VARCHAR", result.get("jdbcType"));
44    }
45  
46    @Test
47    void oldStyleJdbcTypeWithExtraWhitespaces() {
48      Map<String, String> result = new ParameterExpression(" id :  VARCHAR ");
49      Assertions.assertEquals(2, result.size());
50      Assertions.assertEquals("id", result.get("property"));
51      Assertions.assertEquals("VARCHAR", result.get("jdbcType"));
52    }
53  
54    @Test
55    void expressionWithOldStyleJdbcType() {
56      Map<String, String> result = new ParameterExpression("(id.toString()):VARCHAR");
57      Assertions.assertEquals(2, result.size());
58      Assertions.assertEquals("id.toString()", result.get("expression"));
59      Assertions.assertEquals("VARCHAR", result.get("jdbcType"));
60    }
61  
62    @Test
63    void simplePropertyWithOneAttribute() {
64      Map<String, String> result = new ParameterExpression("id,name=value");
65      Assertions.assertEquals(2, result.size());
66      Assertions.assertEquals("id", result.get("property"));
67      Assertions.assertEquals("value", result.get("name"));
68    }
69  
70    @Test
71    void expressionWithOneAttribute() {
72      Map<String, String> result = new ParameterExpression("(id.toString()),name=value");
73      Assertions.assertEquals(2, result.size());
74      Assertions.assertEquals("id.toString()", result.get("expression"));
75      Assertions.assertEquals("value", result.get("name"));
76    }
77  
78    @Test
79    void simplePropertyWithManyAttributes() {
80      Map<String, String> result = new ParameterExpression("id, attr1=val1, attr2=val2, attr3=val3");
81      Assertions.assertEquals(4, result.size());
82      Assertions.assertEquals("id", result.get("property"));
83      Assertions.assertEquals("val1", result.get("attr1"));
84      Assertions.assertEquals("val2", result.get("attr2"));
85      Assertions.assertEquals("val3", result.get("attr3"));
86    }
87  
88    @Test
89    void expressionWithManyAttributes() {
90      Map<String, String> result = new ParameterExpression("(id.toString()), attr1=val1, attr2=val2, attr3=val3");
91      Assertions.assertEquals(4, result.size());
92      Assertions.assertEquals("id.toString()", result.get("expression"));
93      Assertions.assertEquals("val1", result.get("attr1"));
94      Assertions.assertEquals("val2", result.get("attr2"));
95      Assertions.assertEquals("val3", result.get("attr3"));
96    }
97  
98    @Test
99    void simplePropertyWithOldStyleJdbcTypeAndAttributes() {
100     Map<String, String> result = new ParameterExpression("id:VARCHAR, attr1=val1, attr2=val2");
101     Assertions.assertEquals(4, result.size());
102     Assertions.assertEquals("id", result.get("property"));
103     Assertions.assertEquals("VARCHAR", result.get("jdbcType"));
104     Assertions.assertEquals("val1", result.get("attr1"));
105     Assertions.assertEquals("val2", result.get("attr2"));
106   }
107 
108   @Test
109   void simplePropertyWithSpaceAndManyAttributes() {
110     Map<String, String> result = new ParameterExpression("user name, attr1=val1, attr2=val2, attr3=val3");
111     Assertions.assertEquals(4, result.size());
112     Assertions.assertEquals("user name", result.get("property"));
113     Assertions.assertEquals("val1", result.get("attr1"));
114     Assertions.assertEquals("val2", result.get("attr2"));
115     Assertions.assertEquals("val3", result.get("attr3"));
116   }
117 
118   @Test
119   void shouldIgnoreLeadingAndTrailingSpaces() {
120     Map<String, String> result = new ParameterExpression(" id , jdbcType =  VARCHAR,  attr1 = val1 ,  attr2 = val2 ");
121     Assertions.assertEquals(4, result.size());
122     Assertions.assertEquals("id", result.get("property"));
123     Assertions.assertEquals("VARCHAR", result.get("jdbcType"));
124     Assertions.assertEquals("val1", result.get("attr1"));
125     Assertions.assertEquals("val2", result.get("attr2"));
126   }
127 
128   @Test
129   void invalidOldJdbcTypeFormat() {
130     try {
131       new ParameterExpression("id:");
132       Assertions.fail();
133     } catch (BuilderException e) {
134       Assertions.assertTrue(e.getMessage().contains("Parsing error in {id:} in position 3"));
135     }
136   }
137 
138   @Test
139   void invalidJdbcTypeOptUsingExpression() {
140     try {
141       new ParameterExpression("(expression)+");
142       Assertions.fail();
143     } catch (BuilderException e) {
144       Assertions.assertTrue(e.getMessage().contains("Parsing error in {(expression)+} in position 12"));
145     }
146   }
147 
148 }