package ca.coglinc.gradle.plugins.javacc.compiler; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; import org.gradle.api.file.FileVisitDetails; import org.gradle.api.file.RelativePath; import org.gradle.api.logging.Logger; import org.junit.Before; import org.junit.Test; public class JavaccSourceFileVisitorTest { private static final String JAVACC_SOURCE_FILE = "Parser.jj"; private static final String JAVA_SOURCE_FILE = "TokenMgr.java"; private Logger logger; private SourceFileCompiler compiler; private JavaccSourceFileVisitor sourceVisitor; @Before public void createJavaccSourceVisitor() { logger = mock(Logger.class); compiler = mock(SourceFileCompiler.class); when(compiler.supportedSuffix()).thenReturn(".jj"); when(compiler.getProgramName()).thenReturn("JavaCC"); when(compiler.getLogger()).thenReturn(logger); sourceVisitor = new JavaccSourceFileVisitor(compiler); } @Test public void givenAJavaccSourceFileWhenVisitFileThenDelegatesToTaskCompile() { FileVisitDetails fileDetails = mock(FileVisitDetails.class); when(fileDetails.getFile()).thenReturn(new File(JAVACC_SOURCE_FILE)); when(fileDetails.getName()).thenReturn(JAVACC_SOURCE_FILE); when(fileDetails.getPath()).thenReturn(JAVACC_SOURCE_FILE); sourceVisitor.visitFile(fileDetails); verify(compiler).compile(any(File.class), any(RelativePath.class)); } @Test public void givenAJavaSourceFileWhenVisitFileThenDoesNotDelegateToTaskCompile() { FileVisitDetails fileDetails = mock(FileVisitDetails.class); File fileToVisit = new File(JAVA_SOURCE_FILE); when(fileDetails.getFile()).thenReturn(fileToVisit); when(fileDetails.getName()).thenReturn(JAVA_SOURCE_FILE); when(fileDetails.getPath()).thenReturn(JAVA_SOURCE_FILE); sourceVisitor.visitFile(fileDetails); verify(compiler, never()).compile(any(File.class), any(RelativePath.class)); verify(logger).debug(anyString(), eq(fileToVisit.getAbsolutePath()), eq("JavaCC")); } }