|
1 | 1 | import unittest
|
2 | 2 |
|
3 |
| -from jsonpath_ng import jsonpath # For setting the global auto_id_field flag |
| 3 | +import pytest |
4 | 4 |
|
| 5 | +from jsonpath_ng import jsonpath |
5 | 6 | from jsonpath_ng.parser import parse
|
6 | 7 | from jsonpath_ng.jsonpath import *
|
7 | 8 | from jsonpath_ng.lexer import JsonPathLexerError
|
8 | 9 |
|
9 |
| -class TestDatumInContext(unittest.TestCase): |
10 |
| - """ |
11 |
| - Tests of properties of the DatumInContext and AutoIdForDatum objects |
12 |
| - """ |
13 |
| - |
14 |
| - @classmethod |
15 |
| - def setup_class(cls): |
16 |
| - logging.basicConfig() |
17 |
| - |
18 |
| - def test_DatumInContext_init(self): |
19 |
| - |
20 |
| - test_datum1 = DatumInContext(3) |
21 |
| - self.assertEqual(test_datum1.path, This()) |
22 |
| - self.assertEqual(test_datum1.full_path, This()) |
23 |
| - |
24 |
| - test_datum2 = DatumInContext(3, path=Root()) |
25 |
| - self.assertEqual(test_datum2.path, Root()) |
26 |
| - self.assertEqual(test_datum2.full_path, Root()) |
27 |
| - |
28 |
| - test_datum3 = DatumInContext(3, path=Fields('foo'), context='does not matter') |
29 |
| - self.assertEqual(test_datum3.path, Fields('foo')) |
30 |
| - self.assertEqual(test_datum3.full_path, Fields('foo')) |
31 |
| - |
32 |
| - test_datum3 = DatumInContext(3, path=Fields('foo'), context=DatumInContext('does not matter', path=Fields('baz'), context='does not matter')) |
33 |
| - self.assertEqual(test_datum3.path, Fields('foo')) |
34 |
| - self.assertEqual(test_datum3.full_path, Fields('baz').child(Fields('foo'))) |
35 |
| - |
36 |
| - def test_DatumInContext_in_context(self): |
37 |
| - |
38 |
| - self.assertEqual(DatumInContext(3).in_context(path=Fields('foo'), context=DatumInContext('whatever')), |
39 |
| - DatumInContext(3, path=Fields('foo'), context=DatumInContext('whatever'))) |
40 |
| - |
41 |
| - self.assertEqual(DatumInContext(3).in_context(path=Fields('foo'), context='whatever').in_context(path=Fields('baz'), context='whatever'), |
42 |
| - DatumInContext(3).in_context(path=Fields('foo'), context=DatumInContext('whatever').in_context(path=Fields('baz'), context='whatever'))) |
43 |
| - |
44 |
| - # def test_AutoIdForDatum_pseudopath(self): |
45 |
| - # assert AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), id_field='id').pseudopath == Fields('foo') |
46 |
| - # assert AutoIdForDatum(DatumInContext(value={'id': 'bizzle'}, path=Fields('foo')), id_field='id').pseudopath == Fields('bizzle') |
47 |
| - |
48 |
| - # assert AutoIdForDatum(DatumInContext(value={'id': 'bizzle'}, path=Fields('foo')), |
49 |
| - # id_field='id', |
50 |
| - # context=DatumInContext(value=3, path=This())).pseudopath == Fields('bizzle') |
51 |
| - |
52 |
| - # assert (AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), |
53 |
| - # id_field='id').in_context(DatumInContext(value={'id': 'bizzle'}, path=This())) |
54 |
| - # == |
55 |
| - # AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), |
56 |
| - # id_field='id', |
57 |
| - # context=DatumInContext(value={'id': 'bizzle'}, path=This()))) |
58 |
| - |
59 |
| - # assert (AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), |
60 |
| - # id_field='id', |
61 |
| - # context=DatumInContext(value={"id": 'bizzle'}, |
62 |
| - # path=Fields('maggle'))).in_context(DatumInContext(value='whatever', path=Fields('miggle'))) |
63 |
| - # == |
64 |
| - # AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), |
65 |
| - # id_field='id', |
66 |
| - # context=DatumInContext(value={'id': 'bizzle'}, path=Fields('miggle').child(Fields('maggle'))))) |
67 | 10 |
|
68 |
| - # assert AutoIdForDatum(DatumInContext(value=3, path=Fields('foo')), |
69 |
| - # id_field='id', |
70 |
| - # context=DatumInContext(value={'id': 'bizzle'}, path=This())).pseudopath == Fields('bizzle').child(Fields('foo')) |
| 11 | +@pytest.mark.parametrize( |
| 12 | + "path_arg, context_arg, expected_path, expected_full_path", |
| 13 | + ( |
| 14 | + (None, None, This(), This()), |
| 15 | + (Root(), None, Root(), Root()), |
| 16 | + (Fields('foo'), 'unimportant', Fields('foo'), Fields('foo')), |
| 17 | + ( |
| 18 | + Fields('foo'), |
| 19 | + DatumInContext('unimportant', path=Fields('baz'), context='unimportant'), |
| 20 | + Fields('foo'), |
| 21 | + Fields('baz').child(Fields('foo')), |
| 22 | + ), |
| 23 | + ) |
| 24 | +) |
| 25 | +def test_datumincontext_init(path_arg, context_arg, expected_path, expected_full_path): |
| 26 | + datum = DatumInContext(3, path=path_arg, context=context_arg) |
| 27 | + assert datum.path == expected_path |
| 28 | + assert datum.full_path == expected_full_path |
| 29 | + |
| 30 | + |
| 31 | +def test_datumincontext_in_context(): |
| 32 | + d1 = DatumInContext(3, path=Fields('foo'), context=DatumInContext('bar')) |
| 33 | + d2 = DatumInContext(3).in_context(path=Fields('foo'), context=DatumInContext('bar')) |
| 34 | + assert d1 == d2 |
| 35 | + |
| 36 | + |
| 37 | +def test_datumincontext_in_context_nested(): |
| 38 | + sequential_calls = DatumInContext(3).in_context(path=Fields('foo'), context='whatever').in_context(path=Fields('baz'), context='whatever') |
| 39 | + nested_calls = DatumInContext(3).in_context( |
| 40 | + path=Fields('foo'), |
| 41 | + context=DatumInContext('whatever').in_context( |
| 42 | + path=Fields('baz'), context='whatever') |
| 43 | + ) |
| 44 | + assert sequential_calls == nested_calls |
71 | 45 |
|
72 | 46 |
|
73 | 47 | class TestJsonPath(unittest.TestCase):
|
|
0 commit comments