| package gstruct_test |
| |
| import ( |
| . "github.com/onsi/ginkgo" |
| . "github.com/onsi/gomega" |
| . "github.com/onsi/gomega/gstruct" |
| ) |
| |
| var _ = Describe("Slice", func() { |
| allElements := []string{"a", "b"} |
| missingElements := []string{"a"} |
| extraElements := []string{"a", "b", "c"} |
| duplicateElements := []string{"a", "a", "b"} |
| empty := []string{} |
| var nils []string |
| |
| It("should strictly match all elements", func() { |
| m := MatchAllElements(id, Elements{ |
| "b": Equal("b"), |
| "a": Equal("a"), |
| }) |
| Ω(allElements).Should(m, "should match all elements") |
| Ω(missingElements).ShouldNot(m, "should fail with missing elements") |
| Ω(extraElements).ShouldNot(m, "should fail with extra elements") |
| Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") |
| Ω(nils).ShouldNot(m, "should fail with an uninitialized slice") |
| |
| m = MatchAllElements(id, Elements{ |
| "a": Equal("a"), |
| "b": Equal("fail"), |
| }) |
| Ω(allElements).ShouldNot(m, "should run nested matchers") |
| |
| m = MatchAllElements(id, Elements{}) |
| Ω(empty).Should(m, "should handle empty slices") |
| Ω(allElements).ShouldNot(m, "should handle only empty slices") |
| Ω(nils).Should(m, "should handle nil slices") |
| }) |
| |
| It("should ignore extra elements", func() { |
| m := MatchElements(id, IgnoreExtras, Elements{ |
| "b": Equal("b"), |
| "a": Equal("a"), |
| }) |
| Ω(allElements).Should(m, "should match all elements") |
| Ω(missingElements).ShouldNot(m, "should fail with missing elements") |
| Ω(extraElements).Should(m, "should ignore extra elements") |
| Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") |
| Ω(nils).ShouldNot(m, "should fail with an uninitialized slice") |
| }) |
| |
| It("should ignore missing elements", func() { |
| m := MatchElements(id, IgnoreMissing, Elements{ |
| "a": Equal("a"), |
| "b": Equal("b"), |
| }) |
| Ω(allElements).Should(m, "should match all elements") |
| Ω(missingElements).Should(m, "should ignore missing elements") |
| Ω(extraElements).ShouldNot(m, "should fail with extra elements") |
| Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") |
| Ω(nils).Should(m, "should ignore an uninitialized slice") |
| }) |
| |
| It("should ignore missing and extra elements", func() { |
| m := MatchElements(id, IgnoreMissing|IgnoreExtras, Elements{ |
| "a": Equal("a"), |
| "b": Equal("b"), |
| }) |
| Ω(allElements).Should(m, "should match all elements") |
| Ω(missingElements).Should(m, "should ignore missing elements") |
| Ω(extraElements).Should(m, "should ignore extra elements") |
| Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") |
| Ω(nils).Should(m, "should ignore an uninitialized slice") |
| |
| m = MatchElements(id, IgnoreExtras|IgnoreMissing, Elements{ |
| "a": Equal("a"), |
| "b": Equal("fail"), |
| }) |
| Ω(allElements).ShouldNot(m, "should run nested matchers") |
| }) |
| }) |
| |
| func id(element interface{}) string { |
| return element.(string) |
| } |