1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.tree.xpath;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.apache.commons.configuration2.tree.ImmutableNode;
23 import org.apache.commons.configuration2.tree.InMemoryNodeModel;
24 import org.apache.commons.configuration2.tree.NodeHandler;
25 import org.apache.commons.jxpath.ri.model.NodeIterator;
26 import org.apache.commons.jxpath.ri.model.NodePointer;
27 import org.junit.jupiter.api.AfterEach;
28 import org.junit.jupiter.api.BeforeEach;
29
30
31
32
33
34 public abstract class AbstractXPathTest {
35
36 protected static final String ATTR_NAME = "counter";
37
38
39 protected static final String ATTR_ROOT = "rootAttr";
40
41
42 protected static final String CHILD_NAME1 = "subNode";
43
44
45 protected static final String CHILD_NAME2 = "childNode";
46
47
48 protected static final int CHILD_COUNT = 5;
49
50
51 protected static final int LEVEL_COUNT = 3;
52
53
54 protected ImmutableNode root;
55
56
57 protected NodeHandler<ImmutableNode> handler;
58
59
60
61
62
63
64
65
66
67
68 protected ImmutableNode constructHierarchy(final int levels) {
69 final ImmutableNode.Builder resultBuilder = new ImmutableNode.Builder();
70 createLevel(resultBuilder, null, levels);
71 resultBuilder.addAttribute(ATTR_ROOT, String.valueOf(true));
72 return resultBuilder.create();
73 }
74
75
76
77
78
79
80
81
82 private void createLevel(final ImmutableNode.Builder parentBuilder, final String value, final int level) {
83 if (level >= 0) {
84 final String prefix = value == null ? "" : value + ".";
85 for (int i = 1; i <= CHILD_COUNT; i++) {
86 final ImmutableNode.Builder childBuilder = new ImmutableNode.Builder();
87 childBuilder.name(i % 2 == 0 ? CHILD_NAME1 : CHILD_NAME2);
88 final String currentValue = prefix + i;
89 childBuilder.value(currentValue);
90 createLevel(childBuilder, currentValue, level - 1);
91 childBuilder.addAttribute(ATTR_NAME, String.valueOf(i));
92 parentBuilder.addChild(childBuilder.create());
93 }
94 }
95 }
96
97
98
99
100
101
102
103 protected List<NodePointer> iterationElements(final NodeIterator iterator) {
104 final List<NodePointer> result = new ArrayList<>();
105 for (int pos = 1; iterator.setPosition(pos); pos++) {
106 result.add(iterator.getNodePointer());
107 }
108 return result;
109 }
110
111
112
113
114
115
116
117 protected int iteratorSize(final NodeIterator iterator) {
118 int cnt = 0;
119 boolean ok;
120
121 do {
122 ok = iterator.setPosition(cnt + 1);
123 if (ok) {
124 cnt++;
125 }
126 } while (ok);
127
128 return cnt;
129 }
130
131 @BeforeEach
132 public void setUp() throws Exception {
133 root = constructHierarchy(LEVEL_COUNT);
134 handler = new InMemoryNodeModel(root).getNodeHandler();
135 }
136
137
138
139
140 @AfterEach
141 public void tearDown() throws Exception {
142 root = null;
143 }
144 }