Skip to content

Commit

Permalink
Move all test related configuration to Gradle plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
geoand committed Oct 17, 2019
1 parent 20f2ac5 commit 1c6a293
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 128 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,15 @@ repositories {
mavenCentral()
}

sourceSets {
nativeTest {
compileClasspath += sourceSets.main.output
compileClasspath += sourceSets.test.output
runtimeClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.test.output
}
}

configurations {
nativeTestImplementation.extendsFrom implementation
nativeTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
implementation enforcedPlatform("io.quarkus:quarkus-bom:${quarkusVersion}")
implementation 'io.quarkus:quarkus-resteasy'

testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'

nativeTestImplementation 'io.quarkus:quarkus-junit5'
nativeTestImplementation 'io.rest-assured:rest-assured'
testNativeImplementation 'io.quarkus:quarkus-junit5'
testNativeImplementation 'io.rest-assured:rest-assured'
}

group '${project_groupId}'
Expand All @@ -52,22 +38,5 @@ compileJava {
options.compilerArgs << '-parameters'
}

test {
useJUnitPlatform()
}

task testNative(type: Test) {
useJUnitPlatform()
description = 'Runs native image tests'
group = 'verification'

testClassesDirs = sourceSets.nativeTest.output.classesDirs
classpath = sourceSets.nativeTest.runtimeClasspath
shouldRunAfter test
}

testNative.dependsOn buildNative
check.dependsOn testNative



Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,6 @@ repositories {
mavenCentral()
}

sourceSets {
nativeTest {
compileClasspath += sourceSets.main.output
compileClasspath += sourceSets.test.output
runtimeClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.test.output
}
}

configurations {
nativeTestImplementation.extendsFrom implementation
nativeTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
implementation enforcedPlatform("io.quarkus:quarkus-bom:${quarkusVersion}")
implementation 'io.quarkus:quarkus-resteasy'
Expand All @@ -42,30 +28,13 @@ dependencies {
testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'

nativeTestImplementation 'io.quarkus:quarkus-junit5'
nativeTestImplementation 'io.rest-assured:rest-assured'
testNativeImplementation 'io.quarkus:quarkus-junit5'
testNativeImplementation 'io.rest-assured:rest-assured'
}

group '${project_groupId}'
version '${project_version}'

test {
useJUnitPlatform()
}

task testNative(type: Test) {
useJUnitPlatform()
description = 'Runs native image tests'
group = 'verification'

testClassesDirs = sourceSets.nativeTest.output.classesDirs
classpath = sourceSets.nativeTest.runtimeClasspath
shouldRunAfter test
}

testNative.dependsOn buildNative
check.dependsOn testNative

quarkus {
setOutputDirectory("$projectDir/build/classes/kotlin/main")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,48 +20,17 @@ repositories {
mavenCentral()
}

sourceSets {
nativeTest {
compileClasspath += sourceSets.main.output
compileClasspath += sourceSets.test.output
runtimeClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.test.output
}
}

configurations {
nativeTestImplementation.extendsFrom implementation
nativeTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
implementation enforcedPlatform("io.quarkus:quarkus-bom:${quarkusVersion}")
implementation 'io.quarkus:quarkus-resteasy'

testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'

nativeTestImplementation 'io.quarkus:quarkus-junit5'
nativeTestImplementation 'io.rest-assured:rest-assured'
testNativeImplementation 'io.quarkus:quarkus-junit5'
testNativeImplementation 'io.rest-assured:rest-assured'
}

group '${project_groupId}'
version '${project_version}'

test {
useJUnitPlatform()
}

task testNative(type: Test) {
useJUnitPlatform()
description = 'Runs native image tests'
group = 'verification'

testClassesDirs = sourceSets.nativeTest.output.classesDirs
classpath = sourceSets.nativeTest.runtimeClasspath
shouldRunAfter test
}

testNative.dependsOn buildNative
check.dependsOn testNative

41 changes: 38 additions & 3 deletions devtools/gradle/src/main/java/io/quarkus/gradle/QuarkusPlugin.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package io.quarkus.gradle;

import java.util.Collections;

import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.plugins.BasePlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.SourceSetOutput;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.testing.Test;
import org.gradle.util.GradleVersion;
Expand All @@ -17,6 +24,7 @@
import io.quarkus.gradle.tasks.QuarkusListExtensions;
import io.quarkus.gradle.tasks.QuarkusNative;
import io.quarkus.gradle.tasks.QuarkusTestConfig;
import io.quarkus.gradle.tasks.QuarkusTestNative;

/**
* @author <a href="mailto:[email protected]">Ståle Pedersen</a>
Expand Down Expand Up @@ -52,11 +60,38 @@ private void registerTasks(Project project) {
quarkusBuild.dependsOn(classesTask);
});

tasks.create("buildNative", QuarkusNative.class).dependsOn(quarkusBuild);
Task buildNative = tasks.create("buildNative", QuarkusNative.class).dependsOn(quarkusBuild);

// set up the source set for the testNative
JavaPluginConvention javaPlugin = project.getConvention().findPlugin(JavaPluginConvention.class);
if (javaPlugin != null) {
SourceSetContainer sourceSets = javaPlugin.getSourceSets();
SourceSet testNativeSourceSet = sourceSets.create("testNative");
SourceSetOutput mainSourceSetOutput = sourceSets.getByName("main").getOutput();
SourceSetOutput testSourceSetOutput = sourceSets.getByName("test").getOutput();
testNativeSourceSet.setCompileClasspath(
testNativeSourceSet.getCompileClasspath().plus(mainSourceSetOutput).plus(testSourceSetOutput));
testNativeSourceSet.setRuntimeClasspath(
testNativeSourceSet.getRuntimeClasspath().plus(mainSourceSetOutput).plus(testSourceSetOutput));

// create a custom configuration to be used for the dependencies of the testNative task
ConfigurationContainer configurations = project.getConfigurations();
configurations.maybeCreate("testNativeImplementation").extendsFrom(configurations.findByName("implementation"));
configurations.maybeCreate("testNativeRuntimeOnly").extendsFrom(configurations.findByName("runtimeOnly"));

Task testNative = tasks.create("testNative", QuarkusTestNative.class).dependsOn(buildNative);
testNative.setShouldRunAfter(Collections.singletonList(tasks.findByName("test")));

tasks.getByName("check").dependsOn(testNative);
}

// Quarkus test configuration task which should be executed before any Quarkus test
final QuarkusTestConfig quarkusTestConfig = tasks.create("quarkusTestConfig", QuarkusTestConfig.class);
tasks.withType(Test.class).forEach(t -> t.dependsOn(quarkusTestConfig));
tasks.withType(Test.class).forEach(t -> {
// Quarkus test configuration task which should be executed before any Quarkus test
t.dependsOn(quarkusTestConfig);
// also make each task use the JUnit platform since it's the only supported test environment
t.useJUnitPlatform();
});
}

private void verifyGradleVersion() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.quarkus.gradle.tasks;

import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.testing.Test;

public class QuarkusTestNative extends Test {

public QuarkusTestNative() {
setDescription("Runs native image tests");
setGroup("verification");

JavaPluginConvention javaPlugin = getProject().getConvention().getPlugin(JavaPluginConvention.class);
SourceSetContainer sourceSets = javaPlugin.getSourceSets();
SourceSet sourceSet = sourceSets.findByName("testNative");

setTestClassesDirs(sourceSet.getOutput().getClassesDirs());
setClasspath(sourceSet.getRuntimeClasspath());
}
}
24 changes: 3 additions & 21 deletions docs/src/main/asciidoc/gradle-tooling.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,9 @@ dependencies {

== Enable Tests

Quarkus uses Junit5 and to enable it in Gradle we need to add a section to our build file:

[source,groovy,subs=attributes+]
----
test {
useJUnitPlatform()
exclude '**/Native*'
}
----

Using the Kotlin DSL, add:

[source,kotlin,subs=attributes+]
----
tasks.test {
useJUnitPlatform()
exclude("**/Native*")
}
----
When the Quarkus Gradle plugin is applied to a build, the `test` task is configured to run regular tests while the `testNative` task
is meant to run the native image tests.
The source code for the native image tests should reside in `src/nativeTest` instead of `src/test` where the source code for regular tests resides.

To follow up our Rest example from above, we would also need to add two test dependencies:

Expand Down Expand Up @@ -182,7 +166,6 @@ database.
[source,groovy,subs=attributes+]
----
test {
useJUnitPlatform()
systemProperty "quarkus.test.profile", "foo" <1>
}
----
Expand All @@ -192,7 +175,6 @@ or, if you use the Gradle Kotlin DSL:
[source,kotlin,subs=attributes+]
----
tasks.test {
useJUnitPlatform()
systemProperty("quarkus.test.profile", "foo") <1>
}
----
Expand Down
5 changes: 0 additions & 5 deletions docs/src/main/asciidoc/kotlin.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -280,11 +280,6 @@ tasks {
}
}
tasks.test {
useJUnitPlatform()
exclude("**/Native*")
}
allOpen { // <5>
annotation("javax.ws.rs.Path")
annotation("javax.enterprise.context.ApplicationScoped")
Expand Down

0 comments on commit 1c6a293

Please sign in to comment.