| 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) | 
 | } |