1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.nuiton.decorator;
23
24 import org.junit.After;
25 import org.junit.Test;
26
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.Comparator;
30 import java.util.List;
31
32 import static org.junit.Assert.assertEquals;
33
34
35
36
37
38 public class JXPathDecoratorTest {
39
40 protected JXPathDecorator<?> decorator;
41
42 protected String expected;
43
44 protected String result;
45
46 @After
47 public void after() {
48 decorator = null;
49 }
50
51 @Test(expected = NullPointerException.class)
52 public void testNullInternalClass() throws Exception {
53 decorator = DecoratorUtil.newJXPathDecorator(null, "hello");
54 }
55
56 @Test(expected = IllegalArgumentException.class)
57 public void testMissingRightBrace() throws Exception {
58 decorator = DecoratorUtil.newJXPathDecorator(Object.class, "${haha");
59 }
60
61 @Test(expected = IllegalArgumentException.class)
62 public void testMissingRightBrace2() throws Exception {
63 decorator = DecoratorUtil.newJXPathDecorator(Object.class, "${haha${hum}");
64 }
65
66 @Test
67 public void testNullBean() throws Exception {
68 decorator = DecoratorUtil.newJXPathDecorator(Object.class, "hello");
69 expected = "hello";
70 assertEquals(expected, decorator.getExpression());
71 assertEquals(0, decorator.nbToken);
72 assertEquals(0, decorator.getTokens().length);
73
74 result = decorator.toString(null);
75 assertEquals(null, result);
76 }
77
78 @Test
79 public void testNoJXPath() throws Exception {
80 decorator = DecoratorUtil.newJXPathDecorator(Object.class, "hello");
81 expected = "hello";
82 assertEquals(expected, decorator.getExpression());
83 assertEquals(0, decorator.nbToken);
84 assertEquals(0, decorator.getTokens().length);
85
86 result = decorator.toString(this);
87 assertEquals(expected, result);
88 }
89
90 @Test
91 public void testDecorator() throws Exception {
92
93 decorator = DecoratorUtil.newJXPathDecorator(
94 JXPathDecorator.class, "${expression}$s - ${nbToken}$d");
95 assertEquals("%1$s - %2$d", decorator.getExpression());
96 assertDecoratorInternal();
97
98 decorator = DecoratorUtil.newJXPathDecorator(
99 JXPathDecorator.class, "${expression}${nbToken}");
100 assertEquals("%1%2", decorator.getExpression());
101 assertDecoratorInternal();
102
103 decorator = DecoratorUtil.newJXPathDecorator(
104 JXPathDecorator.class,
105 "before ${expression}$s - ${nbToken}$d after");
106 assertEquals("before %1$s - %2$d after", decorator.getExpression());
107 assertDecoratorInternal();
108
109 decorator = DecoratorUtil.newJXPathDecorator(
110 JXPathDecorator.class,
111 "before${expression}$s-${nbToken}$dafter");
112 assertEquals("before%1$s-%2$dafter", decorator.getExpression());
113 assertDecoratorInternal();
114 }
115
116 @Test
117 public void testDecoratorEspcapeCharacters() throws Exception {
118
119 decorator = DecoratorUtil.newJXPathDecorator(
120 JXPathDecorator.class, "(${expression}$s) - ${nbToken}$d");
121 assertEquals("(%1$s) - %2$d", decorator.getExpression());
122 String s = decorator.toString(decorator);
123 assertDecoratorInternal();
124
125 }
126
127 @Test
128 public void testSort() throws Exception {
129
130 List<Data> datas = Data.generate(10);
131
132 JXPathDecorator<Data> d = DecoratorUtil.newJXPathDecorator(
133 Data.class, "${pos}$d ${name}$s");
134
135 List<Data> sortData = new ArrayList<Data>(datas);
136 DecoratorUtil.sort(d, sortData, 0);
137 for (int i = 0; i < datas.size(); i++) {
138 Data data = datas.get(i);
139 Data sData = sortData.get(i);
140 assertEquals(data, sData);
141 }
142 Collections.sort(datas, new Comparator<Data>() {
143 @Override
144 public int compare(Data o1, Data o2) {
145 return o1.name.compareTo(o2.name);
146 }
147 });
148 JXPathDecorator.Context<Data> context = d.context;
149 context.setComparator(null);
150 DecoratorUtil.sort(d, sortData, 1);
151 for (int i = 0; i < datas.size(); i++) {
152 Data data = datas.get(i);
153 Data sData = sortData.get(i);
154 assertEquals(data, sData);
155 }
156 }
157
158
159 public void assertDecoratorInternal(String... tokens) {
160 assertTokens(tokens);
161 expected = String.format(decorator.getExpression(),
162 decorator.getExpression(),
163 decorator.getNbToken());
164 result = decorator.toString(decorator);
165 assertEquals(expected, result);
166 }
167
168 private void assertTokens(String... tokens) {
169 if (tokens.length == 0) {
170 tokens = new String[]{"expression", "nbToken"};
171 }
172 assertEquals(2, decorator.nbToken);
173 assertEquals(2, decorator.getTokens().length);
174 assertEquals(tokens[0], decorator.getTokens()[0]);
175 assertEquals(tokens[1], decorator.getTokens()[1]);
176 }
177
178 }