KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > net > sourceforge > pmd > cpd > MatchAlgorithmTest


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package test.net.sourceforge.pmd.cpd;
5
6 import junit.framework.TestCase;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.cpd.JavaTokenizer;
9 import net.sourceforge.pmd.cpd.Match;
10 import net.sourceforge.pmd.cpd.MatchAlgorithm;
11 import net.sourceforge.pmd.cpd.SourceCode;
12 import net.sourceforge.pmd.cpd.TokenEntry;
13 import net.sourceforge.pmd.cpd.Tokens;
14
15 import java.util.HashMap JavaDoc;
16 import java.util.Iterator JavaDoc;
17 import java.util.Map JavaDoc;
18
19 public class MatchAlgorithmTest extends TestCase {
20
21     public static final String JavaDoc LINE_1 = "public class Foo { ";
22     public static final String JavaDoc LINE_2 = " public void bar() {";
23     public static final String JavaDoc LINE_3 = " System.out.println(\"hello\");";
24     public static final String JavaDoc LINE_4 = " System.out.println(\"hello\");";
25     public static final String JavaDoc LINE_5 = " int i = 5";
26     public static final String JavaDoc LINE_6 = " System.out.print(\"hello\");";
27     public static final String JavaDoc LINE_7 = " }";
28     public static final String JavaDoc LINE_8 = "}";
29
30     public static String JavaDoc getSampleCode() {
31         return
32                 LINE_1 + PMD.EOL +
33                 LINE_2 + PMD.EOL +
34                 LINE_3 + PMD.EOL +
35                 LINE_4 + PMD.EOL +
36                 LINE_5 + PMD.EOL +
37                 LINE_6 + PMD.EOL +
38                 LINE_7 + PMD.EOL +
39                 LINE_8;
40     }
41
42     public void testSimple() throws Throwable JavaDoc {
43         JavaTokenizer tokenizer = new JavaTokenizer();
44         SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(getSampleCode(), "Foo.java"));
45         Tokens tokens = new Tokens();
46         TokenEntry.clearImages();
47         tokenizer.tokenize(sourceCode, tokens);
48         assertEquals(41, tokens.size());
49         Map JavaDoc codeMap = new HashMap JavaDoc();
50         codeMap.put("Foo.java", sourceCode);
51
52         MatchAlgorithm matchAlgorithm = new MatchAlgorithm(codeMap, tokens, 5);
53         matchAlgorithm.findMatches();
54         Iterator JavaDoc matches = matchAlgorithm.matches();
55         Match match = (Match) matches.next();
56         assertFalse(matches.hasNext());
57
58         Iterator JavaDoc marks = match.iterator();
59         TokenEntry mark1 = (TokenEntry) marks.next();
60         TokenEntry mark2 = (TokenEntry) marks.next();
61         assertFalse(marks.hasNext());
62
63         assertEquals(3, mark1.getBeginLine());
64         assertEquals(4, mark2.getBeginLine());
65         assertTrue("Foo.java" == mark1.getTokenSrcID() && "Foo.java" == mark2.getTokenSrcID());
66         assertEquals(LINE_3, match.getSourceCodeSlice());
67     }
68
69     public void testIgnore() throws Throwable JavaDoc {
70         JavaTokenizer tokenizer = new JavaTokenizer();
71         tokenizer.setIgnoreLiterals(true);
72         tokenizer.setIgnoreIdentifiers(true);
73         SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(getSampleCode(), "Foo.java"));
74         Tokens tokens = new Tokens();
75         TokenEntry.clearImages();
76         tokenizer.tokenize(sourceCode, tokens);
77         Map JavaDoc codeMap = new HashMap JavaDoc();
78         codeMap.put("Foo.java", sourceCode);
79
80         MatchAlgorithm matchAlgorithm = new MatchAlgorithm(codeMap, tokens, 5);
81         matchAlgorithm.findMatches();
82         Iterator JavaDoc matches = matchAlgorithm.matches();
83         Match match = (Match) matches.next();
84         assertFalse(matches.hasNext());
85
86         Iterator JavaDoc marks = match.iterator();
87         marks.next();
88         marks.next();
89         marks.next();
90         assertFalse(marks.hasNext());
91     }
92 }
93
Popular Tags