1 package net.sourceforge.pmd.lang.ecmascript;
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.ecmascript.EcmascriptParserOptions;
11 import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule;
12 import net.sourceforge.pmd.lang.rule.properties.BooleanProperty;
13 import net.sourceforge.pmd.lang.xml.XmlParserOptions;
14
15 import org.junit.Test;
16
17 public class EcmascriptParserOptionsTest {
18
19 @Test
20 public void testDefaults() throws Exception {
21 EcmascriptParserOptions parserOptions = new EcmascriptParserOptions();
22 assertTrue(parserOptions.isRecordingComments());
23 assertTrue(parserOptions.isRecordingLocalJsDocComments());
24 assertEquals(EcmascriptParserOptions.Version.VERSION_DEFAULT, parserOptions.getRhinoLanguageVersion());
25
26 MyRule rule = new MyRule();
27 parserOptions = (EcmascriptParserOptions) rule.getParserOptions();
28 assertTrue(parserOptions.isRecordingComments());
29 assertTrue(parserOptions.isRecordingLocalJsDocComments());
30 assertEquals(EcmascriptParserOptions.Version.VERSION_DEFAULT, parserOptions.getRhinoLanguageVersion());
31 }
32
33 @Test
34 public void testConstructor() throws Exception {
35 MyRule rule = new MyRule();
36
37 rule.setProperty(EcmascriptParserOptions.RECORDING_COMMENTS_DESCRIPTOR, true);
38 assertTrue(((EcmascriptParserOptions) rule.getParserOptions()).isRecordingComments());
39 rule.setProperty(EcmascriptParserOptions.RECORDING_COMMENTS_DESCRIPTOR, false);
40 assertFalse(((EcmascriptParserOptions) rule.getParserOptions()).isRecordingComments());
41
42 rule.setProperty(EcmascriptParserOptions.RECORDING_LOCAL_JSDOC_COMMENTS_DESCRIPTOR, true);
43 assertTrue(((EcmascriptParserOptions) rule.getParserOptions()).isRecordingLocalJsDocComments());
44 rule.setProperty(EcmascriptParserOptions.RECORDING_LOCAL_JSDOC_COMMENTS_DESCRIPTOR, false);
45 assertFalse(((EcmascriptParserOptions) rule.getParserOptions()).isRecordingLocalJsDocComments());
46
47 rule.setProperty(EcmascriptParserOptions.RHINO_LANGUAGE_VERSION, "default");
48 assertEquals(EcmascriptParserOptions.Version.VERSION_DEFAULT, ((EcmascriptParserOptions) rule
49 .getParserOptions()).getRhinoLanguageVersion());
50 rule.setProperty(EcmascriptParserOptions.RHINO_LANGUAGE_VERSION, "1.8");
51 assertEquals(EcmascriptParserOptions.Version.VERSION_1_8, ((EcmascriptParserOptions) rule.getParserOptions())
52 .getRhinoLanguageVersion());
53 }
54
55 @Test
56 public void testSetters() {
57 XmlParserOptions options = new XmlParserOptions();
58
59 options.setSuppressMarker("foo");
60 assertEquals("foo", options.getSuppressMarker());
61 options.setSuppressMarker(null);
62 assertNull(options.getSuppressMarker());
63
64 options.setCoalescing(true);
65 assertTrue(options.isCoalescing());
66 options.setCoalescing(false);
67 assertFalse(options.isCoalescing());
68
69 options.setExpandEntityReferences(true);
70 assertTrue(options.isExpandEntityReferences());
71 options.setExpandEntityReferences(false);
72 assertFalse(options.isExpandEntityReferences());
73
74 options.setIgnoringComments(true);
75 assertTrue(options.isIgnoringComments());
76 options.setIgnoringComments(false);
77 assertFalse(options.isIgnoringComments());
78 }
79 @Test
80 public void testEqualsHashcode() throws Exception {
81 BooleanProperty[] properties = new BooleanProperty[] { EcmascriptParserOptions.RECORDING_COMMENTS_DESCRIPTOR,
82 EcmascriptParserOptions.RECORDING_LOCAL_JSDOC_COMMENTS_DESCRIPTOR };
83
84 for (int i = 0; i < properties.length; i++) {
85 BooleanProperty property = properties[i];
86
87 MyRule rule = new MyRule();
88 rule.setProperty(property, true);
89 ParserOptions options1 = rule.getParserOptions();
90 rule.setProperty(property, false);
91 ParserOptions options2 = rule.getParserOptions();
92 rule.setProperty(property, true);
93 ParserOptions options3 = rule.getParserOptions();
94 rule.setProperty(property, false);
95 ParserOptions options4 = rule.getParserOptions();
96 verifyOptionsEqualsHashcode(options1, options2, options3, options4);
97 }
98
99 EcmascriptParserOptions options1 = new EcmascriptParserOptions();
100 options1.setSuppressMarker("foo");
101 EcmascriptParserOptions options2 = new EcmascriptParserOptions();
102 options2.setSuppressMarker("bar");
103 EcmascriptParserOptions options3 = new EcmascriptParserOptions();
104 options3.setSuppressMarker("foo");
105 EcmascriptParserOptions options4 = new EcmascriptParserOptions();
106 options4.setSuppressMarker("bar");
107 verifyOptionsEqualsHashcode(options1, options2, options3, options4);
108
109 options1 = new EcmascriptParserOptions();
110 options1.setRhinoLanguageVersion(EcmascriptParserOptions.Version.VERSION_DEFAULT);
111 options2 = new EcmascriptParserOptions();
112 options2.setRhinoLanguageVersion(EcmascriptParserOptions.Version.VERSION_1_8);
113 options3 = new EcmascriptParserOptions();
114 options3.setRhinoLanguageVersion(EcmascriptParserOptions.Version.VERSION_DEFAULT);
115 options4 = new EcmascriptParserOptions();
116 options4.setRhinoLanguageVersion(EcmascriptParserOptions.Version.VERSION_1_8);
117 verifyOptionsEqualsHashcode(options1, options2, options3, options4);
118 }
119
120 private static final class MyRule extends AbstractEcmascriptRule {
121 }
122
123 public static junit.framework.Test suite() {
124 return new junit.framework.JUnit4TestAdapter(EcmascriptParserOptionsTest.class);
125 }
126 }