Skip to content

Commit

Permalink
Introduce IntegrationSpec
Browse files Browse the repository at this point in the history
- Consolidate the GradleTestKit setup in one place
- Add `testGradle<ID>` rule so we can re-use our GradleTestKit specs to
  verify behavior works on all supported versions of Gradle on each
  build
- Exclude Gradle 4.10.3 from running on Java 11 (Gradle 5.0 is required)
- Run all tests against the last major and each minor of the current
  major
  • Loading branch information
sghill committed Apr 1, 2019
1 parent a05240b commit 7e0d3ef
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 77 deletions.
16 changes: 16 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,22 @@ signing {
sign publishing.publications.pluginMaven
}

tasks.addRule("Pattern: testGradle<ID>") { String taskName ->
tasks.register(taskName, Test) { Test t ->
def gradleVersion = taskName - 'testGradle'
t.systemProperty 'gradle.under.test', gradleVersion
t.useJUnit { JUnitOptions o ->
o.includeCategories('org.jenkinsci.gradle.plugins.jpi.UsesGradleTestKit')
}
t.onlyIf {
gradleVersion.startsWith('4') && System.getProperty('java.specification.version') == '1.8' ||
gradleVersion.startsWith('5')
}
}
}

check.dependsOn(['4.10.3', '5.0', '5.1.1', '5.2.1'].collect { tasks.named("testGradle$it") })

tasks.withType(Test).configureEach {
testLogging {
exceptionFormat = 'full'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,12 @@ package org.jenkinsci.gradle.plugins.jpi

import groovy.transform.CompileStatic
import org.gradle.testkit.runner.BuildResult
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification
import spock.lang.Unroll

import java.util.jar.JarInputStream

abstract class AbstractManifestIntegrationSpec extends Specification {
@Rule
protected final TemporaryFolder projectDir = new TemporaryFolder()
abstract class AbstractManifestIntegrationSpec extends IntegrationSpec {
protected final String projectName = TestDataGenerator.generateName()
protected final String projectVersion = TestDataGenerator.generateVersion()
protected File settings
Expand Down Expand Up @@ -411,9 +405,7 @@ abstract class AbstractManifestIntegrationSpec extends Specification {
if (overrideVersion) {
args.add('-Pversion=' + overrideVersion)
}
GradleRunner.create()
.withPluginClasspath()
.withProjectDir(projectDir.root)
gradleRunner()
.withArguments(args)
.build()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
package org.jenkinsci.gradle.plugins.jpi

import groovy.json.JsonSlurper
import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification

class AddedDependenciesIntegrationSpec extends Specification {
@Rule
private final TemporaryFolder projectDir = new TemporaryFolder()
class AddedDependenciesIntegrationSpec extends IntegrationSpec {
private final String projectName = TestDataGenerator.generateName()
private File settings
private File build
Expand All @@ -36,9 +30,7 @@ class AddedDependenciesIntegrationSpec extends Specification {
'''.stripIndent()

when:
def result = GradleRunner.create()
.withProjectDir(projectDir.root)
.withPluginClasspath()
def result = gradleRunner()
.withArguments('processTestResources', '--stacktrace')
.build()

Expand Down Expand Up @@ -82,9 +74,7 @@ class AddedDependenciesIntegrationSpec extends Specification {
'''.stripIndent()

when:
GradleRunner.create()
.withProjectDir(projectDir.root)
.withPluginClasspath()
gradleRunner()
.withArguments('writeAllResolvedDependencies')
.build()
def resolutionJson = new File(projectDir.root, 'build/resolved-dependencies.json')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.jenkinsci.gradle.plugins.jpi

import groovy.transform.CompileStatic
import org.gradle.testkit.runner.GradleRunner
import org.junit.Rule
import org.junit.experimental.categories.Category
import org.junit.rules.TemporaryFolder
import spock.lang.Specification

@CompileStatic
@Category(UsesGradleTestKit)
class IntegrationSpec extends Specification {
@Rule
protected final TemporaryFolder projectDir = new TemporaryFolder()

protected GradleRunner gradleRunner() {
def runner = GradleRunner.create()
.withPluginClasspath()
.withProjectDir(projectDir.root)
if (System.getProperty('gradle.under.test')) {
return runner.withGradleVersion(System.getProperty('gradle.under.test'))
}
runner
}
}
Original file line number Diff line number Diff line change
@@ -1,54 +1,44 @@
package org.jenkinsci.gradle.plugins.jpi

import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification

class JpiLocalizerTaskIntegrationSpec extends Specification {
@Rule
final TemporaryFolder project = new TemporaryFolder()
class JpiLocalizerTaskIntegrationSpec extends IntegrationSpec {

def 'single-module project should be able to run LocalizerTask'() {
given:
project.newFile('build.gradle') << "plugins { id 'org.jenkins-ci.jpi' }"
project.newFolder('src', 'main', 'resources')
project.newFile('src/main/resources/Messages.properties') << 'key1=value1\nkey2=value2'
projectDir.newFile('build.gradle') << "plugins { id 'org.jenkins-ci.jpi' }"
projectDir.newFolder('src', 'main', 'resources')
projectDir.newFile('src/main/resources/Messages.properties') << 'key1=value1\nkey2=value2'

when:
def result = GradleRunner.create()
.withProjectDir(project.root)
.withPluginClasspath()
def result = gradleRunner()
.withArguments('localizer')
.build()

then:
result.task(':localizer').outcome == TaskOutcome.SUCCESS
def generatedJavaFile = new File(project.root, 'build/generated-src/localizer/Messages.java')
def generatedJavaFile = new File(projectDir.root, 'build/generated-src/localizer/Messages.java')
generatedJavaFile.exists()
generatedJavaFile.text.contains('public static String key1()')
generatedJavaFile.text.contains('public static String key2()')
}

def 'multi-module project should be able to run LocalizerTask'() {
given:
project.newFile('build.gradle') << ''
project.newFile('settings.gradle') << 'include ":plugin"'
project.newFolder('plugin', 'src', 'main', 'resources')
project.newFile('plugin/build.gradle') << "plugins { id 'org.jenkins-ci.jpi' }"
project.newFile('plugin/src/main/resources/Messages.properties') << 'key3=value3\nkey4=value4'
projectDir.newFile('build.gradle') << ''
projectDir.newFile('settings.gradle') << 'include ":plugin"'
projectDir.newFolder('plugin', 'src', 'main', 'resources')
projectDir.newFile('plugin/build.gradle') << "plugins { id 'org.jenkins-ci.jpi' }"
projectDir.newFile('plugin/src/main/resources/Messages.properties') << 'key3=value3\nkey4=value4'

when:
def result = GradleRunner.create()
.withProjectDir(project.root)
.withPluginClasspath()
def result = gradleRunner()
.withArguments(':plugin:localizer')
.build()

then:
result.task(':plugin:localizer').outcome == TaskOutcome.SUCCESS
def generatedJavaFile = new File(project.root, 'plugin/build/generated-src/localizer/Messages.java')
def generatedJavaFile = new File(projectDir.root, 'plugin/build/generated-src/localizer/Messages.java')
generatedJavaFile.exists()
generatedJavaFile.text.contains('public static String key3()')
generatedJavaFile.text.contains('public static String key4()')
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
package org.jenkinsci.gradle.plugins.jpi

import org.gradle.testkit.runner.GradleRunner
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import org.xmlunit.builder.DiffBuilder
import org.xmlunit.builder.Input
import spock.lang.Specification

class JpiPomCustomizerIntegrationSpec extends Specification {
@Rule
private final TemporaryFolder projectDir = new TemporaryFolder()
class JpiPomCustomizerIntegrationSpec extends IntegrationSpec {
private File settings
private File build

Expand All @@ -33,7 +28,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('minimal-pom.xml', actualPomIn(projectDir))
Expand Down Expand Up @@ -72,7 +67,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('complex-pom.xml', actualPomIn(projectDir))
Expand All @@ -88,7 +83,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('bitbucket-pom.xml', actualPomIn(projectDir))
Expand All @@ -106,7 +101,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('minimal-pom.xml', actualPomIn(projectDir))
Expand All @@ -124,7 +119,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('minimal-pom.xml', actualPomIn(projectDir))
Expand All @@ -142,7 +137,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('plugin-dependencies-pom.xml', actualPomIn(projectDir))
Expand All @@ -160,7 +155,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('optional-plugin-dependencies-pom.xml', actualPomIn(projectDir))
Expand All @@ -178,7 +173,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('compile-dependencies-pom.xml', actualPomIn(projectDir))
Expand All @@ -198,7 +193,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('compile-dependencies-with-excludes-pom.xml', actualPomIn(projectDir))
Expand All @@ -213,7 +208,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('updated-findbugs-pom.xml', actualPomIn(projectDir))
Expand All @@ -228,7 +223,7 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
""".stripIndent()

when:
generatePomIn(projectDir)
generatePom()

then:
compareXml('updated-servlet-api-pom.xml', actualPomIn(projectDir))
Expand All @@ -253,10 +248,8 @@ class JpiPomCustomizerIntegrationSpec extends Specification {
buffer.toString()
}

static void generatePomIn(TemporaryFolder projectDir) {
GradleRunner.create()
.withPluginClasspath()
.withProjectDir(projectDir.root)
void generatePom() {
gradleRunner()
.withArguments('generatePomFileForMavenJpiPublication')
.build()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
package org.jenkinsci.gradle.plugins.jpi

import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import org.xmlunit.builder.DiffBuilder
import org.xmlunit.builder.Input
import spock.lang.Specification

class LicenseTaskSpec extends Specification {
@Rule
final TemporaryFolder temporaryFolder = new TemporaryFolder()
class LicenseTaskSpec extends IntegrationSpec {

def 'compute license information'() {
given:
File projectFolder = temporaryFolder.newFolder('bar')
File projectFolder = projectDir.newFolder('bar')
new File(projectFolder, 'build.gradle') << getClass().getResource('licenseInfo.gradle').text

when:
def result = GradleRunner.create()
def result = gradleRunner()
.withProjectDir(projectFolder)
.withPluginClasspath()
.withArguments('generateLicenseInfo')
.build()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package org.jenkinsci.gradle.plugins.jpi

interface UsesGradleTestKit {
}

0 comments on commit 7e0d3ef

Please sign in to comment.