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