From e48fc7cca259f0efcae7135ae27e5143b3e092af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Sat, 13 Jun 2020 19:16:22 +0200 Subject: [PATCH] Convert JS tests --- .../pmd/cpd/EcmascriptTokenizerTest.java | 160 ++++-------------- .../cpd/testdata/lineContinuations.js | 4 + .../cpd/testdata/lineContinuations.txt | 16 ++ .../cpd/testdata/multilineCommentIgnore.js | 10 ++ .../cpd/testdata/multilineCommentIgnore.txt | 12 ++ .../lang/ecmascript/cpd/testdata/simple.js | 7 + .../lang/ecmascript/cpd/testdata/simple.txt | 48 ++++++ .../cpd/testdata/simpleWithSemis.js | 7 + .../cpd/testdata/simpleWithSemis.txt | 53 ++++++ .../cpd/testdata/singleLineCommentIgnore.js | 6 + .../cpd/testdata/singleLineCommentIgnore.txt | 12 ++ .../cpd/testdata/specialComments.js | 6 + .../cpd/testdata/specialComments.txt | 4 + .../cpd/testdata/templateStrings.js | 14 ++ .../cpd/testdata/templateStrings.txt | 36 ++++ 15 files changed, 268 insertions(+), 127 deletions(-) create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.txt create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.js create mode 100644 pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.txt diff --git a/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/EcmascriptTokenizerTest.java b/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/EcmascriptTokenizerTest.java index fab4e6f9fc..31b629d3c9 100644 --- a/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/EcmascriptTokenizerTest.java +++ b/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/EcmascriptTokenizerTest.java @@ -4,158 +4,64 @@ package net.sourceforge.pmd.cpd; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - -import java.io.IOException; -import java.util.List; - +import org.jetbrains.annotations.NotNull; import org.junit.Test; -import net.sourceforge.pmd.PMD; +import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest; -public class EcmascriptTokenizerTest { +public class EcmascriptTokenizerTest extends CpdTextComparisonTest { - @Test - public void test1() throws IOException { - Tokenizer tokenizer = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(getCode1())); - Tokens tokens = new Tokens(); - tokenizer.tokenize(sourceCode, tokens); - assertEquals(40, tokens.size()); + public EcmascriptTokenizerTest() { + super(".js"); + } + + @NotNull + @Override + public Tokenizer newTokenizer() { + return new EcmascriptTokenizer(); + } + + @NotNull + @Override + protected String getResourcePrefix() { + return "../lang/ecmascript/cpd/testdata"; } @Test - public void test2() throws IOException { - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(getCode2())); - Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - assertEquals(45, tokens.size()); + public void testSimple() { + doTest("simple"); } @Test - public void testIgnoreBetweenSpecialComments() throws IOException { - final String code = "// CPD-OFF" + PMD.EOL - + "function switchToRealPassword() {" + PMD.EOL - + "var real = $('realPass');" + PMD.EOL - + " var prompt = $('promptPass');" + PMD.EOL - + "// CPD-ON" + PMD.EOL - + "}" + PMD.EOL; + public void testSimplewithSemis() { + doTest("simpleWithSemis"); + } - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader(code)); - Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - assertEquals(2, tokens.size()); // Only "}" and EOL + @Test + public void testIgnoreBetweenSpecialComments() { + doTest("specialComments"); } /** * See: https://sourceforge.net/p/pmd/bugs/1239/ - * - * @throws IOException - * IO Exception */ @Test - public void parseStringNotAsMultiline() throws IOException { - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader( - "var s = \"a string \\\n" + "continues\";\n" + "var s = \"a string \\\n" + "continues2\";\n")); - Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - assertEquals(11, tokens.size()); - List list = tokens.getTokens(); - assertEquals("var", list.get(0).getIdentifier(), list.get(5).getIdentifier()); - assertEquals("s", list.get(1).getIdentifier(), list.get(6).getIdentifier()); - assertEquals("=", list.get(2).getIdentifier(), list.get(7).getIdentifier()); - assertEquals("\"a string continues\"", list.get(3).toString()); - assertEquals("\"a string continues2\"", list.get(8).toString()); - assertFalse(list.get(3).getIdentifier() == list.get(8).getIdentifier()); + public void parseStringNotAsMultiline() { + doTest("lineContinuations"); } @Test - public void testIgnoreSingleLineComments() throws IOException { - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader( - "//This is a single line comment\n" + "var i = 0;\n\n" + "//This is another comment\n" + "i++;")); - Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - assertEquals(9, tokens.size()); - List list = tokens.getTokens(); - assertEquals("var", list.get(0).toString()); - assertEquals("++", list.get(6).toString()); + public void testIgnoreSingleLineComments() { + doTest("singleLineCommentIgnore"); } @Test - public void testIgnoreMultiLineComments() throws IOException { - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader("/* This is a multi line comment\n" - + " * \n" + " */ \n" + "var i = 0;\n\n" - + "/* This is another multi line comment\n" + " * second line \n" - + " * third line */\n" + "i++;")); - Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - assertEquals(9, tokens.size()); - List list = tokens.getTokens(); - assertEquals("var", list.get(0).toString()); - assertEquals("++", list.get(6).toString()); - } - - // no semi-colons - private String getCode1() { - StringBuilder sb = new StringBuilder(); - sb.append("function switchToRealPassword() {").append(PMD.EOL); - sb.append(" var real = $('realPass')").append(PMD.EOL); - sb.append(" var prompt = $('promptPass')").append(PMD.EOL); - sb.append(" real.style.display = 'inline'").append(PMD.EOL); - sb.append(" prompt.style.display = 'none'").append(PMD.EOL); - sb.append(" real.focus()").append(PMD.EOL); - sb.append("}").append(PMD.EOL); - return sb.toString(); - } - - // same as getCode1, but lines are ended with semi-colons - private String getCode2() { - StringBuilder sb = new StringBuilder(); - sb.append("function switchToRealPassword() {").append(PMD.EOL); - sb.append(" var real = $('realPass');").append(PMD.EOL); - sb.append(" var prompt = $('promptPass');").append(PMD.EOL); - sb.append(" real.style.display = 'inline';").append(PMD.EOL); - sb.append(" prompt.style.display = 'none';").append(PMD.EOL); - sb.append(" real.focus();").append(PMD.EOL); - sb.append("}").append(PMD.EOL); - return sb.toString(); + public void testIgnoreMultiLineComments() { + doTest("multilineCommentIgnore"); } @Test - public void testTemplateStrings() throws IOException { - Tokenizer t = new EcmascriptTokenizer(); - SourceCode sourceCode = new SourceCode(new SourceCode.StringCodeLoader( - "export default class DrawLocation extends joint.shapes.basic.Generic {" + PMD.EOL - + " constructor(location: ILocation) {" + PMD.EOL - + " this.markup = `" + PMD.EOL - + " " + PMD.EOL - + " " + PMD.EOL - + PMD.EOL - + " " + PMD.EOL - + " " + PMD.EOL - + " ${drawIndicators.Check.markup}" + PMD.EOL - + PMD.EOL - + " `;" + PMD.EOL - + " }" + PMD.EOL - + "" + PMD.EOL - + "}")); - final Tokens tokens = new Tokens(); - t.tokenize(sourceCode, tokens); - final String templateString = "`\n" - + " " + "\n" - + " " + "\n" - + "\n" - + " " + "\n" - + " " + "\n" - + " ${drawIndicators.Check.markup}" + "\n" - + "\n" - + " `"; - assertEquals(templateString, tokens.getTokens().get(24).toString()); + public void testTemplateStrings() { + doTest("templateStrings"); } } diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.js new file mode 100644 index 0000000000..d35601feaa --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.js @@ -0,0 +1,4 @@ +var s = "a string \ +continues"; +var s = "a string \ +continues2"; diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.txt new file mode 100644 index 0000000000..ea92404fb7 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/lineContinuations.txt @@ -0,0 +1,16 @@ + [Image] or [Truncated image[ Bcol Ecol +L1 + [var] 1 3 + [s] 5 5 + [=] 7 7 + ["a string continues"] 9 10 +L2 + [;] 11 11 +L3 + [var] 1 3 + [s] 5 5 + [=] 7 7 + ["a string continues2"] 9 11 +L4 + [;] 12 12 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.js new file mode 100644 index 0000000000..ed40ce6d70 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.js @@ -0,0 +1,10 @@ + +/* This is a multi line comment + * + */ +var i = 0; + +/* This is another multi line comment + * second line + * third line */ +i++; \ No newline at end of file diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.txt new file mode 100644 index 0000000000..af3db2521e --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/multilineCommentIgnore.txt @@ -0,0 +1,12 @@ + [Image] or [Truncated image[ Bcol Ecol +L5 + [var] 1 3 + [i] 5 5 + [=] 7 7 + [0] 9 9 + [;] 10 10 +L10 + [i] 1 1 + [++] 2 3 + [;] 4 4 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.js new file mode 100644 index 0000000000..b9c17dc4b3 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.js @@ -0,0 +1,7 @@ +function switchToRealPassword() { + var real = $('realPass') + var prompt = $('promptPass') + real.style.display = 'inline' + prompt.style.display = 'none' + real.focus() +} diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.txt new file mode 100644 index 0000000000..fdef8f2929 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simple.txt @@ -0,0 +1,48 @@ + [Image] or [Truncated image[ Bcol Ecol +L1 + [function] 1 8 + [switchToRealPassword] 10 29 + [(] 30 30 + [)] 31 31 + [{] 33 33 +L2 + [var] 5 7 + [real] 9 12 + [=] 14 14 + [$] 16 16 + [(] 17 17 + ['realPass'] 18 27 + [)] 28 28 +L3 + [var] 5 7 + [prompt] 9 14 + [=] 16 16 + [$] 18 18 + [(] 19 19 + ['promptPass'] 20 31 + [)] 32 32 +L4 + [real] 5 8 + [.] 9 9 + [style] 10 14 + [.] 15 15 + [display] 16 22 + [=] 24 24 + ['inline'] 26 33 +L5 + [prompt] 5 10 + [.] 11 11 + [style] 12 16 + [.] 17 17 + [display] 18 24 + [=] 26 26 + ['none'] 28 33 +L6 + [real] 5 8 + [.] 9 9 + [focus] 10 14 + [(] 15 15 + [)] 16 16 +L7 + [}] 1 1 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.js new file mode 100644 index 0000000000..86c9a74bbb --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.js @@ -0,0 +1,7 @@ +function switchToRealPassword() { + var real = $('realPass'); + var prompt = $('promptPass'); + real.style.display = 'inline'; + prompt.style.display = 'none'; + real.focus(); +} diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.txt new file mode 100644 index 0000000000..6b93fd8c96 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/simpleWithSemis.txt @@ -0,0 +1,53 @@ + [Image] or [Truncated image[ Bcol Ecol +L1 + [function] 1 8 + [switchToRealPassword] 10 29 + [(] 30 30 + [)] 31 31 + [{] 33 33 +L2 + [var] 5 7 + [real] 9 12 + [=] 14 14 + [$] 16 16 + [(] 17 17 + ['realPass'] 18 27 + [)] 28 28 + [;] 29 29 +L3 + [var] 5 7 + [prompt] 9 14 + [=] 16 16 + [$] 18 18 + [(] 19 19 + ['promptPass'] 20 31 + [)] 32 32 + [;] 33 33 +L4 + [real] 5 8 + [.] 9 9 + [style] 10 14 + [.] 15 15 + [display] 16 22 + [=] 24 24 + ['inline'] 26 33 + [;] 34 34 +L5 + [prompt] 5 10 + [.] 11 11 + [style] 12 16 + [.] 17 17 + [display] 18 24 + [=] 26 26 + ['none'] 28 33 + [;] 34 34 +L6 + [real] 5 8 + [.] 9 9 + [focus] 10 14 + [(] 15 15 + [)] 16 16 + [;] 17 17 +L7 + [}] 1 1 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.js new file mode 100644 index 0000000000..84ebb94742 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.js @@ -0,0 +1,6 @@ + +//This is a single line comment +var i = 0; + +//This is another comment +i++; \ No newline at end of file diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.txt new file mode 100644 index 0000000000..86392d90fc --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/singleLineCommentIgnore.txt @@ -0,0 +1,12 @@ + [Image] or [Truncated image[ Bcol Ecol +L3 + [var] 1 3 + [i] 5 5 + [=] 7 7 + [0] 9 9 + [;] 10 10 +L6 + [i] 1 1 + [++] 2 3 + [;] 4 4 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.js new file mode 100644 index 0000000000..668fb642f0 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.js @@ -0,0 +1,6 @@ +// CPD-OFF +function switchToRealPassword() { + var real = $('realPass'); + var prompt = $('promptPass'); +// CPD-ON +} diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.txt new file mode 100644 index 0000000000..7c7cfed6c8 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/specialComments.txt @@ -0,0 +1,4 @@ + [Image] or [Truncated image[ Bcol Ecol +L6 + [}] 1 1 +EOF diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.js b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.js new file mode 100644 index 0000000000..a8c25859f8 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.js @@ -0,0 +1,14 @@ +export default class DrawLocation extends joint.shapes.basic.Generic { + constructor(location: ILocation) { + this.markup = ` + + + + + + ${drawIndicators.Check.markup} + + `; + } + +} \ No newline at end of file diff --git a/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.txt b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.txt new file mode 100644 index 0000000000..0faadccf28 --- /dev/null +++ b/pmd-javascript/src/test/resources/net/sourceforge/pmd/lang/ecmascript/cpd/testdata/templateStrings.txt @@ -0,0 +1,36 @@ + [Image] or [Truncated image[ Bcol Ecol +L1 + [export] 1 6 + [default] 8 14 + [class] 16 20 + [DrawLocation] 22 33 + [extends] 35 41 + [joint] 43 47 + [.] 48 48 + [shapes] 49 54 + [.] 55 55 + [basic] 56 60 + [.] 61 61 + [Generic] 62 68 + [{] 70 70 +L2 + [constructor] 5 15 + [(] 16 16 + [location] 17 24 + [:] 25 25 + [ILocation] 27 35 + [)] 36 36 + [{] 38 38 +L3 + [this] 9 12 + [.] 13 13 + [markup] 14 19 + [=] 21 21 + [`\n