private static AuditEvent createAuditEvent(String moduleId, int line, int column) { final Checker source = new Checker(); final LocalizedMessage message = new LocalizedMessage(line, column, null, null, null, moduleId, MemberNameCheck.class, "message"); return new AuditEvent(source, "filename", message); }
@Test public void testCheckerProcessCallAllNeededMethodsOfFileSets() throws Exception { final DummyFileSet fileSet = new DummyFileSet(); final Checker checker = new Checker(); checker.addFileSetCheck(fileSet); checker.process(Collections.singletonList(new File("dummy.java"))); final List<String> expected = Arrays.asList("beginProcessing", "finishProcessing", "destroy"); assertArrayEquals("Method calls were not expected", expected.toArray(), fileSet.getMethodCalls().toArray()); }
@Test public void testSetupChildListener() throws Exception { final Checker checker = new Checker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); checker.setModuleFactory(factory); final Configuration config = new DefaultConfiguration( DebugAuditAdapter.class.getCanonicalName()); checker.setupChild(config); final List<AuditListener> listeners = Whitebox.getInternalState(checker, "listeners"); assertTrue("Invalid child listener class", listeners.get(listeners.size() - 1) instanceof DebugAuditAdapter); }
@Test public void testAddBeforeExecutionFileFilterAsChild() throws Exception { final Checker checker = new Checker(); final TestBeforeExecutionFileFilter fileFilter = new TestBeforeExecutionFileFilter(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()) { @Override public Object createModule(String name) throws CheckstyleException { Object filter = fileFilter; if (!name.equals(TestBeforeExecutionFileFilter.class.getName())) { filter = super.createModule(name); } return filter; } }; checker.setModuleFactory(factory); checker.setupChild(createModuleConfig(TestBeforeExecutionFileFilter.class)); checker.process(Collections.singletonList(new File("dummy.java"))); assertTrue("Checker.acceptFileStarted() doesn't call listener", fileFilter.wasCalled()); }
@Test public void testAddAuditListenerAsChild() throws Exception { final Checker checker = new Checker(); final DebugAuditAdapter auditAdapter = new DebugAuditAdapter(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()) { @Override public Object createModule(String name) throws CheckstyleException { Object adapter = auditAdapter; if (!name.equals(DebugAuditAdapter.class.getName())) { adapter = super.createModule(name); } return adapter; } }; checker.setModuleFactory(factory); checker.setupChild(createModuleConfig(DebugAuditAdapter.class)); // Let's try fire some events checker.process(Collections.singletonList(new File("dummy.java"))); assertTrue("Checker.fireAuditStarted() doesn't call listener", auditAdapter.wasCalled()); }
@Test public void testAddFilter() { final Checker checker = new Checker(); final DebugFilter filter = new DebugFilter(); checker.addFilter(filter); filter.resetFilter(); final SortedSet<LocalizedMessage> messages = new TreeSet<>(); messages.add(new LocalizedMessage(1, 0, "a Bundle", "message.key", new Object[] {"arg"}, null, getClass(), null)); checker.fireErrors("Some File Name", messages); assertTrue("Checker.fireErrors() doesn't call filter", filter.wasCalled()); }
@Test public void testSetupChildExceptions() { final Checker checker = new Checker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); checker.setModuleFactory(factory); final Configuration config = new DefaultConfiguration("java.lang.String"); try { checker.setupChild(config); fail("Exception is expected"); } catch (CheckstyleException ex) { assertEquals("Error message is not expected", "java.lang.String is not allowed as a child in Checker", ex.getMessage()); } }
@Test public void testAddBeforeExecutionFileFilter() throws Exception { final Checker checker = new Checker(); final TestBeforeExecutionFileFilter filter = new TestBeforeExecutionFileFilter(); checker.addBeforeExecutionFileFilter(filter); filter.resetFilter(); checker.process(Collections.singletonList(new File("dummy.java"))); assertTrue("Checker.acceptFileStarted() doesn't call filter", filter.wasCalled()); }
@Test public void testClearCacheWhenCacheFileIsNotSet() { // The idea of the test is to check that when cache file is not set, // the invocation of clearCache method does not throw an exception. final Checker checker = new Checker(); checker.clearCache(); assertNull("If cache file is not set the cache should default to null", Whitebox.getInternalState(checker, "cacheFile")); }
@Test public void setFileExtension() { final Checker checker = new Checker(); checker.setFileExtensions(".test1", "test2"); final String[] actual = Whitebox.getInternalState(checker, "fileExtensions"); assertArrayEquals("Extensions are not expected", new String[] {".test1", ".test2"}, actual); }
@Test public void testSetters() { // all that is set by reflection, so just make code coverage be happy final Checker checker = new Checker(); checker.setClassLoader(getClass().getClassLoader()); checker.setBasedir("some"); checker.setSeverity("ignore"); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); checker.setModuleFactory(factory); checker.setFileExtensions((String[]) null); checker.setFileExtensions(".java", "xml"); try { checker.setCharset("UNKNOWN-CHARSET"); fail("Exception is expected"); } catch (UnsupportedEncodingException ex) { assertEquals("Error message is not expected", "unsupported charset: 'UNKNOWN-CHARSET'", ex.getMessage()); } }
@Test public void testNoModuleFactory() throws Exception { final Checker checker = new Checker(); final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); checker.setModuleClassLoader(classLoader); checker.finishLocalSetup(); final Context actualCtx = Whitebox.getInternalState(checker, "childContext"); assertNotNull("Default module factory should be created when it is not specified", actualCtx.get("moduleFactory")); assertEquals("Invalid classLoader", classLoader, actualCtx.get("classLoader")); }
@Test public void testFileSetCheckInitWhenAddedAsChild() throws Exception { final Checker checker = new Checker(); final DummyFileSet fileSet = new DummyFileSet(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()) { @Override public Object createModule(String name) throws CheckstyleException { Object check = fileSet; if (!name.equals(DummyFileSet.class.getName())) { check = super.createModule(name); } return check; } }; checker.setModuleFactory(factory); checker.finishLocalSetup(); checker.setupChild(createModuleConfig(DummyFileSet.class)); assertTrue("FileSetCheck.init() wasn't called", fileSet.isInitCalled()); }
@Test public void testDestroyCheckerWithWrongCacheFileNameLength() throws Exception { final Checker checker = new Checker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); checker.setModuleFactory(factory); checker.configure(new DefaultConfiguration("default config")); // We set wrong file name length in order to reproduce IOException on OS Linux, OS Windows. // The maximum file name length which is allowed in most UNIX, Windows file systems is 255. // See https://en.wikipedia.org/wiki/Filename; checker.setCacheFile(String.format(Locale.ENGLISH, "%0300d", 0)); try { checker.destroy(); fail("Exception did not happen"); } catch (IllegalStateException ex) { assertTrue("Cause of exception differs from IOException", ex.getCause() instanceof IOException); } }
@Test public void testGetMessageDispatcher() { final DummyFileSetCheck check = new DummyFileSetCheck(); final Checker checker = new Checker(); check.setMessageDispatcher(checker); assertEquals("Invalid message dispatcher", checker, check.getMessageDispatcher()); }
@Test public void testSetFileSetCheckSetsMessageDispatcher() { final DummyFileSet fileSet = new DummyFileSet(); final Checker checker = new Checker(); checker.addFileSetCheck(fileSet); assertEquals("Message dispatcher was not expected", checker, fileSet.getInternalMessageDispatcher()); }
@Test public void testXmlLoggerClosesItStreams() throws Exception { final Checker checker = new Checker(); try (CloseAndFlushTestByteArrayOutputStream testInfoOutputStream = new CloseAndFlushTestByteArrayOutputStream()) { checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.addListener(new XMLLogger(testInfoOutputStream, true)); final File tmpFile = temporaryFolder.newFile("file.java"); final String[] expected = CommonUtil.EMPTY_STRING_ARRAY; verify(checker, tmpFile.getPath(), tmpFile.getPath(), expected); assertEquals("Close count was not expected", 1, testInfoOutputStream.getCloseCount()); assertEquals("Flush count was not expected", 0, testInfoOutputStream.getFlushCount()); } }
@Test public void testNoClassLoaderNoModuleFactory() { final Checker checker = new Checker(); try { checker.finishLocalSetup(); fail("Exception is expected"); } catch (CheckstyleException ex) { assertEquals("Error message is not expected", "if no custom moduleFactory is set, moduleClassLoader must be specified", ex.getMessage()); } }
@Test public void testRemoveFilter() { final Checker checker = new Checker(); final DebugFilter filter = new DebugFilter(); final DebugFilter f2 = new DebugFilter(); checker.addFilter(filter); checker.addFilter(f2); checker.removeFilter(filter); f2.resetFilter(); final SortedSet<LocalizedMessage> messages = new TreeSet<>(); messages.add(new LocalizedMessage(1, 0, "a Bundle", "message.key", new Object[] {"arg"}, null, getClass(), null)); checker.fireErrors("Some File Name", messages); assertTrue("Checker.fireErrors() doesn't call filter", f2.wasCalled()); assertFalse("Checker.fireErrors() does call removed filter", filter.wasCalled()); }
@Test public void testRemoveBeforeExecutionFileFilter() throws Exception { final Checker checker = new Checker(); final TestBeforeExecutionFileFilter filter = new TestBeforeExecutionFileFilter(); final TestBeforeExecutionFileFilter f2 = new TestBeforeExecutionFileFilter(); checker.addBeforeExecutionFileFilter(filter); checker.addBeforeExecutionFileFilter(f2); checker.removeBeforeExecutionFileFilter(filter); f2.resetFilter(); checker.process(Collections.singletonList(new File("dummy.java"))); assertTrue("Checker.acceptFileStarted() doesn't call filter", f2.wasCalled()); assertFalse("Checker.acceptFileStarted() does call removed filter", filter.wasCalled()); }