1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.ibatis.parsing;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20
21 import java.util.Properties;
22
23 import org.junit.jupiter.api.Test;
24
25 class XNodeTest {
26
27 @Test
28 void formatXNodeToString() {
29 XPathParser parser = new XPathParser(
30 "<users><user><id>100</id><name>Tom</name><age>30</age><cars><car index=\"1\">BMW</car><car index=\"2\">Audi</car><car index=\"3\">Benz</car></cars></user></users>");
31 String usersNodeToString = parser.evalNode("/users").toString();
32 String userNodeToString = parser.evalNode("/users/user").toString();
33 String carsNodeToString = parser.evalNode("/users/user/cars").toString();
34
35
36 String usersNodeToStringExpect =
37 "<users>\n"
38 + " <user>\n"
39 + " <id>\n"
40 + " 100\n"
41 + " </id>\n"
42 + " <name>\n"
43 + " Tom\n"
44 + " </name>\n"
45 + " <age>\n"
46 + " 30\n"
47 + " </age>\n"
48 + " <cars>\n"
49 + " <car index=\"1\">\n"
50 + " BMW\n"
51 + " </car>\n"
52 + " <car index=\"2\">\n"
53 + " Audi\n"
54 + " </car>\n"
55 + " <car index=\"3\">\n"
56 + " Benz\n"
57 + " </car>\n"
58 + " </cars>\n"
59 + " </user>\n"
60 + "</users>\n";
61
62
63
64 String userNodeToStringExpect =
65 "<user>\n"
66 + " <id>\n"
67 + " 100\n"
68 + " </id>\n"
69 + " <name>\n"
70 + " Tom\n"
71 + " </name>\n"
72 + " <age>\n"
73 + " 30\n"
74 + " </age>\n"
75 + " <cars>\n"
76 + " <car index=\"1\">\n"
77 + " BMW\n"
78 + " </car>\n"
79 + " <car index=\"2\">\n"
80 + " Audi\n"
81 + " </car>\n"
82 + " <car index=\"3\">\n"
83 + " Benz\n"
84 + " </car>\n"
85 + " </cars>\n"
86 + "</user>\n";
87
88
89
90 String carsNodeToStringExpect =
91 "<cars>\n"
92 + " <car index=\"1\">\n"
93 + " BMW\n"
94 + " </car>\n"
95 + " <car index=\"2\">\n"
96 + " Audi\n"
97 + " </car>\n"
98 + " <car index=\"3\">\n"
99 + " Benz\n"
100 + " </car>\n"
101 + "</cars>\n";
102
103
104 assertEquals(usersNodeToStringExpect, usersNodeToString);
105 assertEquals(userNodeToStringExpect, userNodeToString);
106 assertEquals(carsNodeToStringExpect, carsNodeToString);
107 }
108
109 @Test
110 void xNodeToString() {
111
112 String xml = "<mapper>\n" +
113 " <select id='select' resultType='map'>\n" +
114 " select\n" +
115 " <var set='foo' value='bar' />\n" +
116 " ID,\n" +
117 " NAME\n" +
118 " from STUDENT\n" +
119 " <where>\n" +
120 " <if test=\"name != null\">\n" +
121 " NAME = #{name}\n" +
122 " </if>\n" +
123 " and DISABLED = false\n" +
124 " </where>\n" +
125 " order by ID\n" +
126 " <choose>\n" +
127 " <when test='limit10'>\n" +
128 " limit 10\n" +
129 " </when>\n" +
130 " <otherwise>limit 20</otherwise>\n" +
131 " </choose>\n" +
132 " </select>\n" +
133 "</mapper>";
134
135 String expected = "<select id=\"select\" resultType=\"map\">\n" +
136 " select\n" +
137 " <var set=\"foo\" value=\"bar\" />\n" +
138 " ID,\n" +
139
140 " NAME\n" +
141 " from STUDENT\n" +
142 " <where>\n" +
143 " <if test=\"name != null\">\n" +
144 " NAME = #{name}\n" +
145 " </if>\n" +
146 " and DISABLED = false\n" +
147 " </where>\n" +
148 " order by ID\n" +
149 " <choose>\n" +
150 " <when test=\"limit10\">\n" +
151 " limit 10\n" +
152 " </when>\n" +
153 " <otherwise>\n" +
154 " limit 20\n" +
155 " </otherwise>\n" +
156 " </choose>\n" +
157 "</select>\n";
158
159
160 XPathParser parser = new XPathParser(xml);
161 XNode selectNode = parser.evalNode("/mapper/select");
162 assertEquals(expected, selectNode.toString());
163 }
164
165 @Test
166 void testXnodeToStringVariables() throws Exception {
167 String src = "<root attr='${x}'>y = ${y}<sub attr='${y}'>x = ${x}</sub></root>";
168 String expected = "<root attr=\"foo\">\n y = bar\n <sub attr=\"bar\">\n x = foo\n </sub>\n</root>\n";
169 Properties vars = new Properties();
170 vars.put("x", "foo");
171 vars.put("y", "bar");
172 XPathParser parser = new XPathParser(src, false, vars);
173 XNode selectNode = parser.evalNode("/root");
174 assertEquals(expected, selectNode.toString());
175 }
176
177 }