@@ -48,11 +48,13 @@ func neighbours(value, matcher interface{}) (bool, error) {
4848
4949func equalMatchersToElements (matchers []interface {}) (elements []interface {}) {
5050 for _ , matcher := range matchers {
51- equalMatcher , ok := matcher .(* EqualMatcher )
52- if ok {
53- matcher = equalMatcher .Expected
51+ if equalMatcher , ok := matcher .(* EqualMatcher ); ok {
52+ elements = append (elements , equalMatcher .Expected )
53+ } else if _ , ok := matcher .(* BeNilMatcher ); ok {
54+ elements = append (elements , nil )
55+ } else {
56+ elements = append (elements , matcher )
5457 }
55- elements = append (elements , matcher )
5658 }
5759 return
5860}
@@ -72,11 +74,13 @@ func flatten(elems []interface{}) []interface{} {
7274
7375func matchers (expectedElems []interface {}) (matchers []interface {}) {
7476 for _ , e := range flatten (expectedElems ) {
75- matcher , isMatcher := e .(omegaMatcher )
76- if ! isMatcher {
77- matcher = & EqualMatcher {Expected : e }
77+ if e == nil {
78+ matchers = append (matchers , & BeNilMatcher {})
79+ } else if matcher , isMatcher := e .(omegaMatcher ); isMatcher {
80+ matchers = append (matchers , matcher )
81+ } else {
82+ matchers = append (matchers , & EqualMatcher {Expected : e })
7883 }
79- matchers = append (matchers , matcher )
8084 }
8185 return
8286}
@@ -89,9 +93,14 @@ func presentable(elems []interface{}) interface{} {
8993 }
9094
9195 sv := reflect .ValueOf (elems )
92- tt := sv .Index (0 ).Elem ().Type ()
96+ firstEl := sv .Index (0 )
97+ if firstEl .IsNil () {
98+ return elems
99+ }
100+ tt := firstEl .Elem ().Type ()
93101 for i := 1 ; i < sv .Len (); i ++ {
94- if sv .Index (i ).Elem ().Type () != tt {
102+ el := sv .Index (i )
103+ if el .IsNil () || (sv .Index (i ).Elem ().Type () != tt ) {
95104 return elems
96105 }
97106 }
0 commit comments