View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.cpd;
5   
6   import static org.junit.Assert.assertEquals;
7   
8   import java.io.File;
9   import java.util.ArrayList;
10  
11  import net.sourceforge.pmd.PMD;
12  import net.sourceforge.pmd.cpd.SourceCode.FileCodeLoader;
13  
14  import org.junit.Test;
15  
16  public class SourceCodeTest {
17      private static final String BASE_RESOURCE_PATH = 
18              "src/test/resources/net/sourceforge/pmd/cpd/files/";
19  	
20      private static final String SAMPLE_CODE =
21              "Line 1\n" +
22              "Line 2\n" +
23              "Line 3\n" +
24              "Line 4\n";
25  
26      @Test
27      public void testSimple() throws Throwable {
28          Tokenizer tokenizer = new AbstractTokenizer() {
29              {
30                  this.stringToken = new ArrayList<String>();
31                  this.ignorableCharacter = new ArrayList<String>();
32                  this.ignorableStmt = new ArrayList<String>();
33              }
34          };
35          SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(SAMPLE_CODE, "Foo.java"));
36          assertEquals("Foo.java", sourceCode.getFileName());
37          tokenizer.tokenize(sourceCode, new Tokens());
38  
39          assertEquals("Line 1", sourceCode.getSlice(1, 1));
40          assertEquals("Line 2", sourceCode.getSlice(2, 2));
41          assertEquals("Line 1" + PMD.EOL + "Line 2", sourceCode.getSlice(1, 2));
42      }
43  
44      @Test
45      public void testEncodingDetectionFromBOM() throws Exception {
46           FileCodeLoader loader = 
47                  new SourceCode.FileCodeLoader(new File(BASE_RESOURCE_PATH + "file_with_utf8_bom.java"), "ISO-8859-1");
48  
49           //The encoding detection is done when the reader is created
50           loader.getReader();
51           assertEquals("UTF-8", loader.getEncoding());
52      }
53  
54      @Test
55      public void testEncodingIsNotChangedWhenThereIsNoBOM() throws Exception {
56          FileCodeLoader loader = 
57                  new SourceCode.FileCodeLoader(new File(BASE_RESOURCE_PATH + "file_with_ISO-8859-1_encoding.java"), "ISO-8859-1");
58  
59          //The encoding detection is done when the reader is created
60          loader.getReader();
61          assertEquals("ISO-8859-1", loader.getEncoding());
62     }
63  }