Add Gradle output assertions.
^KT-45744 In Progress
This commit is contained in:
committed by
TeamCityServer
parent
b7864c1e43
commit
7549d14a36
+84
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.testbase
|
||||||
|
|
||||||
|
import org.gradle.testkit.runner.BuildResult
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts Gradle output contains [expectedSubString] string.
|
||||||
|
*/
|
||||||
|
fun BuildResult.assertOutputContains(
|
||||||
|
expectedSubString: String
|
||||||
|
) {
|
||||||
|
assert(output.contains(expectedSubString)) {
|
||||||
|
"Build output does not contain \"$expectedSubString\""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts Gradle output does not contain [notExpectedSubString] string.
|
||||||
|
*
|
||||||
|
* @param wrappingCharsCount amount of chars to include before and after [notExpectedSubString] occurrence
|
||||||
|
*/
|
||||||
|
fun BuildResult.assertOutputDoesNotContain(
|
||||||
|
notExpectedSubString: String,
|
||||||
|
wrappingCharsCount: Int = 100,
|
||||||
|
) {
|
||||||
|
assert(!output.contains(notExpectedSubString)) {
|
||||||
|
// In case if notExpectedSubString is multiline string
|
||||||
|
val occurrences = mutableListOf<Pair<Int, Int>>()
|
||||||
|
var startIndex = output.indexOf(notExpectedSubString)
|
||||||
|
var endIndex = startIndex + notExpectedSubString.length
|
||||||
|
do {
|
||||||
|
occurrences.add(startIndex to endIndex)
|
||||||
|
startIndex = output.indexOf(notExpectedSubString, endIndex)
|
||||||
|
endIndex = startIndex + notExpectedSubString.length
|
||||||
|
} while (startIndex != -1)
|
||||||
|
|
||||||
|
val linesContainingSubString = occurrences.map { (startIndex, endIndex) ->
|
||||||
|
output.subSequence(
|
||||||
|
(startIndex - wrappingCharsCount).coerceAtLeast(0),
|
||||||
|
(endIndex + wrappingCharsCount).coerceAtMost(output.length)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
|
||||||
|
|===> Build output contains non-expected sub-string:
|
||||||
|
|'$notExpectedSubString'
|
||||||
|
|===> in following places:
|
||||||
|
|${linesContainingSubString.joinToString(separator = "\n|===> Next case:\n")}
|
||||||
|
|===> End of occurrences
|
||||||
|
|
|
||||||
|
""".trimMargin()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assert build output contains one or more strings matching [expected] regex.
|
||||||
|
*/
|
||||||
|
fun BuildResult.assertOutputContains(
|
||||||
|
expected: Regex
|
||||||
|
) {
|
||||||
|
assert(output.contains(expected)) {
|
||||||
|
"Build output does not contain any line matching '$expected' regex."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts build output does not contain any lines matching [regexToCheck] regex.
|
||||||
|
*/
|
||||||
|
fun BuildResult.assertOutputDoesNotContain(
|
||||||
|
regexToCheck: Regex
|
||||||
|
) {
|
||||||
|
assert(!output.contains(regexToCheck)) {
|
||||||
|
val matchedStrings = regexToCheck
|
||||||
|
.findAll(output)
|
||||||
|
.map { it.value }
|
||||||
|
.joinToString(prefix = " ", separator = "\n ")
|
||||||
|
"Build output contains following regex '$regexToCheck' matches:\n$matchedStrings"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user