@Test public void testBehaviourWithZeroChecks() throws Exception { final TreeWalker treeWalker = new TreeWalker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); // create file that should throw exception final File file = temporaryFolder.newFile("file.java"); final FileText fileText = new FileText(file, new ArrayList<>()); treeWalker.processFiltered(file, fileText); final Collection<Checks> checks = Whitebox.getInternalState(treeWalker, "ordinaryChecks"); assertTrue("No checks -> No parsing", checks.isEmpty()); }
@Test public void testBehaviourWithOnlyOrdinaryChecks() throws Exception { final TreeWalker treeWalkerSpy = spy(new TreeWalker()); final Class<?> classAstState = Class.forName("com.puppycrawl.tools.checkstyle.TreeWalker$AstState"); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalkerSpy.configure(createModuleConfig(TypeNameCheck.class)); treeWalkerSpy.setModuleFactory(factory); treeWalkerSpy.setupChild(createModuleConfig(TypeNameCheck.class)); final File file = temporaryFolder.newFile("file.java"); final List<String> lines = new ArrayList<>(); lines.add("class Test {}"); treeWalkerSpy.processFiltered(file, new FileText(file, lines)); verifyPrivate(treeWalkerSpy, times(1)).invoke("walk", any(DetailAST.class), any(FileContents.class), any(classAstState)); verifyPrivate(treeWalkerSpy, times(0)).invoke("getFilteredMessages", any(String.class), any(FileContents.class), any(DetailAST.class)); }
@Test public void testBehaviourWithOnlyCommentChecks() throws Exception { final TreeWalker treeWalkerSpy = spy(new TreeWalker()); final Class<?> classAstState = Class.forName("com.puppycrawl.tools.checkstyle.TreeWalker$AstState"); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalkerSpy.configure(createModuleConfig(CommentsIndentationCheck.class)); treeWalkerSpy.setModuleFactory(factory); treeWalkerSpy.setupChild(createModuleConfig(CommentsIndentationCheck.class)); final File file = temporaryFolder.newFile("file.java"); final List<String> lines = new ArrayList<>(); lines.add("class Test {}"); treeWalkerSpy.processFiltered(file, new FileText(file, lines)); verifyPrivate(treeWalkerSpy, times(1)).invoke("walk", any(DetailAST.class), any(FileContents.class), any(classAstState)); verifyPrivate(treeWalkerSpy, times(0)).invoke("getFilteredMessages", any(String.class), any(FileContents.class), any(DetailAST.class)); }
@Test public void testSetupChildExceptions() { final TreeWalker treeWalker = new TreeWalker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); final Configuration config = new DefaultConfiguration("java.lang.String"); try { treeWalker.setupChild(config); fail("Exception is expected"); } catch (CheckstyleException ex) { assertEquals("Error message is not expected", "TreeWalker is not allowed as a parent of java.lang.String Please review " + "'Parent Module' section for this Check in web documentation if " + "Check is standard.", ex.getMessage()); } }
@Test public void testProcessWithParserThrowable() throws Exception { final TreeWalker treeWalker = new TreeWalker(); treeWalker.configure(createModuleConfig(TypeNameCheck.class)); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); treeWalker.setupChild(createModuleConfig(TypeNameCheck.class)); final File file = temporaryFolder.newFile("file.java"); final List<String> lines = new ArrayList<>(); lines.add(" classD a {} "); final FileText fileText = new FileText(file, lines); try { treeWalker.processFiltered(file, fileText); fail("Exception is expected"); } catch (CheckstyleException exception) { assertTrue("Error message is unexpected", exception.getMessage().contains( "occurred while parsing file")); } }
@Test public void testProcessWithRecognitionException() throws Exception { final TreeWalker treeWalker = new TreeWalker(); treeWalker.configure(createModuleConfig(TypeNameCheck.class)); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); treeWalker.setupChild(createModuleConfig(TypeNameCheck.class)); final File file = temporaryFolder.newFile("file.java"); final List<String> lines = new ArrayList<>(); lines.add(" class a%$# {} "); final FileText fileText = new FileText(file, lines); try { treeWalker.processFiltered(file, fileText); fail("Exception is expected"); } catch (CheckstyleException exception) { assertTrue("Error message is unexpected", exception.getMessage().contains( "TokenStreamRecognitionException occurred while parsing file")); } }
@Test public void testProcessNonJavaFiles() throws Exception { final TreeWalker treeWalker = new TreeWalker(); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); treeWalker.configure(new DefaultConfiguration("default config")); final DefaultConfiguration childConfig = createModuleConfig(JavadocParagraphCheck.class); treeWalker.setupChild(childConfig); final File file = new File("input.java"); final List<String> lines = new ArrayList<>(Arrays.asList("package com.puppycrawl.tools.checkstyle;", "", "error public class InputTreeWalkerFileWithViolation {}")); final FileText fileText = new FileText(file, lines); try { treeWalker.processFiltered(file, fileText); fail("Exception expected"); } catch (CheckstyleException ex) { assertEquals("Invalid exception message", "MismatchedTokenException occurred while parsing file input.java.", ex.getMessage()); } }
@Test public void testBehaviourWithOrdinaryAndCommentChecks() throws Exception { final TreeWalker treeWalker = new TreeWalker(); treeWalker.configure(createModuleConfig(TypeNameCheck.class)); treeWalker.configure(createModuleConfig(CommentsIndentationCheck.class)); final PackageObjectFactory factory = new PackageObjectFactory( new HashSet<>(), Thread.currentThread().getContextClassLoader()); treeWalker.setModuleFactory(factory); treeWalker.setupChild(createModuleConfig(TypeNameCheck.class)); treeWalker.setupChild(createModuleConfig(CommentsIndentationCheck.class)); final File file = temporaryFolder.newFile("file.java"); final List<String> lines = new ArrayList<>(); lines.add(" class a%$# {} "); final FileText fileText = new FileText(file, lines); try { treeWalker.processFiltered(file, fileText); fail("file is not compilable, exception is expected"); } catch (CheckstyleException exception) { final String message = "TokenStreamRecognitionException occurred while parsing file"; assertTrue("Error message is unexpected", exception.getMessage().contains(message)); } }