root.addChild(moduleConfig1); root.addChild(moduleConfig2); final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.configure(root); final DefaultLogger logger = new DefaultLogger(out, true, out, false, new AuditEventDefaultFormatter()); checker.addListener(logger); final int errs = checker.process(Collections.singletonList(new File(path))); try (ByteArrayInputStream inputStream = new ByteArrayInputStream(out.toByteArray()); checker.destroy();
@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 testDestroy() throws Exception { final Checker checker = new Checker(); final DebugAuditAdapter auditAdapter = new DebugAuditAdapter(); checker.addListener(auditAdapter); final TestFileSetCheck fileSet = new TestFileSetCheck(); checker.addFileSetCheck(fileSet); final DebugFilter filter = new DebugFilter(); checker.addFilter(filter); final TestBeforeExecutionFileFilter fileFilter = new TestBeforeExecutionFileFilter(); checker.addBeforeExecutionFileFilter(fileFilter); // should remove all listeners, file sets, and filters checker.destroy(); checker.process(Collections.singletonList(temporaryFolder.newFile())); 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); assertFalse("Checker.destroy() doesn't remove listeners.", auditAdapter.wasCalled()); assertFalse("Checker.destroy() doesn't remove file sets.", fileSet.wasCalled()); assertFalse("Checker.destroy() doesn't remove filters.", filter.wasCalled()); assertFalse("Checker.destroy() doesn't remove file filters.", fileFilter.wasCalled()); }
@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()); }
/** * Creates {@link Checker} instance based on the given {@link Configuration} instance. * @param moduleConfig {@link Configuration} instance. * @param moduleCreationOption {@code IN_TREEWALKER} if the {@code moduleConfig} should be added * under {@link TreeWalker}. * @return {@link Checker} instance based on the given {@link Configuration} instance. * @throws Exception if an exception occurs during checker configuration. */ public final Checker createChecker(Configuration moduleConfig, ModuleCreationOption moduleCreationOption) throws Exception { final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); if (moduleCreationOption == ModuleCreationOption.IN_TREEWALKER) { final Configuration dc = createTreeWalkerConfig(moduleConfig); checker.configure(dc); } else if (ROOT_MODULE_NAME.equals(moduleConfig.getName())) { checker.configure(moduleConfig); } else { final Configuration dc = createRootConfig(moduleConfig); checker.configure(dc); } checker.addListener(new BriefUtLogger(stream)); return checker; }
try { checker = new Checker(); checker.setClassloader(projectClassloader); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.addListener(listener); LOG.info("Checkstyle output report: " + xmlReport.getAbsolutePath()); xmlOutput = FileUtils.openOutputStream(xmlReport); checker.addListener(new XMLLogger(xmlOutput, true)); checker.setCharset(configuration.getCharset().name()); checker.configure(configuration.getCheckstyleConfiguration()); checker.process(configuration.getSourceFiles()); checker.destroy();
@Test public void testIgnoredFileExtensions() throws Exception { final DefaultConfiguration checkerConfig = new DefaultConfiguration("configuration"); checkerConfig.addAttribute("charset", StandardCharsets.UTF_8.name()); checkerConfig.addAttribute("cacheFile", temporaryFolder.newFile().getPath()); final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.configure(checkerConfig); final DebugAuditAdapter auditAdapter = new DebugAuditAdapter(); checker.addListener(auditAdapter); final List<File> allIgnoredFiles = new ArrayList<>(); final File ignoredFile = new File("file.pdf"); allIgnoredFiles.add(ignoredFile); final String[] fileExtensions = {"java", "xml", "properties"}; checker.setFileExtensions(fileExtensions); checker.setCacheFile(temporaryFolder.newFile().getPath()); final int counter = checker.process(allIgnoredFiles); // comparing to 0 as there is no legal file in input final int numLegalFiles = 0; assertEquals("There were more legal files than expected", numLegalFiles, counter); assertEquals("Audit was started on larger amount of files than expected", numLegalFiles, auditAdapter.getNumFilesStarted()); assertEquals("Audit was finished on larger amount of files than expected", numLegalFiles, auditAdapter.getNumFilesFinished()); }
private void executeWithClassLoader(URLClassLoader projectClassloader) { final Checker checker = new Checker(); OutputStream xmlOutput = null; try { checker.setClassLoader(projectClassloader); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.addListener(listener); LOG.info("Checkstyle output report: {}", xmlReport.getAbsolutePath()); xmlOutput = FileUtils.openOutputStream(xmlReport); checker.addListener(new XMLLogger(xmlOutput, true)); checker.setCharset(configuration.getCharset().name()); checker.configure(configuration.getCheckstyleConfiguration()); checker.process(configuration .getSourceFiles() .stream() checker.destroy(); if (Objects.nonNull(xmlOutput)) { close(xmlOutput);
FilterSet filterSet = getSuppressionsFilterSet( suppressionsFilePath ); Checker checker = new Checker(); checker.setClassLoader( projectClassLoader ); checker.setModuleClassLoader( Thread.currentThread().getContextClassLoader() ); checker.addFilter( filterSet ); checker.configure( configuration ); checker.addListener( listener ); checker.addListener( request.getConsoleListener() ); checker.addListener( checkerListener ); int nbErrors = checker.process( files ); checker.destroy();
@Test public void testClearCache() throws Exception { final DefaultConfiguration violationCheck = createModuleConfig(DummyFileSetViolationCheck.class); final DefaultConfiguration checkerConfig = new DefaultConfiguration("myConfig"); checkerConfig.addAttribute("charset", "UTF-8"); final File cacheFile = temporaryFolder.newFile(); checkerConfig.addAttribute("cacheFile", cacheFile.getPath()); checkerConfig.addChild(violationCheck); final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.configure(checkerConfig); checker.addListener(getBriefUtLogger()); checker.process(Collections.singletonList(new File("dummy.java"))); checker.clearCache(); // invoke destroy to persist cache final PropertyCacheFile cache = Whitebox.getInternalState(checker, "cacheFile"); cache.persist(); final Properties cacheAfterClear = new Properties(); cacheAfterClear.load(Files.newBufferedReader(cacheFile.toPath())); assertEquals("Cache has unexpected size", 1, cacheAfterClear.size()); }
checkerConfig.addAttribute("cacheFile", cacheFile.getPath()); final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.configure(checkerConfig); checker.addListener(getBriefUtLogger()); checker.clearCache(); checker.destroy();
checkerConfig.addAttribute("cacheFile", cacheFile.getPath()); final Checker checker = new Checker(); checker.setModuleClassLoader(Thread.currentThread().getContextClassLoader()); checker.addFileSetCheck(check); checker.addFilter(new DummyFilterSet()); checker.configure(checkerConfig); checker.addListener(getBriefUtLogger()); check.setSecondExternalResourceLocation(secondExternalResourceLocation); checker.addFileSetCheck(check); checker.configure(checkerConfig);
@Test public void testWithCacheWithNoViolation() throws Exception { final Checker checker = new Checker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); checker.setModuleFactory(factory); checker.configure(createModuleConfig(TranslationCheck.class)); final File cacheFile = temporaryFolder.newFile(); checker.setCacheFile(cacheFile.getPath()); checker.setupChild(createModuleConfig(TranslationCheck.class)); final File tmpFile = temporaryFolder.newFile("file.java"); final List<File> files = new ArrayList<>(1); files.add(tmpFile); checker.process(files); // invoke destroy to persist cache checker.destroy(); final Properties cache = new Properties(); cache.load(Files.newBufferedReader(cacheFile.toPath())); // There should 2 objects in cache: processed file (file.java) and checker configuration. final int expectedNumberOfObjectsInCache = 2; assertEquals("Cache has unexpected size", expectedNumberOfObjectsInCache, cache.size()); final String expectedConfigHash = "B8535A811CA90BE8B7A14D40BCA62B4FC2447B46"; assertEquals("Cache has unexpected hash", expectedConfigHash, cache.getProperty(PropertyCacheFile.CONFIG_HASH_KEY)); assertNotNull("Cache file has null path", cache.getProperty(tmpFile.getPath())); }
final Configuration config = ConfigurationLoader.loadConfiguration(new InputSource( new StringReader(code)), expander, false); final Checker checker = new Checker(); checker.setModuleClassLoader(moduleClassLoader); checker.configure(config); checker.destroy();
@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 testRemoveListener() throws Exception { final Checker checker = new Checker(); final DebugAuditAdapter auditAdapter = new DebugAuditAdapter(); final DebugAuditAdapter aa2 = new DebugAuditAdapter(); checker.addListener(auditAdapter); checker.addListener(aa2); checker.removeListener(auditAdapter); checker.fireFileStarted("Some File Name"); assertTrue("Checker.fireFileStarted() doesn't call listener", aa2.wasCalled()); assertFalse("Checker.fireFileStarted() does call removed listener", checker.fireFileFinished("Some File Name"); assertTrue("Checker.fireFileFinished() doesn't call listener", aa2.wasCalled()); assertFalse("Checker.fireFileFinished() does call removed listener", 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 listener", aa2.wasCalled()); assertFalse("Checker.fireErrors() does call removed listener", auditAdapter.wasCalled());
@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 testFinishLocalSetupFullyInitialized() throws Exception { final Checker checker = new Checker(); final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); checker.setModuleClassLoader(contextClassLoader); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), contextClassLoader); checker.setModuleFactory(factory); checker.setBasedir("testBaseDir"); checker.setLocaleLanguage("it"); checker.setLocaleCountry("IT"); checker.finishLocalSetup(); final Context context = Whitebox.getInternalState(checker, "childContext"); assertEquals("Charset was different than expected", System.getProperty("file.encoding", StandardCharsets.UTF_8.name()), context.get("charset")); assertEquals("Was used insufficient classloader", contextClassLoader, context.get("classLoader")); assertEquals("Severity is set to unexpected value", "error", context.get("severity")); assertEquals("Basedir is set to unexpected value", "testBaseDir", context.get("basedir")); final Field sLocale = LocalizedMessage.class.getDeclaredField("sLocale"); sLocale.setAccessible(true); final Locale locale = (Locale) sLocale.get(null); assertEquals("Locale is set to unexpected value", Locale.ITALY, locale); }
@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()); }
@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()); }