|  | package gstruct_test | 
|  |  | 
|  | import ( | 
|  | . "github.com/onsi/ginkgo" | 
|  | . "github.com/onsi/gomega" | 
|  | . "github.com/onsi/gomega/gstruct" | 
|  | ) | 
|  |  | 
|  | var _ = Describe("Struct", func() { | 
|  | allFields := struct{ A, B string }{"a", "b"} | 
|  | missingFields := struct{ A string }{"a"} | 
|  | extraFields := struct{ A, B, C string }{"a", "b", "c"} | 
|  | emptyFields := struct{ A, B string }{} | 
|  |  | 
|  | It("should strictly match all fields", func() { | 
|  | m := MatchAllFields(Fields{ | 
|  | "B": Equal("b"), | 
|  | "A": Equal("a"), | 
|  | }) | 
|  | Ω(allFields).Should(m, "should match all fields") | 
|  | Ω(missingFields).ShouldNot(m, "should fail with missing fields") | 
|  | Ω(extraFields).ShouldNot(m, "should fail with extra fields") | 
|  | Ω(emptyFields).ShouldNot(m, "should fail with empty fields") | 
|  |  | 
|  | m = MatchAllFields(Fields{ | 
|  | "A": Equal("a"), | 
|  | "B": Equal("fail"), | 
|  | }) | 
|  | Ω(allFields).ShouldNot(m, "should run nested matchers") | 
|  | }) | 
|  |  | 
|  | It("should handle empty structs", func() { | 
|  | m := MatchAllFields(Fields{}) | 
|  | Ω(struct{}{}).Should(m, "should handle empty structs") | 
|  | Ω(allFields).ShouldNot(m, "should fail with extra fields") | 
|  | }) | 
|  |  | 
|  | It("should ignore missing fields", func() { | 
|  | m := MatchFields(IgnoreMissing, Fields{ | 
|  | "B": Equal("b"), | 
|  | "A": Equal("a"), | 
|  | }) | 
|  | Ω(allFields).Should(m, "should match all fields") | 
|  | Ω(missingFields).Should(m, "should ignore missing fields") | 
|  | Ω(extraFields).ShouldNot(m, "should fail with extra fields") | 
|  | Ω(emptyFields).ShouldNot(m, "should fail with empty fields") | 
|  | }) | 
|  |  | 
|  | It("should ignore extra fields", func() { | 
|  | m := MatchFields(IgnoreExtras, Fields{ | 
|  | "B": Equal("b"), | 
|  | "A": Equal("a"), | 
|  | }) | 
|  | Ω(allFields).Should(m, "should match all fields") | 
|  | Ω(missingFields).ShouldNot(m, "should fail with missing fields") | 
|  | Ω(extraFields).Should(m, "should ignore extra fields") | 
|  | Ω(emptyFields).ShouldNot(m, "should fail with empty fields") | 
|  | }) | 
|  |  | 
|  | It("should ignore missing and extra fields", func() { | 
|  | m := MatchFields(IgnoreMissing|IgnoreExtras, Fields{ | 
|  | "B": Equal("b"), | 
|  | "A": Equal("a"), | 
|  | }) | 
|  | Ω(allFields).Should(m, "should match all fields") | 
|  | Ω(missingFields).Should(m, "should ignore missing fields") | 
|  | Ω(extraFields).Should(m, "should ignore extra fields") | 
|  | Ω(emptyFields).ShouldNot(m, "should fail with empty fields") | 
|  |  | 
|  | m = MatchFields(IgnoreMissing|IgnoreExtras, Fields{ | 
|  | "A": Equal("a"), | 
|  | "B": Equal("fail"), | 
|  | }) | 
|  | Ω(allFields).ShouldNot(m, "should run nested matchers") | 
|  | }) | 
|  | }) |