diff --git a/config/pmd-main.xml b/config/pmd-main.xml
index 70929fd85a6..7c05c751847 100644
--- a/config/pmd-main.xml
+++ b/config/pmd-main.xml
@@ -19,4 +19,11 @@
| //MethodDeclaration[@Name='getHashCodeBasedOnObjectContent' and ../../..[@Image='PropertyCacheFile']]"/>
+
+
+
+
+
+
+
diff --git a/config/suppressions.xml b/config/suppressions.xml
index 965bd0609b9..50f22baf739 100644
--- a/config/suppressions.xml
+++ b/config/suppressions.xml
@@ -49,6 +49,7 @@
+
diff --git a/pom.xml b/pom.xml
index 6daece9a615..0dee3d56c68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2091,23 +2091,6 @@
com.puppycrawl.tools.checkstyle.MainTest
-
-
- main
-
- createListener
-
-
-
- com.google.common.io.Closeables
-
- com.puppycrawl.tools.checkstyle.utils.CommonUtils
-
- com.puppycrawl.tools.checkstyle.api.RootModule
-
- org.apache.commons.logging
- java.util.logging
-
100
${pitest.plugin.timeout.factor}
${pitest.plugin.timeout.constant}
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Main.java b/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
index 51988066d28..df2e0d2b792 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/Main.java
@@ -226,11 +226,14 @@ public static void main(String... args) throws IOException {
}
finally {
// return exit code base on validation of Checker
- if (errorCounter != 0 && !cliViolations) {
- final LocalizedMessage errorCounterMessage = new LocalizedMessage(0,
- Definitions.CHECKSTYLE_BUNDLE, ERROR_COUNTER,
- new String[] {String.valueOf(errorCounter)}, null, Main.class, null);
- System.out.println(errorCounterMessage.getMessage());
+ // two ifs exist till https://github.com/hcoles/pitest/issues/377
+ if (errorCounter != 0) {
+ if (!cliViolations) {
+ final LocalizedMessage errorCounterMessage = new LocalizedMessage(0,
+ Definitions.CHECKSTYLE_BUNDLE, ERROR_COUNTER,
+ new String[] {String.valueOf(errorCounter)}, null, Main.class, null);
+ System.out.println(errorCounterMessage.getMessage());
+ }
}
if (exitStatus != 0) {
System.exit(exitStatus);
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/AstTreeStringPrinterTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/AstTreeStringPrinterTest.java
index 90dba9a0fce..91846463fb0 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/AstTreeStringPrinterTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/AstTreeStringPrinterTest.java
@@ -42,7 +42,7 @@ protected String getPackageLocation() {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(AstTreeStringPrinter.class);
+ assertUtilsClassHasPrivateConstructor(AstTreeStringPrinter.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/DefinitionsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/DefinitionsTest.java
index 5235e7a25eb..995f1b07514 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/DefinitionsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/DefinitionsTest.java
@@ -26,6 +26,6 @@
public class DefinitionsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(Definitions.class);
+ assertUtilsClassHasPrivateConstructor(Definitions.class, true);
}
}
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinterTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinterTest.java
index ec74142dc62..c2879c7d95d 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinterTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinterTest.java
@@ -45,7 +45,7 @@ private static String getPath(String filename) {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(DetailNodeTreeStringPrinter.class);
+ assertUtilsClassHasPrivateConstructor(DetailNodeTreeStringPrinter.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java
index b08e787aa05..9d9c99fc7a8 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/MainTest.java
@@ -25,11 +25,18 @@
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.times;
+import static org.powermock.api.mockito.PowerMockito.doNothing;
import static org.powermock.api.mockito.PowerMockito.mock;
+import static org.powermock.api.mockito.PowerMockito.mockStatic;
+import static org.powermock.api.mockito.PowerMockito.verifyStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
@@ -52,11 +59,18 @@
import org.junit.contrib.java.lang.system.SystemErrRule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import com.google.common.io.Closeables;
import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
import com.puppycrawl.tools.checkstyle.api.Configuration;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
+import com.puppycrawl.tools.checkstyle.utils.CommonUtils;
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({Main.class, CommonUtils.class, Closeables.class})
public class MainTest {
private static final String USAGE = String.format(Locale.ROOT,
"usage: java com.puppycrawl.tools.checkstyle.Main [options] -c "
@@ -148,7 +162,7 @@ public void setUp() {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(Main.class);
+ assertUtilsClassHasPrivateConstructor(Main.class, false);
}
@Test
@@ -387,8 +401,11 @@ public void testCreateNonExistingOutputFile() throws Exception {
}
@Test
- public void testExistingTargetFilePlainOutputProperties()
- throws Exception {
+ public void testExistingTargetFilePlainOutputProperties() throws Exception {
+ mockStatic(Closeables.class);
+ doNothing().when(Closeables.class);
+ Closeables.closeQuietly(any(InputStream.class));
+
//exit.expectSystemExitWithStatus(0);
exit.checkAssertionAfterwards(() -> {
assertEquals(auditStartMessage.getMessage() + EOL
@@ -398,6 +415,9 @@ public void testExistingTargetFilePlainOutputProperties()
Main.main("-c", getPath("InputMainConfig-classname-prop.xml"),
"-p", getPath("InputMainMycheckstyle.properties"),
getPath("InputMain.java"));
+
+ verifyStatic(times(2));
+ Closeables.closeQuietly(any(InputStream.class));
}
@Test
@@ -511,6 +531,10 @@ public void testCreateListenerIllegalStateException() throws Exception {
@Test
public void testCreateListenerWithLocationIllegalStateException() throws Exception {
+ mockStatic(CommonUtils.class);
+ doNothing().when(CommonUtils.class);
+ CommonUtils.close(any(OutputStream.class));
+
final Method method = Main.class.getDeclaredMethod("createListener", String.class,
String.class);
method.setAccessible(true);
@@ -530,6 +554,9 @@ public void testCreateListenerWithLocationIllegalStateException() throws Excepti
// method creates output folder
FileUtils.deleteQuietly(new File(outDir));
}
+
+ verifyStatic(times(1));
+ CommonUtils.close(any(OutputStream.class));
}
@Test
@@ -840,6 +867,7 @@ public void testCustomRootModule() throws Exception {
});
Main.main("-c", getPath("InputMainConfig-custom-root-module.xml"),
getPath("InputMain.java"));
+ assertTrue(TestRootModuleChecker.isDestroyed());
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/api/AbstractLoaderTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/api/AbstractLoaderTest.java
index da97c42f9d7..5dc96982785 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/api/AbstractLoaderTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/api/AbstractLoaderTest.java
@@ -51,7 +51,7 @@ public void testParserConfiguratedSuccefully() throws Exception {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
assertUtilsClassHasPrivateConstructor(
- AbstractLoader.FeaturesForVerySecureJavaInstallations.class);
+ AbstractLoader.FeaturesForVerySecureJavaInstallations.class, true);
}
private static final class DummyLoader extends AbstractLoader {
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypesTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypesTest.java
index 45c635458d4..190565cf4bc 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypesTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/api/JavadocTokenTypesTest.java
@@ -26,6 +26,6 @@
public class JavadocTokenTypesTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(JavadocTokenTypes.class);
+ assertUtilsClassHasPrivateConstructor(JavadocTokenTypes.class, true);
}
}
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/api/TokenTypesTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/api/TokenTypesTest.java
index e4979f108da..051aea24115 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/api/TokenTypesTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/api/TokenTypesTest.java
@@ -36,6 +36,6 @@ public void testGetShortDescription() {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(TokenTypes.class);
+ assertUtilsClassHasPrivateConstructor(TokenTypes.class, true);
}
}
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheckTest.java
index 00b66d7dc40..9bc909954e9 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheckTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheckTest.java
@@ -168,7 +168,7 @@ public void testPositionOnlyComments()
@Test
public void testBlockCommentPositionHasPrivateConstr() throws Exception {
- TestUtils.assertUtilsClassHasPrivateConstructor(BlockCommentPosition.class);
+ TestUtils.assertUtilsClassHasPrivateConstructor(BlockCommentPosition.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/BlockTagUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/BlockTagUtilsTest.java
index 7e85c8641db..9a8185fe5ee 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/BlockTagUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/BlockTagUtilsTest.java
@@ -34,7 +34,7 @@ public class BlockTagUtilsTest {
@Test
public void testHasPrivateConstructor() throws Exception {
- TestUtils.assertUtilsClassHasPrivateConstructor(BlockTagUtils.class);
+ TestUtils.assertUtilsClassHasPrivateConstructor(BlockTagUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/InlineTagUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/InlineTagUtilsTest.java
index 14b9d00d9a0..224fdb04e5d 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/InlineTagUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/javadoc/utils/InlineTagUtilsTest.java
@@ -36,7 +36,7 @@ public class InlineTagUtilsTest {
@Test
public void testHasPrivateConstructor() throws Exception {
- TestUtils.assertUtilsClassHasPrivateConstructor(InlineTagUtils.class);
+ TestUtils.assertUtilsClassHasPrivateConstructor(InlineTagUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/doclets/TokenTypesDocletTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/doclets/TokenTypesDocletTest.java
index 9bed1b975c6..5b07c4d5412 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/doclets/TokenTypesDocletTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/doclets/TokenTypesDocletTest.java
@@ -51,7 +51,7 @@ private static String getPath(String filename) {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(TokenTypesDoclet.class);
+ assertUtilsClassHasPrivateConstructor(TokenTypesDoclet.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/internal/TestUtils.java b/src/test/java/com/puppycrawl/tools/checkstyle/internal/TestUtils.java
index 11f6e35b05c..57e5a2b4281 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/TestUtils.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/TestUtils.java
@@ -47,10 +47,11 @@ private TestUtils() {
/**
* Verifies that utils class has private constructor and invokes it to satisfy code coverage.
*/
- public static void assertUtilsClassHasPrivateConstructor(final Class> utilClass)
+ public static void assertUtilsClassHasPrivateConstructor(final Class> utilClass,
+ boolean checkConstructorIsPrivate)
throws ReflectiveOperationException {
final Constructor> constructor = utilClass.getDeclaredConstructor();
- if (!Modifier.isPrivate(constructor.getModifiers())) {
+ if (checkConstructorIsPrivate && !Modifier.isPrivate(constructor.getModifiers())) {
Assert.fail("Constructor is not private");
}
constructor.setAccessible(true);
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/AnnotationUtilityTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/AnnotationUtilityTest.java
index a1703a0f1b2..1879c567342 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/AnnotationUtilityTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/AnnotationUtilityTest.java
@@ -36,7 +36,7 @@ public class AnnotationUtilityTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
try {
- assertUtilsClassHasPrivateConstructor(AnnotationUtility.class);
+ assertUtilsClassHasPrivateConstructor(AnnotationUtility.class, true);
}
catch (InvocationTargetException ex) {
assertEquals("do not instantiate.", ex.getCause().getMessage());
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/CheckUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/CheckUtilsTest.java
index 69a78be1943..c82ed7848bc 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/CheckUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/CheckUtilsTest.java
@@ -44,7 +44,7 @@ public class CheckUtilsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(CheckUtils.class);
+ assertUtilsClassHasPrivateConstructor(CheckUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/CommonUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/CommonUtilsTest.java
index e5919dcad17..674544011e6 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/CommonUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/CommonUtilsTest.java
@@ -54,7 +54,7 @@ public class CommonUtilsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(CommonUtils.class);
+ assertUtilsClassHasPrivateConstructor(CommonUtils.class, true);
}
/**
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/JavadocUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/JavadocUtilsTest.java
index 18af252237f..fb98a0986e4 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/JavadocUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/JavadocUtilsTest.java
@@ -217,7 +217,7 @@ public void testEmptyJavadocCommentAst() {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(JavadocUtils.class);
+ assertUtilsClassHasPrivateConstructor(JavadocUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/ModuleReflectionUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/ModuleReflectionUtilsTest.java
index c8bd363c6f4..bc2ce91bb7a 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/ModuleReflectionUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/ModuleReflectionUtilsTest.java
@@ -43,7 +43,7 @@ public class ModuleReflectionUtilsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(ModuleReflectionUtils.class);
+ assertUtilsClassHasPrivateConstructor(ModuleReflectionUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/ScopeUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/ScopeUtilsTest.java
index 724e9849b93..dc5490ef97c 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/ScopeUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/ScopeUtilsTest.java
@@ -34,7 +34,7 @@ public class ScopeUtilsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(ScopeUtils.class);
+ assertUtilsClassHasPrivateConstructor(ScopeUtils.class, true);
}
@Test
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilsTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilsTest.java
index 97b0c1ed541..cf3f4b01002 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilsTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/utils/TokenUtilsTest.java
@@ -38,7 +38,7 @@ public class TokenUtilsTest {
@Test
public void testIsProperUtilsClass() throws ReflectiveOperationException {
- assertUtilsClassHasPrivateConstructor(TokenUtils.class);
+ assertUtilsClassHasPrivateConstructor(TokenUtils.class, true);
}
@Test