1 package net.sourceforge.pmd.lang.java.ast;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import java.util.Set;
8
9 import net.sourceforge.pmd.PMD;
10 import net.sourceforge.pmd.lang.java.ParserTst;
11
12 import org.junit.Test;
13
14 public class ASTLiteralTest extends ParserTst {
15
16 @Test
17 public void testIsStringLiteral() throws Throwable {
18 Set literals = getNodes(ASTLiteral.class, TEST1);
19 assertTrue(((ASTLiteral)(literals.iterator().next())).isStringLiteral());
20 }
21
22 @Test
23 public void testIsNotStringLiteral() throws Throwable {
24 Set literals = getNodes(ASTLiteral.class, TEST2);
25 assertFalse(((ASTLiteral)(literals.iterator().next())).isStringLiteral());
26 }
27
28 @Test
29 public void testIsIntIntLiteral() throws Throwable {
30 Set literals = getNodes(ASTLiteral.class, TEST3);
31 assertTrue(((ASTLiteral)(literals.iterator().next())).isIntLiteral());
32 }
33
34 @Test
35 public void testIsIntLongLiteral() throws Throwable {
36 Set literals = getNodes(ASTLiteral.class, TEST4);
37 assertTrue(((ASTLiteral)(literals.iterator().next())).isLongLiteral());
38 }
39
40 @Test
41 public void testIsFloatFloatLiteral() throws Throwable {
42 Set literals = getNodes(ASTLiteral.class, TEST5);
43 assertTrue(((ASTLiteral)(literals.iterator().next())).isFloatLiteral());
44 }
45
46 @Test
47 public void testIsFloatDoubleLiteral() throws Throwable {
48 Set literals = getNodes(ASTLiteral.class, TEST6);
49 assertTrue(((ASTLiteral)(literals.iterator().next())).isDoubleLiteral());
50 }
51
52 @Test
53 public void testIsCharLiteral() throws Throwable {
54 Set literals = getNodes(ASTLiteral.class, TEST7);
55 assertTrue(((ASTLiteral)(literals.iterator().next())).isCharLiteral());
56 }
57
58 @Test
59 public void testStringUnicodeEscapesNotEscaped() {
60 ASTLiteral literal = new ASTLiteral(1);
61 literal.setStringLiteral();
62 literal.setImage("abcüabc");
63 literal.testingOnly__setBeginColumn(1);
64 literal.testingOnly__setEndColumn(7);
65 assertEquals("abcüabc", literal.getEscapedStringLiteral());
66 assertEquals("abcüabc", literal.getImage());
67 }
68
69 @Test
70 public void testStringUnicodeEscapesInvalid() {
71 ASTLiteral literal = new ASTLiteral(1);
72 literal.setStringLiteral();
73 literal.setImage("abc\\uXYZAabc");
74 literal.testingOnly__setBeginColumn(1);
75 literal.testingOnly__setEndColumn(12);
76 assertEquals("abc\\uXYZAabc", literal.getEscapedStringLiteral());
77 assertEquals("abc\\uXYZAabc", literal.getImage());
78 }
79
80 @Test
81 public void testStringUnicodeEscapesValid() {
82 ASTLiteral literal = new ASTLiteral(1);
83 literal.setStringLiteral();
84 literal.setImage("abc\u1234abc");
85 literal.testingOnly__setBeginColumn(1);
86 literal.testingOnly__setEndColumn(12);
87 assertEquals("abc\\u1234abc", literal.getEscapedStringLiteral());
88 assertEquals("abcሴabc", literal.getImage());
89 }
90
91 @Test
92 public void testCharacterUnicodeEscapesValid() {
93 ASTLiteral literal = new ASTLiteral(1);
94 literal.setCharLiteral();
95 literal.setImage("\u0030");
96 literal.testingOnly__setBeginColumn(1);
97 literal.testingOnly__setEndColumn(6);
98 assertEquals("\\u0030", literal.getEscapedStringLiteral());
99 assertEquals("0", literal.getImage());
100 }
101
102 private static final String TEST1 =
103 "public class Foo {" + PMD.EOL +
104 " String x = \"foo\";" + PMD.EOL +
105 "}";
106
107 private static final String TEST2 =
108 "public class Foo {" + PMD.EOL +
109 " int x = 42;" + PMD.EOL +
110 "}";
111
112 private static final String TEST3 =
113 "public class Foo {" + PMD.EOL +
114 " int x = 42;" + PMD.EOL +
115 "}";
116
117 private static final String TEST4 =
118 "public class Foo {" + PMD.EOL +
119 " long x = 42L;" + PMD.EOL +
120 "}";
121
122 private static final String TEST5 =
123 "public class Foo {" + PMD.EOL +
124 " float x = 3.14159f;" + PMD.EOL +
125 "}";
126
127 private static final String TEST6 =
128 "public class Foo {" + PMD.EOL +
129 " double x = 3.14159;" + PMD.EOL +
130 "}";
131
132 private static final String TEST7 =
133 "public class Foo {" + PMD.EOL +
134 " char x = 'x';" + PMD.EOL +
135 "}";
136 }