Skip to content

Commit

Permalink
Failure output: avoid using the 'same as' logic for suppressed values
Browse files Browse the repository at this point in the history
  • Loading branch information
frankban committed Jul 27, 2023
1 parent 950cb4b commit 1458145
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
15 changes: 15 additions & 0 deletions checker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,21 @@ want:
"extra line 1",
}
`, diff([]interface{}{cmpEqualsWant, "extra line 1", "extra line 2"}, []interface{}{cmpEqualsWant, "extra line 1"})),
}, {
about: "CmpEquals: different values, long output, same number of lines",
checker: qt.CmpEquals(),
got: []interface{}{cmpEqualsWant, "extra line 1", "extra line 2", "extra line 3"},
args: []interface{}{[]interface{}{cmpEqualsWant, "extra line 1", "extra line 2", "extra line three"}},
expectedCheckFailure: fmt.Sprintf(`
error:
values are not deep equal
diff (-got +want):
%s
got:
<suppressed due to length (11 lines), use -v for full output>
want:
<suppressed due to length (11 lines), use -v for full output>
`, diff([]interface{}{cmpEqualsWant, "extra line 1", "extra line 2", "extra line 3"}, []interface{}{cmpEqualsWant, "extra line 1", "extra line 2", "extra line three"})),
}, {
about: "CmpEquals: same values with options",
checker: qt.CmpEquals(sameInts),
Expand Down
29 changes: 18 additions & 11 deletions report.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,33 +66,40 @@ func report(err error, p reportParams) string {
func writeError(w io.Writer, err error, p reportParams) {
ptrs := make(map[string]interface{})
values := make(map[string]string)

printPair := func(key string, value interface{}) {
fmt.Fprintln(w, key+":")
var v string

if u, ok := value.(Unquoted); ok {
// Output the raw string without quotes.
v = string(u)
} else if s, ok := value.(SuppressedIfLong); ok {
// Check whether the output is too long and must be suppressed.
v = p.format(s.Value)
if !testingVerbose() {
if n := strings.Count(v, "\n"); n > longValueLines {
v = fmt.Sprintf("<suppressed due to length (%d lines), use -v for full output>", n)
fmt.Fprint(w, prefixf(prefix, "<suppressed due to length (%d lines), use -v for full output>", n))
return
}
}
} else {
// Check whether the output has been already seen.
v = p.format(value)
}
isPtr := reflect.ValueOf(value).Kind() == reflect.Ptr
if k := values[v]; k != "" {
if previousValue, ok := ptrs[k]; ok && isPtr && previousValue != value {
fmt.Fprint(w, prefixf(prefix, "<same as %q but different pointer value>", k))
isPtr := reflect.ValueOf(value).Kind() == reflect.Ptr
if k := values[v]; k != "" {
if previousValue, ok := ptrs[k]; ok && isPtr && previousValue != value {
fmt.Fprint(w, prefixf(prefix, "<same as %q but different pointer value>", k))
return
}
fmt.Fprint(w, prefixf(prefix, "<same as %q>", k))
return
}
fmt.Fprint(w, prefixf(prefix, "<same as %q>", k))
return
}
if isPtr {
ptrs[key] = value
if isPtr {
ptrs[key] = value
}
}

values[v] = key
fmt.Fprint(w, prefixf(prefix, "%s", v))
}
Expand Down

0 comments on commit 1458145

Please sign in to comment.