1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }