/*
 * Copyright 2016-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

sourceCompatibility = 1.6
targetCompatibility = 1.6

kotlin {
    targets {
        fromPreset(presets.jvm, 'jvm')
    }
    sourceSets {
        jvmTest.dependencies {
            api "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
            // Workaround to make addSuppressed work in tests
            api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
            api "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
            api "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
            api "junit:junit:$junit_version"
        }
    }
}

jvmTest {
    testLogging {
        showStandardStreams = true
        events "passed", "failed"
    }
    def stressTest = project.properties['stressTest']
    if (stressTest != null) systemProperties['stressTest'] = stressTest
}
