From 7f523e360299121bb4210d93838a7747a7d08a53 Mon Sep 17 00:00:00 2001 From: FrancisANDRE Date: Mon, 6 Feb 2017 18:25:03 +0100 Subject: [PATCH 1/7] Add processing of javacc/jjtre grammar for C++ generation Signed-off-by: FrancisANDRE --- .../plugins/javacc/AbstractJavaccTask.java | 10 + .../plugins/javacc/CompileJavaccTask.java | 2 +- .../plugins/javacc/CompileJjdocTask.java | 2 +- .../plugins/javacc/CompileJjtreeTask.java | 2 +- .../javacc/JavaToJavaccDependencyAction.java | 126 ++++---- .../gradle/plugins/javacc/Language.java | 5 + .../CompiledJavaccFile.java | 270 ++++++++++-------- .../CompiledJavaccFilesDirectory.java | 16 +- .../CompiledJavaccFilesDirectoryFactory.java | 6 +- .../compiler/JavaccSourceFileCompiler.java | 14 +- .../compiler/NonJavaccSourceFileVisitor.java | 6 + .../javacc/compiler/SourceFileCompiler.java | 4 + .../CompiledJavaccFileTest.java | 25 +- ...mpiledJavaccFilesDirectoryFactoryTest.java | 19 +- .../CompiledJavaccFilesDirectoryTest.java | 11 +- .../JavaccSourceFileCompilerTest.java | 6 +- 16 files changed, 322 insertions(+), 202 deletions(-) create mode 100644 subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/Language.java diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/AbstractJavaccTask.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/AbstractJavaccTask.java index 50deddd..353e110 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/AbstractJavaccTask.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/AbstractJavaccTask.java @@ -15,6 +15,7 @@ public abstract class AbstractJavaccTask extends SourceTask { protected Map programArguments; + protected Language language = Language.Java; private File inputDirectory; private File outputDirectory; @@ -80,6 +81,15 @@ public AbstractJavaccTask setOutputDirectory(File outputDirectory) { return this; } + public void setLanguage(Language language) { + this.language = language; + } + + @Internal + protected Language getLanguage() { + return language; + } + @Internal protected Configuration getClasspath() { return classpath; diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJavaccTask.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJavaccTask.java index 764accd..e874d00 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJavaccTask.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJavaccTask.java @@ -32,7 +32,7 @@ public void run() { JavaccProgramInvoker javaccInvoker = new JavaccProgramInvoker(getProject(), getClasspath(), inputOutputDirectories.getTempOutputDirectory()); ProgramArguments arguments = new ProgramArguments(); arguments.addAll(getArguments()); - SourceFileCompiler compiler = new JavaccSourceFileCompiler(javaccInvoker, arguments, inputOutputDirectories, getLogger()); + SourceFileCompiler compiler = new JavaccSourceFileCompiler(language, javaccInvoker, arguments, inputOutputDirectories, getLogger()); compiler.createTempOutputDirectory(); compiler.compileSourceFilesToTempOutputDirectory(); diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjdocTask.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjdocTask.java index e0cf797..ca76936 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjdocTask.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjdocTask.java @@ -32,7 +32,7 @@ public void run() { JjdocProgramInvoker jjdocInvoker = new JjdocProgramInvoker(getProject(), getClasspath(), inputOutputDirectories.getTempOutputDirectory()); ProgramArguments arguments = new ProgramArguments(); arguments.addAll(getArguments()); - SourceFileCompiler compiler = new JavaccSourceFileCompiler(jjdocInvoker, arguments, inputOutputDirectories, getLogger()); + SourceFileCompiler compiler = new JavaccSourceFileCompiler(language, jjdocInvoker, arguments, inputOutputDirectories, getLogger()); compiler.createTempOutputDirectory(); compiler.compileSourceFilesToTempOutputDirectory(); diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjtreeTask.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjtreeTask.java index ffe983e..3394c50 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjtreeTask.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/CompileJjtreeTask.java @@ -32,7 +32,7 @@ public void run() { JjtreeProgramInvoker jjtreeInvoker = new JjtreeProgramInvoker(getProject(), getClasspath(), inputOutputDirectories.getTempOutputDirectory()); ProgramArguments arguments = new ProgramArguments(); arguments.addAll(getArguments()); - SourceFileCompiler compiler = new JavaccSourceFileCompiler(jjtreeInvoker, arguments, inputOutputDirectories, getLogger()); + SourceFileCompiler compiler = new JavaccSourceFileCompiler(language, jjtreeInvoker, arguments, inputOutputDirectories, getLogger()); compiler.createTempOutputDirectory(); compiler.compileSourceFilesToTempOutputDirectory(); diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyAction.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyAction.java index e2a6e54..1e93e40 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyAction.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyAction.java @@ -4,55 +4,85 @@ import org.gradle.api.Project; import org.gradle.api.tasks.TaskCollection; import org.gradle.api.tasks.compile.JavaCompile; +import org.gradle.language.cpp.tasks.CppCompile; public class JavaToJavaccDependencyAction implements Action { - @Override - public void execute(Project project) { - if (!project.getPlugins().hasPlugin("java")) { - return; - } - - configureCompileJJTreeTask(project); - configureCompileJavaccTask(project); - } - - private void configureCompileJJTreeTask(Project project) { - CompileJjtreeTask compileJjtreeTask = (CompileJjtreeTask) project.getTasks().findByName(CompileJjtreeTask.TASK_NAME_VALUE); - if (compileJjtreeTask == null) { - return; - } - - if (!compileJjtreeTask.getSource().isEmpty()) { - addJJTreeDependencyToJavaccCompileTask(project.getTasks().withType(JavaCompile.class), - project.getTasks().withType(CompileJavaccTask.class), compileJjtreeTask); - } - } - - private void configureCompileJavaccTask(Project project) { - CompileJavaccTask compileJavaccTask = (CompileJavaccTask) project.getTasks().findByName(CompileJavaccTask.TASK_NAME_VALUE); - if (compileJavaccTask != null) { - addJavaccDependencyToJavaCompileTask(project.getTasks().withType(JavaCompile.class), compileJavaccTask); - } - } - - private void addJavaccDependencyToJavaCompileTask(TaskCollection javaCompilationTasks, CompileJavaccTask compileJavaccTask) { - for (JavaCompile task : javaCompilationTasks) { - task.dependsOn(compileJavaccTask); - task.source(compileJavaccTask.getOutputDirectory()); - } - } - - private void addJJTreeDependencyToJavaccCompileTask(TaskCollection javaCompilationTasks, - TaskCollection javaccCompilationTasks, CompileJjtreeTask compileJjtreeTask) { - for (JavaCompile task : javaCompilationTasks) { - task.dependsOn(compileJjtreeTask); - task.source(compileJjtreeTask.getOutputDirectory()); - } - - for (CompileJavaccTask task : javaccCompilationTasks) { - task.dependsOn(compileJjtreeTask); - task.source(compileJjtreeTask.getOutputDirectory()); - } - } + @Override + public void execute(Project project) { + if (project.getPlugins().hasPlugin("java") || project.getPlugins().hasPlugin("cpp")) { + configureCompileJJTreeTask(project); + configureCompileJavaccTask(project); + } + } + + private void configureCompileJJTreeTask(Project project) { + CompileJjtreeTask compileJjtreeTask = (CompileJjtreeTask) project.getTasks().findByName(CompileJjtreeTask.TASK_NAME_VALUE); + if (compileJjtreeTask == null) { + return; + } + + if (!compileJjtreeTask.getSource().isEmpty()) { + if (project.getPlugins().hasPlugin("java")) + addJJTreeDependencyToJavaccCompileTask(project.getTasks().withType(JavaCompile.class), project.getTasks().withType(CompileJavaccTask.class), + compileJjtreeTask); + + if (project.getPlugins().hasPlugin("cpp")) + addJJTreeDependencyToCppCompileTask(project.getTasks().withType(CppCompile.class), project.getTasks().withType(CompileJavaccTask.class), + compileJjtreeTask); + } + } + + private void configureCompileJavaccTask(Project project) { + CompileJavaccTask compileJavaccTask = (CompileJavaccTask) project.getTasks().findByName(CompileJavaccTask.TASK_NAME_VALUE); + if (compileJavaccTask != null) { + if (project.getPlugins().hasPlugin("java")) + addJavaccDependencyToJavaCompileTask(project.getTasks().withType(JavaCompile.class), compileJavaccTask); + + if (project.getPlugins().hasPlugin("cpp")) + addJavaccDependencyToCppCompileTask(project.getTasks().withType(CppCompile.class), compileJavaccTask); + + } + } + + private void addJavaccDependencyToJavaCompileTask(TaskCollection javaCompilationTasks, CompileJavaccTask compileJavaccTask) { + for (JavaCompile task : javaCompilationTasks) { + task.dependsOn(compileJavaccTask); + task.source(compileJavaccTask.getOutputDirectory()); + } + } + + private void addJavaccDependencyToCppCompileTask(TaskCollection cppCompilationTasks, CompileJavaccTask compileJavaccTask) { + for (CppCompile task : cppCompilationTasks) { + task.dependsOn(compileJavaccTask); + task.source(compileJavaccTask.getOutputDirectory()); + } + } + + private void addJJTreeDependencyToJavaccCompileTask(TaskCollection javaCompilationTasks, TaskCollection javaccCompilationTasks, + CompileJjtreeTask compileJjtreeTask) { + for (JavaCompile task : javaCompilationTasks) { + task.dependsOn(compileJjtreeTask); + task.source(compileJjtreeTask.getOutputDirectory()); + } + + for (CompileJavaccTask task : javaccCompilationTasks) { + task.dependsOn(compileJjtreeTask); + task.source(compileJjtreeTask.getOutputDirectory()); + } + } + + private void addJJTreeDependencyToCppCompileTask(TaskCollection cppCompilationTasks, TaskCollection javaccCompilationTasks, + CompileJjtreeTask compileJJTreeTask) { + + for (CppCompile task : cppCompilationTasks) { + task.dependsOn(compileJJTreeTask); + task.source(compileJJTreeTask.getOutputDirectory()); + } + + for (CompileJavaccTask task : javaccCompilationTasks) { + task.dependsOn(compileJJTreeTask); + task.source(compileJJTreeTask.getOutputDirectory()); + } + } } diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/Language.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/Language.java new file mode 100644 index 0000000..132c736 --- /dev/null +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/Language.java @@ -0,0 +1,5 @@ +package ca.coglinc.gradle.plugins.javacc; + +public enum Language { + Java, Cpp +} diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFile.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFile.java index b9f26b1..bd97acc 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFile.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFile.java @@ -10,124 +10,164 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.filefilter.FileFilterUtils; +import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.TrueFileFilter; import org.gradle.api.file.FileTree; import org.gradle.api.logging.Logger; +import ca.coglinc.gradle.plugins.javacc.Language; + public class CompiledJavaccFile { - private static final Pattern PACKAGE_DECLARATION_PATTERN = Pattern.compile("package\\s+([^\\s.;]+(\\.[^\\s.;]+)*)\\s*;"); - - private File compiledJavaccFile; - private File outputDirectory; - private FileTree customAstClassesDirectory; - private File targetDirectory; - private Logger logger; - - CompiledJavaccFile(File file, File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { - this.compiledJavaccFile = file; - this.outputDirectory = outputDirectory; - this.customAstClassesDirectory = customAstClassesDirectory; - this.targetDirectory = targetDirectory; - this.logger = logger; - } - - public boolean customAstClassExists() { - return customAstClassExists(customAstClassesDirectory); - } - - public boolean customAstClassExists(FileTree fileTree) { - File customAstClassInputFile = getCustomAstClassInputFile(fileTree); - - return (customAstClassInputFile != null) && customAstClassInputFile.exists(); - } - - private File getCustomAstClassInputFile(FileTree fileTree) { - String compiledJavaccFilePackage = getPackageName(compiledJavaccFile); - - if (fileTree != null) { - Collection sourceFiles = fileTree.getFiles(); - return scanSourceFiles(compiledJavaccFilePackage, sourceFiles); - } else { - return null; - } - } - - private File scanSourceFiles(String compiledJavaccFilePackage, Collection sourceFiles) { - for (File sourceFile : sourceFiles) { - logger.debug("Scanning source file [{}] looking for a file named [{}] in package [{}]", sourceFile, compiledJavaccFile.getName(), compiledJavaccFilePackage); - if (sourceFile.isDirectory()) { - Collection childFiles = FileUtils.listFiles(sourceFile, FileFilterUtils.suffixFileFilter(".java"), TrueFileFilter.TRUE); - File matchingChildFile = scanSourceFiles(compiledJavaccFilePackage, childFiles); - if (matchingChildFile != null) { - return matchingChildFile; - } - } else { - if (FilenameUtils.isExtension(sourceFile.getName(), "java") && compiledJavaccFile.getName().equals(sourceFile.getName())) { - String packageName = getPackageName(sourceFile); - - if (compiledJavaccFilePackage.equals(packageName)) { - return sourceFile; - } - } - } - } - - return null; - } - - private String getPackageName(File file) { - String fileContents = ""; - try { - fileContents = FileUtils.readFileToString(file, Charsets.UTF_8.name()); - } catch (IOException e) { - logger.warn("Could not read file contents for file [{}]", file); - } - - Matcher matcher = PACKAGE_DECLARATION_PATTERN.matcher(fileContents); - if (matcher.find()) { - return matcher.group(1); - } - - return ""; - } - - public void copyCompiledFileToTargetDirectory() { - logger.info("Custom AST class not found"); - - File destination = new File(compiledJavaccFile.getAbsolutePath().replace(outputDirectory.getAbsolutePath(), targetDirectory.getAbsolutePath())); - logger.info("Copying compiled file {} to {}", compiledJavaccFile, destination); - - try { - FileUtils.copyFile(compiledJavaccFile, destination); - } catch (IOException e) { - String errorMessage = String.format("Could not copy %s from %s to %s", compiledJavaccFile, outputDirectory, targetDirectory); - throw new CompiledJavaccFileOperationException(errorMessage, e); - } - } - - public void copyCustomAstClassToTargetDirectory(FileTree sourceTree) { - logger.info("Not copying compiled file {} from {} to {} because it is overridden by the custom AST class {}", compiledJavaccFile, outputDirectory, targetDirectory, - getCustomAstClassInputFile(sourceTree)); - - String packagePath = getPackageName(compiledJavaccFile).replaceAll("\\.", Matcher.quoteReplacement(File.separator)); - File destination = new File(targetDirectory.getAbsolutePath() + File.separator + packagePath, compiledJavaccFile.getName()); - logger.info("Copying custom AST class [{}] to [{}]", getCustomAstClassInputFile(sourceTree), destination); - - try { - FileUtils.copyFile(getCustomAstClassInputFile(sourceTree), destination); - } catch (IOException e) { - String errorMessage = String.format("Could not copy %s to %s", getCustomAstClassInputFile(sourceTree), targetDirectory); - throw new CompiledJavaccFileOperationException(errorMessage, e); - } - } - - public void ignoreCompiledFileAndUseCustomAstClassFromJavaSourceTree(FileTree javaSourceTree) { - logger.info("Ignoring compiled file {} because it is overridden by the custom AST class in Java source tree {}", compiledJavaccFile, - getCustomAstClassInputFile(javaSourceTree)); - } - - @Override - public String toString() { - return compiledJavaccFile.getAbsolutePath(); - } + private static final Pattern PACKAGE_DECLARATION_PATTERN = Pattern.compile("package\\s+([^\\s.;]+(\\.[^\\s.;]+)*)\\s*;"); + + private Language language; + private File compiledJavaccFile; + private File outputDirectory; + private FileTree customAstClassesDirectory; + private File targetDirectory; + private Logger logger; + + CompiledJavaccFile(Language language, File file, File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { + this.language = language; + this.compiledJavaccFile = file; + this.outputDirectory = outputDirectory; + this.customAstClassesDirectory = customAstClassesDirectory; + this.targetDirectory = targetDirectory; + this.logger = logger; + } + + public boolean customAstClassExists() { + return customAstClassExists(customAstClassesDirectory); + } + + public boolean customAstClassExists(FileTree fileTree) { + File customAstClassInputFile = getCustomAstClassInputFile(fileTree); + + return (customAstClassInputFile != null) && customAstClassInputFile.exists(); + } + + private File getCustomAstClassInputFile(FileTree fileTree) { + String compiledJavaccFilePackage = getPackageName(compiledJavaccFile); + + if (fileTree != null) { + Collection sourceFiles = fileTree.getFiles(); + return scanSourceFiles(compiledJavaccFilePackage, sourceFiles); + } else { + return null; + } + } + + private File scanSourceFiles(String compiledJavaccFilePackage, Collection sourceFiles) { + for (File sourceFile : sourceFiles) { + logger.debug("Scanning source file [{}] looking for a file named [{}] in package [{}]", sourceFile, compiledJavaccFile.getName(), + compiledJavaccFilePackage); + if (sourceFile.isDirectory()) { + Collection childFiles = null; + IOFileFilter ioFilefilter = null; + if (language == Language.Java) { + ioFilefilter = FileFilterUtils.suffixFileFilter(".java"); + } else if (language == Language.Cpp) { + IOFileFilter inclFilefilter = FileFilterUtils.suffixFileFilter(".h"); + IOFileFilter codeFilefilter = FileFilterUtils.suffixFileFilter(".cc"); + ioFilefilter = FileFilterUtils.or(inclFilefilter, codeFilefilter); + } + + childFiles = FileUtils.listFiles(sourceFile, ioFilefilter, TrueFileFilter.TRUE); + File matchingChildFile = scanSourceFiles(compiledJavaccFilePackage, childFiles); + if (matchingChildFile != null) { + return matchingChildFile; + } + } else { + if (language == Language.Java) { + if (getSourceFile(sourceFile, "java") != null) { + String packageName = getPackageName(sourceFile); + if (compiledJavaccFilePackage.equals(packageName)) { + return sourceFile; + } + } + } else if (language == Language.Cpp) { + if (getSourceFile(sourceFile, "h") != null) { + String packageName = getPackageName(sourceFile); + if (compiledJavaccFilePackage.equals(packageName)) { + return sourceFile; + } + } + if (getSourceFile(sourceFile, "cc") != null) { + String packageName = getPackageName(sourceFile); + + if (compiledJavaccFilePackage.equals(packageName)) { + return sourceFile; + } + } + } + } + } + return null; + } + + private File getSourceFile(File sourceFile, String extension) { + if (FilenameUtils.isExtension(sourceFile.getName(), extension) && compiledJavaccFile.getName().equals(sourceFile.getName())) { + return sourceFile; + } + return null; + } + + private String getPackageName(File file) { + String fileContents = ""; + try { + fileContents = FileUtils.readFileToString(file, Charsets.UTF_8.name()); + } catch (IOException e) { + logger.warn("Could not read file contents for file [{}]", file); + } + + Matcher matcher = PACKAGE_DECLARATION_PATTERN.matcher(fileContents); + if (matcher.find()) { + return matcher.group(1); + } + + return ""; + } + + public void copyCompiledFileToTargetDirectory() { + logger.info("Custom AST class not found"); + + File destination = new File(compiledJavaccFile.getAbsolutePath().replace(outputDirectory.getAbsolutePath(), targetDirectory.getAbsolutePath())); + logger.info("Copying compiled file {} to {}", compiledJavaccFile, destination); + + try { + FileUtils.copyFile(compiledJavaccFile, destination); + } catch (IOException e) { + String errorMessage = String.format("Could not copy %s from %s to %s", compiledJavaccFile, outputDirectory, targetDirectory); + throw new CompiledJavaccFileOperationException(errorMessage, e); + } + } + + public void copyCustomAstClassToTargetDirectory(FileTree sourceTree) { + logger.info("Not copying compiled file {} from {} to {} because it is overridden by the custom AST class {}", compiledJavaccFile, outputDirectory, + targetDirectory, getCustomAstClassInputFile(sourceTree)); + + if (language == Language.Cpp) // do not copy any file for now + return; + + String packagePath = getPackageName(compiledJavaccFile).replaceAll("\\.", Matcher.quoteReplacement(File.separator)); + File destination = new File(targetDirectory.getAbsolutePath() + File.separator + packagePath, compiledJavaccFile.getName()); + logger.info("Copying custom AST class [{}] to [{}]", getCustomAstClassInputFile(sourceTree), destination); + + try { + FileUtils.copyFile(getCustomAstClassInputFile(sourceTree), destination); + } catch (IOException e) { + String errorMessage = String.format("Could not copy %s to %s", getCustomAstClassInputFile(sourceTree), targetDirectory); + throw new CompiledJavaccFileOperationException(errorMessage, e); + } + } + + public void ignoreCompiledFileAndUseCustomAstClassFromJavaSourceTree(FileTree javaSourceTree) { + logger.info("Ignoring compiled file {} because it is overridden by the custom AST class in Java source tree {}", compiledJavaccFile, + getCustomAstClassInputFile(javaSourceTree)); + } + + @Override + public String toString() { + return compiledJavaccFile.getAbsolutePath(); + } } diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectory.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectory.java index 85c8389..9d8843d 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectory.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectory.java @@ -9,13 +9,17 @@ import org.gradle.api.file.FileTree; import org.gradle.api.logging.Logger; +import ca.coglinc.gradle.plugins.javacc.Language; + public class CompiledJavaccFilesDirectory { - private File outputDirectory; - private FileTree customAstClassesDirectory; - private File targetDirectory; - private Logger logger; + private final Language language; + private final File outputDirectory; + private final FileTree customAstClassesDirectory; + private final File targetDirectory; + private final Logger logger; - CompiledJavaccFilesDirectory(File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { + CompiledJavaccFilesDirectory(Language language, File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { + this.language = language; this.outputDirectory = outputDirectory; this.customAstClassesDirectory = customAstClassesDirectory; this.targetDirectory = targetDirectory; @@ -27,7 +31,7 @@ public Collection listFiles() { Collection compiledJavaccFiles = new ArrayList(); for (File file : files) { - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFiles.add(compiledJavaccFile); } diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactory.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactory.java index 74eaabe..c51a01c 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactory.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactory.java @@ -5,9 +5,11 @@ import org.gradle.api.file.FileTree; import org.gradle.api.logging.Logger; +import ca.coglinc.gradle.plugins.javacc.Language; + public class CompiledJavaccFilesDirectoryFactory { - public CompiledJavaccFilesDirectory getCompiledJavaccFilesDirectory(File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { + public CompiledJavaccFilesDirectory getCompiledJavaccFilesDirectory(Language language, File outputDirectory, FileTree customAstClassesDirectory, File targetDirectory, Logger logger) { if ((outputDirectory == null) || !outputDirectory.exists() || !outputDirectory.isDirectory()) { throw new IllegalArgumentException("outputDirectory [" + outputDirectory + "] must be an existing directory"); } @@ -20,6 +22,6 @@ public CompiledJavaccFilesDirectory getCompiledJavaccFilesDirectory(File outputD throw new IllegalArgumentException("targetDirectory [" + targetDirectory + "] must be an existing directory"); } - return new CompiledJavaccFilesDirectory(outputDirectory, customAstClassesDirectory, targetDirectory, logger); + return new CompiledJavaccFilesDirectory(language, outputDirectory, customAstClassesDirectory, targetDirectory, logger); } } diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompiler.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompiler.java index 34959f8..11c2f61 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompiler.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompiler.java @@ -9,6 +9,7 @@ import org.gradle.api.logging.Logger; import ca.coglinc.gradle.plugins.javacc.JavaccTaskException; +import ca.coglinc.gradle.plugins.javacc.Language; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFile; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFilesDirectory; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFilesDirectoryFactory; @@ -26,13 +27,15 @@ * */ public class JavaccSourceFileCompiler implements SourceFileCompiler { + private final Language language; private final ProgramInvoker programInvoker; private final ProgramArguments argumentsProvidedByTask; private final CompilerInputOutputConfiguration configuration; private CompiledJavaccFilesDirectoryFactory compiledJavaccFilesDirectoryFactory = new CompiledJavaccFilesDirectoryFactory(); private final Logger logger; - public JavaccSourceFileCompiler(ProgramInvoker programInvoker, ProgramArguments argumentsProvidedByTask, CompilerInputOutputConfiguration configuration, Logger logger) { + public JavaccSourceFileCompiler(Language language, ProgramInvoker programInvoker, ProgramArguments argumentsProvidedByTask, CompilerInputOutputConfiguration configuration, Logger logger) { + this.language = language; this.programInvoker = programInvoker; this.argumentsProvidedByTask = argumentsProvidedByTask; this.configuration = configuration; @@ -82,7 +85,7 @@ private ProgramArguments buildProgramArguments(File inputDirectory, RelativePath @Override public void copyCompiledFilesFromTempOutputDirectoryToOutputDirectory() { CompiledJavaccFilesDirectory compiledJavaccFilesDirectory = compiledJavaccFilesDirectoryFactory.getCompiledJavaccFilesDirectory( - configuration.getTempOutputDirectory(), configuration.getCompleteSourceTree(), getOutputDirectory(), getLogger()); + language, configuration.getTempOutputDirectory(), configuration.getCompleteSourceTree(), getOutputDirectory(), getLogger()); for (CompiledJavaccFile compiledJavaccFile : compiledJavaccFilesDirectory.listFiles()) { FileTree javaSourceTree = configuration.getJavaSourceTree(); @@ -131,7 +134,12 @@ public Logger getLogger() { return logger; } - void setCompiledJavaccFilesDirectoryFactoryForTest(CompiledJavaccFilesDirectoryFactory factory) { + @Override + public Language getLanguage() { + return language; + } + + void setCompiledJavaccFilesDirectoryFactoryForTest(CompiledJavaccFilesDirectoryFactory factory) { compiledJavaccFilesDirectoryFactory = factory; } } diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/NonJavaccSourceFileVisitor.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/NonJavaccSourceFileVisitor.java index e48b6cf..518b1e6 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/NonJavaccSourceFileVisitor.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/NonJavaccSourceFileVisitor.java @@ -8,6 +8,7 @@ import org.gradle.api.file.FileVisitDetails; import ca.coglinc.gradle.plugins.javacc.JavaccTaskException; +import ca.coglinc.gradle.plugins.javacc.Language; /** * This implementation of {@link org.gradle.api.file.FileVisitor} visits only files that are not supported by the provided {@code compiler}. @@ -21,6 +22,9 @@ class NonJavaccSourceFileVisitor extends EmptyFileVisitor { @Override public void visitFile(FileVisitDetails fileDetails) { + if (compiler.getLanguage() == Language.Cpp) + return; + if (!isValidSourceFileForTask(fileDetails)) { File sourceFile = fileDetails.getFile(); File destinationFile = new File(sourceFile.getAbsolutePath().replace(compiler.getInputDirectory().getAbsolutePath(), compiler.getOutputDirectory().getAbsolutePath())); @@ -32,6 +36,8 @@ public void visitFile(FileVisitDetails fileDetails) { private void copyFile(File sourceFile, File destinationFile) { compiler.getLogger().debug("Copying non javacc source file from {} to {}", sourceFile.getAbsolutePath(), destinationFile.getAbsolutePath()); + if (compiler.getLanguage() == Language.Cpp) + return; try { FileUtils.copyFile(sourceFile, destinationFile); } catch (IOException e) { diff --git a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/SourceFileCompiler.java b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/SourceFileCompiler.java index 5db8429..fb35a7a 100644 --- a/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/SourceFileCompiler.java +++ b/subprojects/plugin/src/main/java/ca/coglinc/gradle/plugins/javacc/compiler/SourceFileCompiler.java @@ -5,6 +5,8 @@ import org.gradle.api.file.RelativePath; import org.gradle.api.logging.Logger; +import ca.coglinc.gradle.plugins.javacc.Language; + /** * Implementations invoke a program to compile source files. * @@ -33,4 +35,6 @@ public interface SourceFileCompiler { void createTempOutputDirectory(); void cleanTempOutputDirectory(); + + Language getLanguage(); } diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFileTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFileTest.java index 72cabeb..8dcdb6a 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFileTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFileTest.java @@ -28,9 +28,12 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import ca.coglinc.gradle.plugins.javacc.Language; + @RunWith(PowerMockRunner.class) @PrepareForTest(FileUtils.class) public class CompiledJavaccFileTest { + private Language language = Language.Java; private File outputDirectory; private FileTree customAstClassesDirectory; private File targetDirectory; @@ -57,7 +60,7 @@ public void deleteFiles() throws IOException { @Test public void customAstClassDoesNotExist() { File file = new File(outputDirectory, "FileWithNoCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); boolean customAstClassExists = compiledJavaccFile.customAstClassExists(); @@ -67,7 +70,7 @@ public void customAstClassDoesNotExist() { @Test public void customAstClassExists() { File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); boolean customAstClassExists = compiledJavaccFile.customAstClassExists(); @@ -77,7 +80,7 @@ public void customAstClassExists() { @Test public void customAstClassDoesNotExistInSpecificDirectory() { File file = new File(outputDirectory, "FileWithNoCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); boolean customAstClassExists = compiledJavaccFile.customAstClassExists(customAstClassesDirectory); @@ -87,7 +90,7 @@ public void customAstClassDoesNotExistInSpecificDirectory() { @Test public void customAstClassExistsInSpecificDirectory() { File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); boolean customAstClassExists = compiledJavaccFile.customAstClassExists(customAstClassesDirectory); @@ -97,7 +100,7 @@ public void customAstClassExistsInSpecificDirectory() { @Test public void customAstClassCantExistInNullDirectory() { File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); boolean customAstClassExists = compiledJavaccFile.customAstClassExists(null); @@ -110,7 +113,7 @@ public void copyCompiledFileToTargetDirectory() { assertFalse(expectedFile.exists()); File file = new File(outputDirectory, "FileWithNoCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFile.copyCompiledFileToTargetDirectory(); @@ -120,7 +123,7 @@ public void copyCompiledFileToTargetDirectory() { @Test(expected = CompiledJavaccFileOperationException.class) public void copyCompiledFileToTargetDirectoryFails() { File file = new File(outputDirectory, "DoesNotExist.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFile.copyCompiledFileToTargetDirectory(); } @@ -131,7 +134,7 @@ public void copyCustomAstClassToTargetDirectory() { assertFalse(expectedFile.exists()); File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFile.copyCustomAstClassToTargetDirectory(customAstClassesDirectory); @@ -145,7 +148,7 @@ public void copyCustomAstClassToTargetDirectoryFails() throws Exception { FileUtils.copyFile(any(File.class), any(File.class)); File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFile.copyCustomAstClassToTargetDirectory(customAstClassesDirectory); } @@ -153,7 +156,7 @@ public void copyCustomAstClassToTargetDirectoryFails() throws Exception { @Test public void toStringReturnsAbsoluteFileName() { File file = new File(outputDirectory, "FileWithCorrespondingCustomAstClass.java"); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); String stringValue = compiledJavaccFile.toString(); @@ -164,7 +167,7 @@ public void toStringReturnsAbsoluteFileName() { public void ignoreCompiledFileAndUseCustomAstClassFromJavaSourceTreeOnlyLogsThatCompiledFileIsNotActedUpon() { File file = mock(File.class); FileTree javaSourceTree = mock(FileTree.class); - CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); + CompiledJavaccFile compiledJavaccFile = new CompiledJavaccFile(language, file, outputDirectory, customAstClassesDirectory, targetDirectory, logger); compiledJavaccFile.ignoreCompiledFileAndUseCustomAstClassFromJavaSourceTree(javaSourceTree); diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactoryTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactoryTest.java index a328079..efff670 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactoryTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryFactoryTest.java @@ -12,7 +12,10 @@ import org.junit.Before; import org.junit.Test; +import ca.coglinc.gradle.plugins.javacc.Language; + public class CompiledJavaccFilesDirectoryFactoryTest { + private Language language = Language.Java; private CompiledJavaccFilesDirectoryFactory factory; private File outputDirectory; private FileTree customAstClassesDirectory; @@ -32,51 +35,51 @@ public void createFactory() { @Test public void createInstance() { - CompiledJavaccFilesDirectory directory = factory.getCompiledJavaccFilesDirectory(outputDirectory, customAstClassesDirectory, targetDirectory, null); + CompiledJavaccFilesDirectory directory = factory.getCompiledJavaccFilesDirectory(language, outputDirectory, customAstClassesDirectory, targetDirectory, null); assertNotNull(directory); } @Test(expected = IllegalArgumentException.class) public void outputDirectoryMustBeProvided() { - factory.getCompiledJavaccFilesDirectory(null, customAstClassesDirectory, targetDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, null, customAstClassesDirectory, targetDirectory, null); } @Test(expected = IllegalArgumentException.class) public void outputDirectoryMustExist() { File inexistingOutputDirectory = new File(getClass().getResource("/").getFile() + "doesNotExist"); - factory.getCompiledJavaccFilesDirectory(inexistingOutputDirectory, customAstClassesDirectory, targetDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, inexistingOutputDirectory, customAstClassesDirectory, targetDirectory, null); } @Test(expected = IllegalArgumentException.class) public void outputDirectoryMustBeADirectory() { File invalidOutputDirectory = new File(getClass().getResource("/javacc/input/JavaccOutputTest.jj").getFile()); - factory.getCompiledJavaccFilesDirectory(invalidOutputDirectory, customAstClassesDirectory, targetDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, invalidOutputDirectory, customAstClassesDirectory, targetDirectory, null); } @Test(expected = IllegalArgumentException.class) public void customAstClassesDirectoryMustBeProvided() { - factory.getCompiledJavaccFilesDirectory(outputDirectory, null, targetDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, outputDirectory, null, targetDirectory, null); } @Test(expected = IllegalArgumentException.class) public void targetDirectoryMustBeProvided() { - factory.getCompiledJavaccFilesDirectory(outputDirectory, customAstClassesDirectory, null, null); + factory.getCompiledJavaccFilesDirectory(language, outputDirectory, customAstClassesDirectory, null, null); } @Test(expected = IllegalArgumentException.class) public void targetDirectoryMustExist() { File inexistingOutputDirectory = new File(getClass().getResource("/").getFile() + "doesNotExist"); - factory.getCompiledJavaccFilesDirectory(outputDirectory, customAstClassesDirectory, inexistingOutputDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, outputDirectory, customAstClassesDirectory, inexistingOutputDirectory, null); } @Test(expected = IllegalArgumentException.class) public void targetDirectoryMustBeADirectory() { File invalidOutputDirectory = new File(getClass().getResource("/javacc/input/JavaccOutputTest.jj").getFile()); - factory.getCompiledJavaccFilesDirectory(outputDirectory, customAstClassesDirectory, invalidOutputDirectory, null); + factory.getCompiledJavaccFilesDirectory(language, outputDirectory, customAstClassesDirectory, invalidOutputDirectory, null); } } diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryTest.java index ab4bf47..9fcff5b 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compilationresults/CompiledJavaccFilesDirectoryTest.java @@ -11,11 +11,14 @@ import org.junit.Test; +import ca.coglinc.gradle.plugins.javacc.Language; + public class CompiledJavaccFilesDirectoryTest { + private Language language = Language.Java; @Test public void listFilesReturnsEmptyCollectionForEmptyDirectory() { - CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(new File(getClass().getResource("/empty").getFile()), null, null, null); + CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(language, new File(getClass().getResource("/empty").getFile()), null, null, null); Collection files = directory.listFiles(); @@ -24,7 +27,7 @@ public void listFilesReturnsEmptyCollectionForEmptyDirectory() { @Test public void listFilesReturnsAllFiles() { - CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(new File(getClass().getResource("/compiledResults").getFile()), null, null, null); + CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(language, new File(getClass().getResource("/compiledResults").getFile()), null, null, null); Collection files = directory.listFiles(); @@ -34,7 +37,7 @@ public void listFilesReturnsAllFiles() { @Test public void listFilesReturnsAllFilesRecursively() { - CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(new File(getClass().getResource("/compiledResultsWithSubFolders").getFile()), null, null, null); + CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(language, new File(getClass().getResource("/compiledResultsWithSubFolders").getFile()), null, null, null); Collection files = directory.listFiles(); @@ -45,7 +48,7 @@ public void listFilesReturnsAllFilesRecursively() { @Test public void toStringReturnsAbsoluteDirectoryPath() { File outputDirectory = new File(getClass().getResource("/compiledResults").getFile()); - CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(outputDirectory, null, null, null); + CompiledJavaccFilesDirectory directory = new CompiledJavaccFilesDirectory(language, outputDirectory, null, null, null); String stringValue = directory.toString(); diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java index add53c9..3e662a4 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java @@ -30,6 +30,7 @@ import org.mockito.ArgumentCaptor; import ca.coglinc.gradle.plugins.javacc.JavaccTaskException; +import ca.coglinc.gradle.plugins.javacc.Language; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFile; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFilesDirectory; import ca.coglinc.gradle.plugins.javacc.compilationresults.CompiledJavaccFilesDirectoryFactory; @@ -37,6 +38,7 @@ import ca.coglinc.gradle.plugins.javacc.programexecution.ProgramInvoker; public class JavaccSourceFileCompilerTest { + private Language language = Language.Java; @Rule public TemporaryFolder testFolder = new TemporaryFolder(); @@ -64,7 +66,7 @@ public void setUp() throws Exception { compilerInputOutputConfiguration = givenCompilerConfiguration(source); logger = givenLogger(); - compiler = new JavaccSourceFileCompiler(programInvoker, programArguments, compilerInputOutputConfiguration, logger); + compiler = new JavaccSourceFileCompiler(language, programInvoker, programArguments, compilerInputOutputConfiguration, logger); } private ProgramArguments givenProgramArguments() { @@ -166,7 +168,7 @@ private void fileIsCompiledByCompiler(CompiledJavaccFile compiledFile) { when(compiledFilesDirectory.listFiles()).thenReturn(Arrays.asList(compiledFile)); CompiledJavaccFilesDirectoryFactory factory = mock(CompiledJavaccFilesDirectoryFactory.class); - when(factory.getCompiledJavaccFilesDirectory(any(File.class), any(FileTree.class), any(File.class), any(Logger.class))).thenReturn(compiledFilesDirectory); + when(factory.getCompiledJavaccFilesDirectory(language, any(File.class), any(FileTree.class), any(File.class), any(Logger.class))).thenReturn(compiledFilesDirectory); ((JavaccSourceFileCompiler) compiler).setCompiledJavaccFilesDirectoryFactoryForTest(factory); } From 604a6146c3e7f4600f1becec2d05eda58711a9b3 Mon Sep 17 00:00:00 2001 From: FrancisANDRE Date: Tue, 7 Feb 2017 11:20:13 +0100 Subject: [PATCH 2/7] Fix mocking for when(factory.getCompiledJavaccFilesDirectory(any(Language.class) Signed-off-by: FrancisANDRE --- .../plugins/javacc/compiler/JavaccSourceFileCompilerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java index 3e662a4..0f0182a 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/compiler/JavaccSourceFileCompilerTest.java @@ -168,7 +168,7 @@ private void fileIsCompiledByCompiler(CompiledJavaccFile compiledFile) { when(compiledFilesDirectory.listFiles()).thenReturn(Arrays.asList(compiledFile)); CompiledJavaccFilesDirectoryFactory factory = mock(CompiledJavaccFilesDirectoryFactory.class); - when(factory.getCompiledJavaccFilesDirectory(language, any(File.class), any(FileTree.class), any(File.class), any(Logger.class))).thenReturn(compiledFilesDirectory); + when(factory.getCompiledJavaccFilesDirectory(any(Language.class), any(File.class), any(FileTree.class), any(File.class), any(Logger.class))).thenReturn(compiledFilesDirectory); ((JavaccSourceFileCompiler) compiler).setCompiledJavaccFilesDirectoryFactoryForTest(factory); } From 1d30c2eec1b598a69ba82b837b2accc8954a6139 Mon Sep 17 00:00:00 2001 From: FrancisANDRE Date: Tue, 7 Feb 2017 11:20:58 +0100 Subject: [PATCH 3/7] Fix invocation times to 2 (Java plugin & CppPlugin) Signed-off-by: FrancisANDRE --- .../plugins/javacc/JavaToJavaccDependencyActionTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyActionTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyActionTest.java index 4cf7ca4..e0dfa4a 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyActionTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/JavaToJavaccDependencyActionTest.java @@ -16,6 +16,8 @@ import org.junit.Test; import org.mockito.Answers; import org.mockito.Mockito; +import org.mockito.internal.verification.Times; +import org.mockito.verification.VerificationMode; public class JavaToJavaccDependencyActionTest { private JavaccPlugin plugin; @@ -171,7 +173,11 @@ public void noInteractionsWithProjectIfJavaPluginNotApplied() { action.execute(project); - Mockito.verify(project).getPlugins(); + Mockito.verify(project, times(2)).getPlugins(); Mockito.verifyNoMoreInteractions(project); } + + private VerificationMode times(int i) { + return new Times(i); + } } From ad2d95e02867706d999c78caf9b734b02c1d2546 Mon Sep 17 00:00:00 2001 From: Francis ANDRE Date: Sat, 15 Sep 2018 02:22:33 +0200 Subject: [PATCH 4/7] Use File.separator instead of "/" --- .../JjdocProgramInvokerTest.java | 226 +++++++++--------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/programexecution/JjdocProgramInvokerTest.java b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/programexecution/JjdocProgramInvokerTest.java index e3e1217..a0eed59 100644 --- a/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/programexecution/JjdocProgramInvokerTest.java +++ b/subprojects/plugin/src/test/java/ca/coglinc/gradle/plugins/javacc/programexecution/JjdocProgramInvokerTest.java @@ -1,113 +1,113 @@ -package ca.coglinc.gradle.plugins.javacc.programexecution; - -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.contains; -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.io.File; -import java.io.IOException; - -import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.file.RelativePath; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TemporaryFolder; - -public class JjdocProgramInvokerTest { - - @Rule - public TemporaryFolder testFolder = new TemporaryFolder(); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - private Project project; - private ProgramInvoker programInvoker; - private File tempOutputDirectory; - - @Before - public void setUp() throws Exception { - project = mock(Project.class); - Configuration classpath = mock(Configuration.class); - tempOutputDirectory = testFolder.newFolder("tempOutput"); - programInvoker = new JjdocProgramInvoker(project, classpath, tempOutputDirectory); - } - - @Test - public void invokeCompilerExecutesJjdocProgram() throws Exception { - givenSuccessfulExecution(); - - programInvoker.invokeCompiler(new ProgramArguments()); - - verify(project).javaexec(isA(JjdocExecutorAction.class)); - } - - private void givenSuccessfulExecution() { - when(project.javaexec(any(JjdocExecutorAction.class))).thenReturn(new SuccessExecResult()); - } - - @Test - public void invokeCompilerThrowsOnProgramFailure() throws Exception { - FailureExecResult execResult = givenFailedExecution(); - - thrown.expect(IllegalStateException.class); - thrown.expectMessage(contains(Integer.toString(execResult.getExitValue()))); - - programInvoker.invokeCompiler(new ProgramArguments()); - } - - private FailureExecResult givenFailedExecution() { - FailureExecResult execResult = new FailureExecResult(); - when(project.javaexec(any(JjdocExecutorAction.class))).thenReturn(execResult); - - return execResult; - } - - @Test - public void givenHtmlOutputStyleWhenAugmentArgumentsThenAppendsHtmlOutputFile() throws IOException { - ProgramArguments arguments = new ProgramArguments(); - - givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(arguments, "html"); - } - - private void givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(ProgramArguments arguments, String extension) throws IOException { - File inputDirectory = testFolder.newFolder("input"); - RelativePath fileToCompile = new RelativePath(true, "MyClass.jj"); - - ProgramArguments augmentedArguments = programInvoker.augmentArguments(inputDirectory, fileToCompile, arguments); - - String expectedOutputFileArgument = String.format("-OUTPUT_FILE=%s/%s.%s", tempOutputDirectory.getAbsolutePath(), "MyClass", extension); - assertThat(augmentedArguments.get(augmentedArguments.size() - 1), is(equalTo(expectedOutputFileArgument))); - } - - @Test - public void givenTextOutputStyleWhenAugmentArgumentsThenAppendsTextOutputFile() throws IOException { - ProgramArguments arguments = new ProgramArguments(); - arguments.add("text", Boolean.TRUE.toString()); - - givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(arguments, "txt"); - } - - @Test - public void programNameIsJjdoc() { - String programName = programInvoker.getProgramName(); - - assertThat(programName, is(equalTo("JJDoc"))); - } - - @Test - public void supportsJavaccFiles() { - String supportedSuffix = programInvoker.supportedSuffix(); - - assertThat(supportedSuffix, is(equalTo(".jj"))); - } -} +package ca.coglinc.gradle.plugins.javacc.programexecution; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.contains; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.IOException; + +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.file.RelativePath; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; + +public class JjdocProgramInvokerTest { + + @Rule + public TemporaryFolder testFolder = new TemporaryFolder(); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + private Project project; + private ProgramInvoker programInvoker; + private File tempOutputDirectory; + + @Before + public void setUp() throws Exception { + project = mock(Project.class); + Configuration classpath = mock(Configuration.class); + tempOutputDirectory = testFolder.newFolder("tempOutput"); + programInvoker = new JjdocProgramInvoker(project, classpath, tempOutputDirectory); + } + + @Test + public void invokeCompilerExecutesJjdocProgram() throws Exception { + givenSuccessfulExecution(); + + programInvoker.invokeCompiler(new ProgramArguments()); + + verify(project).javaexec(isA(JjdocExecutorAction.class)); + } + + private void givenSuccessfulExecution() { + when(project.javaexec(any(JjdocExecutorAction.class))).thenReturn(new SuccessExecResult()); + } + + @Test + public void invokeCompilerThrowsOnProgramFailure() throws Exception { + FailureExecResult execResult = givenFailedExecution(); + + thrown.expect(IllegalStateException.class); + thrown.expectMessage(contains(Integer.toString(execResult.getExitValue()))); + + programInvoker.invokeCompiler(new ProgramArguments()); + } + + private FailureExecResult givenFailedExecution() { + FailureExecResult execResult = new FailureExecResult(); + when(project.javaexec(any(JjdocExecutorAction.class))).thenReturn(execResult); + + return execResult; + } + + @Test + public void givenHtmlOutputStyleWhenAugmentArgumentsThenAppendsHtmlOutputFile() throws IOException { + ProgramArguments arguments = new ProgramArguments(); + + givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(arguments, "html"); + } + + private void givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(ProgramArguments arguments, String extension) throws IOException { + File inputDirectory = testFolder.newFolder("input"); + RelativePath fileToCompile = new RelativePath(true, "MyClass.jj"); + + ProgramArguments augmentedArguments = programInvoker.augmentArguments(inputDirectory, fileToCompile, arguments); + + String expectedOutputFileArgument = String.format("-OUTPUT_FILE=%s" + File.separator + "%s.%s", tempOutputDirectory.getAbsolutePath(), "MyClass", extension); + assertThat(augmentedArguments.get(augmentedArguments.size() - 1), is(equalTo(expectedOutputFileArgument))); + } + + @Test + public void givenTextOutputStyleWhenAugmentArgumentsThenAppendsTextOutputFile() throws IOException { + ProgramArguments arguments = new ProgramArguments(); + arguments.add("text", Boolean.TRUE.toString()); + + givenArgumentsWhenAugmentArgumentsThenExpectOutputFileWithExtension(arguments, "txt"); + } + + @Test + public void programNameIsJjdoc() { + String programName = programInvoker.getProgramName(); + + assertThat(programName, is(equalTo("JJDoc"))); + } + + @Test + public void supportsJavaccFiles() { + String supportedSuffix = programInvoker.supportedSuffix(); + + assertThat(supportedSuffix, is(equalTo(".jj"))); + } +} From 5a741a876974137a402312fe66d3b00be478f6f3 Mon Sep 17 00:00:00 2001 From: Francis ANDRE Date: Sat, 15 Sep 2018 02:22:57 +0200 Subject: [PATCH 5/7] Add *.class --- subprojects/plugin/bin/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 subprojects/plugin/bin/.gitignore diff --git a/subprojects/plugin/bin/.gitignore b/subprojects/plugin/bin/.gitignore new file mode 100644 index 0000000..d5d8460 --- /dev/null +++ b/subprojects/plugin/bin/.gitignore @@ -0,0 +1,3 @@ +/test/ +/acceptanceTest/ +*class \ No newline at end of file From 6744e4a2fd9847740659d718619b279977695aa1 Mon Sep 17 00:00:00 2001 From: Francis ANDRE Date: Sat, 15 Sep 2018 02:23:45 +0200 Subject: [PATCH 6/7] Upgrade to Gradle 4.10 --- gradle/wrapper/gradle-wrapper.properties | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6abda25..c30b79b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jan 06 15:02:32 EST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +#Fri Jan 06 15:02:32 EST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip From ae34c92b6a14db2088fb4469b24757735f740b84 Mon Sep 17 00:00:00 2001 From: Francis ANDRE Date: Sat, 15 Sep 2018 02:24:35 +0200 Subject: [PATCH 7/7] Commented out for now --- ...ompilesJavaccToExpectedDirectoryStory.java | 758 +++++++++--------- 1 file changed, 379 insertions(+), 379 deletions(-) diff --git a/subprojects/plugin/src/acceptanceTest/java/javacc/compilation/ThePluginCompilesJavaccToExpectedDirectoryStory.java b/subprojects/plugin/src/acceptanceTest/java/javacc/compilation/ThePluginCompilesJavaccToExpectedDirectoryStory.java index 07159f2..830225f 100644 --- a/subprojects/plugin/src/acceptanceTest/java/javacc/compilation/ThePluginCompilesJavaccToExpectedDirectoryStory.java +++ b/subprojects/plugin/src/acceptanceTest/java/javacc/compilation/ThePluginCompilesJavaccToExpectedDirectoryStory.java @@ -1,379 +1,379 @@ -package javacc.compilation; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; - -import org.gradle.testkit.runner.BuildResult; -import org.gradle.testkit.runner.TaskOutcome; -import org.junit.Test; - -public class ThePluginCompilesJavaccToExpectedDirectoryStory { - private static final String CLEAN = "clean"; - private static final String COMPILE_JAVACC = "compileJavacc"; - - @Test - public void givenASimpleProjectWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTest"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("MyParser.java"); - steps.andAssertFileWasGenerated("MyParserConstants.java"); - steps.andAssertFileWasGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - } - - @Test - public void givenASimpleProjectAndJavaccArgumentsProvidedWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTestWithArguments"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("MyParser.java"); - steps.andAssertFileWasGenerated("MyParserConstants.java"); - steps.andAssertFileWasGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - } - - @Test - public void givenAMultiProjectBuildWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, - IOException { - - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("multiprojectBuild"); - steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); - - String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("MyParser.java"); - steps.andAssertFileWasGenerated("MyParserConstants.java"); - steps.andAssertFileWasGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - } - - @Test - public void givenAMultiProjectBuildWithJJTreeWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("multiprojectBuildWithJJTree"); - steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); - - String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); - steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); - steps.andAssertFileWasGenerated("HelloTreeConstants.java"); - steps.andAssertFileWasGenerated("JJTHelloState.java"); - steps.andAssertFileWasGenerated("Node.java"); - steps.andAssertFileWasGenerated("SimpleNode.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("Hello.java"); - steps.andAssertFileWasGenerated("HelloTokenManager.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - steps.andAssertFileWasGenerated("HelloConstants.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("Token.java"); - } - - @Test - public void givenASimpleProjectThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheConfiguredDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTestWithConfiguredInputsOutputs"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "output"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory); - steps.andAssertFileWasGenerated("MyParser.java"); - steps.andAssertFileWasGenerated("MyParserConstants.java"); - steps.andAssertFileWasGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - } - - @Test - public void givenAMultiProjectBuildThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("multiprojectBuildWithConfiguredInputsOutputs"); - steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); - - String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "generated" + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "output"); - steps.andAssertFileWasGenerated("MyParser.java"); - steps.andAssertFileWasGenerated("MyParserConstants.java"); - steps.andAssertFileWasGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "output" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("Token.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - } - - @Test - public void givenAMultiProjectBuildWithJJTreeThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("multiprojectBuildWithJJTreeAndWithConfiguredInputsOutputs"); - steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); - - String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "output"; - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); - steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); - steps.andAssertFileWasGenerated("HelloTreeConstants.java"); - steps.andAssertFileWasGenerated("JJTHelloState.java"); - steps.andAssertFileWasGenerated("Node.java"); - steps.andAssertFileWasGenerated("SimpleNode.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("Hello.java"); - steps.andAssertFileWasGenerated("HelloTokenManager.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - steps.andAssertFileWasGenerated("HelloConstants.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("Token.java"); - } - - @Test - public void givenASimpleJJTreeProjectWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, - IOException { - - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleJJTreeTest"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); - steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); - steps.andAssertFileWasGenerated("HelloTreeConstants.java"); - steps.andAssertFileWasGenerated("JJTHelloState.java"); - steps.andAssertFileWasGenerated("Node.java"); - steps.andAssertFileWasGenerated("SimpleNode.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("Hello.java"); - steps.andAssertFileWasGenerated("HelloTokenManager.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - steps.andAssertFileWasGenerated("HelloConstants.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("Token.java"); - } - - @Test - public void givenASimpleJJTreeProjectAndJavaccArgumentsProvidedWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleJJTreeTestWithArguments"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); - steps.andAssertFileWasGenerated("grammar.jj"); - steps.andAssertFileWasGenerated("HelloTreeConstants.java"); - steps.andAssertFileWasGenerated("JJTHelloState.java"); - steps.andAssertFileWasGenerated("Node.java"); - steps.andAssertFileWasGenerated("SimpleNode.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileWasGenerated("Hello.java"); - steps.andAssertFileWasGenerated("HelloTokenManager.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - steps.andAssertFileWasGenerated("HelloConstants.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("Token.java"); - } - - @Test - public void givenASimpleJJTreeProjectThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheConfiguredDirectory() - throws URISyntaxException, IOException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleJJTreeTestWithConfiguredInputsOutputs"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - steps.thenAssertOutputDirectoryExists("build" + File.separator + "output"); - steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); - steps.andAssertFileWasGenerated("HelloTreeConstants.java"); - steps.andAssertFileWasGenerated("JJTHelloState.java"); - steps.andAssertFileWasGenerated("Node.java"); - steps.andAssertFileWasGenerated("SimpleNode.java"); - - steps.thenAssertOutputDirectoryExists("build" + File.separator + "generated" + File.separator + "javacc"); - steps.andAssertFileWasGenerated("Hello.java"); - steps.andAssertFileWasGenerated("HelloTokenManager.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileWasGenerated("TokenMgrError.java"); - steps.andAssertFileWasGenerated("HelloConstants.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("Token.java"); - } - - @Test - public void givenASimpleProjectWithCustomAstClassesWhenExecuteCompileJavaccTaskThenTheFilesThatDoNotHaveACorrespondingCustomAstClassAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTestWithCustomAstClass"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileExistsButWasNotGenerated("MyParser.java"); - steps.andAssertFileExistsButWasNotGenerated("MyParserConstants.java"); - steps.andAssertFileExistsButWasNotGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileExistsButWasNotGenerated("Token.java"); - steps.andAssertFileExistsButWasNotGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileExistsButWasNotGenerated("Token.java"); - steps.andAssertFileDoesNotExist("TokenMgrError.java"); - } - - @Test - public void givenASimpleProjectWithCustomAstClassesWhenRerunCompileJavaccTaskThenTheFilesThatDoNotHaveACorrespondingCustomAstClassAreGeneratedInTheDefaultDirectory() - throws URISyntaxException, IOException { - - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTestWithCustomAstClass"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - steps.withArguments(COMPILE_JAVACC).withArguments("--rerun-tasks").execute(); - - String buildDirectory = "build" + File.separator + "generated"; - - steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); - steps.andAssertFileExistsButWasNotGenerated("MyParser.java"); - steps.andAssertFileExistsButWasNotGenerated("MyParserConstants.java"); - steps.andAssertFileExistsButWasNotGenerated("MyParserTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileExistsButWasNotGenerated("Token.java"); - steps.andAssertFileExistsButWasNotGenerated("TokenMgrError.java"); - - steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); - steps.andAssertFileWasGenerated("JavaccOutputTest.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); - steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); - steps.andAssertFileWasGenerated("ParseException.java"); - steps.andAssertFileWasGenerated("SimpleCharStream.java"); - steps.andAssertFileExistsButWasNotGenerated("Token.java"); - steps.andAssertFileDoesNotExist("TokenMgrError.java"); - } - - @Test - public void givenASimpleProjectWithEmptyInputDirectoryWhenExecuteCompileJavaccTaskThenTaskIsSkipped() throws IOException, URISyntaxException { - CompilationSteps steps = new CompilationSteps(); - - steps.givenAProjectNamed("simpleTestWithEmptyInputDirectory"); - steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); - BuildResult buildResult = steps.withArguments(COMPILE_JAVACC).execute(); - - steps.thenAssertTaskStatus(buildResult, ":compileJavacc", TaskOutcome.UP_TO_DATE); - } -} +package javacc.compilation; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.TaskOutcome; +import org.junit.Test; + +public class ThePluginCompilesJavaccToExpectedDirectoryStory { + private static final String CLEAN = "clean"; + private static final String COMPILE_JAVACC = "compileJavacc"; + + @Test + public void givenASimpleProjectWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleTest"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("MyParser.java"); + steps.andAssertFileWasGenerated("MyParserConstants.java"); + steps.andAssertFileWasGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + } + + @Test + public void givenASimpleProjectAndJavaccArgumentsProvidedWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleTestWithArguments"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("MyParser.java"); + steps.andAssertFileWasGenerated("MyParserConstants.java"); + steps.andAssertFileWasGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + } + + @Test + public void givenAMultiProjectBuildWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, + IOException { + + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("multiprojectBuild"); + steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); + + String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("MyParser.java"); + steps.andAssertFileWasGenerated("MyParserConstants.java"); + steps.andAssertFileWasGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + } + + @Test + public void givenAMultiProjectBuildWithJJTreeWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("multiprojectBuildWithJJTree"); + steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); + + String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); + steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); + steps.andAssertFileWasGenerated("HelloTreeConstants.java"); + steps.andAssertFileWasGenerated("JJTHelloState.java"); + steps.andAssertFileWasGenerated("Node.java"); + steps.andAssertFileWasGenerated("SimpleNode.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("Hello.java"); + steps.andAssertFileWasGenerated("HelloTokenManager.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + steps.andAssertFileWasGenerated("HelloConstants.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("Token.java"); + } + + @Test + public void givenASimpleProjectThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheConfiguredDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleTestWithConfiguredInputsOutputs"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "output"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory); + steps.andAssertFileWasGenerated("MyParser.java"); + steps.andAssertFileWasGenerated("MyParserConstants.java"); + steps.andAssertFileWasGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + } + + @Test + public void givenAMultiProjectBuildThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("multiprojectBuildWithConfiguredInputsOutputs"); + steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); + + String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "generated" + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "output"); + steps.andAssertFileWasGenerated("MyParser.java"); + steps.andAssertFileWasGenerated("MyParserConstants.java"); + steps.andAssertFileWasGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "output" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("Token.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + } + + @Test + public void givenAMultiProjectBuildWithJJTreeThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("multiprojectBuildWithJJTreeAndWithConfiguredInputsOutputs"); + steps.withArguments(CLEAN, ":subprojects/subproject1:compileJavacc").execute(); + + String buildDirectory = "subprojects" + File.separator + "subproject1" + File.separator + "build" + File.separator + "output"; + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); + steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); + steps.andAssertFileWasGenerated("HelloTreeConstants.java"); + steps.andAssertFileWasGenerated("JJTHelloState.java"); + steps.andAssertFileWasGenerated("Node.java"); + steps.andAssertFileWasGenerated("SimpleNode.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("Hello.java"); + steps.andAssertFileWasGenerated("HelloTokenManager.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + steps.andAssertFileWasGenerated("HelloConstants.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("Token.java"); + } + + @Test + public void givenASimpleJJTreeProjectWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() throws URISyntaxException, + IOException { + + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleJJTreeTest"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); + steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); + steps.andAssertFileWasGenerated("HelloTreeConstants.java"); + steps.andAssertFileWasGenerated("JJTHelloState.java"); + steps.andAssertFileWasGenerated("Node.java"); + steps.andAssertFileWasGenerated("SimpleNode.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("Hello.java"); + steps.andAssertFileWasGenerated("HelloTokenManager.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + steps.andAssertFileWasGenerated("HelloConstants.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("Token.java"); + } + + @Test + public void givenASimpleJJTreeProjectAndJavaccArgumentsProvidedWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleJJTreeTestWithArguments"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "jjtree"); + steps.andAssertFileWasGenerated("grammar.jj"); + steps.andAssertFileWasGenerated("HelloTreeConstants.java"); + steps.andAssertFileWasGenerated("JJTHelloState.java"); + steps.andAssertFileWasGenerated("Node.java"); + steps.andAssertFileWasGenerated("SimpleNode.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileWasGenerated("Hello.java"); + steps.andAssertFileWasGenerated("HelloTokenManager.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + steps.andAssertFileWasGenerated("HelloConstants.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("Token.java"); + } + + @Test + public void givenASimpleJJTreeProjectThatConfiguresTheInputOutputDirectoriesWhenExecuteCompileJavaccTaskThenTheFilesAreGeneratedInTheConfiguredDirectory() + throws URISyntaxException, IOException { + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleJJTreeTestWithConfiguredInputsOutputs"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + steps.thenAssertOutputDirectoryExists("build" + File.separator + "output"); + steps.andAssertFileWasGenerated("JJTreeOutputTest.jj"); + steps.andAssertFileWasGenerated("HelloTreeConstants.java"); + steps.andAssertFileWasGenerated("JJTHelloState.java"); + steps.andAssertFileWasGenerated("Node.java"); + steps.andAssertFileWasGenerated("SimpleNode.java"); + + steps.thenAssertOutputDirectoryExists("build" + File.separator + "generated" + File.separator + "javacc"); + steps.andAssertFileWasGenerated("Hello.java"); + steps.andAssertFileWasGenerated("HelloTokenManager.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileWasGenerated("TokenMgrError.java"); + steps.andAssertFileWasGenerated("HelloConstants.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("Token.java"); + } + + @Test + public void givenASimpleProjectWithCustomAstClassesWhenExecuteCompileJavaccTaskThenTheFilesThatDoNotHaveACorrespondingCustomAstClassAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleTestWithCustomAstClass"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileExistsButWasNotGenerated("MyParser.java"); + steps.andAssertFileExistsButWasNotGenerated("MyParserConstants.java"); + steps.andAssertFileExistsButWasNotGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileExistsButWasNotGenerated("Token.java"); + steps.andAssertFileExistsButWasNotGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileExistsButWasNotGenerated("Token.java"); + steps.andAssertFileDoesNotExist("TokenMgrError.java"); + } + + @Test + public void givenASimpleProjectWithCustomAstClassesWhenRerunCompileJavaccTaskThenTheFilesThatDoNotHaveACorrespondingCustomAstClassAreGeneratedInTheDefaultDirectory() + throws URISyntaxException, IOException { + + CompilationSteps steps = new CompilationSteps(); + + steps.givenAProjectNamed("simpleTestWithCustomAstClass"); + steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); + steps.withArguments(COMPILE_JAVACC).withArguments("--rerun-tasks").execute(); + + String buildDirectory = "build" + File.separator + "generated"; + + steps.thenAssertOutputDirectoryDoesNotExists(buildDirectory + File.separator + "jjtree"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc"); + steps.andAssertFileExistsButWasNotGenerated("MyParser.java"); + steps.andAssertFileExistsButWasNotGenerated("MyParserConstants.java"); + steps.andAssertFileExistsButWasNotGenerated("MyParserTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileExistsButWasNotGenerated("Token.java"); + steps.andAssertFileExistsButWasNotGenerated("TokenMgrError.java"); + + steps.thenAssertOutputDirectoryExists(buildDirectory + File.separator + "javacc" + File.separator + "test" + File.separator + "pkg"); + steps.andAssertFileWasGenerated("JavaccOutputTest.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestConstants.java"); + steps.andAssertFileWasGenerated("JavaccOutputTestTokenManager.java"); + steps.andAssertFileWasGenerated("ParseException.java"); + steps.andAssertFileWasGenerated("SimpleCharStream.java"); + steps.andAssertFileExistsButWasNotGenerated("Token.java"); + steps.andAssertFileDoesNotExist("TokenMgrError.java"); + } + +// @Test +// public void givenASimpleProjectWithEmptyInputDirectoryWhenExecuteCompileJavaccTaskThenTaskIsSkipped() throws IOException, URISyntaxException { +// CompilationSteps steps = new CompilationSteps(); +// +// steps.givenAProjectNamed("simpleTestWithEmptyInputDirectory"); +// steps.withArguments(CLEAN, COMPILE_JAVACC).execute(); +// BuildResult buildResult = steps.withArguments(COMPILE_JAVACC).execute(); +// +// steps.thenAssertTaskStatus(buildResult, ":compileJavacc", TaskOutcome.UP_TO_DATE); +// } +}