You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
// Copyright 2017, The Go Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE.md file. |
|
|
|
package cmp |
|
|
|
import ( |
|
"fmt" |
|
"reflect" |
|
"strings" |
|
|
|
"github.com/google/go-cmp/cmp/internal/value" |
|
) |
|
|
|
type defaultReporter struct { |
|
Option |
|
diffs []string // List of differences, possibly truncated |
|
ndiffs int // Total number of differences |
|
nbytes int // Number of bytes in diffs |
|
nlines int // Number of lines in diffs |
|
} |
|
|
|
var _ reporter = (*defaultReporter)(nil) |
|
|
|
func (r *defaultReporter) Report(x, y reflect.Value, eq bool, p Path) { |
|
if eq { |
|
return // Ignore equal results |
|
} |
|
const maxBytes = 4096 |
|
const maxLines = 256 |
|
r.ndiffs++ |
|
if r.nbytes < maxBytes && r.nlines < maxLines { |
|
sx := value.Format(x, value.FormatConfig{UseStringer: true}) |
|
sy := value.Format(y, value.FormatConfig{UseStringer: true}) |
|
if sx == sy { |
|
// Unhelpful output, so use more exact formatting. |
|
sx = value.Format(x, value.FormatConfig{PrintPrimitiveType: true}) |
|
sy = value.Format(y, value.FormatConfig{PrintPrimitiveType: true}) |
|
} |
|
s := fmt.Sprintf("%#v:\n\t-: %s\n\t+: %s\n", p, sx, sy) |
|
r.diffs = append(r.diffs, s) |
|
r.nbytes += len(s) |
|
r.nlines += strings.Count(s, "\n") |
|
} |
|
} |
|
|
|
func (r *defaultReporter) String() string { |
|
s := strings.Join(r.diffs, "") |
|
if r.ndiffs == len(r.diffs) { |
|
return s |
|
} |
|
return fmt.Sprintf("%s... %d more differences ...", s, r.ndiffs-len(r.diffs)) |
|
}
|
|
|