diff --git a/check/check.go b/check/check.go index 3c7884f..485cca9 100644 --- a/check/check.go +++ b/check/check.go @@ -72,6 +72,7 @@ type Check struct { State `json:"status"` ActualValue string `json:"actual_value"` Scored bool `json:"scored"` + ExpectedResult string `json:"expected_result"` } // Runner wraps the basic Run method. @@ -188,6 +189,7 @@ func (c *Check) run() State { finalOutput := c.Tests.execute(out.String()) if finalOutput != nil { c.ActualValue = finalOutput.actualResult + c.ExpectedResult = finalOutput.ExpectedResult if finalOutput.testResult { c.State = PASS } else { diff --git a/check/test.go b/check/test.go index 059642f..9e2746b 100644 --- a/check/test.go +++ b/check/test.go @@ -58,6 +58,7 @@ type compare struct { type testOutput struct { testResult bool actualResult string + ExpectedResult string } func failTestItem(s string) *testOutput { @@ -135,8 +136,10 @@ func (t *testItem) execute(s string) *testOutput { } } + expectedResultPattern := "" switch t.Compare.Op { case "eq": + expectedResultPattern = "'%s' is equal to '%s'" value := strings.ToLower(flagVal) // Do case insensitive comparaison for booleans ... if value == "false" || value == "true" { @@ -146,6 +149,7 @@ func (t *testItem) execute(s string) *testOutput { } case "noteq": + expectedResultPattern = "'%s' is not equal to '%s'" value := strings.ToLower(flagVal) // Do case insensitive comparaison for booleans ... if value == "false" || value == "true" { @@ -155,32 +159,41 @@ func (t *testItem) execute(s string) *testOutput { } case "gt": + expectedResultPattern = "%s is greater then %s" a, b := toNumeric(flagVal, t.Compare.Value) result.testResult = a > b case "gte": + expectedResultPattern = "%s is greater or equal to %s" a, b := toNumeric(flagVal, t.Compare.Value) result.testResult = a >= b case "lt": + expectedResultPattern = "%s is lower then %s" a, b := toNumeric(flagVal, t.Compare.Value) result.testResult = a < b case "lte": + expectedResultPattern = "%s is lower or equal to %s" a, b := toNumeric(flagVal, t.Compare.Value) result.testResult = a <= b case "has": + expectedResultPattern = "'%s' has '%s'" result.testResult = strings.Contains(flagVal, t.Compare.Value) case "nothave": + expectedResultPattern = " '%s' not have '%s'" result.testResult = !strings.Contains(flagVal, t.Compare.Value) } + + result.ExpectedResult = fmt.Sprintf(expectedResultPattern, t.Flag, t.Compare.Value) } else { + result.ExpectedResult = fmt.Sprintf("'%s' is present", t.Flag) result.testResult = isset } - } else { + result.ExpectedResult = fmt.Sprintf("'%s' is not present", t.Flag) notset := !match result.testResult = notset } @@ -219,13 +232,19 @@ func (ts *tests) execute(s string) *testOutput { case and, "": result = true for i := range res { + finalOutput.ExpectedResult += fmt.Sprintf("%s AND ", res[i].ExpectedResult) result = result && res[i].testResult } + // Delete last iteration ' AND ' + finalOutput.ExpectedResult = finalOutput.ExpectedResult[:len(finalOutput.ExpectedResult)-5] case or: result = false for i := range res { + finalOutput.ExpectedResult += fmt.Sprintf("%s OR ", res[i].ExpectedResult) result = result || res[i].testResult } + // Delete last iteration ' OR ' + finalOutput.ExpectedResult = finalOutput.ExpectedResult[:len(finalOutput.ExpectedResult)-4] } finalOutput.testResult = result