blob: 8a639205c75a2e63f70c1eb05a07b88105bf95e5 [file] [log] [blame]
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)
}