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

// Platform-specific configuration to compile JVM modules

apply plugin: 'kotlin-platform-jvm'

sourceCompatibility = 1.6
targetCompatibility = 1.6

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
    // Workaround to make addSuppressed work in tests
    testCompile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
    testCompile "junit:junit:$junit_version"
}

repositories {
    maven { url "https://dl.bintray.com/devexperts/Maven/" }
}

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