From 4536fd3125b4625ffa69c11e9de714e212868271 Mon Sep 17 00:00:00 2001 From: Alphonse Bendt Date: Thu, 20 Dec 2018 23:12:15 +0100 Subject: [PATCH 1/2] this sample project demonstrates how you can test your custom build logic in buildSrc using JUnit4 Unit tests. Signed-off-by: Alphonse Bendt --- samples/buildSrc-test-junit4/README.md | 7 + samples/buildSrc-test-junit4/build.gradle.kts | 12 ++ .../buildSrc/build.gradle.kts | 11 ++ .../buildSrc/settings.gradle.kts | 0 .../src/main/kotlin/tools/BuildHelper.kt | 3 + .../src/test/kotlin/tools/BuildHelperTest.kt | 13 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55759 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + samples/buildSrc-test-junit4/gradlew | 172 ++++++++++++++++++ samples/buildSrc-test-junit4/gradlew.bat | 84 +++++++++ .../buildSrc-test-junit4/settings.gradle.kts | 0 11 files changed, 307 insertions(+) create mode 100644 samples/buildSrc-test-junit4/README.md create mode 100644 samples/buildSrc-test-junit4/build.gradle.kts create mode 100644 samples/buildSrc-test-junit4/buildSrc/build.gradle.kts create mode 100644 samples/buildSrc-test-junit4/buildSrc/settings.gradle.kts create mode 100644 samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt create mode 100644 samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt create mode 100644 samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.properties create mode 100755 samples/buildSrc-test-junit4/gradlew create mode 100644 samples/buildSrc-test-junit4/gradlew.bat create mode 100644 samples/buildSrc-test-junit4/settings.gradle.kts diff --git a/samples/buildSrc-test-junit4/README.md b/samples/buildSrc-test-junit4/README.md new file mode 100644 index 000000000..f598d233f --- /dev/null +++ b/samples/buildSrc-test-junit4/README.md @@ -0,0 +1,7 @@ +buildSrc-test-junit4 +==================== + +Sample project setup to show how you can test your _buildSrc_ custom build logic using +Junit4 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-junit4/build.gradle.kts b/samples/buildSrc-test-junit4/build.gradle.kts new file mode 100644 index 000000000..e783048db --- /dev/null +++ b/samples/buildSrc-test-junit4/build.gradle.kts @@ -0,0 +1,12 @@ +import tools.sayHelloTo + +tasks { + val hello by creating { + description = "this task uses a custom function defined in buildSrc" + group = "sample" + + doLast { + println(sayHelloTo("Gradle")) + } + } +} diff --git a/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts b/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts new file mode 100644 index 000000000..f0eff0ff0 --- /dev/null +++ b/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + `kotlin-dsl` +} + +repositories { + jcenter() +} + +dependencies { + testCompile("junit:junit:4.12") +} diff --git a/samples/buildSrc-test-junit4/buildSrc/settings.gradle.kts b/samples/buildSrc-test-junit4/buildSrc/settings.gradle.kts new file mode 100644 index 000000000..e69de29bb diff --git a/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt b/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt new file mode 100644 index 000000000..201c323d9 --- /dev/null +++ b/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt @@ -0,0 +1,3 @@ +package tools + +fun sayHelloTo(name: String) = "Hello $name" diff --git a/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt b/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt new file mode 100644 index 000000000..53d95f23a --- /dev/null +++ b/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt @@ -0,0 +1,13 @@ +package tools + +import org.junit.Test +import org.junit.Assert.assertThat +import org.hamcrest.CoreMatchers.equalTo + +class BuildHelperTest { + + @Test + fun canTestBuildHelper() { + assertThat(sayHelloTo("Gradle"), equalTo("Hello Gradle")) + } +} diff --git a/samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.jar b/samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae9006eb801087145e07b6e1410586ae5d1ad962 GIT binary patch literal 55759 zcmafab95)swq`n=q+{FmFHU~x*tTukPP${;?%1|%+qP{@&)oNB=H9vQ&04jq>W_Wa zIlI<5`};OZPVze#DhLQ9BnSuy|6c(C0sUWh5D=)pPibK#et@`)2>o{uxqniONQ*t^ z{i~q#SN;zFKZ?@)GU6h_ib{0SB6rf`V^Wd;x*0f00QKbfRGk9DJoEO!?Kogqd_sDH zMx6E=^l6Y$(tf@MRWk-z;eNisaBoA}Db}sSjl;Kpnegu%|9fR%f8T8#O#h!n{ogt; z|Dj{*pl@Vl{NJjg{Ija7gT9@evBUo}q;$n(`8zlW$m!n?1Niqt1Z-`c9G(7-m)1A8 zQFPLGa58qFGqloobc|HdR7Fum{ftUA(!&Ke;r+OO zW!l9HZU@av8M5o=_f2ZlO>$5eyrVgPo2imArB}H|iUyJ>PYkbOyJh#$Dxst zaRlXYZ+iqdxM>aL-k?nXbyS4b4;yG#NrM)$q%}M@)gDhb-Jnfh&kh(G2_cJjM`53 zej{^FcpX}YGOvEtZD`3lCQf~$t*v_wrWr(9NSZ;0p#|f3A6Z#!&Sfc+tx@`DL*AkK zMf6zY1W&g!nZ&}&Ya*%qH-b7fk_ls%CWb*WU-zY#a*yt74lmzbXXj}WBPuZ1q4qih z2R80|wF-B{Fq0`QW&5j(h#D!7a|T{uT~#kY1$F)X`c$Q|T<1Qq%pciMo~m(UFf5%t zZOr`cU6E8@+L%376ys|IdgyqD?`kcVRfI)iOY02O0wZ)9Zp+qht{*5giY>_mH5dcx zlpT^9%4D)&e#%c*N>J&S?LtPCvIj3=JzDpn_^-O<_IBf8xhkhnj#MixQ@g=iKl+z{~?9B-oPYIX|Nmpx-< z%MF0u#}{hv_=%!r@0!KfW}=_E reco*(Edgbg&dI_6-c9#fDYg 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ÞZg_7}=sl%dU7 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%0D!7IPoUviD;5Y7fq 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 literal 0 HcmV?d00001 diff --git a/samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.properties b/samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..7639f0fd3 --- /dev/null +++ b/samples/buildSrc-test-junit4/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://repo.gradle.org/gradle/kotlin-dsl-snapshots-local/gradle-kotlin-dsl-5.1-20181121121751+0000-all.zip diff --git a/samples/buildSrc-test-junit4/gradlew b/samples/buildSrc-test-junit4/gradlew new file mode 100755 index 000000000..af6708ff2 --- /dev/null +++ b/samples/buildSrc-test-junit4/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-junit4/gradlew.bat b/samples/buildSrc-test-junit4/gradlew.bat new file mode 100644 index 000000000..6d57edc70 --- /dev/null +++ b/samples/buildSrc-test-junit4/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-junit4/settings.gradle.kts b/samples/buildSrc-test-junit4/settings.gradle.kts new file mode 100644 index 000000000..e69de29bb From 192ac2ff6774ac9649127ae322dd3803d01b3822 Mon Sep 17 00:00:00 2001 From: Alphonse Bendt Date: Fri, 21 Dec 2018 14:25:06 +0100 Subject: [PATCH 2/2] apply suggested changes Signed-off-by: Alphonse Bendt --- samples/buildSrc-test-junit4/README.md | 2 +- samples/buildSrc-test-junit4/build.gradle.kts | 12 +++++------- .../buildSrc-test-junit4/buildSrc/build.gradle.kts | 2 +- .../{tools/BuildHelper.kt => greeting/Greeter.kt} | 2 +- .../BuildHelperTest.kt => greeting/GreeterTest.kt} | 5 +++-- 5 files changed, 11 insertions(+), 12 deletions(-) rename samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/{tools/BuildHelper.kt => greeting/Greeter.kt} (73%) rename samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/{tools/BuildHelperTest.kt => greeting/GreeterTest.kt} (85%) diff --git a/samples/buildSrc-test-junit4/README.md b/samples/buildSrc-test-junit4/README.md index f598d233f..b2174a481 100644 --- a/samples/buildSrc-test-junit4/README.md +++ b/samples/buildSrc-test-junit4/README.md @@ -1,7 +1,7 @@ buildSrc-test-junit4 ==================== -Sample project setup to show how you can test your _buildSrc_ custom build logic using +Sample project setup to show how you can test your [buildSrc](buildSrc/) custom build logic using Junit4 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-junit4/build.gradle.kts b/samples/buildSrc-test-junit4/build.gradle.kts index e783048db..4b93221ee 100644 --- a/samples/buildSrc-test-junit4/build.gradle.kts +++ b/samples/buildSrc-test-junit4/build.gradle.kts @@ -1,12 +1,10 @@ import tools.sayHelloTo -tasks { - val hello by creating { - description = "this task uses a custom function defined in buildSrc" - group = "sample" +tasks.register("hello") { + description = "this task uses a custom function defined in buildSrc" + group = "sample" - doLast { - println(sayHelloTo("Gradle")) - } + doLast { + println(sayHelloTo("Gradle")) } } diff --git a/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts b/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts index f0eff0ff0..916e8dfbc 100644 --- a/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts +++ b/samples/buildSrc-test-junit4/buildSrc/build.gradle.kts @@ -7,5 +7,5 @@ repositories { } dependencies { - testCompile("junit:junit:4.12") + testImplementation("junit:junit:4.12") } diff --git a/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt b/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/greeting/Greeter.kt similarity index 73% rename from samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt rename to samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/greeting/Greeter.kt index 201c323d9..852ecfd08 100644 --- a/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/tools/BuildHelper.kt +++ b/samples/buildSrc-test-junit4/buildSrc/src/main/kotlin/greeting/Greeter.kt @@ -1,3 +1,3 @@ -package tools +package greeting fun sayHelloTo(name: String) = "Hello $name" diff --git a/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt b/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/greeting/GreeterTest.kt similarity index 85% rename from samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt rename to samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/greeting/GreeterTest.kt index 53d95f23a..9de56bd92 100644 --- a/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/tools/BuildHelperTest.kt +++ b/samples/buildSrc-test-junit4/buildSrc/src/test/kotlin/greeting/GreeterTest.kt @@ -1,13 +1,14 @@ -package tools +package greeting import org.junit.Test import org.junit.Assert.assertThat import org.hamcrest.CoreMatchers.equalTo -class BuildHelperTest { +class GreeterTest { @Test fun canTestBuildHelper() { assertThat(sayHelloTo("Gradle"), equalTo("Hello Gradle")) } + }