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