xref: /aosp_15_r20/external/go-cmp/cmp/cmpopts/example_test.go (revision 88d15eac089d7f20c739ff1001d56b91872b21a1)
1*88d15eacSSasha Smundak// Copyright 2020, 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 cmpopts_test
6*88d15eacSSasha Smundak
7*88d15eacSSasha Smundakimport (
8*88d15eacSSasha Smundak	"fmt"
9*88d15eacSSasha Smundak	"net"
10*88d15eacSSasha Smundak	"time"
11*88d15eacSSasha Smundak
12*88d15eacSSasha Smundak	"github.com/google/go-cmp/cmp"
13*88d15eacSSasha Smundak	"github.com/google/go-cmp/cmp/cmpopts"
14*88d15eacSSasha Smundak	"github.com/google/go-cmp/cmp/internal/flags"
15*88d15eacSSasha Smundak)
16*88d15eacSSasha Smundak
17*88d15eacSSasha Smundakfunc init() {
18*88d15eacSSasha Smundak	flags.Deterministic = true
19*88d15eacSSasha Smundak}
20*88d15eacSSasha Smundak
21*88d15eacSSasha Smundak// Use IgnoreFields to ignore fields on a struct type when comparing
22*88d15eacSSasha Smundak// by providing a value of the type and the field names to ignore.
23*88d15eacSSasha Smundak// Typically, a zero value of the type is used (e.g., foo.MyStruct{}).
24*88d15eacSSasha Smundakfunc ExampleIgnoreFields_testing() {
25*88d15eacSSasha Smundak	// Let got be the hypothetical value obtained from some logic under test
26*88d15eacSSasha Smundak	// and want be the expected golden data.
27*88d15eacSSasha Smundak	got, want := MakeGatewayInfo()
28*88d15eacSSasha Smundak
29*88d15eacSSasha Smundak	// While the specified fields will be semantically ignored for the comparison,
30*88d15eacSSasha Smundak	// the fields may be printed in the diff when displaying entire values
31*88d15eacSSasha Smundak	// that are already determined to be different.
32*88d15eacSSasha Smundak	if diff := cmp.Diff(want, got, cmpopts.IgnoreFields(Client{}, "IPAddress")); diff != "" {
33*88d15eacSSasha Smundak		t.Errorf("MakeGatewayInfo() mismatch (-want +got):\n%s", diff)
34*88d15eacSSasha Smundak	}
35*88d15eacSSasha Smundak
36*88d15eacSSasha Smundak	// Output:
37*88d15eacSSasha Smundak	// MakeGatewayInfo() mismatch (-want +got):
38*88d15eacSSasha Smundak	//   cmpopts_test.Gateway{
39*88d15eacSSasha Smundak	//   	SSID:      "CoffeeShopWiFi",
40*88d15eacSSasha Smundak	// - 	IPAddress: s"192.168.0.2",
41*88d15eacSSasha Smundak	// + 	IPAddress: s"192.168.0.1",
42*88d15eacSSasha Smundak	//   	NetMask:   s"ffff0000",
43*88d15eacSSasha Smundak	//   	Clients: []cmpopts_test.Client{
44*88d15eacSSasha Smundak	//   		... // 3 identical elements
45*88d15eacSSasha Smundak	//   		{Hostname: "espresso", ...},
46*88d15eacSSasha Smundak	//   		{Hostname: "latte", LastSeen: s"2009-11-10 23:00:23 +0000 UTC", ...},
47*88d15eacSSasha Smundak	// + 		{
48*88d15eacSSasha Smundak	// + 			Hostname:  "americano",
49*88d15eacSSasha Smundak	// + 			IPAddress: s"192.168.0.188",
50*88d15eacSSasha Smundak	// + 			LastSeen:  s"2009-11-10 23:03:05 +0000 UTC",
51*88d15eacSSasha Smundak	// + 		},
52*88d15eacSSasha Smundak	//   	},
53*88d15eacSSasha Smundak	//   }
54*88d15eacSSasha Smundak}
55*88d15eacSSasha Smundak
56*88d15eacSSasha Smundaktype (
57*88d15eacSSasha Smundak	Gateway struct {
58*88d15eacSSasha Smundak		SSID      string
59*88d15eacSSasha Smundak		IPAddress net.IP
60*88d15eacSSasha Smundak		NetMask   net.IPMask
61*88d15eacSSasha Smundak		Clients   []Client
62*88d15eacSSasha Smundak	}
63*88d15eacSSasha Smundak	Client struct {
64*88d15eacSSasha Smundak		Hostname  string
65*88d15eacSSasha Smundak		IPAddress net.IP
66*88d15eacSSasha Smundak		LastSeen  time.Time
67*88d15eacSSasha Smundak	}
68*88d15eacSSasha Smundak)
69*88d15eacSSasha Smundak
70*88d15eacSSasha Smundakfunc MakeGatewayInfo() (x, y Gateway) {
71*88d15eacSSasha Smundak	x = Gateway{
72*88d15eacSSasha Smundak		SSID:      "CoffeeShopWiFi",
73*88d15eacSSasha Smundak		IPAddress: net.IPv4(192, 168, 0, 1),
74*88d15eacSSasha Smundak		NetMask:   net.IPv4Mask(255, 255, 0, 0),
75*88d15eacSSasha Smundak		Clients: []Client{{
76*88d15eacSSasha Smundak			Hostname:  "ristretto",
77*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 116),
78*88d15eacSSasha Smundak		}, {
79*88d15eacSSasha Smundak			Hostname:  "aribica",
80*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 104),
81*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 6, 32, 0, time.UTC),
82*88d15eacSSasha Smundak		}, {
83*88d15eacSSasha Smundak			Hostname:  "macchiato",
84*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 153),
85*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 39, 43, 0, time.UTC),
86*88d15eacSSasha Smundak		}, {
87*88d15eacSSasha Smundak			Hostname:  "espresso",
88*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 121),
89*88d15eacSSasha Smundak		}, {
90*88d15eacSSasha Smundak			Hostname:  "latte",
91*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 219),
92*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 0, 23, 0, time.UTC),
93*88d15eacSSasha Smundak		}, {
94*88d15eacSSasha Smundak			Hostname:  "americano",
95*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 188),
96*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 3, 5, 0, time.UTC),
97*88d15eacSSasha Smundak		}},
98*88d15eacSSasha Smundak	}
99*88d15eacSSasha Smundak	y = Gateway{
100*88d15eacSSasha Smundak		SSID:      "CoffeeShopWiFi",
101*88d15eacSSasha Smundak		IPAddress: net.IPv4(192, 168, 0, 2),
102*88d15eacSSasha Smundak		NetMask:   net.IPv4Mask(255, 255, 0, 0),
103*88d15eacSSasha Smundak		Clients: []Client{{
104*88d15eacSSasha Smundak			Hostname:  "ristretto",
105*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 116),
106*88d15eacSSasha Smundak		}, {
107*88d15eacSSasha Smundak			Hostname:  "aribica",
108*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 104),
109*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 6, 32, 0, time.UTC),
110*88d15eacSSasha Smundak		}, {
111*88d15eacSSasha Smundak			Hostname:  "macchiato",
112*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 153),
113*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 39, 43, 0, time.UTC),
114*88d15eacSSasha Smundak		}, {
115*88d15eacSSasha Smundak			Hostname:  "espresso",
116*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 121),
117*88d15eacSSasha Smundak		}, {
118*88d15eacSSasha Smundak			Hostname:  "latte",
119*88d15eacSSasha Smundak			IPAddress: net.IPv4(192, 168, 0, 221),
120*88d15eacSSasha Smundak			LastSeen:  time.Date(2009, time.November, 10, 23, 0, 23, 0, time.UTC),
121*88d15eacSSasha Smundak		}},
122*88d15eacSSasha Smundak	}
123*88d15eacSSasha Smundak	return x, y
124*88d15eacSSasha Smundak}
125*88d15eacSSasha Smundak
126*88d15eacSSasha Smundakvar t fakeT
127*88d15eacSSasha Smundak
128*88d15eacSSasha Smundaktype fakeT struct{}
129*88d15eacSSasha Smundak
130*88d15eacSSasha Smundakfunc (t fakeT) Errorf(format string, args ...interface{}) { fmt.Printf(format+"\n", args...) }
131