@@ -129,35 +129,43 @@ func TestMatch(t *testing.T) {
129
129
want : false ,
130
130
})
131
131
tests .Add ("exists" , test {
132
- sel : & conditionNode {
133
- op : OpExists ,
134
- cond : true ,
132
+ sel : & fieldNode {
133
+ field : "foo" ,
134
+ cond : & conditionNode {op : OpExists , cond : true },
135
+ },
136
+ doc : map [string ]interface {}{
137
+ "foo" : "bar" ,
135
138
},
136
- doc : "foo" ,
137
139
want : true ,
138
140
})
139
141
tests .Add ("!exists" , test {
140
- sel : & conditionNode {
141
- op : OpExists ,
142
- cond : false ,
142
+ sel : & fieldNode {
143
+ field : "baz" ,
144
+ cond : & conditionNode {op : OpExists , cond : true },
145
+ },
146
+ doc : map [string ]interface {}{
147
+ "foo" : "bar" ,
143
148
},
144
- doc : "foo" ,
145
149
want : false ,
146
150
})
147
151
tests .Add ("not exists" , test {
148
- sel : & conditionNode {
149
- op : OpExists ,
150
- cond : false ,
152
+ sel : & fieldNode {
153
+ field : "baz" ,
154
+ cond : & conditionNode {op : OpExists , cond : false },
155
+ },
156
+ doc : map [string ]interface {}{
157
+ "foo" : "bar" ,
151
158
},
152
- doc : nil ,
153
159
want : true ,
154
160
})
155
161
tests .Add ("!not exists" , test {
156
- sel : & conditionNode {
157
- op : OpExists ,
158
- cond : true ,
162
+ sel : & fieldNode {
163
+ field : "baz" ,
164
+ cond : & conditionNode {op : OpExists , cond : true },
165
+ },
166
+ doc : map [string ]interface {}{
167
+ "foo" : "bar" ,
159
168
},
160
- doc : nil ,
161
169
want : false ,
162
170
})
163
171
tests .Add ("type, null" , test {
@@ -436,6 +444,53 @@ func TestMatch(t *testing.T) {
436
444
doc : "bar" ,
437
445
want : false ,
438
446
})
447
+ tests .Add ("field selector, nested" , test {
448
+ sel : & fieldNode {
449
+ field : "foo.bar.baz" ,
450
+ cond : & conditionNode {
451
+ op : OpEqual ,
452
+ cond : "hello" ,
453
+ },
454
+ },
455
+ doc : map [string ]interface {}{
456
+ "foo" : map [string ]interface {}{
457
+ "bar" : map [string ]interface {}{
458
+ "baz" : "hello" ,
459
+ },
460
+ },
461
+ },
462
+ want : true ,
463
+ })
464
+ tests .Add ("field selector, nested, non-object" , test {
465
+ sel : & fieldNode {
466
+ field : "foo.bar.baz" ,
467
+ cond : & conditionNode {
468
+ op : OpEqual ,
469
+ cond : "hello" ,
470
+ },
471
+ },
472
+ doc : map [string ]interface {}{
473
+ "foo" : "hello" ,
474
+ },
475
+ want : false ,
476
+ })
477
+ tests .Add ("!field selector, nested" , test {
478
+ sel : & fieldNode {
479
+ field : "foo.bar.baz" ,
480
+ cond : & conditionNode {
481
+ op : OpEqual ,
482
+ cond : "hello" ,
483
+ },
484
+ },
485
+ doc : map [string ]interface {}{
486
+ "foo" : map [string ]interface {}{
487
+ "bar" : map [string ]interface {}{
488
+ "buzz" : "hello" ,
489
+ },
490
+ },
491
+ },
492
+ want : false ,
493
+ })
439
494
tests .Add ("elemMatch" , test {
440
495
sel : & fieldNode {
441
496
field : "foo" ,
0 commit comments