diff --git a/README.md b/README.md index eceaa53..1cecc3b 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ This is the source for the Gradle plugin for the [AssertJ Generator](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html). This plugin leverages existing Gradle [SourceSet](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.SourceSet.html) API to make it easier to integrate the AssertJ Generator into existing Gradle-based projects. The configurations available mimic those -provided by the [AssertJ Generator Maven Plugin](http://joel-costigliola.github.io/assertj/assertj-assertions-generator-maven-plugin.html). - +provided by +the [AssertJ Generator Maven Plugin](http://joel-costigliola.github.io/assertj/assertj-assertions-generator-maven-plugin.html). ## Quick Start @@ -21,26 +21,26 @@ This plugin requires Gradle 4.0. ```gradle plugins { - id 'org.assertj.generator' version '0.0.6b' + id 'org.assertj.generator' version '0.0.6b' } sourceSets { - main { - // must specify assertJ block to have it applied - assertJ { } - } + main { + // must specify assertJ block to have it applied + assertJ { } + } } // add some classpath dependencies repositories { - mavenCentral() + mavenCentral() } dependencies { - // https://mvnrepository.com/artifact/org.assertj/assertj-core - testCompile group: 'org.assertj', name: 'assertj-core', version: '3.8.0' + // https://mvnrepository.com/artifact/org.assertj/assertj-core + testCompile group: 'org.assertj', name: 'assertj-core', version: '3.8.0' - testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile group: 'junit', name: 'junit', version: '4.12' } ``` @@ -49,13 +49,15 @@ dependencies { Primary configuration of included/excluded files is done via the same mechanisms that are used for Gradle's SourceSet DSL. For explanation on how filters work, please review the [Java Plugin Tutorial for Gradle](https://docs.gradle.org/current/userguide/java_plugin.html#sec:changing_java_project_layout). -This plugin utilizes the filters to gather classes to run against the generator. **This is different than how the AssertJ +This plugin utilizes the filters to gather classes to run against the generator. **This is different than how the +AssertJ Generator normally functions** -- this plugin does not work on class/package names, but folder/file patterns like the Java plugin. ### Plugin Version -The plugin version is tied to the version of the [AssertJ Generator](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html). +The plugin version is tied to the version of +the [AssertJ Generator](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html). The version of the generator used will always match the plugin's version. ### Scope: Local vs. Global @@ -93,56 +95,32 @@ The following example turns on generation for _only_ `main` All classes found wi Assertion generated. This is the recommended way to turn on generation for source sets. ```gradle -assertJ { - // Add any configuration options to apply to all source sets here -} - sourceSets { - main { - assertJ { } // sets skip = false for the "main" sourceSet - } - test { } + main { + assertJ { } // sets skip = false for the "main" sourceSet + } + test { } } ``` If debugging a build, it may be useful to turn off generation for a `sourceSet`. To do this, inside the configuration - block, set `skip = true`. +block, set `skip = true`. ```gradle -assertJ { - // Add any configuration options to apply to all source sets here -} - sourceSets { - main { - assertJ { } // sets skip = false for the "main" sourceSet - } - - brokenGeneration { - assertJ { - skip = true // no assertions will be generated for - // "brokenGeneration" - // other parameters follow, order of assignment of different - // parameters does not matter, like with gradle - } + main { + assertJ { } // sets skip = false for the "main" sourceSet + } + + brokenGeneration { + assertJ { + skip = true // no assertions will be generated for + // "brokenGeneration" + // other parameters follow, order of assignment of different + // parameters does not matter, like with gradle } - test { } -} -``` - -The following example turns on generation for `main` and `test` without adding configuration blocks. Any class found - within `main` and `test` will have an Assertion generated. This is **not recommended** as it can lead to excessive - generation and unnecessary slowdowns. - -```gradle -assertJ { - // Add any configuration options to apply to all source sets here - skip = false // default: true -} - -sourceSets { - main { } - test { } + } + test { } } ``` @@ -161,15 +139,14 @@ The following example changes the output directory for _all_ source sets to be scope. ```gradle -assertJ { - // default: generated-srcs/${SOURCE_SET_NAME_TAG}/java - outputDir = "src-gen/${SOURCE_SET_NAME_TAG}/java" -} - sourceSets { - main { - assertJ {} // turn on assertJ generation - } + main { + // turn on assertJ generation + assertJ { + // default: generated-srcs/${SOURCE_SET_NAME_TAG}/java + outputDir = "src-gen/${SOURCE_SET_NAME_TAG}/java" + } + } } ``` @@ -193,62 +170,60 @@ The following example replaces the whole number field with a custom template for remain unaffected. ```gradle -assertJ { } - sourceSets { - main { - assertJ { - templates { - methods { - wholeNumberPrimitive = 'public get${Property}() { }' - } - } + main { + assertJ { + templates { + methods { + wholeNumberPrimitive = 'public get${Property}() { }' } + } } + } } ``` -The following example changes the template to a `file()` template for _all_ source sets. +The following example changes the template to a `file()` template for the `main` source sets. + ```gradle -assertJ { - templates { +sourceSets { + main { + assertJ { + templates { // Set the template to file content: ./wholeNumberOverride.txt methods { - wholeNumberPrimitive = file('wholeNumberOverride.txt') + wholeNumberPrimitive = file('wholeNumberOverride.txt') } + } } -} - -sourceSets { - main { - assertJ { } - } + } } ``` The `templateDir` is not a scope-override property. If set, it only applies to the block it is defined within. This was - intentionally done to remove ambiguity. Additionally, this example can be applied to local scopes. +intentionally done to remove ambiguity. Additionally, this example can be applied to local scopes. ```gradle assertJ { - templates { + +} + +sourceSets { + main { + assertJ { + templates { // Set all templates in this block to be relative to the folder specified dir = "${projectDir}/gradle/other-templates" - + // Change the file content to: // ${projectDir}/gradle/other-templates/wholeNumberOverride.txt wholeNumberAssertion = file('wholeNumberOverride.txt') + } } -} - -sourceSets { - main { - assertJ { } - } + } } ``` - #### P: entryPoints - `EntryPointsGeneratorOptions` Default: Only generate "standard" assertions @@ -258,12 +233,12 @@ The [AssertJ Generator - Entry Points](http://joel-costigliola.github.io/assertj explains how these work and what is expected to be generated for each entry point. The following table shows a mapping value to entry point: -| Value | Enum Value | Entry Point | -|:------------|:------------|:------------| -| `bdd` | `BDD` | [BDD style](http://joel-costigliola.github.io/assertj/assertj-core-news.html#assertj-core-1.6.0-bdd-assertions-style) | -| `standard` | `STANDARD` | [Standard assertions style](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html#generated-entry-points) | -| `junitSoft` | `JUNIT_SOFT`| [JUnit Soft](http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#soft-assertions) | -| `soft` | `SOFT` | [Soft](http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#soft-assertions) +| Value | Enum Value | Entry Point | +|:------------|:-------------|:--------------------------------------------------------------------------------------------------------------------------------| +| `bdd` | `BDD` | [BDD style](http://joel-costigliola.github.io/assertj/assertj-core-news.html#assertj-core-1.6.0-bdd-assertions-style) | +| `standard` | `STANDARD` | [Standard assertions style](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html#generated-entry-points) | +| `junitSoft` | `JUNIT_SOFT` | [JUnit Soft](http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#soft-assertions) | +| `soft` | `SOFT` | [Soft](http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#soft-assertions) | By default, only the `standard` style is turned on. To adjust this, simply set the values to `true` within the `entryPoints` closure. @@ -271,26 +246,25 @@ By default, only the `standard` style is turned on. To adjust this, simply set t ```gradle // For all source sets: assertJ { - entryPoints { - standard = false // No more standard generation - bdd = true // Turn on BDD - junitSoft = true // and JUnit Soft - } + } sourceSets { - main { - assertJ { } + main { + assertJ { + entryPoints { + standard = false // No more standard generation + bdd = true // Turn on BDD + junitSoft = true // and JUnit Soft + } } + } } ``` A useful trick to turn on _only_ a set of values is to just set the `entryPoints` to a collection of types: ```gradle -// For all source sets: -assertJ { } - sourceSets { main { assertJ { @@ -303,9 +277,6 @@ sourceSets { Or within the `entryPoints` closure: ```gradle -// For all source sets: -assertJ { } - sourceSets { main { assertJ { @@ -335,10 +306,11 @@ This plugin injects itself where it is needed for complete compilation. ## Alternatives There exists several other alternative Gradle plugins that perform the same functionality as this one. -Currently known: +Currently, known: * [opengl-8080/assertjGen-gradle-plugin](https://github.com/opengl-8080/assertjGen-gradle-plugin) - built to wrap the - example provided by @joel-costigiola, [here](https://github.com/joel-costigliola/assertj-assertions-generator/blob/master/src/main/scripts/build.gradle) + example provided by + @joel-costigiola, [here](https://github.com/joel-costigliola/assertj-assertions-generator/blob/master/src/main/scripts/build.gradle) which does not allow for configuration. This plugin does _not_ tie the plugin to a specific version of the AssertJ Generator * [fhermansson/assertj-generator-gradle-plugin](https://github.com/fhermansson/assertj-generator-gradle-plugin) - only diff --git a/build.gradle.kts b/build.gradle.kts index 2a16746..d70cd9d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,67 +2,69 @@ import com.gradle.publish.PublishTask.GRADLE_PUBLISH_KEY import com.gradle.publish.PublishTask.GRADLE_PUBLISH_SECRET plugins { - id("groovy") - id("com.gradle.plugin-publish") version "1.2.0" - id("java-gradle-plugin") + id("groovy") + id("com.gradle.plugin-publish") version "1.2.0" + id("java-gradle-plugin") } val setupPluginUpload by tasks.registering { - // TODO switch this to use github action - if ("CI" in System.getenv() && "TRAVIS" in System.getenv()) { - // Used for publishing from Travis + // TODO switch this to use github action + if ("CI" in System.getenv() && "TRAVIS" in System.getenv()) { + // Used for publishing from Travis - val key = System.getenv(GRADLE_PUBLISH_KEY) ?: System.getProperty(GRADLE_PUBLISH_KEY) - val secret = System.getenv(GRADLE_PUBLISH_SECRET) ?: System.getProperty(GRADLE_PUBLISH_SECRET) + val key = System.getenv(GRADLE_PUBLISH_KEY) ?: System.getProperty(GRADLE_PUBLISH_KEY) + val secret = System.getenv(GRADLE_PUBLISH_SECRET) ?: System.getProperty(GRADLE_PUBLISH_SECRET) - if (key == null || secret == null) { - error("GRADLE_PUBLISH_KEY and/or GRADLE_PUBLISH_SECRET are not defined environment variables") - } - - System.setProperty(GRADLE_PUBLISH_KEY, key) - System.setProperty(GRADLE_PUBLISH_SECRET, secret) + if (key == null || secret == null) { + error("GRADLE_PUBLISH_KEY and/or GRADLE_PUBLISH_SECRET are not defined environment variables") } + + System.setProperty(GRADLE_PUBLISH_KEY, key) + System.setProperty(GRADLE_PUBLISH_SECRET, secret) + } } tasks.named("publishPlugins") { - dependsOn(setupPluginUpload) + dependsOn(setupPluginUpload) } group = "org.assertj" version = "2.2.0-SNAPSHOT" gradlePlugin { - website.set("https://github.com/assertj/assertj-generator-gradle-plugin") - vcsUrl.set("https://github.com/assertj/assertj-generator-gradle-plugin.git") + website.set("https://github.com/assertj/assertj-generator-gradle-plugin") + vcsUrl.set("https://github.com/assertj/assertj-generator-gradle-plugin.git") - plugins { - create("assertJGeneratorPlugin") { - id = "org.assertj.generator" + plugins { + create("assertJGeneratorPlugin") { + id = "org.assertj.generator" - displayName = "AssertJ Generator Gradle Plugin" - description = "Run the AssertJ generator against your source files to generate test sources." + displayName = "AssertJ Generator Gradle Plugin" + description = "Run the AssertJ generator against your source files to generate test sources." - tags.set(listOf("assertj", "testing", "generator")) + tags.set(listOf("assertj", "testing", "generator")) - implementationClass = "org.assertj.generator.gradle.AssertJGeneratorGradlePlugin" - } + implementationClass = "org.assertj.generator.gradle.AssertJGeneratorGradlePlugin" } + } } repositories { - mavenCentral() + mavenCentral() } dependencies { - api(gradleApi()) - api(localGroovy()) + api(gradleApi()) + api(localGroovy()) + + api("org.assertj:assertj-core:3.24.2") + api("org.assertj:assertj-assertions-generator:2.2.1") - api("org.assertj:assertj-core:3.24.2") - api("org.assertj:assertj-assertions-generator:2.2.1") + implementation("com.google.guava:guava:31.1-jre") - implementation("com.google.guava:guava:31.1-jre") + testCompileOnly("org.jetbrains:annotations:24.0.1") - testImplementation(gradleTestKit()) - testImplementation("junit:junit:4.13.2") + testImplementation(gradleTestKit()) + testImplementation("junit:junit:4.13.2") } diff --git a/src/main/groovy/org/assertj/generator/gradle/AssertJGeneratorGradlePlugin.groovy b/src/main/groovy/org/assertj/generator/gradle/AssertJGeneratorGradlePlugin.groovy index 9e1db68..2614d06 100644 --- a/src/main/groovy/org/assertj/generator/gradle/AssertJGeneratorGradlePlugin.groovy +++ b/src/main/groovy/org/assertj/generator/gradle/AssertJGeneratorGradlePlugin.groovy @@ -13,7 +13,7 @@ package org.assertj.generator.gradle import org.assertj.generator.gradle.internal.tasks.DefaultAssertJGeneratorSourceSet -import org.assertj.generator.gradle.internal.tasks.config.GlobalAssertJGeneratorOptions + import org.assertj.generator.gradle.tasks.AssertJGenerationTask import org.assertj.generator.gradle.tasks.AssertJGeneratorSourceSet import org.gradle.api.Plugin @@ -69,8 +69,6 @@ class AssertJGeneratorGradlePlugin implements Plugin { } } - project.extensions.create("assertJ", GlobalAssertJGeneratorOptions) - def javaPlugin = project.getConvention().getPlugin(JavaPluginConvention) // So now we have to go through and add the properties that we want javaPlugin.sourceSets.all { sourceSet -> @@ -118,9 +116,6 @@ class AssertJGeneratorGradlePlugin implements Plugin { } project.afterEvaluate { - // First, figure out global vs. locally scoped configurations - assertJSS.defaultFromGlobals(project) - generationTask.configure { outputDir = assertJSS.getOutputDir(sourceSet) } diff --git a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/DefaultAssertJGeneratorSourceSet.groovy b/src/main/groovy/org/assertj/generator/gradle/internal/tasks/DefaultAssertJGeneratorSourceSet.groovy index 8feee9a..51191b2 100644 --- a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/DefaultAssertJGeneratorSourceSet.groovy +++ b/src/main/groovy/org/assertj/generator/gradle/internal/tasks/DefaultAssertJGeneratorSourceSet.groovy @@ -34,7 +34,6 @@ class DefaultAssertJGeneratorSourceSet extends DefaultAssertJGeneratorOptions im final String name boolean skip String entryPointClassPackage - EntryPointGeneratorOptions entryPoints private File outputDir private final SourceDirectorySet assertJDirectorySet diff --git a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/DefaultAssertJGeneratorOptions.groovy b/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/DefaultAssertJGeneratorOptions.groovy index 8756d2a..c69323b 100644 --- a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/DefaultAssertJGeneratorOptions.groovy +++ b/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/DefaultAssertJGeneratorOptions.groovy @@ -16,11 +16,9 @@ import groovy.transform.EqualsAndHashCode import groovy.transform.PackageScope import groovy.transform.ToString import org.assertj.assertions.generator.AssertionsEntryPointType -import org.assertj.generator.gradle.AssertJGeneratorGradlePlugin import org.assertj.generator.gradle.tasks.config.AssertJGeneratorOptions import org.assertj.generator.gradle.tasks.config.EntryPointGeneratorOptions import org.assertj.generator.gradle.tasks.config.Templates -import org.gradle.api.Project import org.gradle.api.tasks.SourceSet import org.gradle.util.ConfigureUtil @@ -30,7 +28,8 @@ import java.nio.file.Paths /** * Simple, default implementation of {@link AssertJGeneratorOptions} */ -@EqualsAndHashCode @ToString +@EqualsAndHashCode +@ToString class DefaultAssertJGeneratorOptions implements AssertJGeneratorOptions, Serializable { boolean skip @@ -41,20 +40,21 @@ class DefaultAssertJGeneratorOptions implements AssertJGeneratorOptions, Seriali protected String outputDir DefaultAssertJGeneratorOptions() { + this.outputDir = "generated-src/${SOURCE_SET_NAME_TAG}-test/java" + skip = true hierarchical = null templates = new Templates() + + // default entry points + this._entryPoints = new EntryPointGeneratorOptions() + this._entryPoints.only(AssertionsEntryPointType.STANDARD) } Path getOutputDir(SourceSet sourceSet) { if (!outputDir) return null - def path - if (sourceSet.name.contains("test")) { - path = this.outputDir.replace(SOURCE_SET_NAME_TAG, sourceSet.name) - } else { - path = this.outputDir.replace(SOURCE_SET_NAME_TAG, sourceSet.getTaskName('test', '')) - } + def path = this.outputDir.replace(SOURCE_SET_NAME_TAG, sourceSet.name) Paths.get(path) } @@ -94,7 +94,7 @@ class DefaultAssertJGeneratorOptions implements AssertJGeneratorOptions, Seriali } void setEntryPoints(EntryPointGeneratorOptions newValue) { - this.entryPoints = newValue + this._entryPoints = newValue } @Override @@ -115,25 +115,6 @@ class DefaultAssertJGeneratorOptions implements AssertJGeneratorOptions, Seriali ConfigureUtil.configure(closure, orCreateEntryPoints) this } - - - - @Override - AssertJGeneratorOptions defaultFromGlobals(Project project) { - GlobalAssertJGeneratorOptions globalOpts = - project.extensions.findByName(AssertJGeneratorGradlePlugin.ASSERTJ_GEN_CONFIGURATION_NAME) as GlobalAssertJGeneratorOptions - - if (!this.getOutputDirRaw()) { - this.outputDir = globalOpts.outputDir - } - - if (!this.entryPoints) { - this.entryPoints = globalOpts.entryPoints - } - - templates.defaults(globalOpts.templates) - this - } private void writeObject(ObjectOutputStream s) throws IOException { s.writeObject(outputDir) @@ -143,11 +124,11 @@ class DefaultAssertJGeneratorOptions implements AssertJGeneratorOptions, Seriali } private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { - this.outputDir = (String)s.readObject() + this.outputDir = (String) s.readObject() this.skip = s.readBoolean() - this._entryPoints = (EntryPointGeneratorOptions)s.readObject() + this._entryPoints = (EntryPointGeneratorOptions) s.readObject() - Templates templatesFromIn = (Templates)s.readObject() + Templates templatesFromIn = (Templates) s.readObject() if (templatesFromIn) { if (this.templates) { this.templates.copyFrom(templatesFromIn) diff --git a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/GlobalAssertJGeneratorOptions.groovy b/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/GlobalAssertJGeneratorOptions.groovy deleted file mode 100644 index 1355e62..0000000 --- a/src/main/groovy/org/assertj/generator/gradle/internal/tasks/config/GlobalAssertJGeneratorOptions.groovy +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2017. assertj-generator-gradle-plugin contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ -package org.assertj.generator.gradle.internal.tasks.config - -import groovy.transform.EqualsAndHashCode -import groovy.transform.PackageScope -import groovy.transform.ToString -import org.assertj.assertions.generator.AssertionsEntryPointType -import org.assertj.generator.gradle.tasks.config.AssertJGeneratorOptions -import org.assertj.generator.gradle.tasks.config.EntryPointGeneratorOptions -import org.assertj.generator.gradle.tasks.config.Templates -import org.gradle.api.Project - -/** - * Simple, default implementation of {@link AssertJGeneratorOptions} - */ -@EqualsAndHashCode -@ToString -class GlobalAssertJGeneratorOptions extends DefaultAssertJGeneratorOptions implements Serializable { - - GlobalAssertJGeneratorOptions() { - this.outputDir = "generated-src/${SOURCE_SET_NAME_TAG}/java" - - // default entry points - this._entryPoints = new EntryPointGeneratorOptions() - this._entryPoints.only(AssertionsEntryPointType.STANDARD) - } - - @Override - GlobalAssertJGeneratorOptions defaultFromGlobals(Project project) { - // no work to do, we are the global :) - this - } - - @PackageScope - String getOutputDirRaw() { - this.outputDir - } - - private void writeObject(ObjectOutputStream s) throws IOException { - s.writeUTF(outputDirRaw) - s.writeBoolean(skip) - s.writeObject(this._entryPoints) - s.writeObject(templates) - } - - private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { - this.outputDir = s.readUTF() - this.skip = s.readBoolean() - this._entryPoints = (EntryPointGeneratorOptions) s.readObject() - templates.copyFrom((Templates) s.readObject()) - } -} diff --git a/src/main/groovy/org/assertj/generator/gradle/tasks/config/AssertJGeneratorOptions.java b/src/main/groovy/org/assertj/generator/gradle/tasks/config/AssertJGeneratorOptions.java index 67015d2..ad02825 100644 --- a/src/main/groovy/org/assertj/generator/gradle/tasks/config/AssertJGeneratorOptions.java +++ b/src/main/groovy/org/assertj/generator/gradle/tasks/config/AssertJGeneratorOptions.java @@ -141,7 +141,4 @@ default void setEntryPoints(Collection values) { * @see #isSkip() */ void setSkip(boolean skip); - - AssertJGeneratorOptions defaultFromGlobals(Project project); - } diff --git a/src/test/groovy/org/assertj/generator/gradle/IncrementalBuild.groovy b/src/test/groovy/org/assertj/generator/gradle/IncrementalBuild.groovy index b9d8f66..6985331 100644 --- a/src/test/groovy/org/assertj/generator/gradle/IncrementalBuild.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/IncrementalBuild.groovy @@ -190,7 +190,7 @@ class IncrementalBuild { private def assertFiles(String sourceSet, boolean exists) { final Path generatedPackagePath = testProjectDir.root.toPath() - .resolve("build/generated-src/test${sourceSet == "main" ? "" : sourceSet.capitalize()}/java") + .resolve("build/generated-src/${sourceSet}-test/java") .resolve(packagePath) def buildPath = testProjectDir.root.toPath().resolve("build") @@ -207,7 +207,4 @@ class IncrementalBuild { it } } - - - } \ No newline at end of file diff --git a/src/test/groovy/org/assertj/generator/gradle/SimpleBuild.groovy b/src/test/groovy/org/assertj/generator/gradle/SimpleBuild.groovy index 1f2d700..8ddeeef 100644 --- a/src/test/groovy/org/assertj/generator/gradle/SimpleBuild.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/SimpleBuild.groovy @@ -147,14 +147,13 @@ class SimpleBuild { sourceSets { main { assertJ { - exclude '**/org/example/OtherWorld*' + source.exclude '**/org/example/OtherWorld*' } } } """) def result = GradleRunner.create() - .withGradleVersion("3.5") .withProjectDir(testProjectDir.root) .withDebug(true) .withPluginClasspath() diff --git a/src/test/groovy/org/assertj/generator/gradle/SkipPackageInfo.groovy b/src/test/groovy/org/assertj/generator/gradle/SkipPackageInfo.groovy index 777bd2a..d377c5b 100644 --- a/src/test/groovy/org/assertj/generator/gradle/SkipPackageInfo.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/SkipPackageInfo.groovy @@ -22,7 +22,7 @@ import org.junit.rules.TemporaryFolder import java.nio.file.Path import java.nio.file.Paths -import static org.assertj.core.api.Assertions.* +import static org.assertj.core.api.Assertions.assertThat /** * Checks the behaviour of overriding globals in a project @@ -34,7 +34,7 @@ class SkipPackageInfo { File buildFile Path generatedPackagePath - + @Before void setup() { buildFile = testProjectDir.newFile('build.gradle') @@ -105,8 +105,8 @@ class SkipPackageInfo { } """.stripIndent() - generatedPackagePath = testProjectDir.newFolder('build', 'generated-src', 'test', 'java').toPath() - .resolve(packagePath) + generatedPackagePath = testProjectDir.newFolder('build', 'generated-src', 'main-test', 'java').toPath() + .resolve(packagePath) } @@ -135,6 +135,4 @@ class SkipPackageInfo { .as("${generatedPackagePath}/Assertions does not have \'package-info\' in it") .doesNotContain("package-info") } - - } \ No newline at end of file diff --git a/src/test/groovy/org/assertj/generator/gradle/TestUtils.groovy b/src/test/groovy/org/assertj/generator/gradle/TestUtils.groovy index 4667d62..db18417 100644 --- a/src/test/groovy/org/assertj/generator/gradle/TestUtils.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/TestUtils.groovy @@ -12,6 +12,8 @@ */ package org.assertj.generator.gradle +import org.intellij.lang.annotations.Language + /** * Utilities used in test scripts */ @@ -23,7 +25,7 @@ class TestUtils { * @param content * @return */ - static def buildFile(File file, String content) { + static def buildFile(File file, @Language("Groovy") String content) { file << """ // Add required plugins and source sets to the sub projects plugins { id "org.assertj.generator" } // Note must use this syntax diff --git a/src/test/groovy/org/assertj/generator/gradle/parameter/EntryPointGeneration.groovy b/src/test/groovy/org/assertj/generator/gradle/parameter/EntryPointGeneration.groovy index 9dd4f1e..f1b1436 100644 --- a/src/test/groovy/org/assertj/generator/gradle/parameter/EntryPointGeneration.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/parameter/EntryPointGeneration.groovy @@ -33,7 +33,7 @@ class EntryPointGeneration { @Rule public final TemporaryFolder testProjectDir = new TemporaryFolder() - File buildFile + private File buildFile private Path srcPackagePath private Path packagePath @@ -42,6 +42,7 @@ class EntryPointGeneration { buildFile = testProjectDir.newFile('build.gradle') File srcDir = testProjectDir.newFolder('src', 'main', 'java') + File testDir = testProjectDir.newFolder('src', 'test', 'java') packagePath = Paths.get("org/example/") @@ -56,13 +57,31 @@ class EntryPointGeneration { | // Field | public boolean hasSomeBrains = false; |}""".stripMargin() + + def testSrcDir = testDir.toPath().resolve(packagePath) + testSrcDir.toFile().mkdirs() + + def helloWorldTestJava = testSrcDir.resolve('HelloWorldTest.java') + helloWorldTestJava << """ + |package org.example; + | + |import org.junit.*; + | + |public class HelloWorldTest { + | @Test + | public void test() { + | HelloWorld ut = new HelloWorld(); + | HelloWorldAssert.assertThat(ut).doesNotHaveSomeBrains(); + | + | ut.hasSomeBrains = true; + | HelloWorldAssert.assertThat(ut).hasSomeBrains(); + | } + |}""".stripMargin() } @Test void change_generate_from_sourceSet() { - - TestUtils.buildFile(buildFile, """ sourceSets { main { @@ -88,7 +107,7 @@ class EntryPointGeneration { assert result.task(':test').outcome == TaskOutcome.SUCCESS Path generatedPackage = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") + .resolve("build/generated-src/main-test/java") .resolve(packagePath) def files = ["HelloWorldAssert.java", "Assertions.java", // Standard @@ -106,13 +125,11 @@ class EntryPointGeneration { void change_generate_from_global() { TestUtils.buildFile(buildFile, """ - assertJ { - entryPoints = ['bdd'] - } - sourceSets { main { - assertJ { } + assertJ { + entryPoints { only('bdd') } + } } } """) @@ -128,14 +145,14 @@ class EntryPointGeneration { assert result.task(':test').outcome == TaskOutcome.SUCCESS Path generatedPackage = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") + .resolve("build/generated-src/main-test/java") .resolve(packagePath) def files = ["HelloWorldAssert.java", //"Assertions.java", // Standard "BddAssertions.java", // BDD //"JUnitSoftAssertions.java", // JUNIT_SOFT //"SoftAssertions.java" // SOFT - ] + ] files.each { assertThat(generatedPackage.resolve(it)).exists() @@ -145,21 +162,20 @@ class EntryPointGeneration { @Test void change_entry_point_package() { - TestUtils.buildFile(buildFile, """ - assertJ { - entryPoints { - classPackage = 'org.other' - only 'bdd' - } - } - sourceSets { main { - assertJ { } + assertJ { + entryPoints { + classPackage = 'org.other' + only() + + bdd = true + } + } } } - """) + """.stripMargin()) def result = GradleRunner.create() .withProjectDir(testProjectDir.root) @@ -172,21 +188,18 @@ class EntryPointGeneration { assert result.task(':test').outcome == TaskOutcome.SUCCESS Path generatedSrcDir = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") + .resolve("build/generated-src/main-test/java") Path generatedPackageDir = generatedSrcDir.resolve(packagePath) Path otherPackageDir = generatedSrcDir.resolve("org/other/") - assertThat(generatedPackageDir.resolve("HelloWorldAssert.java")).exists() - assertThat(otherPackageDir.resolve("BddAssertions.java")).exists() + assert generatedPackageDir.resolve("HelloWorldAssert.java").toFile().exists() + assert otherPackageDir.resolve("BddAssertions.java").toFile().exists() } @Test void change_entry_point_package_and_entry_points() { - TestUtils.buildFile(buildFile, """ - assertJ { } - sourceSets { main { assertJ { @@ -213,7 +226,7 @@ class EntryPointGeneration { assert result.task(':test').outcome == TaskOutcome.SUCCESS Path generatedSrcDir = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") + .resolve("build/generated-src/main-test/java") Path generatedPackageDir = generatedSrcDir.resolve(packagePath) Path otherPackageDir = generatedSrcDir.resolve("org/other/") diff --git a/src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirParameter.groovy b/src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirectoryParameter.groovy similarity index 67% rename from src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirParameter.groovy rename to src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirectoryParameter.groovy index cd57861..2c950d5 100644 --- a/src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirParameter.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/parameter/OutputDirectoryParameter.groovy @@ -12,7 +12,7 @@ */ package org.assertj.generator.gradle.parameter -import org.assertj.generator.gradle.tasks.config.AssertJGeneratorOptions + import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome import org.junit.Before @@ -29,7 +29,7 @@ import static org.assertj.generator.gradle.TestUtils.buildFile /** * Checks the behaviour of overriding globals in a project */ -class OutputDirParameter { +class OutputDirectoryParameter { @Rule public final TemporaryFolder testProjectDir = new TemporaryFolder() @@ -61,47 +61,14 @@ class OutputDirParameter { |}""".stripMargin() } - - @Test - void change_output_dir_globally() { - buildFile(buildFile, """ - assertJ { - entryPoints = [] - outputDir = 'src-gen/${AssertJGeneratorOptions.SOURCE_SET_NAME_TAG}/java' // default: generated-srcs/\${SOURCE_SET_NAME_TAG}/java - } - - sourceSets { - main { - assertJ {} // turn on assertJ generation - } - } - """) - - def result = GradleRunner.create() - .withProjectDir(testProjectDir.root) - .withDebug(true) - .withPluginClasspath() - .withArguments('-i', '-s', 'test') - .build() - - assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS - assert result.task(':test').outcome == TaskOutcome.SUCCESS - - assertFiles("main", true) - } - @Test void change_output_dir_locally() { buildFile(buildFile, """ - assertJ { - entryPoints = [] - } - sourceSets { main { assertJ { // default: generated-srcs/\${SOURCE_SET_NAME_TAG}/java - outputDir = 'src-gen/${AssertJGeneratorOptions.SOURCE_SET_NAME_TAG}/java' + outputDir = 'src-gen/foo-bar/java' } } } @@ -117,13 +84,12 @@ class OutputDirParameter { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - assertFiles("main", true) + assertFiles("main", "foo-bar", true) } - - private def assertFiles(String sourceSet, boolean exists) { - Path generatedPackagePath = testProjectDir.root.toPath() - .resolve("build/src-gen/test${sourceSet == "main" ? "" : sourceSet.capitalize()}/java") + private def assertFiles(String sourceSet, String folderName, boolean exists) { + def generatedPackagePath = testProjectDir.root.toPath() + .resolve("build/src-gen/${folderName}/java") .resolve(packagePath) def buildPath = testProjectDir.root.toPath().resolve("build") @@ -133,7 +99,5 @@ class OutputDirParameter { assertThat(path.toFile().exists()) .as("${sourceSet} file: ${buildPath.relativize(path)} exists") .isEqualTo(exists) - } - } \ No newline at end of file diff --git a/src/test/groovy/org/assertj/generator/gradle/parameter/SkipParameter.groovy b/src/test/groovy/org/assertj/generator/gradle/parameter/SkipParameter.groovy index 1086f38..588d29a 100644 --- a/src/test/groovy/org/assertj/generator/gradle/parameter/SkipParameter.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/parameter/SkipParameter.groovy @@ -76,9 +76,8 @@ class SkipParameter { @Test - void skip_other_set_from_local() { + void skip_other_set() { TestUtils.buildFile(buildFile, """ - assertJ { entryPoints = [] } sourceSets { main { assertJ { skip = true } @@ -101,15 +100,11 @@ class SkipParameter { @Test void generate_default() { - TestUtils.buildFile(buildFile, """ - assertJ { - entryPoints = [] - - skip = false - } - + TestUtils.buildFile(buildFile, """ sourceSets { - main { } + main { + assertJ { skip = false } + } } """) @@ -126,10 +121,9 @@ class SkipParameter { assertFiles("main", true) } - private def assertFiles(String sourceSet, boolean exists) { Path generatedPackagePath = testProjectDir.root.toPath() - .resolve("build/generated-src/test${sourceSet == "main" ? "" : sourceSet.capitalize()}/java") + .resolve("build/generated-src/main-test/java") .resolve(packagePath) def buildPath = testProjectDir.root.toPath().resolve("build") @@ -137,9 +131,8 @@ class SkipParameter { def path = generatedPackagePath.resolve("${sourceSet.capitalize()}Assert.java") assertThat(path.toFile().exists()) - .as("${sourceSet} file: ${buildPath.relativize(path)} exists") - .isEqualTo(exists) + .as("${sourceSet} file: ${buildPath.relativize(path)} exists") + .isEqualTo(exists) } - } \ No newline at end of file diff --git a/src/test/groovy/org/assertj/generator/gradle/parameter/TemplateChanges.groovy b/src/test/groovy/org/assertj/generator/gradle/parameter/TemplateChanges.groovy index 347f3ef..9fa5c1f 100644 --- a/src/test/groovy/org/assertj/generator/gradle/parameter/TemplateChanges.groovy +++ b/src/test/groovy/org/assertj/generator/gradle/parameter/TemplateChanges.groovy @@ -38,6 +38,7 @@ class TemplateChanges { File buildFile private Path srcPackagePath private Path packagePath + private Path resolvedPackagePath @Before void setup() { @@ -61,6 +62,10 @@ class TemplateChanges { } } """.stripIndent() + + resolvedPackagePath = testProjectDir.root.toPath() + .resolve("build/generated-src/main-test/java") + .resolve(packagePath) } @@ -89,10 +94,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') @@ -102,15 +104,13 @@ class TemplateChanges { void change_default_template_from_global() { TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods.wholeNumberPrimitive = '${TEMPLATE_CONTENT}' - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods.wholeNumberPrimitive = '${TEMPLATE_CONTENT}' + } + } } } """) @@ -126,10 +126,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') } @@ -137,16 +134,14 @@ class TemplateChanges { @Test void incremental_templates_with_no_changes() { - TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods.wholeNumberPrimitive = '${TEMPLATE_CONTENT}' - } - } - + TestUtils.buildFile(buildFile, """ sourceSets { main { - assertJ { } + assertJ { + templates { + methods.wholeNumberPrimitive = '${TEMPLATE_CONTENT}' + } + } } } """) @@ -162,10 +157,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') @@ -181,15 +173,13 @@ class TemplateChanges { void incremental_templates_after_string_change() { TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods { wholeNumberPrimitive = '${TEMPLATE_CONTENT}' } - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { wholeNumberPrimitive = '${TEMPLATE_CONTENT}' } + } + } } } """) @@ -205,10 +195,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') @@ -217,15 +204,15 @@ class TemplateChanges { def NEW_TEMPLATE_CONTENT = '/* % NEW CONTENT % */' buildFile.delete() TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods.wholeNumberPrimitive = '${NEW_TEMPLATE_CONTENT}' - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { + wholeNumberPrimitive = '${NEW_TEMPLATE_CONTENT}' + } + } + } } } """) @@ -240,18 +227,14 @@ class TemplateChanges { @Test void incremental_templates_change_type() { - - TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods { wholeNumberPrimitive = '${TEMPLATE_CONTENT}' } - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { wholeNumberPrimitive = '${TEMPLATE_CONTENT}' } + } + } } } """) @@ -267,10 +250,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') @@ -281,20 +261,18 @@ class TemplateChanges { File templateFolder = testProjectDir.newFolder('templates') File content = templateFolder.toPath().resolve("template.txt").toFile() content << NEW_TEMPLATE_CONTENT - + def contentPath = testProjectDir.root.toPath().relativize(content.toPath()).toString().replace('\\', '/') - + buildFile.delete() TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods.wholeNumberPrimitive = file('${contentPath}') - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { wholeNumberPrimitive = file('${contentPath}') } + } + } } } """) @@ -309,23 +287,21 @@ class TemplateChanges { @Test void incremental_templates_after_file_change() { - + File templateFolder = testProjectDir.newFolder('templates') File content = templateFolder.toPath().resolve("template.txt").toFile() content << TEMPLATE_CONTENT - + def contentPath = testProjectDir.root.toPath().relativize(content.toPath()).toString().replace('\\', '/') TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods { wholeNumberPrimitive = file("${contentPath}") } - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { wholeNumberPrimitive = file("${contentPath}") } + } + } } } """) @@ -341,10 +317,7 @@ class TemplateChanges { assert result.task(':generateAssertJ').outcome == TaskOutcome.SUCCESS assert result.task(':test').outcome == TaskOutcome.SUCCESS - Path generatedAssert = testProjectDir.root.toPath() - .resolve("build/generated-src/test/java") - .resolve(packagePath) - .resolve("HelloWorldAssert.java") + Path generatedAssert = resolvedPackagePath.resolve("HelloWorldAssert.java") assertThat(generatedAssert.text).contains('/* %%% foo %%% */') @@ -366,15 +339,13 @@ class TemplateChanges { void bad_template_name_should_fail() { TestUtils.buildFile(buildFile, """ - assertJ { - templates { - methods.wholeNumberAssertion = '${TEMPLATE_CONTENT}' - } - } - sourceSets { main { - assertJ { } + assertJ { + templates { + methods { wholeNumberAssertion = '${TEMPLATE_CONTENT}' } + } + } } } """) @@ -385,7 +356,7 @@ class TemplateChanges { .withPluginClasspath() .withArguments('-i', '-s', 'generateAssertJ') .buildAndFail() - + assert result.output.contains("wholeNumberAssertion") }