diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java index b0025deb2b..43b8b85aad 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java @@ -3,41 +3,19 @@ */ package net.sourceforge.pmd.cpd; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.PrintStream; -import java.io.UnsupportedEncodingException; import java.util.regex.Pattern; -import org.junit.After; +import net.sourceforge.pmd.cli.BaseCPDCLITest; + import org.junit.Assert; -import org.junit.Before; import org.junit.Test; /** * Unit test for {@link CPDCommandLineInterface}. * */ -public class CPDCommandLineInterfaceTest { - private ByteArrayOutputStream bufferStdout; - private PrintStream originalStdout; - private PrintStream originalStderr; - - @Before - public void setup() throws UnsupportedEncodingException { - originalStdout = System.out; - originalStderr = System.err; - bufferStdout = new ByteArrayOutputStream(); - System.setOut(new PrintStream(bufferStdout, false, "UTF-8")); - System.setErr(System.out); - } - - @After - public void teardown() { - System.setOut(originalStdout); - System.setErr(originalStderr); - } - +public class CPDCommandLineInterfaceTest extends BaseCPDCLITest { /** * Test ignore identifiers argument. */ @@ -45,7 +23,7 @@ public class CPDCommandLineInterfaceTest { public void testIgnoreIdentifiers() throws Exception { runCPD("--minimum-tokens", "34", "--language", "java", "--files", "src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--ignore-identifiers"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(out.contains("Found a 7 line (36 tokens) duplication")); } @@ -60,7 +38,7 @@ public class CPDCommandLineInterfaceTest { "--exclude", "src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java" ); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertFalse(out.contains("Found a 7 line (34 tokens) duplication")); } @@ -83,7 +61,7 @@ public class CPDCommandLineInterfaceTest { // reset default encoding System.setProperty("file.encoding", origEncoding); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(out.startsWith("")); Assert.assertTrue(Pattern.compile("System\\.out\\.println\\([ij] \\+ \"รค\"\\);").matcher(out).find()); } @@ -99,7 +77,7 @@ public class CPDCommandLineInterfaceTest { "--files", "src/test/resources/net/sourceforge/pmd/cpd/badandgood/", "--format", "text", "--skip-lexical-errors"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(Pattern.compile("Skipping .*?BadFile\\.java\\. Reason: Lexical error in file").matcher(out).find()); Assert.assertTrue(out.contains("Found a 5 line (13 tokens) duplication")); } @@ -110,7 +88,7 @@ public class CPDCommandLineInterfaceTest { "--language", "java", "--files", "src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--format", "xml"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(out.contains("")); } @@ -120,12 +98,7 @@ public class CPDCommandLineInterfaceTest { "--files", "src/test/resources/net/sourceforge/pmd/cpd/badandgood/", "--language", "c", "--format", "csv"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertFalse(out.contains("Couldn't instantiate renderer")); } - - private void runCPD(String... args) { - System.setProperty(CPDCommandLineInterface.NO_EXIT_AFTER_RUN, "true"); - CPD.main(args); - } } diff --git a/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java b/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java index 38b0c8ec73..a36f167686 100644 --- a/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java +++ b/pmd-javascript/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java @@ -3,54 +3,26 @@ */ package net.sourceforge.pmd.cpd; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.io.UnsupportedEncodingException; +import net.sourceforge.pmd.cli.BaseCPDCLITest; -import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -public class CPDCommandLineInterfaceTest { - private ByteArrayOutputStream bufferStdout; - private PrintStream originalStdout; - private PrintStream originalStderr; - - @Before - public void setup() throws UnsupportedEncodingException { - originalStdout = System.out; - originalStderr = System.err; - bufferStdout = new ByteArrayOutputStream(); - System.setOut(new PrintStream(bufferStdout, false, "UTF-8")); - System.setErr(System.out); - } - - @After - public void teardown() { - System.setOut(originalStdout); - System.setErr(originalStderr); - } - +public class CPDCommandLineInterfaceTest extends BaseCPDCLITest { @Test - public void shouldFindDuplicatesWithDifferentFileExtensions() throws Exception { + public void shouldFindDuplicatesWithDifferentFileExtensions() { runCPD("--minimum-tokens", "5", "--language", "js", "--files", "src/test/resources/net/sourceforge/pmd/cpd/ts/File1.ts", "src/test/resources/net/sourceforge/pmd/cpd/ts/File2.ts"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(out.contains("Found a 9 line (30 tokens) duplication in the following files")); } @Test - public void shouldFindNoDuplicatesWithDifferentFileExtensions() throws Exception { + public void shouldFindNoDuplicatesWithDifferentFileExtensions() { runCPD("--minimum-tokens", "5", "--language", "js", "--files", "src/test/resources/net/sourceforge/pmd/cpd/ts/"); - String out = bufferStdout.toString("UTF-8"); + String out = getOutput(); Assert.assertTrue(out.isEmpty()); } - - private void runCPD(String ... args) { - System.setProperty(CPDCommandLineInterface.NO_EXIT_AFTER_RUN, "true"); - CPD.main(args); - } } diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCPDCLITest.java b/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCPDCLITest.java new file mode 100644 index 0000000000..2ab113fe97 --- /dev/null +++ b/pmd-test/src/main/java/net/sourceforge/pmd/cli/BaseCPDCLITest.java @@ -0,0 +1,48 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ +package net.sourceforge.pmd.cli; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; + +import net.sourceforge.pmd.cpd.CPD; +import net.sourceforge.pmd.cpd.CPDCommandLineInterface; + +import org.junit.After; +import org.junit.Before; + +public abstract class BaseCPDCLITest { + private ByteArrayOutputStream bufferStdout; + private PrintStream originalStdout; + private PrintStream originalStderr; + + @Before + public void setup() throws UnsupportedEncodingException { + originalStdout = System.out; + originalStderr = System.err; + bufferStdout = new ByteArrayOutputStream(); + System.setOut(new PrintStream(bufferStdout, false, "UTF-8")); + System.setErr(System.out); + } + + @After + public void teardown() { + System.setOut(originalStdout); + System.setErr(originalStderr); + } + + public final String getOutput() { + try { + return bufferStdout.toString("UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + protected void runCPD(String ... args) { + System.setProperty(CPDCommandLineInterface.NO_EXIT_AFTER_RUN, "true"); + CPD.main(args); + } +}