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