1 package net.sourceforge.pmd.cpd; 2 3 import static org.junit.Assert.assertEquals; 4 import net.sourceforge.pmd.PMD; 5 import net.sourceforge.pmd.cpd.CPPTokenizer; 6 import net.sourceforge.pmd.cpd.SourceCode; 7 import net.sourceforge.pmd.cpd.Tokens; 8 9 import org.junit.Test; 10 11 public class CPPTokenizerTest { 12 13 @Test 14 public void testMultiLineMacros() throws Throwable { 15 Tokens tokens = parse(TEST1); 16 assertEquals(7, tokens.size()); 17 } 18 19 @Test 20 public void testDollarSignInIdentifier() { 21 parse(TEST2); 22 } 23 24 @Test 25 public void testDollarSignStartingIdentifier() { 26 parse(TEST3); 27 } 28 29 @Test 30 public void testWideCharacters() { 31 parse(TEST4); 32 } 33 34 @Test 35 public void testContinuation_IntraToken() { 36 Tokens tokens = parse(TEST5); 37 assertEquals(7, tokens.size()); 38 } 39 40 @Test 41 public void testContinuation_InterToken() { 42 Tokens tokens = parse(TEST6); 43 assertEquals(17, tokens.size()); 44 } 45 46 private Tokens parse(String snippet) { 47 CPPTokenizer tokenizer = new CPPTokenizer(); 48 SourceCode code = new SourceCode(new SourceCode.StringCodeLoader(snippet)); 49 Tokens tokens = new Tokens(); 50 tokenizer.tokenize(code, tokens); 51 return tokens; 52 } 53 54 private static final String TEST1 = 55 "#define FOO a +\\" + PMD.EOL + 56 " b +\\" + PMD.EOL + 57 " c +\\" + PMD.EOL + 58 " d +\\" + PMD.EOL + 59 " e +\\" + PMD.EOL + 60 " f +\\" + PMD.EOL + 61 " g" + PMD.EOL + 62 " void main() {}"; 63 64 private static final String TEST2 = 65 " void main() { int x$y = 42; }"; 66 67 private static final String TEST3 = 68 " void main() { int $x = 42; }"; 69 70 private static final String TEST4 = 71 " void main() { char x = L'a'; }"; 72 73 private static final String TEST5 = 74 "v\\" + PMD.EOL + 75 "o\\" + PMD.EOL + 76 "i\\" + PMD.EOL + 77 "d\\" + PMD.EOL + 78 " \\" + PMD.EOL + 79 "m\\" + PMD.EOL + 80 "a\\" + PMD.EOL + 81 "i\\" + PMD.EOL + 82 "n\\" + PMD.EOL + 83 "(\\" + PMD.EOL + 84 ")\\" + PMD.EOL + 85 " \\" + PMD.EOL + 86 "{\\" + PMD.EOL + 87 " \\" + PMD.EOL + 88 "}\\" + PMD.EOL; 89 90 private static final String TEST6 = 91 "#include <iostream>" + PMD.EOL + 92 PMD.EOL + 93 "int main()" + PMD.EOL + 94 "{" + PMD.EOL + 95 " std::cout << \"Hello, \" \\" + PMD.EOL + 96 " \"world!\\n\";" + PMD.EOL + 97 " return 0;" + PMD.EOL + 98 "}"; 99 100 public static junit.framework.Test suite() { 101 return new junit.framework.JUnit4TestAdapter(CPPTokenizerTest.class); 102 } 103 }