1
2
3
4 package net.sourceforge.pmd.cli;
5
6 import static org.junit.Assert.assertTrue;
7 import static org.junit.Assert.fail;
8
9 import java.io.File;
10 import java.io.FileNotFoundException;
11 import java.io.FileOutputStream;
12 import java.io.PrintStream;
13
14 import net.sourceforge.pmd.PMD;
15 import net.sourceforge.pmd.util.FileUtil;
16
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19
20
21
22
23
24
25 public class CLITest {
26
27 private static final String TEST_OUPUT_DIRECTORY = "target/cli-tests/";
28
29
30 private static final String SOURCE_FOLDER = "src/main/resources";
31
32
33
34
35 @BeforeClass
36 public static void setUp() throws Exception {
37 System.setProperty(PMDCommandLineInterface.NO_EXIT_AFTER_RUN, "true");
38 File testOuputDir = new File(TEST_OUPUT_DIRECTORY);
39 testOuputDir.mkdirs();
40
41 }
42
43 private void createTestOutputFile(String filename) {
44 try {
45 PrintStream out = new PrintStream(new FileOutputStream(filename));
46 System.setOut(out);
47 System.setErr(out);
48 } catch (FileNotFoundException e) {
49 fail("Can't create file " + filename + " for test.");
50 }
51 }
52
53 @Test
54 public void minimalArgs() {
55 String[] args = { "-d", SOURCE_FOLDER, "-f", "text", "-R", "java-basic,java-design"};
56 runTest(args,"minimalArgs");
57 }
58
59 @Test
60 public void usingDebug() {
61 String[] args = { "-d", SOURCE_FOLDER, "-f" ,"text","-R", "java-basic,java-design","-debug"};
62 runTest(args,"minimalArgsWithDebug");
63 }
64
65
66 @Test
67 public void changeJavaVersion() {
68 String[] args = { "-d", SOURCE_FOLDER, "-f", "text", "-R", "java-basic,java-design", "-version","1.5", "-language", "java", "-debug"};
69 String resultFilename = runTest(args, "chgJavaVersion");
70 assertTrue("Invalid Java version",FileUtil.findPatternInFile(new File(resultFilename), "Using Java version: Java 1.5"));
71 }
72
73 @Test
74 public void useEcmaScript() {
75 String[] args = { "-d", SOURCE_FOLDER, "-f", "xml", "-R", "ecmascript-basic", "-version","3","-l", "ecmascript", "-debug"};
76 String resultFilename = runTest(args,"useEcmaScript");
77 assertTrue("Invalid Java version",FileUtil.findPatternInFile(new File(resultFilename), "Using Ecmascript version: Ecmascript 3"));
78 }
79
80 private String runTest(String[] args, String testname) {
81 String filename = TEST_OUPUT_DIRECTORY + testname + ".txt";
82 long start = System.currentTimeMillis();
83 createTestOutputFile(filename);
84 System.out.println("Start running test " + testname);
85 runPMDWith(args);
86 checkStatusCode();
87 System.out.println("Test finished successfully after " + (System.currentTimeMillis() - start) + "ms.");
88 return filename;
89 }
90
91 private void runPMDWith(String[] args) {
92 try {
93 PMD.main(args);
94 } catch (Exception e) {
95 e.printStackTrace();
96 fail("Exception occurs while running PMD CLI with following args:" + args);
97 }
98 }
99
100 private void checkStatusCode() {
101 int statusCode = Integer.valueOf(System.getProperty(PMDCommandLineInterface.STATUS_CODE_PROPERTY));
102 if ( statusCode > 0 )
103 fail("PMD failed with status code:" + statusCode);
104 }
105 }