add failure result to output if not yet included

This commit is contained in:
az 2023-04-01 11:56:36 +02:00
parent 075fe6cae1
commit c9a7eb4142
2 changed files with 33 additions and 8 deletions

View file

@ -312,6 +312,14 @@ open class Prov protected constructor(
internalResults[resultIndex].provResult = returnValue internalResults[resultIndex].provResult = returnValue
// Add failure result to output if not yet included,
// which is the case if the result was not part of another subtask but created and returned by the lambda itself.
// Success results do not need to be added here as they don't change the overall success evaluation,
// whereas the failure results may have a useful error message, which should be in the output.
if (!resultOfTaskLambda.success && (resultOfTaskLambda != internalResults.last().provResult)) {
internalResults.add(ResultLine(level + 1, "<<returned result>>", resultOfTaskLambda))
}
if (level == 0) { if (level == 0) {
endProgress() endProgress()
processor.close() processor.close()

View file

@ -254,12 +254,12 @@ internal class ProvTest {
} }
// given // additional methods to be used in the tests below
fun Prov.checkPrereq_evaluateToFailure() = requireLast { fun Prov.checkPrereq_evaluateToFailure() = requireLast {
ProvResult(false, err = "This is a test error.") ProvResult(false, err = "This is a test error.")
} }
fun Prov.methodThatProvidesSomeOutput() = requireLast { fun Prov.testMethodForOutputTest_with_mode_requireLast() = requireLast {
if (!checkPrereq_evaluateToFailure().success) { if (!checkPrereq_evaluateToFailure().success) {
sh( sh(
@ -273,6 +273,17 @@ internal class ProvTest {
sh("echo -End test-") sh("echo -End test-")
} }
fun Prov.testMethodForOutputTest_nested_with_failure() = taskWithResult {
taskWithResult(name = "sub1") {
taskWithResult {
ProvResult(true)
}
ProvResult(false, err = "Iamanerrormessage")
}
cmd("echo -End test-")
}
@Test @Test
@NonCi @NonCi
fun prov_prints_correct_output_for_overall_success() { fun prov_prints_correct_output_for_overall_success() {
@ -290,7 +301,7 @@ internal class ProvTest {
// when // when
Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE) Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE)
.methodThatProvidesSomeOutput() .testMethodForOutputTest_with_mode_requireLast()
// then // then
System.setOut(originalOut) System.setOut(originalOut)
@ -300,7 +311,7 @@ internal class ProvTest {
val expectedOutput = val expectedOutput =
"============================================== SUMMARY (test instance with no progress info) =============================================\n" + "============================================== SUMMARY (test instance with no progress info) =============================================\n" +
"> \u001B[92mSuccess\u001B[0m -- methodThatProvidesSomeOutput (requireLast) \n" + "> \u001B[92mSuccess\u001B[0m -- testMethodForOutputTest_with_mode_requireLast (requireLast) \n" +
"---> \u001B[93mFAILED\u001B[0m -- checkPrereq_evaluateToFailure (requireLast) -- Error: This is a test error.\n" + "---> \u001B[93mFAILED\u001B[0m -- checkPrereq_evaluateToFailure (requireLast) -- Error: This is a test error.\n" +
"---> \u001B[92mSuccess\u001B[0m -- sh \n" + "---> \u001B[92mSuccess\u001B[0m -- sh \n" +
"------> \u001B[92mSuccess\u001B[0m -- cmd [/bin/bash, -c, echo -Start test-]\n" + "------> \u001B[92mSuccess\u001B[0m -- cmd [/bin/bash, -c, echo -Start test-]\n" +
@ -317,7 +328,7 @@ internal class ProvTest {
@Test @Test
@NonCi @NonCi
fun prov_prints_correct_output_for_failure() { fun prov_prints_correct_output_for_nested_calls_with_failure() {
// given // given
setRootLoggingLevel(Level.OFF) setRootLoggingLevel(Level.OFF)
@ -332,7 +343,7 @@ internal class ProvTest {
// when // when
Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE) Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE)
.checkPrereq_evaluateToFailure() .testMethodForOutputTest_nested_with_failure()
// then // then
System.setOut(originalOut) System.setOut(originalOut)
@ -342,7 +353,13 @@ internal class ProvTest {
val expectedOutput = val expectedOutput =
"============================================== SUMMARY (test instance with no progress info) =============================================\n" + "============================================== SUMMARY (test instance with no progress info) =============================================\n" +
"> \u001B[91mFAILED\u001B[0m -- checkPrereq_evaluateToFailure (requireLast) -- Error: This is a test error.\n" + "> \u001B[91mFAILED\u001B[0m -- testMethodForOutputTest_nested_with_failure \n" +
"---> \u001B[91mFAILED\u001B[0m -- sub1 \n" +
"------> \u001B[92mSuccess\u001B[0m -- testMethodForOutputTest_nested_with_failure \n" +
"------> \u001B[91mFAILED\u001B[0m -- <<returned result>> -- Error: Iamanerrormessage\n" +
"---> \u001B[92mSuccess\u001B[0m -- cmd [/bin/bash, -c, echo -End test-]\n" +
"----------------------------------------------------------------------------------------------------\n" +
"Overall > \u001B[91mFAILED\u001B[0m \n" +
"============================================ SUMMARY END ===========================================\n" + "============================================ SUMMARY END ===========================================\n" +
"\n" "\n"
@ -603,7 +620,7 @@ internal class ProvTest {
val prov = Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE) val prov = Prov.newInstance(name = "test instance with no progress info", progressType = ProgressType.NONE)
// when // when
prov.task { prov.task {
addInfoText("Text1") addInfoText("Text1")
addInfoText("Text2\nwith newline") addInfoText("Text2\nwith newline")