def test_object_links_1(self): O2 = private.create_object_factory( id='property', lb='link-property', c='property' ) O1 = private.create_object_factory( id='property', o2s='link' ) o2_1 = O2(1, 'linkprop o2 1', 3) o2_2 = O2(4, 'linkprop o2 2', 6) o1 = O1(2, edgedb.Set((o2_1, o2_2))) linkset = o1['o2s'] self.assertEqual(len(linkset), 2) self.assertEqual(linkset, o1['o2s']) self.assertEqual(hash(linkset), hash(o1['o2s'])) self.assertEqual( repr(linkset), "LinkSet(name='o2s', source_id=2, target_ids={1, 4})") link1 = linkset[0] self.assertIs(link1.source, o1) self.assertIs(link1.target, o2_1) self.assertEqual( repr(link1), "Link(name='o2s', source_id=2, target_id=1)") self.assertEqual(set(dir(link1)), {'target', 'source', 'lb'}) link2 = linkset[1] self.assertIs(link2.source, o1) self.assertIs(link2.target, o2_2) self.assertNotEqual(link1, link2) self.assertEqual(list(linkset), [link1, link2]) self.assertEqual([l for l in linkset], [link1, link2]) self.assertNotEqual(link1, link2) self.assertEqual(link1.lb, 'linkprop o2 1') self.assertEqual(link2.lb, 'linkprop o2 2') with self.assertRaises(AttributeError): link2.aaaa
def test_recorddesc_3(self): f = private.create_object_factory( id={'property', 'implicit'}, lb='link-property', c='property', d='link', ) o = f(1, 2, 3, 4) desc = private.get_object_descriptor(o) self.assertEqual(set(dir(desc)), set(('id', 'lb', 'c', 'd'))) self.assertTrue(desc.is_linkprop('lb')) self.assertFalse(desc.is_linkprop('id')) self.assertFalse(desc.is_linkprop('c')) self.assertFalse(desc.is_linkprop('d')) self.assertFalse(desc.is_link('lb')) self.assertFalse(desc.is_link('id')) self.assertFalse(desc.is_link('c')) self.assertTrue(desc.is_link('d')) self.assertFalse(desc.is_implicit('lb')) self.assertTrue(desc.is_implicit('id')) self.assertFalse(desc.is_implicit('c')) self.assertFalse(desc.is_implicit('d')) self.assertEqual(desc.get_pos('lb'), 1) self.assertEqual(desc.get_pos('id'), 0) self.assertEqual(desc.get_pos('c'), 2) self.assertEqual(desc.get_pos('d'), 3)
def test_object_1(self): f = private.create_object_factory(id='property', lb='link-property', c='property') o = f(1, 2, 3) self.assertEqual(repr(o), 'Object{id := 1, @lb := 2, c := 3}') self.assertEqual(o.id, 1) self.assertEqual(o.c, 3) with self.assertRaises(AttributeError): o.lb with self.assertRaises(AttributeError): o.z with self.assertRaises(TypeError): len(o) with self.assertRaises(KeyError): o[0] with self.assertRaises(TypeError): o['id'] self.assertEqual(set(dir(o)), {'id', 'c'})
def test_object_5(self): f = private.create_object_factory( a='property', lb='link-property', c='property' ) with self.assertRaisesRegex(ValueError, "without 'id' field"): f(1, 2, 3)
def test_object_3(self): f = private.create_object_factory(id='property', c='link') o = f(1, []) o.c.append(o) self.assertEqual(repr(o), 'Object{id := 1, c := [Object{...}]}') with self.assertRaisesRegex(TypeError, 'unhashable'): hash(o)
def test_object_links_4(self): User = private.create_object_factory( id='property', friend='link', ) u = User(1, None) with self.assertRaisesRegex(KeyError, "link 'error_key' does not exist"): u['error_key']
def test_object_6(self): User = private.create_object_factory( id='property', name='property', ) u = User(1, 'user1') with self.assertRaisesRegex( TypeError, "property 'name' should be " "accessed via dot notation"): u['name']
def test_object_4(self): f = private.create_object_factory(id={'property', 'implicit'}, lb='link-property', c='property') o1 = f(1, 'aa', 'ba') o2 = f(1, 'ab', 'bb') o3 = f(3, 'ac', 'bc') self.assertEqual(o1, o2) self.assertNotEqual(o1, o3) self.assertLess(o1, o3) self.assertGreater(o3, o2)
def test_set_6(self): f = private.create_object_factory(id={'property', 'implicit'}, lb='link-property', c='property') o1 = f(1, 'aa', edgedb.Set([1, 2, 3])) o2 = f(1, 'ab', edgedb.Set([1, 2, 4])) o3 = f(3, 'ac', edgedb.Set([5, 5, 5, 5])) self.assertEqual(edgedb.Set([o1, o2, o3]), edgedb.Set([o2, o3, o1])) self.assertEqual(edgedb.Set([o1, o3]), edgedb.Set([o2, o3])) self.assertNotEqual(edgedb.Set([o1, o1]), edgedb.Set([o2, o3]))
def test_object_2(self): f = private.create_object_factory(id={'property', 'implicit'}, lb='link-property', c='property') o = f(1, 2, 3) self.assertEqual(repr(o), 'Object{@lb := 2, c := 3}') self.assertEqual(hash(o), hash(f(1, 2, 3))) self.assertNotEqual(hash(o), hash(f(1, 2, 'aaaa'))) self.assertNotEqual(hash(o), hash((1, 2, 3))) self.assertEqual(set(dir(o)), {'id', 'c'})
def test_object_links_2(self): User = private.create_object_factory( id='property', friends='link', enemies='link', ) u1 = User(1, edgedb.Set([]), edgedb.Set([])) u2 = User(2, edgedb.Set([]), edgedb.Set([])) u3 = User(3, edgedb.Set([]), edgedb.Set([])) u4 = User(4, edgedb.Set([u1, u2]), edgedb.Set([u1, u2])) u5 = User(5, edgedb.Set([u1, u3]), edgedb.Set([u1, u2])) self.assertNotEqual(u4['friends'], u4['enemies']) self.assertNotEqual(u4['enemies'], u5['enemies']) self.assertEqual(set(dir(u1)), {'id', 'friends', 'enemies'})
def test_recorddesc_4(self): f = private.create_object_factory( id={'property', 'implicit'}, lb='link-property', c='property', d='link', ) o = f(1, 2, 3, 4) intro = introspect.introspect_object(o) self.assertEqual(intro.pointers, ( ('id', introspect.PointerKind.PROPERTY, True), ('c', introspect.PointerKind.PROPERTY, False), ('d', introspect.PointerKind.LINK, False), )) # clear cache so that tests in refcount mode don't freak out. introspect._introspect_object_desc.cache_clear()
def test_object_links_3(self): User = private.create_object_factory( id='property', friend='link', ) u1 = User(1, None) u2 = User(2, u1) u3 = User(3, edgedb.Set([])) self.assertEqual(set(dir(u2['friend'])), {'source', 'target'}) self.assertIs(u2['friend'].target, u1) self.assertIsNone(u1['friend']) self.assertEqual(len(u3['friend']), 0) self.assertEqual(repr(u3['friend']), "LinkSet(name='friend', source_id=3, target_ids={})") self.assertEqual(repr(u2['friend']), "Link(name='friend', source_id=2, target_id=1)")