|
- // Copyright 2019, 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_test
-
- import (
- "fmt"
- "strings"
-
- "github.com/google/go-cmp/cmp"
- )
-
- // DiffReporter is a simple custom reporter that only records differences
- // detected during comparison.
- type DiffReporter struct {
- path cmp.Path
- diffs []string
- }
-
- func (r *DiffReporter) PushStep(ps cmp.PathStep) {
- r.path = append(r.path, ps)
- }
-
- func (r *DiffReporter) Report(rs cmp.Result) {
- if !rs.Equal() {
- vx, vy := r.path.Last().Values()
- r.diffs = append(r.diffs, fmt.Sprintf("%#v:\n\t-: %+v\n\t+: %+v\n", r.path, vx, vy))
- }
- }
-
- func (r *DiffReporter) PopStep() {
- r.path = r.path[:len(r.path)-1]
- }
-
- func (r *DiffReporter) String() string {
- return strings.Join(r.diffs, "\n")
- }
-
- func ExampleReporter() {
- x, y := MakeGatewayInfo()
-
- var r DiffReporter
- cmp.Equal(x, y, cmp.Reporter(&r))
- fmt.Print(r.String())
-
- // Output:
- // {cmp_test.Gateway}.IPAddress:
- // -: 192.168.0.1
- // +: 192.168.0.2
- //
- // {cmp_test.Gateway}.Clients[4].IPAddress:
- // -: 192.168.0.219
- // +: 192.168.0.221
- //
- // {cmp_test.Gateway}.Clients[5->?]:
- // -: {Hostname:americano IPAddress:192.168.0.188 LastSeen:2009-11-10 23:03:05 +0000 UTC}
- // +: <invalid reflect.Value>
- }
|