1 package net.sourceforge.pmd.lang.xml;
2
3 import static net.sourceforge.pmd.lang.ParserOptionsTest.verifyOptionsEqualsHashcode;
4
5 import static org.junit.Assert.assertEquals;
6 import static org.junit.Assert.assertFalse;
7 import static org.junit.Assert.assertNull;
8 import static org.junit.Assert.assertTrue;
9 import net.sourceforge.pmd.lang.ParserOptions;
10 import net.sourceforge.pmd.lang.rule.properties.BooleanProperty;
11 import net.sourceforge.pmd.lang.xml.XmlParserOptions;
12 import net.sourceforge.pmd.lang.xml.rule.AbstractXmlRule;
13
14 import org.junit.Test;
15
16 public class XmlParserOptionsTest {
17
18 @Test
19 public void testDefaults() throws Exception {
20 XmlParserOptions options = new XmlParserOptions();
21 assertFalse(options.isCoalescing());
22 assertTrue(options.isExpandEntityReferences());
23 assertFalse(options.isIgnoringComments());
24 assertFalse(options.isIgnoringElementContentWhitespace());
25 assertTrue(options.isNamespaceAware());
26 assertFalse(options.isValidating());
27 assertFalse(options.isXincludeAware());
28
29 MyRule rule = new MyRule();
30 options = (XmlParserOptions) rule.getParserOptions();
31 assertFalse(options.isCoalescing());
32 assertTrue(options.isExpandEntityReferences());
33 assertFalse(options.isIgnoringComments());
34 assertFalse(options.isIgnoringElementContentWhitespace());
35 assertTrue(options.isNamespaceAware());
36 assertFalse(options.isValidating());
37 assertFalse(options.isXincludeAware());
38 }
39
40 @Test
41 public void testConstructor() throws Exception {
42 MyRule rule = new MyRule();
43
44 rule.setProperty(XmlParserOptions.COALESCING_DESCRIPTOR, true);
45 assertTrue(((XmlParserOptions) rule.getParserOptions()).isCoalescing());
46 rule.setProperty(XmlParserOptions.COALESCING_DESCRIPTOR, false);
47 assertFalse(((XmlParserOptions) rule.getParserOptions()).isCoalescing());
48
49 rule.setProperty(XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR, true);
50 assertTrue(((XmlParserOptions) rule.getParserOptions()).isExpandEntityReferences());
51 rule.setProperty(XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR, false);
52 assertFalse(((XmlParserOptions) rule.getParserOptions()).isExpandEntityReferences());
53
54 rule.setProperty(XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR, true);
55 assertTrue(((XmlParserOptions) rule.getParserOptions()).isIgnoringComments());
56 rule.setProperty(XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR, false);
57 assertFalse(((XmlParserOptions) rule.getParserOptions()).isIgnoringComments());
58
59 rule.setProperty(XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR, true);
60 assertTrue(((XmlParserOptions) rule.getParserOptions()).isIgnoringElementContentWhitespace());
61 rule.setProperty(XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR, false);
62 assertFalse(((XmlParserOptions) rule.getParserOptions()).isIgnoringElementContentWhitespace());
63
64 rule.setProperty(XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR, true);
65 assertTrue(((XmlParserOptions) rule.getParserOptions()).isNamespaceAware());
66 rule.setProperty(XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR, false);
67 assertFalse(((XmlParserOptions) rule.getParserOptions()).isNamespaceAware());
68
69 rule.setProperty(XmlParserOptions.VALIDATING_DESCRIPTOR, true);
70 assertTrue(((XmlParserOptions) rule.getParserOptions()).isValidating());
71 rule.setProperty(XmlParserOptions.VALIDATING_DESCRIPTOR, false);
72 assertFalse(((XmlParserOptions) rule.getParserOptions()).isValidating());
73
74 rule.setProperty(XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR, true);
75 assertTrue(((XmlParserOptions) rule.getParserOptions()).isXincludeAware());
76 rule.setProperty(XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR, false);
77 assertFalse(((XmlParserOptions) rule.getParserOptions()).isXincludeAware());
78 }
79
80 @Test
81 public void testSetters() {
82 XmlParserOptions options = new XmlParserOptions();
83
84 options.setSuppressMarker("foo");
85 assertEquals("foo", options.getSuppressMarker());
86 options.setSuppressMarker(null);
87 assertNull(options.getSuppressMarker());
88
89 options.setCoalescing(true);
90 assertTrue(options.isCoalescing());
91 options.setCoalescing(false);
92 assertFalse(options.isCoalescing());
93
94 options.setExpandEntityReferences(true);
95 assertTrue(options.isExpandEntityReferences());
96 options.setExpandEntityReferences(false);
97 assertFalse(options.isExpandEntityReferences());
98
99 options.setIgnoringComments(true);
100 assertTrue(options.isIgnoringComments());
101 options.setIgnoringComments(false);
102 assertFalse(options.isIgnoringComments());
103
104 options.setIgnoringElementContentWhitespace(true);
105 assertTrue(options.isIgnoringElementContentWhitespace());
106 options.setIgnoringElementContentWhitespace(false);
107 assertFalse(options.isIgnoringElementContentWhitespace());
108
109 options.setNamespaceAware(true);
110 assertTrue(options.isNamespaceAware());
111 options.setNamespaceAware(false);
112 assertFalse(options.isNamespaceAware());
113
114 options.setValidating(true);
115 assertTrue(options.isValidating());
116 options.setValidating(false);
117 assertFalse(options.isValidating());
118
119 options.setXincludeAware(true);
120 assertTrue(options.isXincludeAware());
121 options.setXincludeAware(false);
122 assertFalse(options.isXincludeAware());
123 }
124
125 @Test
126 public void testEqualsHashcode() throws Exception {
127 BooleanProperty[] properties = new BooleanProperty[] { XmlParserOptions.COALESCING_DESCRIPTOR,
128 XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR, XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR,
129 XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR,
130 XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR, XmlParserOptions.VALIDATING_DESCRIPTOR,
131 XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR, };
132
133 for (int i = 0; i < properties.length; i++) {
134 BooleanProperty property = properties[i];
135
136 MyRule rule = new MyRule();
137 rule.setProperty(property, true);
138 ParserOptions options1 = rule.getParserOptions();
139 rule.setProperty(property, false);
140 ParserOptions options2 = rule.getParserOptions();
141 rule.setProperty(property, true);
142 ParserOptions options3 = rule.getParserOptions();
143 rule.setProperty(property, false);
144 ParserOptions options4 = rule.getParserOptions();
145 verifyOptionsEqualsHashcode(options1, options2, options3, options4);
146 }
147
148 XmlParserOptions options1 = new XmlParserOptions();
149 options1.setSuppressMarker("foo");
150 XmlParserOptions options2 = new XmlParserOptions();
151 options2.setSuppressMarker("bar");
152 XmlParserOptions options3 = new XmlParserOptions();
153 options3.setSuppressMarker("foo");
154 XmlParserOptions options4 = new XmlParserOptions();
155 options4.setSuppressMarker("bar");
156 verifyOptionsEqualsHashcode(options1, options2, options3, options4);
157 }
158
159 private static final class MyRule extends AbstractXmlRule {
160 }
161
162 public static junit.framework.Test suite() {
163 return new junit.framework.JUnit4TestAdapter(XmlParserOptionsTest.class);
164 }
165 }