コード例 #1
0
 def test_invalid(self):
     with self.assertRaises(ValueError):
         Traverser(0)
     with self.assertRaises(ValueError):
         Traverser(0.0)
     with self.assertRaises(ValueError):
         Traverser("abc")
コード例 #2
0
 def test_blacklist(self):
     id_filter = Filter(blacklist='id')
     left = {'id': 1, 'username': '******'}
     right = {'username': '******'}
     self.assertTrue(id_filter.are_equal(left, right))
     self.assertTrue(id_filter.are_equal(left, Traverser(right)))
     self.assertTrue(id_filter.are_equal(Traverser(left), right))
     self.assertTrue(id_filter.are_equal(Traverser(left), Traverser(right)))
コード例 #3
0
 def test_contains_with_filter(self):
     id_filter = Filter(blacklist='id')
     records = Traverser({'id': 1, 'username': '******'}, filter=id_filter)
     already_exists_record = Traverser({'username': '******'})
     self.assertTrue(already_exists_record in records)
     self.assertTrue({'username': '******'} in records)
     new_record = Traverser({'username': '******'})
     self.assertFalse(new_record in records)
     self.assertFalse({'username': '******'} in records)
コード例 #4
0
 def test_whitelist(self):
     username_filter = Filter(whitelist='username')
     left = {'id': 1, 'username': '******'}
     right = {'username': '******'}
     self.assertTrue(username_filter.are_equal(left, right))
     self.assertTrue(username_filter.are_equal(left, Traverser(right)))
     self.assertTrue(username_filter.are_equal(Traverser(left), right))
     self.assertTrue(
         username_filter.are_equal(Traverser(left), Traverser(right)))
コード例 #5
0
 def test_extend_singleton(self):
     obj = Traverser({'username': '******'})
     obj.extend([{'username': '******'}])
     self.assertEqual(obj(), [{'username': '******'}, {'username': '******'}])
     obj = Traverser({'username': '******'})
     obj.extend(Traverser([{'username': '******'}]))
     self.assertEqual(obj(), [{'username': '******'}, {'username': '******'}])
コード例 #6
0
 def test_append_to_singleton(self):
     obj = Traverser({'username': '******'})
     obj.append({'username': '******'})
     self.assertEqual(obj(), [{'username': '******'}, {'username': '******'}])
     obj = Traverser({'username': '******'})
     obj.append(Traverser({'username': '******'}))
     self.assertEqual(obj(), [{'username': '******'}, {'username': '******'}])
コード例 #7
0
 def test_get_raises_better_list_access_exception(self):
     obj = Traverser([])
     with self.assertRaises(ValueError):
         obj.get('bad')
     value = {'root': []}
     obj = Traverser(value)
     with self.assertRaises(ValueError):
         obj.get('root.bad')
コード例 #8
0
 def test_dir_not_including_bad_keys(self):
     obj = Traverser({'id': 1, '@bad': '', 'even.worse': 3})
     dir_list = sorted([k for k in dir(obj) if not k.startswith('_')])
     self.assertEqual(dir_list, [
         'append', 'ensure_list', 'extend', 'get', 'id', 'prune', 'set',
         'to_json'
     ])
コード例 #9
0
 def test_dir_for_dict(self):
     obj = Traverser({'id': 1})
     dir_list = sorted([k for k in dir(obj) if not k.startswith('_')])
     self.assertEqual(dir_list, [
         'append', 'ensure_list', 'extend', 'get', 'id', 'prune', 'set',
         'to_json'
     ])
コード例 #10
0
 def test_singleton(self):
     users = {'username': '******', 'display_name': 'John Doe'}
     obj = Traverser(users)
     self.assertIsNone(obj.invalid_key)
     self.assertEqual(obj.username, 'jdoe')
     self.assertEqual(obj[0].username, 'jdoe')
     self.assertEqual(obj['display_name'], 'John Doe')
     self.assertEqual(obj[0]['display_name'], 'John Doe')
コード例 #11
0
 def test_setitem_needing_recursive_unwrap(self):
     obj = Traverser({})
     obj.list_has_traverser = [Traverser([123]), 456]
     self.assertEqual(obj.list_has_traverser(), [[123], 456])
     obj.dict_has_traverser = {
         'has_traverser': Traverser([123]),
         'no_traverser': 456
     }
     self.assertEqual(sorted(obj.dict_has_traverser().items()),
                      [('has_traverser', [123]), ('no_traverser', 456)])
コード例 #12
0
 def test_traverser_prune_called_with_filter(self):
     id_filter = Filter(blacklist='id')
     obj = Traverser({'id': 1, 'username': '******'})
     obj.prune()
     self.assertTrue(obj() == {'id': 1, 'username': '******'})
     obj.prune(filter=id_filter)
     self.assertTrue(obj() == {'username': '******'})
コード例 #13
0
 def test_setitem(self):
     users = {'username': '******', 'display_name': 'John Doe'}
     obj = Traverser(users)
     obj.set_to_none = None
     self.assertIsNone(obj.set_to_none)
     obj.id = 123
     self.assertEqual(obj.id, 123)
     obj.roles = ['admin', 'any_user']
     self.assertEqual(obj.roles(), ['admin', 'any_user'])
コード例 #14
0
 def test_to_json(self):
     obj = Traverser({})
     self.assertEqual(obj.to_json(), '{}')
     obj = Traverser([])
     self.assertEqual(obj.to_json(), '[]')
コード例 #15
0
 def test_extend_call_chain(self):
     obj = Traverser([])
     self.assertTrue(obj.extend([]) is obj)
コード例 #16
0
 def test_response_object_with_json_method(self):
     obj = Traverser(MockResponse('[]'))
     self.assertEqual(obj, [])
コード例 #17
0
 def test_no_deepcopy_causes_intended_side_effects(self):
     value = {'id': 0}
     obj = Traverser(value, deepcopy=False)
     obj.id = 1
     self.assertEqual(obj(), {'id': 1})
     self.assertEqual(value, {'id': 1})
コード例 #18
0
 def test_set_updates_existing_node(self):
     value = {'root': {'users': [{'username': '******'}]}}
     obj = Traverser(value)
     obj.set('root.users', 'any')
     self.assertEqual(obj.get('root.users'), 'any')
コード例 #19
0
 def test_set_creates_list(self):
     value = {'root': {'stuff': {'users': [{'username': '******'}]}}}
     obj = Traverser(value)
     obj.set('root.stuff.parts.0.auto', 'any')
     self.assertEqual(obj.get('root.stuff.parts.0.auto'), 'any')
コード例 #20
0
 def test_get_supports_dot_escaping(self):
     value = {'root': {'@xsi.type': 'field'}}
     obj = Traverser(value)
     self.assertEqual(obj.get('*****@*****.**'), 'field')
コード例 #21
0
 def test_prune_call_chain(self):
     obj = Traverser({})
     self.assertTrue(obj.prune() is obj)
コード例 #22
0
 def test_get_forgives_missing_node(self):
     value = {'root': {'users': [{'username': '******'}]}}
     obj = Traverser(value)
     self.assertIsNone(obj.get('root.places'))
コード例 #23
0
 def test_get_traverses_list(self):
     value = {'root': {'users': [{'username': '******'}]}}
     obj = Traverser(value)
     self.assertEqual(obj.get('root.users.0.username'), 'jdoe')
コード例 #24
0
 def test_append_call_chain(self):
     obj = Traverser([])
     self.assertTrue(obj.append({}) is obj)
コード例 #25
0
 def test_getitem_does_not_use_get(self):
     obj = Traverser({'@xsi.type': 'value'})
     self.assertEqual(obj['@xsi.type'], 'value')
コード例 #26
0
 def test_ensure_list(self):
     obj = Traverser({'item': 'value'})
     self.assertIsNone(obj.ensure_list('invalid_key'))
     self.assertEqual(obj.ensure_list('item'), ['value'])
     obj = Traverser({'item': ['value']})
     self.assertEqual(obj.ensure_list('item')(), ['value'])
コード例 #27
0
 def test_traversal_to_traverser_node(self):
     obj = Traverser({'item': {'key': 'value'}})
     self.assertEqual(obj.item, {'key': 'value'})
     self.assertEqual(obj.item.__class__.__name__, 'Traverser')
     self.assertEqual(obj['item'], {'key': 'value'})
     self.assertEqual(obj['item'].__class__.__name__, 'Traverser')
コード例 #28
0
 def test_get_finds_node(self):
     value = {'root': {'users': [{'username': '******'}]}}
     obj = Traverser(value)
     self.assertEqual(obj.get('root.users')(), [{'username': '******'}])
コード例 #29
0
 def test_eq(self):
     obj1 = Traverser({'item': 'value'})
     obj2 = Traverser({'item': 'value'})
     self.assertEqual(obj1, obj2)
     obj2.item = 'foo'
     self.assertNotEqual(obj1, obj2)
コード例 #30
0
 def test_json(self):
     obj = Traverser("[]")
     self.assertEqual(obj(), [])
     obj = Traverser("{}")
     self.assertEqual(obj(), {})