View Javadoc

1   package org.apache.torque.generator.source;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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 // does not yet work
142 //    @Test
143 //    public void testGetElementFromRootBacktoRootWithParent()
144 //    {
145 //        List<SourceElement> result
146 //                = SourcePath.getElementsFromRoot(root, "/root/../root");
147 //        List<SourceElement> expected = new ArrayList<SourceElement>();
148 //        expected.add(root);
149 //        assertEquals(expected, result);
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 }