blob: 4d3d28252c42dbab79687533a6566c31ba9881b0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
allprojects {
tasks.withType(Test) {
def jdk8 = ['-XX:+UseConcMarkSweepGC']
def jdk9 = ['-Djava.locale.providers=COMPAT,SPI']
// def jdk9 = ['-Djava.locale.providers=COMPAT,SPI', '--illegal-access=debug']
def common = ['-ea', "-Xms${groovyJUnit_ms}", "-Xmx${groovyJUnit_mx}", "-Duser.language=en" ]
if (JavaVersion.current().isJava9Compatible()) {
jvmArgs (*common, *jdk9)
systemProperty "groovy.force.illegal.access", findProperty("groovy.force.illegal.access")
} else if (JavaVersion.current().isJava8Compatible()) {
jvmArgs (*common, *jdk8)
} else {
jvmArgs (*common, "-XX:PermSize=${groovyJUnit_permSize}", "-XX:MaxPermSize=${groovyJUnit_maxPermSize}")
}
def headless = System.properties['java.awt.headless']
if (headless == 'true') {
systemProperties 'java.awt.headless': 'true'
}
systemProperties 'apple.awt.UIElement': 'true', 'javadocAssertion.src.dir': './src/main'
forkEvery = 50
maxParallelForks = isRunningOnCI() ? 1 : Runtime.runtime.availableProcessors()
scanForTestClasses = true
ignoreFailures = false
testLogging {
exceptionFormat = 'full'
// uncomment the following line if you need more logging
// events "failed", "started"
}
}
// create an Indy test suite
if (rootProject.indyCapable()) {
def dependencies = configurations.testRuntime.incoming.dependencies.findAll {
it.name.startsWith('groovy')
}.collect {
it.name
}
task testWithIndy(type: Test) {
systemProperties 'groovy.target.indy': true
dependsOn 'jarWithIndy'
dependencies.each { dependsOn "${it}:jarWithIndy" }
classpath = classpath - files(jar.archivePath, *dependencies.collect { project(it).jar }) +
files({ [jarWithIndy.archivePath, *dependencies.collect { project(it).jarWithIndy }] })
}
task testAll {
description = "Runs both the normal and indy test suites"
dependsOn test, testWithIndy
}
check.dependsOn testWithIndy
}
sourceSets {
test {
groovy {
srcDirs += 'src/spec/test'
}
resources {
srcDirs += 'src/spec/test-resources'
}
}
}
}
tasks.withType(Test) {
def testdb = System.properties['groovy.testdb.props']
if (testdb) {
systemProperties 'groovy.testdb.props': testdb
}
systemProperties 'gradle.home': gradle.gradleHomeDir // this is needed by the security.policy
classpath = files('src/test') + classpath
exclude buildExcludeFilter(it.name == 'test')
ext.resultText = ''
doLast {
ant.delete {
fileset(dir: '.', includes: '*.class')
}
}
}
boolean isRunningOnCI() {
new File('.').absolutePath =~ /teamcity|jenkins|hudson|travis/
}
logger.lifecycle "Detected ${isRunningOnCI() ? 'Continuous Integration environment' : 'development environment'}"
tasks.addRule('Pattern: testSingle<Name> will test **/<Name>.class') { String taskName ->
if (taskName.startsWith('testSingle')) {
tasks.create(taskName).dependsOn(test)
test.includes = ['**/' + taskName.substring(10) + '.class']
test.outputs.upToDateWhen { false }
}
}
def buildExcludeFilter(boolean legacyTestSuite) {
def excludes = []
// if no network available, disable Grapes
if (!System.properties['junit.network']) {
excludes << 'groovy/grape/'
}
if (legacyTestSuite) {
// indy tests will only be executed in indy test suite
excludes += ['indy', 'Indy']
} else {
// tests not passing with indy : investigation required!
excludes += ['Log4j2Test', 'ASTTransformationCustomizerTest']
}
return { f ->
excludes.any { f.file =~ it }
}
}
// some tests require Jars, but those are not allowed in the source directory
// by the Apache policy, so we need to build them and add them to the test
// resources classpath
ext.extModuleFixtureDir = file("$projectDir/src/test-fixtures/extmodule")
ext.extModuleOutputDir = file("$buildDir/testFixtures/extmodule")
ext.extModuleRepoDir = file("$extModuleOutputDir/repo")
task compileTestExtensionModule(type: JavaCompile) {
classpath = files(jar)
source fileTree("$extModuleFixtureDir/src/main/java")
destinationDir = file("$extModuleOutputDir/classes")
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
task testExtensionModuleJar(type: Jar) {
description = 'Builds a sample extension module used in tests'
dependsOn compileTestExtensionModule
baseName = 'module-test'
version = '1.4'
from { compileTestExtensionModule.destinationDir }
from files("$extModuleFixtureDir/src/main/resources")
// emulate Maven repo format for output
destinationDir = file("$extModuleRepoDir/jars/module-test/module-test/${version}")
}
tasks.withType(Test) {
dependsOn(testExtensionModuleJar)
classpath += files(extModuleRepoDir)
}