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 }