1 package org.apache.torque.generator.source;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertSame;
24
25 import java.util.ArrayList;
26 import java.util.List;
27
28 import org.apache.torque.generator.GeneratorException;
29 import org.junit.Before;
30 import org.junit.Test;
31
32 public class SourcePathTest
33 {
34 private SourceElement root;
35 private SourceElement firstLevel1;
36 private SourceElement firstLevel2;
37 private SourceElement firstLevel3;
38 private SourceElement secondLevel;
39 private SourceElement thirdLevel;
40
41 @Before
42 public void setUp()
43 {
44 root = new SourceElement("root");
45 firstLevel1 = new SourceElement("firstLevel1");
46 root.getChildren().add(firstLevel1);
47 firstLevel2 = new SourceElement("firstLevel2");
48 root.getChildren().add(firstLevel2);
49 firstLevel3 = new SourceElement("firstLevel3");
50 root.getChildren().add(firstLevel3);
51 secondLevel = new SourceElement("secondLevel");
52 firstLevel2.getChildren().add(secondLevel);
53 thirdLevel = new SourceElement("thirdLevel");
54 secondLevel.getChildren().add(thirdLevel);
55 }
56
57 @Test
58 public void testGetPath() throws GeneratorException
59 {
60 assertEquals(
61 "root/firstLevel2/secondLevel/thirdLevel",
62 SourcePath.getPathAsString(thirdLevel));
63 }
64
65 @Test(expected = GeneratorException.class)
66 public void testGetPathInfiniteLoop() throws GeneratorException
67 {
68 SourceElement loopElement1 = new SourceElement("loopElement1");
69 SourceElement loopElement2 = new SourceElement("loopElement2");
70 loopElement1.getChildren().add(loopElement2);
71 loopElement2.getChildren().add(loopElement1);
72 SourcePath.getPathAsString(loopElement1);
73 }
74
75 @Test
76 public void testGetElementFromRootWithSlash()
77 {
78 List<SourceElement> result
79 = SourcePath.getElementsFromRoot(root, "/");
80 List<SourceElement> expected = new ArrayList<SourceElement>();
81 expected.add(root);
82 assertEquals(expected, result);
83 }
84
85 @Test
86 public void testGetElementFromRootSingleRelativeElement()
87 {
88 List<SourceElement> result
89 = SourcePath.getElementsFromRoot(root, "root");
90 List<SourceElement> expected = new ArrayList<SourceElement>();
91 expected.add(root);
92 assertEquals(expected, result);
93 }
94
95 @Test
96 public void testGetElementFromRootSingleRelativeElementNoMatch()
97 {
98 List<SourceElement> result
99 = SourcePath.getElementsFromRoot(root, "root1");
100 assertEquals(0, result.size());
101 }
102
103 @Test
104 public void testGetElementFromRootSingleAbsoluteElement()
105 {
106 List<SourceElement> result
107 = SourcePath.getElementsFromRoot(root, "/root");
108 List<SourceElement> expected = new ArrayList<SourceElement>();
109 expected.add(root);
110 assertEquals(expected, result);
111 }
112
113 @Test
114 public void testGetElementFromRootSingleAbsoluteElementNoMatch()
115 {
116 List<SourceElement> result
117 = SourcePath.getElementsFromRoot(root, "/root1");
118 assertEquals(0, result.size());
119 }
120
121 @Test
122 public void testGetElementFromRootWildcardAtStart()
123 {
124 List<SourceElement> result
125 = SourcePath.getElementsFromRoot(root, "/*");
126 List<SourceElement> expected = new ArrayList<SourceElement>();
127 expected.add(root);
128 assertEquals(expected, result);
129 }
130
131 @Test
132 public void testGetElementFromRootWildcardInMiddle()
133 {
134 List<SourceElement> result
135 = SourcePath.getElementsFromRoot(root, "/root/*/secondLevel");
136 List<SourceElement> expected = new ArrayList<SourceElement>();
137 expected.add(secondLevel);
138 assertEquals(expected, result);
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152 @Test
153 public void testGetElementFromRootParentInMiddle()
154 {
155 List<SourceElement> result = SourcePath.getElementsFromRoot(
156 root,
157 "/root/firstLevel1/../firstLevel2");
158 List<SourceElement> expected = new ArrayList<SourceElement>();
159 expected.add(firstLevel2);
160 assertEquals(expected, result);
161 }
162
163 @Test
164 public void testGetPreceding()
165 {
166 List<SourceElement> result
167 = SourcePath.getPreceding(firstLevel2, "firstLevel1");
168 assertEquals(1, result.size());
169 assertSame(firstLevel1, result.get(0));
170 }
171
172 @Test
173 public void testGetPrecedingNoMatch()
174 {
175 List<SourceElement> result
176 = SourcePath.getPreceding(firstLevel2, "firstLevel2");
177 assertEquals(0, result.size());
178 }
179 @Test
180
181 public void testGetFollowing()
182 {
183 List<SourceElement> result
184 = SourcePath.getFollowing(firstLevel2, "firstLevel3");
185 assertEquals(1, result.size());
186 assertSame(firstLevel3, result.get(0));
187 }
188
189 @Test
190 public void testGetFollowingNoMatch()
191 {
192 List<SourceElement> result
193 = SourcePath.getFollowing(firstLevel2, "firstLevel2");
194 assertEquals(0, result.size());
195 }
196 }