diff options
-rw-r--r-- | README.adoc | 24 | ||||
-rw-r--r-- | build.gradle | 8 | ||||
-rw-r--r-- | gradle/wrapper/gradle-wrapper.jar | bin | 53636 -> 53216 bytes | |||
-rw-r--r-- | gradle/wrapper/gradle-wrapper.properties | 4 | ||||
-rwxr-xr-x | gradlew | 46 | ||||
-rw-r--r-- | gradlew.bat | 8 | ||||
-rw-r--r-- | src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy | 6 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/DefaultFregeSourceSet.java | 8 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeSourceDirectorySet.groovy | 26 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeSourceSet.java | 1 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeSourceSetDirectoryFactory.groovy | 30 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/FregeSourceSetOutputs.groovy | 7 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/plugins/FregeBasePlugin.java | 5 | ||||
-rw-r--r-- | src/main/groovy/frege/gradle/tasks/FregeQuickCheck.groovy | 88 |
14 files changed, 161 insertions, 100 deletions
diff --git a/README.adoc b/README.adoc index c943b48..5b8f415 100644 --- a/README.adoc +++ b/README.adoc @@ -26,10 +26,8 @@ apply plugin: "org.frege-lang" To apply the plugin using the new incubating, plugin mechanism (since Gradle 2.1), add: ``` plugins { - id "org.frege-lang" version "0.7" + id "org.frege-lang" version "0.5" } - -apply plugin: "org.frege-lang" ``` == Tasks @@ -51,25 +49,7 @@ The plugin adds dependencies so that using the `build` task is typically all tha == Task Help -=== Configuring QuickCheck - -Without any configuration, the `fregeQuickCheck` task (which is triggered as part of the `test` task) -automatically executes all tests from the Frege test source set (default: `src/test/frege`). -It will pick up all functions as tests that return a value of type `Property`. This is usually achieved by -using the factory methods `property` or `once`. -Please see more details under http://www.frege-lang.org/doc/frege/test/QuickCheck.html[QuickCheck API doc]. - -NOTE: Testing fails if no test is found. If your project does not contain any tests, you have to skip testing via `-x test`. - -You can configure the task in many ways. To see all options, you best ask the help: -``` -fregeQuickCheck { - help = true -} -``` - - -TODO: Add options and descriptions for more tasks from above. +TODO: Add options and descriptions for each task above. == Example diff --git a/build.gradle b/build.gradle index 911096c..a3114ee 100644 --- a/build.gradle +++ b/build.gradle @@ -11,14 +11,14 @@ sourceCompatibility = 1.7 targetCompatibility = 1.7 ext { - baseVersion = "0.8" + baseVersion = "0.6" isSnapshot = true snapshotAppendix = "-SNAPSHOT" projectVersion = baseVersion + (isSnapshot ? snapshotAppendix : "") projectGroup = "org.frege-lang" - fregeBaseVersion = "3.23.401" - fregeClassifier = "-g7c45277" + fregeBaseVersion = "3.23.288" + fregeClassifier = "-gaa3af0c" fregeVersion = "$fregeBaseVersion$fregeClassifier" // work around https://issues.gradle.org/browse/GRADLE-3281 @@ -58,7 +58,7 @@ repositories { dependencies { compile "$projectGroup:frege:$fregeVersion" - compile "$projectGroup:frege-repl-core:1.3" + compile "$projectGroup:frege-repl-core:1.2" compile "$projectGroup:frege-native-gen:1.3" compile "org.functionaljava:functionaljava:4.4" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar Binary files differindex 9411448..ba3586f 100644 --- a/gradle/wrapper/gradle-wrapper.jar +++ b/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a7b2d39..2a6d1bb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Nov 23 11:39:50 CET 2015 +#Tue Apr 12 21:02:27 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip @@ -6,12 +6,30 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# 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="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# 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 - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +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 diff --git a/gradlew.bat b/gradlew.bat index aec9973..f6d5974 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@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=
-
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=
+
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,7 +46,7 @@ echo location of your Java installation. goto fail
:init
-@rem Get command-line arguments, handling Windowz variants
+@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
diff --git a/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy b/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy index 4142790..2acfa9d 100644 --- a/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy +++ b/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy @@ -29,9 +29,11 @@ class FregePluginIntegTest extends AbstractFregeIntegrationSpec { """ when: - def result = run("classes") + def result = run(gradleVersion, "classes") then: result.task(":compileFrege").outcome == UP_TO_DATE + where: + gradleVersion << ["2.8", "2.11", "2.12"] } @Unroll @@ -55,6 +57,8 @@ class FregePluginIntegTest extends AbstractFregeIntegrationSpec { where: fregeVersion | gradleVersion + DEFAULT_FREGE_VERSION | "2.12" + "3.22.367-g2737683" | "2.12" DEFAULT_FREGE_VERSION | "2.9" DEFAULT_FREGE_VERSION | "2.8" "3.22.367-g2737683" | "2.9" diff --git a/src/main/groovy/frege/gradle/DefaultFregeSourceSet.java b/src/main/groovy/frege/gradle/DefaultFregeSourceSet.java index 3a9bcfc..a1650a1 100644 --- a/src/main/groovy/frege/gradle/DefaultFregeSourceSet.java +++ b/src/main/groovy/frege/gradle/DefaultFregeSourceSet.java @@ -2,18 +2,16 @@ package frege.gradle; import groovy.lang.Closure; import org.gradle.api.file.SourceDirectorySet; -import org.gradle.api.internal.file.DefaultSourceDirectorySet; -import org.gradle.api.internal.file.FileResolver; import org.gradle.util.ConfigureUtil; public class DefaultFregeSourceSet implements FregeSourceSet { private final SourceDirectorySet frege; private final SourceDirectorySet allFrege; - public DefaultFregeSourceSet(String displayName, FileResolver fileResolver) { - this.frege = new DefaultSourceDirectorySet(String.format("%s Frege source", new Object[]{displayName}), fileResolver); + public DefaultFregeSourceSet(String displayName, FregeSourceSetDirectoryFactory sourceSetFactory) { + this.frege = sourceSetFactory.newSourceSetDirectory(String.format("%s Frege source", new Object[]{displayName})); this.frege.getFilter().include(new String[]{"**/*.fr"}); - this.allFrege = new DefaultSourceDirectorySet(String.format("%s Frege source", new Object[]{displayName}), fileResolver); + this.allFrege = sourceSetFactory.newSourceSetDirectory(String.format("%s Frege source", new Object[]{displayName})); this.allFrege.source(this.frege); this.allFrege.getFilter().include(new String[]{"**/*.fr"}); } diff --git a/src/main/groovy/frege/gradle/FregeSourceDirectorySet.groovy b/src/main/groovy/frege/gradle/FregeSourceDirectorySet.groovy new file mode 100644 index 0000000..35110f5 --- /dev/null +++ b/src/main/groovy/frege/gradle/FregeSourceDirectorySet.groovy @@ -0,0 +1,26 @@ +package frege.gradle + +import org.gradle.api.file.FileTree +import org.gradle.api.tasks.util.PatternFilterable + +interface FregeSourceDirectorySet extends PatternFilterable { + def String getName() + + def FregeSourceDirectorySet srcDir(Object srcPath) + + def FregeSourceDirectorySet srcDirs(Object... srcPaths) + + def Set<File> getSrcDirs() + + def FregeSourceDirectorySet setSrcDirs(Iterable<?> srcPaths) + + def FileTree getFiles() + + def PatternFilterable getFilter() + + def FregeSourceSetOutputs getOutput() + + def String getGeneratorTaskName() + + boolean contains(File file) +}
\ No newline at end of file diff --git a/src/main/groovy/frege/gradle/FregeSourceSet.java b/src/main/groovy/frege/gradle/FregeSourceSet.java index 7540930..27654f1 100644 --- a/src/main/groovy/frege/gradle/FregeSourceSet.java +++ b/src/main/groovy/frege/gradle/FregeSourceSet.java @@ -4,4 +4,5 @@ import org.gradle.api.file.SourceDirectorySet; public interface FregeSourceSet { SourceDirectorySet getFrege(); + SourceDirectorySet getAllFrege(); } diff --git a/src/main/groovy/frege/gradle/FregeSourceSetDirectoryFactory.groovy b/src/main/groovy/frege/gradle/FregeSourceSetDirectoryFactory.groovy new file mode 100644 index 0000000..96abc8f --- /dev/null +++ b/src/main/groovy/frege/gradle/FregeSourceSetDirectoryFactory.groovy @@ -0,0 +1,30 @@ +package frege.gradle + +import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.internal.file.DefaultSourceDirectorySet +import org.gradle.api.internal.file.FileResolver +import org.gradle.api.internal.file.SourceDirectorySetFactory +import org.gradle.api.internal.project.ProjectInternal +import org.gradle.util.GradleVersion + +public class FregeSourceSetDirectoryFactory { + private final boolean useFactory; + private final FileResolver fileResolver + private final ProjectInternal project + + public FregeSourceSetDirectoryFactory(ProjectInternal project, FileResolver fileResolver) { + this.fileResolver = fileResolver + this.project = project + this.useFactory = GradleVersion.current().compareTo(GradleVersion.version("2.12")) >= 0; + + } + + public SourceDirectorySet newSourceSetDirectory(String displayName) { + if (useFactory) { + SourceDirectorySetFactory factory = project.getServices().get(SourceDirectorySetFactory.class); + return factory.create(displayName); + } else { + return new DefaultSourceDirectorySet(displayName, fileResolver); + } + } +} diff --git a/src/main/groovy/frege/gradle/FregeSourceSetOutputs.groovy b/src/main/groovy/frege/gradle/FregeSourceSetOutputs.groovy new file mode 100644 index 0000000..07e90a3 --- /dev/null +++ b/src/main/groovy/frege/gradle/FregeSourceSetOutputs.groovy @@ -0,0 +1,7 @@ +package frege.gradle + +import org.gradle.api.file.FileCollection + +interface FregeSourceSetOutputs { + FileCollection getDirs() +}
\ No newline at end of file diff --git a/src/main/groovy/frege/gradle/plugins/FregeBasePlugin.java b/src/main/groovy/frege/gradle/plugins/FregeBasePlugin.java index 6d7a639..f45dae4 100644 --- a/src/main/groovy/frege/gradle/plugins/FregeBasePlugin.java +++ b/src/main/groovy/frege/gradle/plugins/FregeBasePlugin.java @@ -1,6 +1,7 @@ package frege.gradle.plugins; import frege.gradle.DefaultFregeSourceSet; +import frege.gradle.FregeSourceSetDirectoryFactory; import frege.gradle.tasks.FregeCompile; import org.gradle.api.Action; import org.gradle.api.Plugin; @@ -8,6 +9,7 @@ import org.gradle.api.Project; import org.gradle.api.file.FileTreeElement; import org.gradle.api.internal.file.FileResolver; import org.gradle.api.internal.plugins.DslObject; +import org.gradle.api.internal.project.ProjectInternal; import org.gradle.api.internal.tasks.DefaultSourceSet; import org.gradle.api.plugins.JavaBasePlugin; import org.gradle.api.plugins.JavaPluginConvention; @@ -44,7 +46,8 @@ public class FregeBasePlugin implements Plugin<Project> { private void configureSourceSetDefaults(final JavaBasePlugin javaBasePlugin) { project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(new Action<SourceSet>() { public void execute(final SourceSet sourceSet) { - final DefaultFregeSourceSet fregeSourceSet = new DefaultFregeSourceSet(((DefaultSourceSet) sourceSet).getDisplayName(), fileResolver); + FregeSourceSetDirectoryFactory factory = new FregeSourceSetDirectoryFactory((ProjectInternal) project, fileResolver); + final DefaultFregeSourceSet fregeSourceSet = new DefaultFregeSourceSet(((DefaultSourceSet) sourceSet).getDisplayName(), factory); new DslObject(sourceSet).getConvention().getPlugins().put("frege", fregeSourceSet); final String defaultSourcePath = String.format("src/%s/frege", sourceSet.getName()); diff --git a/src/main/groovy/frege/gradle/tasks/FregeQuickCheck.groovy b/src/main/groovy/frege/gradle/tasks/FregeQuickCheck.groovy index cb7d5ef..e06236f 100644 --- a/src/main/groovy/frege/gradle/tasks/FregeQuickCheck.groovy +++ b/src/main/groovy/frege/gradle/tasks/FregeQuickCheck.groovy @@ -7,6 +7,42 @@ import org.gradle.process.internal.JavaExecAction class FregeQuickCheck extends DefaultTask { + // more options to consider: +/* + Looks up quick check predicates in the given modules and tests them. + + [Usage:] java -cp fregec.jar frege.tools.Quick [ option ... ] modulespec ... + + Options: + + - -v print a line for each pedicate that passed + - -n num run _num_ tests per predicate, default is 100 + - -p pred1,pred2,... only test the given predicates + - -x pred1,pred2,... do not test the given predicates + - -l just print the names of the predicates available. + + Ways to specify modules: + + - module the module name (e.g. my.great.Module), will be lookup up in + the current class path. + - dir/ A directory path. The directory is searched for class files, + and for each class files an attempt is made to load it as if + the given directory was in the class path. The directory must + be the root of the classes contained therein, otherwise the + classes won't get loaded. + - path-to.jar A jar or zip file is searched for class files, and for each + class file found an attempt is made to load it as if the + jar was in the class path. + + The number of passed/failed tests is reported. If any test failed or other + errors occured, the exit code will be non zero. + + The code will try to heat up your CPU by running tests on all available cores. + This should be faster on multi-core computers than running the tests + sequentially. It makes it feasable to run more tests per predicate. + + */ + Boolean verbose = true Boolean listAvailable = false Boolean help = false @@ -14,9 +50,10 @@ class FregeQuickCheck extends DefaultTask { List<String> includePredicates List<String> excludePredicates String moduleName + String moduleDirectory String moduleJar - String moduleDir = "$project.buildDir/classes/test" List<String> classpathDirectories = ["$project.buildDir/classes/main", "$project.buildDir/classes/test"] + String moduleDir = "$project.buildDir/classes/test" List<String> allJvmArgs = [] @TaskAction @@ -33,50 +70,21 @@ class FregeQuickCheck extends DefaultTask { def f = project.files(classpathDirectories.collect { s -> new File(s) }) action.setClasspath(project.files(project.configurations.compile).plus(project.files(project.configurations.testRuntime)).plus(f)) - def moduleSpec = moduleName ?: moduleJar ?: moduleDir + + project.configurations.testRuntime.each { println it } def args = [] if (help) { - println """ -FregeQuickCheck Help --------------------- -All attributes are optional, -currently used moduleDir is '$moduleDir', -currently used moduleSpec is '$moduleSpec'. - -Example attribute values: -fregeQuickCheck { - help = true // default: false - listAvailable = true // default: false, will only list and not execute - verbose = false // default: true, needed to see the results - num = 500 // default: 100 - includePredicates = ['myFirstPred', 'mySecondPred'] - excludePredicates = ['myFirstPred', 'mySecondPred'] - moduleName = 'my.cool.Module' // prio 1 - moduleJar = 'path/to/my/module.jar' // prio 2 - moduleDir = "\$project.buildDir/classes/test" // prio 3, default - classpathDirectories = ["\$project.buildDir/classes/main", "\$project.buildDir/classes/test"] - allJvmArgs = ['-Xss4M'] -} -""" - println "Current Test Runtime is: " - project.configurations.testRuntime.each { println it } - } - - if (verbose) args << "-v" - if (listAvailable) args << "-l" - if (num) args << "-n" << num - if (includePredicates) args << "-p" << includePredicates.join(',') - if (excludePredicates) args << "-x" << excludePredicates.join(',') - if (!allJvmArgs.isEmpty()) { - action.setJvmArgs(allJvmArgs) - } - args << moduleSpec - if (help) { - println "Calling Frege QuickCheck with args: '${args.join(' ')}'" - println "and JVM args: '${allJvmArgs.join(' ')}'" + } else { + if (verbose) args << "-v" + if (listAvailable) args << "-l" + if (!allJvmArgs.isEmpty()) { + action.setJvmArgs(allJvmArgs) + } + args = args + [moduleDir] } + logger.info("Calling Frege QuickCheck with args: '$args'") action.args args action.execute() } |