1 package net.sourceforge.pmd.lang.jsp.ast;
2
3 import static org.junit.Assert.assertFalse;
4 import static org.junit.Assert.assertTrue;
5
6 import org.junit.Before;
7 import org.junit.Test;
8
9 public class OpenTagRegisterTest {
10
11 private OpenTagRegister tagList;
12
13 private int elmId = 0;
14
15 @Before
16 public void newRegister() {
17 tagList = new OpenTagRegister();
18 }
19
20
21
22
23 @Test
24 public void testSimpleNesting() {
25 ASTElement elm = element("a");
26 ASTElement elm2 = element("b");
27
28 tagList.openTag(elm);
29 tagList.openTag(elm2);
30 tagList.closeTag(elm);
31
32 assertFalse(elm.isUnclosed());
33 assertTrue(elm2.isUnclosed());
34 }
35
36
37
38
39 @Test
40 public void doubleNesting() {
41 ASTElement elm = element("a");
42 ASTElement elm2 = element("b");
43 ASTElement elm3 = element("b");
44
45 tagList.openTag(elm);
46 tagList.openTag(elm2);
47 tagList.openTag(elm3);
48 tagList.closeTag(elm);
49
50 assertFalse(elm.isUnclosed());
51 assertTrue(elm2.isUnclosed());
52 assertTrue(elm3.isUnclosed());
53 }
54
55
56
57
58 @Test
59 public void unopenedTags() {
60 ASTElement elm = element("x");
61 ASTElement elm2 = element("a");
62 ASTElement elm3 = element("b");
63 ASTElement elm4 = element("b");
64
65 tagList.openTag(elm);
66 tagList.openTag(elm2);
67 tagList.openTag(elm3);
68 tagList.openTag(elm4);
69 tagList.closeTag(elm);
70 tagList.closeTag(elm2);
71 tagList.closeTag(elm3);
72 tagList.closeTag(elm);
73
74 assertFalse(elm.isUnclosed());
75 assertTrue(elm2.isUnclosed());
76 assertTrue(elm3.isUnclosed());
77 assertTrue(elm4.isUnclosed());
78 }
79
80
81
82
83
84 @Test
85 public void interleavedTags() {
86 ASTElement elm = element("x");
87 ASTElement elm2 = element("a");
88 ASTElement elm3 = element("b");
89 ASTElement elm4 = element("b");
90 ASTElement elm5 = element("z");
91
92 tagList.openTag(elm);
93 tagList.openTag(elm2);
94 tagList.openTag(elm3);
95 tagList.openTag(elm4);
96 tagList.closeTag(elm5);
97 tagList.closeTag(elm2);
98 tagList.closeTag(elm);
99
100 assertFalse(elm.isUnclosed());
101 assertFalse(elm2.isUnclosed());
102 assertTrue(elm3.isUnclosed());
103 assertTrue(elm4.isUnclosed());
104
105 }
106
107
108
109
110 @Test
111 public void openedIsolatedTag() {
112 ASTElement a = element("a");
113 ASTElement x = element("x");
114 ASTElement a2 = element("a");
115 ASTElement b = element("b");
116 ASTElement b2 = element("b");
117 ASTElement z = element("z");
118
119 tagList.openTag(a);
120 tagList.openTag(x);
121 tagList.openTag(a2);
122 tagList.openTag(b);
123 tagList.openTag(b2);
124 tagList.closeTag(z);
125 tagList.closeTag(a2);
126 tagList.closeTag(x);
127
128 assertTrue(a.isUnclosed());
129 assertFalse(x.isUnclosed());
130 assertFalse(a2.isUnclosed());
131
132 assertTrue(b.isUnclosed());
133 assertTrue(b2.isUnclosed());
134 }
135
136 private ASTElement element(String name) {
137 ASTElement elm = new ASTElement(elmId++);
138 elm.setName(name);
139 return elm;
140 }
141
142 }