@@ -463,7 +463,88 @@ def test_exclude_slice(self):
463
463
464
464
def check_include_cases (self , test_cases ):
465
465
for original , string , expected in test_cases :
466
- logging .debug ('parse("%s").exclude (%s) =?= %s' % (string , original , expected ))
466
+ logging .debug ('parse("%s").include (%s) =?= %s' % (string , original , expected ))
467
467
actual = parse (string ).include (original )
468
+ print ('actual: ' , actual , 'expected: ' , expected )
468
469
assert actual == expected
469
470
471
+ def test_include_fields (self ):
472
+ self .check_include_cases ([
473
+ ({'foo' : 'baz' }, 'foo' , {'foo' : 'baz' }),
474
+ ({'foo' : 1 , 'baz' : 2 }, 'foo' , {'foo' : 1 }),
475
+ ({'foo' : 1 , 'baz' : 2 }, 'foo,baz' , {'foo' : 1 , 'baz' : 2 }),
476
+ ({'@foo' : 1 }, '@foo' , {'@foo' : 1 }),
477
+ ({'@foo' : 1 , 'baz' : 2 }, '@foo' , {'@foo' : 1 }),
478
+ ({'foo' : 1 , 'baz' : 2 }, '*' , {'foo' : 1 , 'baz' : 2 }),
479
+ ])
480
+
481
+ def test_include_index (self ):
482
+ self .check_include_cases ([
483
+ ([42 ], '[0]' , [42 ]),
484
+ ([42 ], '[5]' , []),
485
+ ([34 , 65 , 29 , 59 ], '[2]' , [29 ]),
486
+ (None , '[0]' , None ),
487
+ ([], '[0]' , []),
488
+ (['foo' , 'bar' , 'baz' ], '[0]' , ['foo' ]),
489
+ ])
490
+
491
+ def test_include_slice (self ):
492
+ self .check_include_cases ([
493
+ (['foo' , 'bar' , 'baz' ], '[0:2]' , ['foo' , 'bar' ]),
494
+ (['foo' , 'bar' , 'baz' ], '[0:1]' , ['foo' ]),
495
+ (['foo' , 'bar' , 'baz' ], '[0:]' , ['foo' , 'bar' , 'baz' ]),
496
+ (['foo' , 'bar' , 'baz' ], '[:2]' , ['foo' , 'bar' ]),
497
+ (['foo' , 'bar' , 'baz' ], '[:3]' , ['foo' , 'bar' , 'baz' ]),
498
+ (['foo' , 'bar' , 'baz' ], '[0:0]' , []),
499
+ ])
500
+
501
+ def test_include_root (self ):
502
+ self .check_include_cases ([
503
+ ('foo' , '$' , 'foo' ),
504
+ ({}, '$' , {}),
505
+ ({'foo' : 1 }, '$' , {'foo' : 1 })
506
+ ])
507
+
508
+ def test_include_this (self ):
509
+ self .check_include_cases ([
510
+ ('foo' , '`this`' , 'foo' ),
511
+ ({}, '`this`' , {}),
512
+ ({'foo' : 1 }, '`this`' , {'foo' : 1 }),
513
+ # TODO: fixme
514
+ #({'foo': 1}, 'foo.`this`', {}),
515
+ ({'foo' : {'bar' : 1 }}, 'foo.`this`.bar' , {'foo' : {'bar' : 1 }}),
516
+ ({'foo' : {'bar' : 1 , 'baz' : 2 }}, 'foo.`this`.bar' , {'foo' : {'bar' : 1 }})
517
+ ])
518
+
519
+ def test_include_child (self ):
520
+ self .check_include_cases ([
521
+ ({'foo' : 'bar' }, '$.foo' , {'foo' : 'bar' }),
522
+ ({'foo' : 'bar' }, 'foo' , {'foo' : 'bar' }),
523
+ ({'foo' : {'bar' : 1 }}, 'foo.bar' , {'foo' : {'bar' : 1 }}),
524
+ ({'foo' : {'bar' : 1 }}, 'foo.$.foo.bar' , {'foo' : {'bar' : 1 }}),
525
+ ({'foo' : {'bar' : 1 , 'baz' : 2 }}, 'foo.$.foo.bar' , {'foo' : {'bar' : 1 }}),
526
+ ({'foo' : {'bar' : 1 , 'baz' : 2 }}, '*' , {'foo' : {'bar' : 1 , 'baz' : 2 }}),
527
+ ({'foo' : {'bar' : 1 , 'baz' : 2 }}, 'non' , {}),
528
+ ])
529
+
530
+ """
531
+ def test_include_where(self):
532
+ self.check_include_cases([
533
+ #({'foo': {'bar': {'baz': 1}}, 'bar': {'baz': 2}},
534
+ # '*.bar where none', {}),
535
+
536
+ ({'foo': {'bar': {'baz': 1}}, 'bar': {'baz': 2}},
537
+ '*.bar where baz', {'foo': {'bar': {'baz': 1}}})
538
+ ])
539
+ """
540
+
541
+ """
542
+ def test_include_descendants(self):
543
+ self.check_include_cases([
544
+ ({'somefield': 1}, '$..somefield', {'somefield': 1}),
545
+ ({'outer': {'nestedfield': 1}}, '$..nestedfield', {'outer': {'nestedfield': 1}}),
546
+ ({'outs': {'bar': 1, 'ins': {'bar': 9}}, 'outs2': {'bar': 2}},
547
+ '$..bar',
548
+ {'outs': {'bar': 1, 'ins': {'bar': 9}}, 'outs2': {'bar': 2}})
549
+ ])
550
+ """
0 commit comments