diff --git a/pom.xml b/pom.xml
index 0071e855e..27f0dfd39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -226,6 +226,13 @@
4.12
test
+
+ com.github.stefanbirkner
+ system-rules
+ 1.9.0
+ test
+
+
@@ -628,7 +635,7 @@
.*.DefaultConfiguration10092
.*.DefaultLogger7576
.*.Definitions1000
- .*.Main00
+ .*.Main6578
.*.PackageNamesLoader7872
.*.PackageObjectFactory7575
.*.PropertiesExpander5083
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Main.java b/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
index 0291b89b1..1fdef9c27 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
@@ -31,6 +31,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -56,29 +57,64 @@ public final class Main
* Loops over the files specified checking them for errors. The exit code
* is the number of errors found in all the files.
* @param args the command line arguments
- * @exception UnsupportedEncodingException if there is a problem to use UTF-8
+ * @throws UnsupportedEncodingException if there is a problem to use UTF-8
+ * @throws CheckstyleException if there is a problem with parsing a property file
+ * @throws FileNotFoundException if there is a problem with files access
**/
public static void main(String... args) throws UnsupportedEncodingException
+ , CheckstyleException, FileNotFoundException
{
- boolean parseResult = false;
+ int errorCounter = 0;
+ boolean cliViolations = false;
+
try {
- processCommandLine(parseCli(args));
- parseResult = true;
+ //parse CLI arguments
+ final CommandLine commandLine = parseCli(args);
+
+ // show version and exit if it is requested
+ if (commandLine.hasOption("v")) {
+ System.out.println("Checkstyle version: "
+ + Main.class.getPackage().getImplementationVersion());
+ }
+ else {
+ // return error is smth is wrong in arguments
+ final List messages = validateCli(commandLine);
+ cliViolations = !messages.isEmpty();
+ if (messages.isEmpty()) {
+
+ // create config helper object
+ final CliOptions config = convertCliToPojo(commandLine);
+ // run Checker
+ errorCounter = runCheckstyle(config);
+
+ }
+ else {
+ errorCounter = 1;
+ for (String message : messages) {
+ System.out.println(message);
+ }
+ }
+ }
}
- catch (final ParseException e) {
- System.err.println("Could not parse parameters: " + e.getMessage());
- e.printStackTrace();
+ catch (ParseException pex) {
+ // smth wrong with arguments - print error and manual
+ cliViolations = true;
+ errorCounter = 1;
+ System.out.println(pex.getMessage());
+ printUsage();
}
- catch (final Exception e) {
- System.err.println("Could not execute Checkstyle: " + e.getMessage());
- e.printStackTrace();
+ catch (Exception ex) {
+ // smth wrong during processing
+ errorCounter = 1;
+ throw ex;
}
finally {
- if (!parseResult) {
- usage();
+ // return exit code base on validation of Checker
+ if (errorCounter != 0 && !cliViolations) {
+ System.out.println(String.format("Checkstyle ends with %d errors.", errorCounter));
}
// provide proper exit code based on results.
- System.exit(parseResult ? 0 : 1);
+ System.exit(errorCounter);
}
}
@@ -89,7 +125,6 @@ public final class Main
* @return parsed information about passed parameters
* @throws ParseException
* when passed arguments are not valid
- * @exception CheckstyleException when provided parameters are not supported
*/
private static CommandLine parseCli(String... args)
throws ParseException
@@ -100,131 +135,170 @@ public final class Main
return clp.parse(buildOptions(), args);
}
+ /**
+ * Do validation of Command line options
+ * @param cmdLine command line object
+ * @return list of violations
+ */
+ private static List validateCli(CommandLine cmdLine)
+ {
+ final List result = new ArrayList<>();
+ // ensure a configuration file is specified
+ if (!cmdLine.hasOption("c")) {
+ result.add("Must specify a config XML file.");
+ }
+ else {
+ // validate optional parameters
+ if (cmdLine.hasOption("f")) {
+ final String format = cmdLine.getOptionValue("f");
+ if (!"plain".equals(format) && !"xml".equals(format)) {
+ result.add(String.format("Invalid output format."
+ + " Found '%s' but expected 'plain' or 'xml'.", format));
+ }
+ }
+ if (cmdLine.hasOption("p")) {
+ final String propertiesLocation = cmdLine.getOptionValue("p");
+ final File file = new File(propertiesLocation);
+ if (!file.exists()) {
+ result.add(String.format("Could not find file '%s'.", propertiesLocation));
+ }
+ }
+ if (cmdLine.hasOption("o")) {
+ final String outputLocation = cmdLine.getOptionValue("o");
+ final File file = new File(outputLocation);
+ if (!file.exists()) {
+ result.add(String.format("Could not find file '%s'.", outputLocation));
+ }
+ }
+ final List files = getFilesToProcess(cmdLine.getArgs());
+ if (files.isEmpty()) {
+ result.add("Must specify files to process, found 0.");
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Util method to convert ComandLine type to POJO object
+ * @param cmdLine command line object
+ * @return command line option as POJO object
+ */
+ private static CliOptions convertCliToPojo(CommandLine cmdLine)
+ {
+ final CliOptions conf = new CliOptions();
+ conf.format = cmdLine.getOptionValue("f");
+ if (conf.format == null) {
+ conf.format = "plain";
+ }
+ conf.outputLocation = cmdLine.getOptionValue("o");
+ conf.configLocation = cmdLine.getOptionValue("c");
+ conf.propertiesLocation = cmdLine.getOptionValue("p");
+ conf.files = getFilesToProcess(cmdLine.getArgs());
+ return conf;
+ }
+
/**
* Executes required Checkstyle actions based on passed parameters.
- * @param line
- * list of actions to execute
+ * @param cliOptions
+ * pojo object that contains all options
+ * @return number of violations of ERROR level
+ * @throws FileNotFoundException
+ * when output file could not be found
* @throws CheckstyleException
- * when could not create checker
+ * when properties file could not be loaded
* @throws UnsupportedEncodingException
* if there is problem to use UTf-8
*/
- private static void processCommandLine(CommandLine line)
- throws CheckstyleException, UnsupportedEncodingException
+ private static int runCheckstyle(CliOptions cliOptions)
+ throws CheckstyleException, UnsupportedEncodingException, FileNotFoundException
{
- // show version and exit
- if (line.hasOption("v")) {
- System.out.println("Checkstyle version: "
- + Main.class.getPackage().getImplementationVersion());
- return;
- }
-
- // ensure a configuration file is specified
- if (!line.hasOption("c")) {
- System.out.println("Must specify a config XML file.");
- return;
- }
-
// setup the properties
final Properties props =
- line.hasOption("p")
- ? loadProperties(new File(line.getOptionValue("p")))
+ cliOptions.propertiesLocation != null
+ ? loadProperties(new File(cliOptions.propertiesLocation))
: System.getProperties();
- final String configFormat = line.getOptionValue("c");
- final Configuration config = loadConfig(configFormat, props);
- // setup the output stream
- OutputStream out = null;
- boolean closeOut = false;
- if (line.hasOption("o")) {
- final String fname = line.getOptionValue("o");
- try {
- out = new FileOutputStream(fname);
- closeOut = true;
- }
- catch (final FileNotFoundException e) {
- throw new CheckstyleException(String.format(
- "Could not find file '%s': %s ", fname, e.getMessage()));
- }
- }
- else {
- out = System.out;
- closeOut = false;
- }
+ // create a configuration
+ final Configuration config = ConfigurationLoader.loadConfiguration(
+ cliOptions.configLocation, new PropertiesExpander(props));
- final String format = line.hasOption("f") ? line.getOptionValue("f") : "plain";
- final AuditListener listener = createListener(format, out, closeOut);
- final List files = getFilesToProcess(line.getArgs());
- if (files.isEmpty()) {
- throw new CheckstyleException("Must specify files to process, found 0.");
- }
+ // create a listener for output
+ final AuditListener listener = createListener(cliOptions.format, cliOptions.outputLocation);
- final Checker checker = createChecker(config, listener);
- final int errorCounter = checker.process(files);
- checker.destroy();
- if (errorCounter != 0) {
- throw new CheckstyleException(String.format(
- "Checkstyle ends with %d errors.", errorCounter));
- }
- }
-
- /**
- * Creates the Checker object.
- * @param config
- * the configuration to use
- * @param auditListener
- * the sticky beak to track what happens
- * @return a nice new fresh Checker
- * @throws CheckstyleException when could not create checker
- */
- private static Checker createChecker(Configuration config,
- AuditListener auditListener)
- throws CheckstyleException
- {
+ // create Checker object and run it
+ int errorCounter = 0;
final Checker checker = new Checker();
- final ClassLoader moduleClassLoader = Checker.class.getClassLoader();
- checker.setModuleClassLoader(moduleClassLoader);
- checker.configure(config);
- checker.addListener(auditListener);
+ try {
- return checker;
+ final ClassLoader moduleClassLoader = Checker.class.getClassLoader();
+ checker.setModuleClassLoader(moduleClassLoader);
+ checker.configure(config);
+ checker.addListener(listener);
+
+ // run Checker
+ errorCounter = checker.process(cliOptions.files);
+
+ }
+ finally {
+ checker.destroy();
+ }
+
+ return errorCounter;
}
/**
- * Determines the files to process.
- * @param filesToProcess
- * arguments that were not processed yet but shall be
- * @return list of files to process
+ * Loads properties from a File.
+ * @param file
+ * the properties file
+ * @return the properties in file
* @throws CheckstyleException
- * when there is no file to process
+ * when could not load properties file
*/
- private static List getFilesToProcess(String... filesToProcess)
+ private static Properties loadProperties(File file)
throws CheckstyleException
{
- final List files = Lists.newLinkedList();
- for (String element : filesToProcess) {
- files.addAll(listFiles(new File(element)));
+ final Properties properties = new Properties();
+
+ try (FileInputStream fis = new FileInputStream(file)) {
+ properties.load(fis);
+ }
+ catch (final IOException e) {
+ throw new CheckstyleException(String.format(
+ "Unable to load properties from file '%s'.", file.getAbsolutePath()), e);
}
- return files;
+ return properties;
}
/**
* Creates the audit listener.
*
* @param format format of the auditt listener
- * @param out the stream to log to
- * @param closeOut whether the stream should be closed
+ * @param outputLocation the location of output
* @return a fresh new AuditListener
* @exception UnsupportedEncodingException if there is problem to use UTf-8
- * @exception CheckstyleException when provided parameters are not supported
+ * @exception FileNotFoundException when provided output location is not found
*/
private static AuditListener createListener(String format,
- OutputStream out,
- boolean closeOut)
- throws UnsupportedEncodingException, CheckstyleException
+ String outputLocation)
+ throws UnsupportedEncodingException, FileNotFoundException
{
+
+ // setup the output stream
+ OutputStream out = null;
+ boolean closeOut = false;
+ if (outputLocation != null) {
+ out = new FileOutputStream(outputLocation);
+ closeOut = true;
+ }
+ else {
+ out = System.out;
+ closeOut = false;
+ }
+
+ // setup a listener
AuditListener listener = null;
switch (format) {
case "xml":
@@ -236,7 +310,7 @@ public final class Main
break;
default:
- throw new CheckstyleException("Invalid output format. Found '" + format
+ throw new IllegalStateException("Invalid output format. Found '" + format
+ "' but expected 'plain' or 'xml'.");
}
@@ -244,44 +318,19 @@ public final class Main
}
/**
- * Loads the configuration file. Will exit if unable to load.
- *
- * @param format
- * specifies the location of the configuration
- * @param props
- * the properties to resolve with the configuration
- * @return a fresh new configuration
- * @throws CheckstyleException
- * when could not load properties file
+ * Determines the files to process.
+ * @param filesToProcess
+ * arguments that were not processed yet but shall be
+ * @return list of files to process
*/
- private static Configuration loadConfig(String format,
- Properties props)
- throws CheckstyleException
+ private static List getFilesToProcess(String... filesToProcess)
{
- return ConfigurationLoader.loadConfiguration(format, new PropertiesExpander(props));
- }
+ final List files = Lists.newLinkedList();
+ for (String element : filesToProcess) {
+ files.addAll(listFiles(new File(element)));
+ }
- /** Prints the usage information. **/
- private static void usage()
- {
- final HelpFormatter hf = new HelpFormatter();
- hf.printHelp(String.format("java %s [options] -c file...",
- Main.class.getName()), buildOptions());
- }
-
- /**
- * Builds and returns list of parameters supported by cli Checkstyle.
- * @return available options
- */
- private static Options buildOptions()
- {
- final Options options = new Options();
- options.addOption("c", true, "Sets the check configuration file to use.");
- options.addOption("o", true, "Sets the output file. Defaults to stdout");
- options.addOption("p", true, "Loads the properties file");
- options.addOption("f", true, "Sets the output format. (plain|xml). Defaults to plain");
- options.addOption("v", false, "Print product version and exit");
- return options;
+ return files;
}
/**
@@ -310,27 +359,41 @@ public final class Main
return files;
}
- /**
- * Loads properties from a File.
- * @param file
- * the properties file
- * @return the properties in file
- * @throws CheckstyleException
- * when could not load properties file
- */
- private static Properties loadProperties(File file)
- throws CheckstyleException
+ /** Prints the usage information. **/
+ private static void printUsage()
{
- final Properties properties = new Properties();
+ final HelpFormatter hf = new HelpFormatter();
+ hf.printHelp(String.format("java %s [options] -c file...",
+ Main.class.getName()), buildOptions());
+ }
- try (FileInputStream fis = new FileInputStream(file)) {
- properties.load(fis);
- }
- catch (final IOException e) {
- throw new CheckstyleException(String.format(
- "Unable to load properties from file '%s'.", file.getAbsolutePath()), e);
- }
+ /**
+ * Builds and returns list of parameters supported by cli Checkstyle.
+ * @return available options
+ */
+ private static Options buildOptions()
+ {
+ final Options options = new Options();
+ options.addOption("c", true, "Sets the check configuration file to use.");
+ options.addOption("o", true, "Sets the output file. Defaults to stdout");
+ options.addOption("p", true, "Loads the properties file");
+ options.addOption("f", true, "Sets the output format. (plain|xml). Defaults to plain");
+ options.addOption("v", false, "Print product version and exit");
+ return options;
+ }
- return properties;
+ /** Helper structure to clear show what is required for Checker to run. **/
+ private static class CliOptions
+ {
+ /** properties file location */
+ private String propertiesLocation;
+ /** config file location */
+ private String configLocation;
+ /** output format */
+ private String format;
+ /** output file location */
+ private String outputLocation;
+ /** list of file to validate */
+ private List files;
}
}
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java
new file mode 100644
index 000000000..0af732572
--- /dev/null
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java
@@ -0,0 +1,355 @@
+////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code for adherence to a set of rules.
+// Copyright (C) 2001-2015 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+////////////////////////////////////////////////////////////////////////////////
+
+package com.puppycrawl.tools.checkstyle;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.Assertion;
+import org.junit.contrib.java.lang.system.ExpectedSystemExit;
+import org.junit.contrib.java.lang.system.LogMode;
+import org.junit.contrib.java.lang.system.StandardErrorStreamLog;
+import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ResourceBundle;
+
+import static org.junit.Assert.assertEquals;
+
+public class MainTest
+{
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+ @Rule
+ public final ExpectedSystemExit exit = ExpectedSystemExit.none();
+ @Rule
+ public final StandardErrorStreamLog errorLog = new StandardErrorStreamLog(LogMode.LOG_ONLY);
+ @Rule
+ public final StandardOutputStreamLog standardLog = new StandardOutputStreamLog(LogMode.LOG_ONLY);
+
+ @Test
+ public void testVersionPrint()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Checkstyle version: null\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-v");
+ }
+
+ @Test
+ public void testWrongArgument()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ String usage = "Unrecognized option: -w\n"
+ + "usage: java com.puppycrawl.tools.checkstyle.Main [options] -c \n"
+ + " file...\n"
+ + " -c Sets the check configuration file to use.\n"
+ + " -f Sets the output format. (plain|xml). Defaults to plain\n"
+ + " -o Sets the output file. Defaults to stdout\n"
+ + " -p Loads the properties file\n"
+ + " -v Print product version and exit\n";
+
+ assertEquals(usage, standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-w");
+ }
+
+ @Test
+ public void testNoConfigSpecified()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Must specify a config XML file.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testNonExistingTargetFile()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Must specify files to process, found 0.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "/google_checks.xml", "NonexistingFile.java");
+ }
+
+ @Test
+ public void testNonExistingConfigFile()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Checkstyle ends with 1 errors.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/main/resources/non_existing_config.xml"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testNonExistingOutputFormat()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Invalid output format."
+ + " Found '" + "xmlp" + "' but expected 'plain' or 'xml'.\n"
+ , standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "/google_checks.xml", "-f" , "xmlp"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFile()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Starting audit...\n"
+ + "Audit done.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFileXmlOutput()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion() throws IOException
+ {
+ String currentPath = new File(".").getCanonicalPath();
+ final ResourceBundle compilationProperties =
+ ResourceBundle.getBundle("checkstylecompilation");
+ String version = compilationProperties.getString("checkstyle.compile.version");
+ assertEquals("\n"
+ + "\n"
+ + "\n"
+ + "\n"
+ + "\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml"
+ , "-f", "xml"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFilePlainOutput()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Starting audit...\n"
+ + "Audit done.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml"
+ , "-f", "plain"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFileWithViolations()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion() throws IOException
+ {
+ String currentPath = new File(".").getCanonicalPath();
+ assertEquals("Starting audit...\n"
+ + currentPath
+ + "/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java:3:14: "
+ + "warning: Name 'InputMain' must match pattern '^[a-z0-9]*$'.\n"
+ + currentPath
+ + "/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java:5:7: "
+ + "warning: Name 'InputMainInner' must match pattern '^[a-z0-9]*$'.\n"
+ + "Audit done.\n"
+ , standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2.xml"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFileWithError()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(2);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion() throws IOException
+ {
+ String currentPath = new File(".").getCanonicalPath();
+ assertEquals("Starting audit...\n"
+ + currentPath
+ + "/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java:3:14: "
+ + "Name 'InputMain' must match pattern '^[a-z0-9]*$'.\n"
+ + currentPath
+ + "/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java:5:7: "
+ + "Name 'InputMainInner' must match pattern '^[a-z0-9]*$'.\n"
+ + "Audit done.\n"
+ + "Checkstyle ends with 2 errors.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2-error.xml"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFilePlainOutputToNonExistingFile()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Could not find file 'myjava.java'.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml"
+ , "-f", "plain"
+ , "-o", "myjava.java"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFilePlainOutputToFile()
+ throws Exception
+ {
+ final File file = temporaryFolder.newFile("file.output");
+ //Assert.assertTrue(file.getTotalSpace() == 0);
+
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ //Assert.assertTrue(file.getTotalSpace() > 0);
+ assertEquals("", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml"
+ , "-f", "plain"
+ , "-o", file.getCanonicalPath()
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFilePlainOutputProperties()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(0);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Starting audit...\n"
+ + "Audit done.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/"
+ + "config-classname-prop.xml"
+ , "-p", "src/test/resources/com/puppycrawl/tools/checkstyle/mycheckstyle.properties"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+
+ @Test
+ public void testExistingTargetFilePlainOutputNonexistingProperties()
+ throws Exception
+ {
+ exit.expectSystemExitWithStatus(1);
+ exit.checkAssertionAfterwards(new Assertion()
+ {
+ public void checkAssertion()
+ {
+ assertEquals("Could not find file 'nonexisting.properties'.\n", standardLog.getLog());
+ assertEquals("", errorLog.getLog());
+ }
+ });
+ Main.main("-c", "src/test/resources/com/puppycrawl/tools/checkstyle/"
+ + "config-classname-prop.xml"
+ , "-p", "nonexisting.properties"
+ , "src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java");
+ }
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java b/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java
new file mode 100644
index 000000000..b4ec9758c
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/InputMain.java
@@ -0,0 +1,6 @@
+package com.puppycrawl.tools.checkstyle;
+
+public class InputMain {
+}
+class InputMainInner {
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname-prop.xml b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname-prop.xml
new file mode 100644
index 000000000..072638eb6
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname-prop.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml
new file mode 100644
index 000000000..49131d550
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2-error.xml b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2-error.xml
new file mode 100644
index 000000000..74f625fd3
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2-error.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2.xml b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2.xml
new file mode 100644
index 000000000..fc203ba4e
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/config-classname2.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/mycheckstyle.properties b/src/test/resources/com/puppycrawl/tools/checkstyle/mycheckstyle.properties
new file mode 100644
index 000000000..ecd4b8784
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/mycheckstyle.properties
@@ -0,0 +1,4 @@
+# mycheckstyle.severity=error
+mycheckstyle.severity=warning
+
+#
\ No newline at end of file