-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create a simple example for the IgnoreFields #205
Changes from 3 commits
86c02c9
6f9a084
41bf780
cfdd12b
0ae3bec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,128 @@ | ||||||||||||||||||
// Copyright 2017, 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 cmpopts_test | ||||||||||||||||||
|
||||||||||||||||||
import ( | ||||||||||||||||||
"fmt" | ||||||||||||||||||
"net" | ||||||||||||||||||
"time" | ||||||||||||||||||
|
||||||||||||||||||
"github.com/google/go-cmp/cmp" | ||||||||||||||||||
"github.com/google/go-cmp/cmp/cmpopts" | ||||||||||||||||||
"github.com/google/go-cmp/cmp/internal/flags" | ||||||||||||||||||
) | ||||||||||||||||||
|
||||||||||||||||||
func init() { | ||||||||||||||||||
flags.Deterministic = true | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
// Use IgnoreFields to ignore fields on a type when comparing. | ||||||||||||||||||
// Provide an interface of the type and the field names to ignore. | ||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. // Use IgnoreFields to ignore fields on a struct type when comparing
// by providing a value of the type and the field names to ignore.
// Typically, a zero value of the type is used (e.g., foo.MyStruct{}). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Used, thanks. |
||||||||||||||||||
func ExampleIgnoreFields_testing() { | ||||||||||||||||||
// Let got be the hypothetical value obtained from some logic under test | ||||||||||||||||||
// and want be the expected golden data. | ||||||||||||||||||
got, want := MakeGatewayInfo() | ||||||||||||||||||
|
||||||||||||||||||
// Note that the Diff will still potentially show ignored fields as different, | ||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Is still true? I recall fixing the reporter to stop printing ignored fields and using There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Lines 258 to 265 in d713870
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The example itself demonstrates what I was trying to say. I ignore If you do end up changing that behaviour, the example will highlight it so it should be easy to change that comment then. Alternatively, is it the word 'adjacent' that you're objecting to? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think there's a crucial difference between "in the diff" as you just said versus "as different" as currently written in the example. The former denotes an issues with display representation, while the latter subtly suggests something about the semantics of how the comparison is performed. Perhaps this is better worded as: // While the specified fields will be semantically ignored for the comparison,
// the fields may be printed in the diff when displaying entire values
// that are already determined to be different. |
||||||||||||||||||
// but only because they are adjacent to other fields that are also different. | ||||||||||||||||||
if diff := cmp.Diff(want, got, cmpopts.IgnoreFields(Client{}, "IPAddress")); diff != "" { | ||||||||||||||||||
t.Errorf("MakeGatewayInfo() mismatch (-want +got):\n%s", diff) | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
// Output: | ||||||||||||||||||
// MakeGatewayInfo() mismatch (-want +got): | ||||||||||||||||||
// cmpopts_test.Gateway{ | ||||||||||||||||||
// SSID: "CoffeeShopWiFi", | ||||||||||||||||||
// - IPAddress: s"192.168.0.2", | ||||||||||||||||||
// + IPAddress: s"192.168.0.1", | ||||||||||||||||||
// NetMask: {0xff, 0xff, 0x00, 0x00}, | ||||||||||||||||||
// Clients: []cmpopts_test.Client{ | ||||||||||||||||||
// ... // 3 identical elements | ||||||||||||||||||
// {Hostname: "espresso", ...}, | ||||||||||||||||||
// {Hostname: "latte", LastSeen: s"2009-11-10 23:00:23 +0000 UTC", ...}, | ||||||||||||||||||
// + { | ||||||||||||||||||
// + Hostname: "americano", | ||||||||||||||||||
// + IPAddress: s"192.168.0.188", | ||||||||||||||||||
// + LastSeen: s"2009-11-10 23:03:05 +0000 UTC", | ||||||||||||||||||
// + }, | ||||||||||||||||||
// }, | ||||||||||||||||||
// } | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
type ( | ||||||||||||||||||
Gateway struct { | ||||||||||||||||||
SSID string | ||||||||||||||||||
IPAddress net.IP | ||||||||||||||||||
NetMask net.IPMask | ||||||||||||||||||
Clients []Client | ||||||||||||||||||
} | ||||||||||||||||||
Client struct { | ||||||||||||||||||
Hostname string | ||||||||||||||||||
IPAddress net.IP | ||||||||||||||||||
LastSeen time.Time | ||||||||||||||||||
} | ||||||||||||||||||
) | ||||||||||||||||||
|
||||||||||||||||||
func MakeGatewayInfo() (x, y Gateway) { | ||||||||||||||||||
x = Gateway{ | ||||||||||||||||||
SSID: "CoffeeShopWiFi", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 1), | ||||||||||||||||||
NetMask: net.IPv4Mask(255, 255, 0, 0), | ||||||||||||||||||
Clients: []Client{{ | ||||||||||||||||||
Hostname: "ristretto", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 116), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "aribica", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 104), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 6, 32, 0, time.UTC), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "macchiato", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 153), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 39, 43, 0, time.UTC), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "espresso", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 121), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "latte", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 219), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 0, 23, 0, time.UTC), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "americano", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 188), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 3, 5, 0, time.UTC), | ||||||||||||||||||
}}, | ||||||||||||||||||
} | ||||||||||||||||||
y = Gateway{ | ||||||||||||||||||
SSID: "CoffeeShopWiFi", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 2), | ||||||||||||||||||
NetMask: net.IPv4Mask(255, 255, 0, 0), | ||||||||||||||||||
Clients: []Client{{ | ||||||||||||||||||
Hostname: "ristretto", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 116), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "aribica", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 104), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 6, 32, 0, time.UTC), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "macchiato", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 153), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 39, 43, 0, time.UTC), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "espresso", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 121), | ||||||||||||||||||
}, { | ||||||||||||||||||
Hostname: "latte", | ||||||||||||||||||
IPAddress: net.IPv4(192, 168, 0, 221), | ||||||||||||||||||
LastSeen: time.Date(2009, time.November, 10, 23, 0, 23, 0, time.UTC), | ||||||||||||||||||
}}, | ||||||||||||||||||
} | ||||||||||||||||||
return x, y | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
var t fakeT | ||||||||||||||||||
|
||||||||||||||||||
type fakeT struct{} | ||||||||||||||||||
|
||||||||||||||||||
func (t fakeT) Errorf(format string, args ...interface{}) { fmt.Printf(format+"\n", args...) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add license header.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know people aren't fond of 2020, but that's the current year ;)