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.IOException;
9   import java.util.List;
10  
11  import net.sourceforge.pmd.PMD;
12  
13  import org.junit.Test;
14  
15  public class EcmascriptTokenizerTest {
16  
17      @Test
18      public void test1() throws Throwable {
19          Tokenizer tokenizer = new EcmascriptTokenizer();
20          SourceCode sourceCode = new SourceCode( new SourceCode.StringCodeLoader( getCode1() ) );
21          Tokens tokens = new Tokens();
22          tokenizer.tokenize( sourceCode, tokens );
23          assertEquals( 22, tokens.size() );
24      }
25  
26      @Test
27      public void test2() throws Throwable {
28          Tokenizer t = new EcmascriptTokenizer();
29          SourceCode sourceCode = new SourceCode( new SourceCode.StringCodeLoader( getCode2() ) );
30          Tokens tokens = new Tokens();
31          t.tokenize( sourceCode, tokens );
32          assertEquals( 22, tokens.size() );
33      }
34  
35      /**
36       * See: https://sourceforge.net/p/pmd/bugs/1239/
37       * @throws IOException IO Exception
38       */
39      @Test
40      public void parseStringNotAsMultiline() throws IOException {
41          Tokenizer t = new EcmascriptTokenizer();
42          SourceCode sourceCode = new SourceCode( new SourceCode.StringCodeLoader(
43                    "var s = \"a string\\\n"
44                  + "continues\";\n"
45                  + "var s = \"a string\\\n"
46                  + "continues2\";\n") );
47          Tokens tokens = new Tokens();
48          t.tokenize(sourceCode, tokens);
49          assertEquals(13, tokens.size());
50          List<TokenEntry> list = tokens.getTokens();
51          assertEquals("\"a string", list.get(3).getIdentifier(), list.get(9).getIdentifier());
52      }
53  
54      // no semi-colons
55      private String getCode1() {
56          StringBuilder sb = new StringBuilder();
57          sb.append( "function switchToRealPassword() {" ).append(PMD.EOL);
58          sb.append( "   var real = $('realPass')" ).append(PMD.EOL);
59          sb.append( "   var prompt = $('promptPass')" ).append(PMD.EOL);
60          sb.append( "   real.style.display = 'inline'" ).append(PMD.EOL);
61          sb.append( "   prompt.style.display = 'none'" ).append(PMD.EOL);
62          sb.append( "   real.focus()" ).append(PMD.EOL);
63          sb.append( "}" ).append(PMD.EOL);
64          return sb.toString();
65      }
66  
67      // same as getCode1, but lines are ended with semi-colons
68      private String getCode2() {
69          StringBuilder sb = new StringBuilder();
70          sb.append( "function switchToRealPassword() {" ).append(PMD.EOL);
71          sb.append( "   var real = $('realPass');" ).append(PMD.EOL);
72          sb.append( "   var prompt = $('promptPass');" ).append(PMD.EOL);
73          sb.append( "   real.style.display = 'inline';" ).append(PMD.EOL);
74          sb.append( "   prompt.style.display = 'none';" ).append(PMD.EOL);
75          sb.append( "   real.focus();" ).append(PMD.EOL);
76          sb.append( "}" ).append(PMD.EOL);
77          return sb.toString();
78      }
79  }