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.io.StringReader; 16 import java.util.HashMap; 17 import java.util.Iterator; 18 import java.util.Map; 19 20 public class MatchAlgorithmTest extends TestCase { 21 22 public static final String LINE_1 = "public class Foo { "; 23 public static final String LINE_2 = " public void bar() {"; 24 public static final String LINE_3 = " System.out.println(\"hello\");"; 25 public static final String LINE_4 = " System.out.println(\"hello\");"; 26 public static final String LINE_5 = " }"; 27 public static final String LINE_6 = "}"; 28 29 public static String getSampleCode() { 30 return 31 LINE_1 + PMD.EOL + 32 LINE_2 + PMD.EOL + 33 LINE_3 + PMD.EOL + 34 LINE_4 + PMD.EOL + 35 LINE_5 + PMD.EOL + 36 LINE_6; 37 } 38 39 public void testSimple() throws Throwable { 40 String code = getSampleCode(); 41 JavaTokenizer tokenizer = new JavaTokenizer(); 42 SourceCode sourceCode = new SourceCode("Foo.java"); 43 Tokens tokens = new Tokens(); 44 TokenEntry.clearImages(); 45 sourceCode.readSource(new StringReader(code)); 46 tokenizer.tokenize(sourceCode, tokens); 47 assertEquals(29, tokens.size()); 48 Map codeMap = new HashMap(); 49 codeMap.put("Foo.java", sourceCode); 50 51 MatchAlgorithm matchAlgorithm = new MatchAlgorithm(codeMap, tokens, 5); 52 matchAlgorithm.findMatches(); 53 Iterator matches = matchAlgorithm.matches(); 54 Match match = (Match)matches.next(); 55 assertFalse(matches.hasNext()); 56 57 Iterator marks = match.iterator(); 58 TokenEntry mark1 = (TokenEntry)marks.next(); 59 TokenEntry mark2 = (TokenEntry)marks.next(); 60 assertTrue(!marks.hasNext()); 61 62 assertEquals(3, mark1.getBeginLine()); 63 assertEquals(4, mark2.getBeginLine()); 64 assertTrue("Foo.java" == mark1.getTokenSrcID() && "Foo.java" == mark2.getTokenSrcID()); 65 assertEquals(LINE_3, match.getSourceCodeSlice()); 66 } 67 }