public void MyTest { @Rule public final ExpectedSystemExit exit = ExpectedSystemExit.none(); @Test public void systemExitWithArbitraryStatusCode() { exit.expectSystemExit(); //the code under test, which calls System.exit(...); } @Test public void systemExitWithSelectedStatusCode0() { exit.expectSystemExitWithStatus(0); //the code under test, which calls System.exit(0); } }
@Override public void after() { super.after(); } }
@Test public void testMissingFiles() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { final String usage = "Missing required parameter: <files>" + EOL + SHORT_USAGE; assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", usage, systemErr.getLog()); }); Main.main(); }
@Test public void testUsageHelpPrint() throws Exception { exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", USAGE, systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-h"); }
@Test public void testNonExistentTargetFile() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Files to process must be specified, found 0." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-c", "/google_checks.xml", "NonExistentFile.java"); }
@Test public void testVersionPrint() throws Exception { exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Checkstyle version: null" + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-V"); }
@Test public void testWrongArgumentMissingFiles() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { // files is defined as a required positional param; // picocli verifies required parameters before checking unknown options final String usage = "Missing required parameter: <files>" + EOL + SHORT_USAGE; assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", usage, systemErr.getLog()); }); Main.main("-w"); }
@Test public void testGenerateXpathSuppressionOptionEmptyConfig() throws Exception { final String expected = ""; exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", expected, systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-c", getPath("InputMainConfig-empty.xml"), "--generate-xpath-suppression", getPath("InputMainComplexityOverflow.java")); }
@Test public void testWrongArgument() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { final String usage = "Unknown option: -w" + EOL + SHORT_USAGE; assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", usage, systemErr.getLog()); }); // need to specify a file: // <files> is defined as a required positional param; // picocli verifies required parameters before checking unknown options Main.main("-w", "file"); }
@Test public void testExistingTargetFile() throws Exception { exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", auditStartMessage.getMessage() + EOL + auditFinishMessage.getMessage() + EOL, systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-c", getPath("InputMainConfig-classname.xml"), getPath("InputMain.java")); }
@Test public void testInvalidTreeWalkerThreadsNumber() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", "Invalid value for option '--tree-walker-threads-number': " + "'invalid' is not an int" + EOL + SHORT_USAGE, systemErr.getLog()); }); Main.main("-W", "invalid", "-c", "/google_checks.xml", getPath("InputMain.java")); }
@Test public void testNonExistentOutputFormat() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", "Invalid value for option '-f': expected one of [xml, plain] but was 'xmlp'" + EOL + SHORT_USAGE, systemErr.getLog()); }); Main.main("-c", "/google_checks.xml", "-f", "xmlp", getPath("InputMain.java")); }
@Test public void testInvalidCheckerThreadsNumber() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "", systemOut.getLog()); assertEquals("Unexpected system error log", "Invalid value for option '--checker-threads-number': 'invalid' is not an int" + EOL + SHORT_USAGE, systemErr.getLog()); }); Main.main("-C", "invalid", "-c", "/google_checks.xml", getPath("InputMain.java")); }
@Test public void testZeroCheckerThreadsNumber() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Checker threads number must be greater than zero" + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-C", "0", "-c", "/google_checks.xml", getPath("InputMain.java")); }
@Test public void testNoConfigSpecified() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Must specify a config XML file." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main(getPath("InputMain.java")); }
@Test public void testPrintSuppressionConflictingOptionsTvsC() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Option '-s' cannot be used with other options." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-c", "/google_checks.xml", getPath(""), "-s", "2:4"); }
@Test public void testZeroTreeWalkerThreadsNumber() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "TreeWalker threads number must be greater than zero" + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-W", "0", "-c", "/google_checks.xml", getPath("InputMain.java")); }
@Test public void testPrintTreeOnMoreThanOneFile() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Printing AST is allowed for only one file." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-t", getPath("")); }
@Test public void testPrintSuppressionOnMoreThanOneFile() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Printing xpath suppressions is allowed for " + "only one file." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-s", "2:4", getPath(""), getPath("")); }
@Test public void testPrintSuppressionConflictingOptionsTvsP() throws Exception { exit.expectSystemExitWithStatus(-1); exit.checkAssertionAfterwards(() -> { assertEquals("Unexpected output log", "Option '-s' cannot be used with other options." + System.lineSeparator(), systemOut.getLog()); assertEquals("Unexpected system error log", "", systemErr.getLog()); }); Main.main("-p", getPath("InputMainMycheckstyle.properties"), "-s", "2:4", getPath("")); }