60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
// 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>
|
|
}
|