From afe080ffa4177451160e035dc3b46b0efedca728 Mon Sep 17 00:00:00 2001 From: Alphonse Bendt Date: Sun, 20 Jan 2019 13:50:30 +0100 Subject: [PATCH 1/2] sample project that demonstrates how you can test your custom build logic inside buildSrc with JUnit5 Signed-off-by: Alphonse Bendt --- samples/buildSrc-test-junit5/README.md | 7 + samples/buildSrc-test-junit5/build.gradle.kts | 10 + .../buildSrc/build.gradle.kts | 16 ++ .../buildSrc/settings.gradle.kts | 0 .../src/main/kotlin/greeting/Greeter.kt | 3 + .../src/test/kotlin/greeting/GreeterTest.kt | 11 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55165 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + samples/buildSrc-test-junit5/gradlew | 172 ++++++++++++++++++ samples/buildSrc-test-junit5/gradlew.bat | 84 +++++++++ .../buildSrc-test-junit5/settings.gradle.kts | 0 11 files changed, 308 insertions(+) create mode 100644 samples/buildSrc-test-junit5/README.md create mode 100644 samples/buildSrc-test-junit5/build.gradle.kts create mode 100644 samples/buildSrc-test-junit5/buildSrc/build.gradle.kts create mode 100644 samples/buildSrc-test-junit5/buildSrc/settings.gradle.kts create mode 100644 samples/buildSrc-test-junit5/buildSrc/src/main/kotlin/greeting/Greeter.kt create mode 100644 samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt create mode 100644 samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.properties create mode 100755 samples/buildSrc-test-junit5/gradlew create mode 100644 samples/buildSrc-test-junit5/gradlew.bat create mode 100644 samples/buildSrc-test-junit5/settings.gradle.kts diff --git a/samples/buildSrc-test-junit5/README.md b/samples/buildSrc-test-junit5/README.md new file mode 100644 index 000000000..f5d426d19 --- /dev/null +++ b/samples/buildSrc-test-junit5/README.md @@ -0,0 +1,7 @@ +buildSrc-test-junit5 +==================== + +Sample project setup to show how you can test your _buildSrc_ custom build logic using +Junit5 Unit tests. + +`./gradlew hello` this task uses a build helper function from _buildSrc_. The code inside _buildSrc_ will be compiled and tested prior to the execution of this task. diff --git a/samples/buildSrc-test-junit5/build.gradle.kts b/samples/buildSrc-test-junit5/build.gradle.kts new file mode 100644 index 000000000..3b63f5fe0 --- /dev/null +++ b/samples/buildSrc-test-junit5/build.gradle.kts @@ -0,0 +1,10 @@ +import greeting.sayHelloTo + +tasks.register("hello") { + description = "this task uses a custom function defined in buildSrc" + group = "sample" + + doLast { + println(sayHelloTo("Gradle")) + } +} diff --git a/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts b/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts new file mode 100644 index 000000000..3e47dd574 --- /dev/null +++ b/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + `kotlin-dsl` +} + +repositories { + jcenter() +} + +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.2") + testRuntime("org.junit.jupiter:junit-jupiter-engine:5.3.2") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/samples/buildSrc-test-junit5/buildSrc/settings.gradle.kts b/samples/buildSrc-test-junit5/buildSrc/settings.gradle.kts new file mode 100644 index 000000000..e69de29bb diff --git a/samples/buildSrc-test-junit5/buildSrc/src/main/kotlin/greeting/Greeter.kt b/samples/buildSrc-test-junit5/buildSrc/src/main/kotlin/greeting/Greeter.kt new file mode 100644 index 000000000..852ecfd08 --- /dev/null +++ b/samples/buildSrc-test-junit5/buildSrc/src/main/kotlin/greeting/Greeter.kt @@ -0,0 +1,3 @@ +package greeting + +fun sayHelloTo(name: String) = "Hello $name" diff --git a/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt b/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt new file mode 100644 index 000000000..8c3015532 --- /dev/null +++ b/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt @@ -0,0 +1,11 @@ +package greeting + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions.assertEquals + +class GreeterTest { + @Test + fun canSayHelloTo() { + assertEquals("Hello Gradle", sayHelloTo("Gradle")) + } +} diff --git a/samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.jar b/samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..4b758eaedd876edc650c9922c31c5dabc975bea6 GIT binary patch literal 55165 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%0A!@%4xhIo_tr85r5GpC&-M&6|vCGK0oEGA~- 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 literal 0 HcmV?d00001 diff --git a/samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.properties b/samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..7763ebf4b --- /dev/null +++ b/samples/buildSrc-test-junit5/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://repo.gradle.org/gradle/kotlin-dsl-snapshots-local/gradle-kotlin-dsl-5.1.1-20190108191351+0000-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/samples/buildSrc-test-junit5/gradlew b/samples/buildSrc-test-junit5/gradlew new file mode 100755 index 000000000..af6708ff2 --- /dev/null +++ b/samples/buildSrc-test-junit5/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/samples/buildSrc-test-junit5/gradlew.bat b/samples/buildSrc-test-junit5/gradlew.bat new file mode 100644 index 000000000..6d57edc70 --- /dev/null +++ b/samples/buildSrc-test-junit5/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/buildSrc-test-junit5/settings.gradle.kts b/samples/buildSrc-test-junit5/settings.gradle.kts new file mode 100644 index 000000000..e69de29bb From 206b9d1770859676f18d607b963391fce0ff0201 Mon Sep 17 00:00:00 2001 From: Alphonse Bendt Date: Wed, 23 Jan 2019 21:12:08 +0100 Subject: [PATCH 2/2] add example configuration for the JUnit5 test execution Signed-off-by: Alphonse Bendt --- samples/buildSrc-test-junit5/buildSrc/build.gradle.kts | 6 ++++-- .../buildSrc/src/test/kotlin/greeting/GreeterTest.kt | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts b/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts index 3e47dd574..eadcddd11 100644 --- a/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts +++ b/samples/buildSrc-test-junit5/buildSrc/build.gradle.kts @@ -11,6 +11,8 @@ dependencies { testRuntime("org.junit.jupiter:junit-jupiter-engine:5.3.2") } -tasks.test { - useJUnitPlatform() +tasks.withType().configureEach { + useJUnitPlatform { + includeTags("fooTag") + } } diff --git a/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt b/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt index 8c3015532..a293d27d8 100644 --- a/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt +++ b/samples/buildSrc-test-junit5/buildSrc/src/test/kotlin/greeting/GreeterTest.kt @@ -2,9 +2,11 @@ package greeting import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Tag class GreeterTest { @Test + @Tag("fooTag") fun canSayHelloTo() { assertEquals("Hello Gradle", sayHelloTo("Gradle")) }