| // 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 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> |
| } |