github.com/onsi/gomega@v1.32.0/gstruct/fields_test.go (about) 1 package gstruct_test 2 3 import ( 4 . "github.com/onsi/ginkgo/v2" 5 . "github.com/onsi/gomega" 6 . "github.com/onsi/gomega/gstruct" 7 ) 8 9 var _ = Describe("Struct", func() { 10 allFields := struct{ A, B string }{"a", "b"} 11 missingFields := struct{ A string }{"a"} 12 extraFields := struct{ A, B, C string }{"a", "b", "c"} 13 emptyFields := struct{ A, B string }{} 14 15 It("should strictly match all fields", func() { 16 m := MatchAllFields(Fields{ 17 "B": Equal("b"), 18 "A": Equal("a"), 19 }) 20 Expect(allFields).Should(m, "should match all fields") 21 Expect(missingFields).ShouldNot(m, "should fail with missing fields") 22 Expect(extraFields).ShouldNot(m, "should fail with extra fields") 23 Expect(emptyFields).ShouldNot(m, "should fail with empty fields") 24 25 m = MatchAllFields(Fields{ 26 "A": Equal("a"), 27 "B": Equal("fail"), 28 }) 29 Expect(allFields).ShouldNot(m, "should run nested matchers") 30 }) 31 32 It("should handle empty structs", func() { 33 m := MatchAllFields(Fields{}) 34 Expect(struct{}{}).Should(m, "should handle empty structs") 35 Expect(allFields).ShouldNot(m, "should fail with extra fields") 36 }) 37 38 It("should ignore missing fields", func() { 39 m := MatchFields(IgnoreMissing, Fields{ 40 "B": Equal("b"), 41 "A": Equal("a"), 42 }) 43 Expect(allFields).Should(m, "should match all fields") 44 Expect(missingFields).Should(m, "should ignore missing fields") 45 Expect(extraFields).ShouldNot(m, "should fail with extra fields") 46 Expect(emptyFields).ShouldNot(m, "should fail with empty fields") 47 }) 48 49 It("should ignore extra fields", func() { 50 m := MatchFields(IgnoreExtras, Fields{ 51 "B": Equal("b"), 52 "A": Equal("a"), 53 }) 54 Expect(allFields).Should(m, "should match all fields") 55 Expect(missingFields).ShouldNot(m, "should fail with missing fields") 56 Expect(extraFields).Should(m, "should ignore extra fields") 57 Expect(emptyFields).ShouldNot(m, "should fail with empty fields") 58 }) 59 60 It("should ignore missing and extra fields", func() { 61 m := MatchFields(IgnoreMissing|IgnoreExtras, Fields{ 62 "B": Equal("b"), 63 "A": Equal("a"), 64 }) 65 Expect(allFields).Should(m, "should match all fields") 66 Expect(missingFields).Should(m, "should ignore missing fields") 67 Expect(extraFields).Should(m, "should ignore extra fields") 68 Expect(emptyFields).ShouldNot(m, "should fail with empty fields") 69 70 m = MatchFields(IgnoreMissing|IgnoreExtras, Fields{ 71 "A": Equal("a"), 72 "B": Equal("fail"), 73 }) 74 Expect(allFields).ShouldNot(m, "should run nested matchers") 75 }) 76 77 It("should produce sensible error messages", func() { 78 m := MatchAllFields(Fields{ 79 "B": Equal("b"), 80 "A": Equal("a"), 81 }) 82 83 actual := struct{ A, C string }{A: "b", C: "c"} 84 85 //Because the order of the constituent errors can't be guaranteed, 86 //we do a number of checks to make sure everything's included 87 m.Match(actual) 88 Expect(m.FailureMessage(actual)).Should(HavePrefix( 89 "Expected\n <string>: \nto match fields: {\n", 90 )) 91 Expect(m.FailureMessage(actual)).Should(ContainSubstring( 92 ".A:\n Expected\n <string>: b\n to equal\n <string>: a\n", 93 )) 94 Expect(m.FailureMessage(actual)).Should(ContainSubstring( 95 "missing expected field B\n", 96 )) 97 Expect(m.FailureMessage(actual)).Should(ContainSubstring( 98 ".C:\n unexpected field C: {A:b C:c}", 99 )) 100 }) 101 })