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