import kotlinx.kover.gradle.plugin.dsl.*

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

plugins {
    // apply plugin to use autocomplete for Kover DSL
    id("org.jetbrains.kotlinx.kover")
}

val reactiveStreamsVersion = property("reactive_streams_version")

dependencies {
    api("org.reactivestreams:reactive-streams:$reactiveStreamsVersion")
    testImplementation("org.reactivestreams:reactive-streams-tck:$reactiveStreamsVersion")
}

val testNG by tasks.registering(Test::class) {
    useTestNG()
    reports.html.destination = file("$buildDir/reports/testng")
    include("**/*ReactiveStreamTckTest.*")
    // Skip testNG when tests are filtered with --tests, otherwise it simply fails
    onlyIf {
        filter.includePatterns.isEmpty()
    }
    doFirst {
        // Classic gradle, nothing works without doFirst
        println("TestNG tests: ($includes)")
    }
}

tasks.test {
    reports.html.destination = file("$buildDir/reports/junit")
}

tasks.check {
    dependsOn(testNG)
}

externalDocumentationLink(
    url = "https://www.reactive-streams.org/reactive-streams-$reactiveStreamsVersion-javadoc/"
)

koverReport {
    filters {
        excludes {
            classes(
                "kotlinx.coroutines.reactive.FlowKt", // Deprecated
                "kotlinx.coroutines.reactive.FlowKt__MigrationKt", // Deprecated
                "kotlinx.coroutines.reactive.ConvertKt" // Deprecated
            )
        }
    }
}
