1*88d15eacSSasha Smundak// Copyright 2019, The Go Authors. All rights reserved. 2*88d15eacSSasha Smundak// Use of this source code is governed by a BSD-style 3*88d15eacSSasha Smundak// license that can be found in the LICENSE file. 4*88d15eacSSasha Smundak 5*88d15eacSSasha Smundakpackage cmp_test 6*88d15eacSSasha Smundak 7*88d15eacSSasha Smundakimport ( 8*88d15eacSSasha Smundak "fmt" 9*88d15eacSSasha Smundak "strings" 10*88d15eacSSasha Smundak 11*88d15eacSSasha Smundak "github.com/google/go-cmp/cmp" 12*88d15eacSSasha Smundak) 13*88d15eacSSasha Smundak 14*88d15eacSSasha Smundak// DiffReporter is a simple custom reporter that only records differences 15*88d15eacSSasha Smundak// detected during comparison. 16*88d15eacSSasha Smundaktype DiffReporter struct { 17*88d15eacSSasha Smundak path cmp.Path 18*88d15eacSSasha Smundak diffs []string 19*88d15eacSSasha Smundak} 20*88d15eacSSasha Smundak 21*88d15eacSSasha Smundakfunc (r *DiffReporter) PushStep(ps cmp.PathStep) { 22*88d15eacSSasha Smundak r.path = append(r.path, ps) 23*88d15eacSSasha Smundak} 24*88d15eacSSasha Smundak 25*88d15eacSSasha Smundakfunc (r *DiffReporter) Report(rs cmp.Result) { 26*88d15eacSSasha Smundak if !rs.Equal() { 27*88d15eacSSasha Smundak vx, vy := r.path.Last().Values() 28*88d15eacSSasha Smundak r.diffs = append(r.diffs, fmt.Sprintf("%#v:\n\t-: %+v\n\t+: %+v\n", r.path, vx, vy)) 29*88d15eacSSasha Smundak } 30*88d15eacSSasha Smundak} 31*88d15eacSSasha Smundak 32*88d15eacSSasha Smundakfunc (r *DiffReporter) PopStep() { 33*88d15eacSSasha Smundak r.path = r.path[:len(r.path)-1] 34*88d15eacSSasha Smundak} 35*88d15eacSSasha Smundak 36*88d15eacSSasha Smundakfunc (r *DiffReporter) String() string { 37*88d15eacSSasha Smundak return strings.Join(r.diffs, "\n") 38*88d15eacSSasha Smundak} 39*88d15eacSSasha Smundak 40*88d15eacSSasha Smundakfunc ExampleReporter() { 41*88d15eacSSasha Smundak x, y := MakeGatewayInfo() 42*88d15eacSSasha Smundak 43*88d15eacSSasha Smundak var r DiffReporter 44*88d15eacSSasha Smundak cmp.Equal(x, y, cmp.Reporter(&r)) 45*88d15eacSSasha Smundak fmt.Print(r.String()) 46*88d15eacSSasha Smundak 47*88d15eacSSasha Smundak // Output: 48*88d15eacSSasha Smundak // {cmp_test.Gateway}.IPAddress: 49*88d15eacSSasha Smundak // -: 192.168.0.1 50*88d15eacSSasha Smundak // +: 192.168.0.2 51*88d15eacSSasha Smundak // 52*88d15eacSSasha Smundak // {cmp_test.Gateway}.Clients[4].IPAddress: 53*88d15eacSSasha Smundak // -: 192.168.0.219 54*88d15eacSSasha Smundak // +: 192.168.0.221 55*88d15eacSSasha Smundak // 56*88d15eacSSasha Smundak // {cmp_test.Gateway}.Clients[5->?]: 57*88d15eacSSasha Smundak // -: {Hostname:americano IPAddress:192.168.0.188 LastSeen:2009-11-10 23:03:05 +0000 UTC} 58*88d15eacSSasha Smundak // +: <invalid reflect.Value> 59*88d15eacSSasha Smundak} 60