1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.parsing;
17
18 import java.util.Properties;
19
20 import org.assertj.core.api.Assertions;
21 import org.junit.jupiter.api.Test;
22
23 class PropertyParserTest {
24
25 @Test
26 void replaceToVariableValue() {
27 Properties props = new Properties();
28 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "true");
29 props.setProperty("key", "value");
30 props.setProperty("tableName", "members");
31 props.setProperty("orderColumn", "member_id");
32 props.setProperty("a:b", "c");
33 Assertions.assertThat(PropertyParser.parse("${key}", props)).isEqualTo("value");
34 Assertions.assertThat(PropertyParser.parse("${key:aaaa}", props)).isEqualTo("value");
35 Assertions.assertThat(PropertyParser.parse("SELECT * FROM ${tableName:users} ORDER BY ${orderColumn:id}", props)).isEqualTo("SELECT * FROM members ORDER BY member_id");
36
37 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "false");
38 Assertions.assertThat(PropertyParser.parse("${a:b}", props)).isEqualTo("c");
39
40 props.remove(PropertyParser.KEY_ENABLE_DEFAULT_VALUE);
41 Assertions.assertThat(PropertyParser.parse("${a:b}", props)).isEqualTo("c");
42
43 }
44
45 @Test
46 void notReplace() {
47 Properties props = new Properties();
48 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "true");
49 Assertions.assertThat(PropertyParser.parse("${key}", props)).isEqualTo("${key}");
50 Assertions.assertThat(PropertyParser.parse("${key}", null)).isEqualTo("${key}");
51
52 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "false");
53 Assertions.assertThat(PropertyParser.parse("${a:b}", props)).isEqualTo("${a:b}");
54
55 props.remove(PropertyParser.KEY_ENABLE_DEFAULT_VALUE);
56 Assertions.assertThat(PropertyParser.parse("${a:b}", props)).isEqualTo("${a:b}");
57
58 }
59
60 @Test
61 void applyDefaultValue() {
62 Properties props = new Properties();
63 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "true");
64 Assertions.assertThat(PropertyParser.parse("${key:default}", props)).isEqualTo("default");
65 Assertions.assertThat(PropertyParser.parse("SELECT * FROM ${tableName:users} ORDER BY ${orderColumn:id}", props)).isEqualTo("SELECT * FROM users ORDER BY id");
66 Assertions.assertThat(PropertyParser.parse("${key:}", props)).isEmpty();
67 Assertions.assertThat(PropertyParser.parse("${key: }", props)).isEqualTo(" ");
68 Assertions.assertThat(PropertyParser.parse("${key::}", props)).isEqualTo(":");
69 }
70
71 @Test
72 void applyCustomSeparator() {
73 Properties props = new Properties();
74 props.setProperty(PropertyParser.KEY_ENABLE_DEFAULT_VALUE, "true");
75 props.setProperty(PropertyParser.KEY_DEFAULT_VALUE_SEPARATOR, "?:");
76 Assertions.assertThat(PropertyParser.parse("${key?:default}", props)).isEqualTo("default");
77 Assertions.assertThat(PropertyParser.parse("SELECT * FROM ${schema?:prod}.${tableName == null ? 'users' : tableName} ORDER BY ${orderColumn}", props)).isEqualTo("SELECT * FROM prod.${tableName == null ? 'users' : tableName} ORDER BY ${orderColumn}");
78 Assertions.assertThat(PropertyParser.parse("${key?:}", props)).isEmpty();
79 Assertions.assertThat(PropertyParser.parse("${key?: }", props)).isEqualTo(" ");
80 Assertions.assertThat(PropertyParser.parse("${key?::}", props)).isEqualTo(":");
81 }
82
83 }