@@ -463,7 +463,88 @@ def test_exclude_slice(self):
463463
464464 def check_include_cases (self , test_cases ):
465465 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 ))
467467 actual = parse (string ).include (original )
468+ print ('actual: ' , actual , 'expected: ' , expected )
468469 assert actual == expected
469470
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