/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.cpd;
import java.io.IOException;
import java.util.regex.Pattern;
import org.junit.Assert;
import org.junit.Test;
import net.sourceforge.pmd.cli.BaseCPDCLITest;
/**
* Unit test for {@link CPDCommandLineInterface}.
*
*/
public class CPDCommandLineInterfaceTest extends BaseCPDCLITest {
/**
* Test ignore identifiers argument.
*/
@Test
public void testIgnoreIdentifiers() throws Exception {
runCPD("--minimum-tokens", "34", "--language", "java", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--ignore-identifiers");
String out = getOutput();
Assert.assertTrue(out.contains("Found a 7 line (36 tokens) duplication"));
Assert.assertEquals(4, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
/**
* Test ignore identifiers argument with failOnViolation=false
*/
@Test
public void testIgnoreIdentifiersFailOnViolationFalse() throws Exception {
runCPD("--minimum-tokens", "34", "--language", "java", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--ignore-identifiers", "--failOnViolation",
"false");
String out = getOutput();
Assert.assertTrue(out.contains("Found a 7 line (36 tokens) duplication"));
Assert.assertEquals(0, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
/**
* Test excludes option.
*/
@Test
public void testExcludes() throws Exception {
runCPD("--minimum-tokens", "34", "--language", "java", "--ignore-identifiers", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--exclude",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java");
String out = getOutput();
Assert.assertFalse(out.contains("Found a 7 line (34 tokens) duplication"));
Assert.assertEquals(0, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
/**
* #1144 CPD encoding argument has no effect
*/
@Test
public void testEncodingOption() throws Exception {
String origEncoding = System.getProperty("file.encoding");
// set the default encoding under Windows
System.setProperty("file.encoding", "Cp1252");
runCPD("--minimum-tokens", "34", "--language", "java", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--ignore-identifiers", "--format", "xml",
// request UTF-8 for CPD
"--encoding", "UTF-8");
// reset default encoding
System.setProperty("file.encoding", origEncoding);
String out = getOutput();
Assert.assertTrue(out.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
Assert.assertTrue(Pattern.compile("System\\.out\\.println\\([ij] \\+ \"รค\"\\);").matcher(out).find());
Assert.assertEquals(4, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
/**
* See: https://sourceforge.net/p/pmd/bugs/1178/
*
* @throws IOException
* any error
*/
@Test
public void testBrokenAndValidFile() throws IOException {
runCPD("--minimum-tokens", "10", "--language", "java", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/badandgood/", "--format", "text", "--skip-lexical-errors");
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"));
Assert.assertEquals(4, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
@Test
public void testFormatXmlWithoutEncoding() throws Exception {
runCPD("--minimum-tokens", "10", "--language", "java", "--files",
"src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--format", "xml");
String out = getOutput();
Assert.assertTrue(out.contains("<duplication lines=\"3\" tokens=\"10\">"));
Assert.assertEquals(4, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
@Test
public void testCSVFormat() throws Exception {
runCPD("--minimum-tokens", "100", "--files", "src/test/resources/net/sourceforge/pmd/cpd/badandgood/",
"--language", "c", "--format", "csv");
String out = getOutput();
Assert.assertFalse(out.contains("Couldn't instantiate renderer"));
Assert.assertEquals(0, Integer.parseInt(System.getProperty(CPDCommandLineInterface.STATUS_CODE_PROPERTY)));
}
}