def testSet(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") self.assertEqual(obj_list.index("testa"), 4) self.assertEqual(obj_list[4].id, "testa") obj_list[5:7] = [Object("testb"), Object("testc")] self.assertEqual(obj_list.index("testb"), 5) self.assertEqual(obj_list[5].id, "testb") self.assertEqual(obj_list.index("testc"), 6) self.assertEqual(obj_list[6].id, "testc")
def testSortandReverse(self): dl = DictList(Object("test%d" % (i)) for i in reversed(range(10))) self.assertEqual(dl[0].id, "test9") dl.sort() self.assertEqual(len(dl), 10) self.assertEqual(dl[0].id, "test0") self.assertEqual(dl.index("test0"), 0) dl.reverse() self.assertEqual(dl[0].id, "test9") self.assertEqual(dl.index("test0"), 9)
def test_sort_and_reverse(self): dl = DictList(Object("test%d" % (i)) for i in reversed(range(10))) assert dl[0].id == "test9" dl.sort() assert len(dl) == 10 assert dl[0].id == "test0" assert dl.index("test0") == 0 dl.reverse() assert dl[0].id == "test9" assert dl.index("test0") == 9
def testRemoval(self): obj_list = DictList(Object("test%d" % (i)) for i in range(2, 10)) del obj_list[3] self.assertNotIn("test5", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) del obj_list[3:5] self.assertNotIn("test6", obj_list) self.assertNotIn("test7", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) removed = obj_list.pop(1) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(removed.id, "test3") self.assertNotIn("test3", obj_list)
def testSet(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") self.assertEqual(obj_list.index("testa"), 4) self.assertEqual(obj_list[4].id, "testa") obj_list[5:7] = [Object("testb"), Object("testc")] self.assertEqual(obj_list.index("testb"), 5) self.assertEqual(obj_list[5].id, "testb") self.assertEqual(obj_list.index("testc"), 6) self.assertEqual(obj_list[6].id, "testc") # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception self.assertRaises(ValueError, obj_list.__setitem__, slice(5, 7), [Object("testd"), Object("testd")])
def test_set(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") assert obj_list.index("testa") == 4 assert obj_list[4].id == "testa" obj_list[5:7] = [Object("testb"), Object("testc")] assert obj_list.index("testb") == 5 assert obj_list[5].id == "testb" assert obj_list.index("testc") == 6 assert obj_list[6].id == "testc" # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception with pytest.raises(ValueError): obj_list.__setitem__(slice( 5, 7), [Object("testd"), Object("testd")])
def test_set(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") assert obj_list.index("testa") == 4 assert obj_list[4].id == "testa" obj_list[5:7] = [Object("testb"), Object("testc")] assert obj_list.index("testb") == 5 assert obj_list[5].id == "testb" assert obj_list.index("testc") == 6 assert obj_list[6].id == "testc" # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception with pytest.raises(ValueError): obj_list.__setitem__(slice(5, 7), [Object("testd"), Object("testd")])
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testDeepcopy(self): from copy import deepcopy copied = deepcopy(self.list) for i, v in enumerate(self.list): assert self.list[i].id == copied[i].id assert self.list[i] is not copied[i] def testQuery(self): obj2 = Object("test2") self.list.append(obj2) result = self.list.query("test1") # matches only test1 self.assertEqual(len(result), 1) self.assertEqual(result[0], self.obj) result = self.list.query("test") # matches test1 and test2 self.assertEqual(len(result), 2)
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testDeepcopy(self): from copy import deepcopy copied = deepcopy(self.list) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertIsNot(self.list[i], copied[i]) def testQuery(self): obj2 = Object("test2") self.list.append(obj2) result = self.list.query("test1") # matches only test1 self.assertEqual(len(result), 1) self.assertEqual(result[0], self.obj) result = self.list.query("test") # matches test1 and test2 self.assertEqual(len(result), 2)
def testInitCopy(self): self.list.append(Object("test2")) copied = DictList(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIs(self.list[i], copied[i]) self.assertIs(v, copied.get_by_id(v.id))
def test_removal(self): obj_list = DictList(Object("test%d" % (i)) for i in range(2, 10)) del obj_list[3] assert "test5" not in obj_list assert obj_list.index(obj_list[-1]) == len(obj_list) - 1 assert len(obj_list) == 7 del obj_list[3:5] assert "test6" not in obj_list assert "test7" not in obj_list assert obj_list.index(obj_list[-1]) == len(obj_list) - 1 assert len(obj_list) == 5 removed = obj_list.pop(1) assert obj_list.index(obj_list[-1]) == len(obj_list) - 1 assert removed.id == "test3" assert "test3" not in obj_list assert len(obj_list) == 4 removed = obj_list.pop() assert removed.id == "test9" assert removed.id not in obj_list assert len(obj_list) == 3
def test_init_copy(self, dict_list): obj, test_list = dict_list test_list.append(Object("test2")) copied = DictList(test_list) assert test_list is not copied assert isinstance(copied, test_list.__class__) assert len(test_list) == len(copied) for i, v in enumerate(test_list): assert test_list[i].id == copied[i].id assert i == copied.index(v.id) assert test_list[i] is copied[i] assert v is copied.get_by_id(v.id)
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): from os import name as __name if __name == 'java': warn('\t\n**cobra.test.unit_tests.testAdd does not yet work with %s'%__name) return obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testDeepcopy(self): from copy import deepcopy copied = deepcopy(self.list) for i, v in enumerate(self.list): assert self.list[i].id == copied[i].id assert self.list[i] is not copied[i]
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9)
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testContains(self): self.assertIn(self.obj, self.list) self.assertIn(self.obj.id, self.list) self.assertNotIn(Object("not_in"), self.list) self.assertNotIn('not_in', self.list) def testIndex(self): self.assertEqual(self.list.index("test1"), 0) self.assertEqual(self.list.index(self.obj), 0) self.assertRaises(ValueError, self.list.index, "f") self.assertRaises(ValueError, self.list.index, Object("f")) def testIndependent(self): a = DictList([Object("o1"), Object("o2")]) b = DictList() self.assertIn("o1", a) self.assertNotIn("o1", b) b.append(Object("o3")) self.assertNotIn("o3", a) self.assertIn("o3", b) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) self.assertRaises(ValueError, self.list.extend, [Object("test1")]) # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception self.assertRaises(ValueError, self.list.extend, [Object("testd"), Object("testd")]) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertIsNot(sum, self.list) self.assertIsNot(sum, obj_list) self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testInitCopy(self): self.list.append(Object("test2")) copied = DictList(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIs(self.list[i], copied[i]) self.assertIs(v, copied.get_by_id(v.id)) def testSlice(self): self.list.append(Object("test2")) self.list.append(Object("test3")) sliced = self.list[:-1] self.assertIsNot(self.list, sliced) self.assertIsInstance(sliced, self.list.__class__) self.assertEqual(len(self.list), len(sliced) + 1) for i, v in enumerate(sliced): self.assertEqual(self.list[i].id, sliced[i].id) self.assertEqual(i, sliced.index(v.id)) self.assertIs(self.list[i], sliced[i]) self.assertIs(self.list[i], sliced.get_by_id(v.id)) def testCopy(self): self.list.append(Object("test2")) copied = copy(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIs(self.list[i], copied[i]) self.assertIs(v, copied.get_by_id(v.id)) def testDeepcopy(self): self.list.append(Object("test2")) copied = deepcopy(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIsNot(self.list[i], copied[i]) self.assertIsNot(v, copied.get_by_id(v.id)) def testPickle(self): self.list.append(Object("test2")) for protocol in range(HIGHEST_PROTOCOL): pickle_str = dumps(self.list, protocol=protocol) copied = loads(pickle_str) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIsNot(self.list[i], copied[i]) self.assertIsNot(v, copied.get_by_id(v.id)) def testQuery(self): obj2 = Object("test2") self.list.append(obj2) result = self.list.query("test1") # matches only test1 self.assertEqual(len(result), 1) self.assertEqual(result[0], self.obj) result = self.list.query("test") # matches test1 and test2 self.assertEqual(len(result), 2) def testRemoval(self): obj_list = DictList(Object("test%d" % (i)) for i in range(2, 10)) del obj_list[3] self.assertNotIn("test5", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) del obj_list[3:5] self.assertNotIn("test6", obj_list) self.assertNotIn("test7", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) removed = obj_list.pop(1) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(removed.id, "test3") self.assertNotIn("test3", obj_list) def testSet(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") self.assertEqual(obj_list.index("testa"), 4) self.assertEqual(obj_list[4].id, "testa") obj_list[5:7] = [Object("testb"), Object("testc")] self.assertEqual(obj_list.index("testb"), 5) self.assertEqual(obj_list[5].id, "testb") self.assertEqual(obj_list.index("testc"), 6) self.assertEqual(obj_list[6].id, "testc") # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception self.assertRaises(ValueError, obj_list.__setitem__, slice(5, 7), [Object("testd"), Object("testd")])
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testIndependent(self): a = DictList([Object("o1"), Object("o2")]) b = DictList() self.assertIn("o1", a) self.assertNotIn("o1", b) b.append(Object("o3")) self.assertNotIn("o3", a) self.assertIn("o3", b) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertEqual(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testDeepcopy(self): from copy import deepcopy copied = deepcopy(self.list) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertIsNot(self.list[i], copied[i]) def testQuery(self): obj2 = Object("test2") self.list.append(obj2) result = self.list.query("test1") # matches only test1 self.assertEqual(len(result), 1) self.assertEqual(result[0], self.obj) result = self.list.query("test") # matches test1 and test2 self.assertEqual(len(result), 2) def testRemoval(self): obj_list = DictList(Object("test%d" % (i)) for i in range(2, 10)) del obj_list[3] self.assertNotIn("test5", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) del obj_list[3:5] self.assertNotIn("test6", obj_list) self.assertNotIn("test7", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) removed = obj_list.pop(1) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(removed.id, "test3") self.assertNotIn("test3", obj_list) def testSet(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") self.assertEqual(obj_list.index("testa"), 4) self.assertEqual(obj_list[4].id, "testa") obj_list[5:7] = [Object("testb"), Object("testc")] self.assertEqual(obj_list.index("testb"), 5) self.assertEqual(obj_list[5].id, "testb") self.assertEqual(obj_list.index("testc"), 6) self.assertEqual(obj_list[6].id, "testc")
class TestDictList(TestCase): def setUp(self): self.obj = Object("test1") self.list = DictList() self.list.append(self.obj) def testContains(self): self.assertIn(self.obj, self.list) self.assertIn(self.obj.id, self.list) self.assertNotIn(Object("not_in"), self.list) self.assertNotIn('not_in', self.list) def testIndex(self): self.assertEqual(self.list.index("test1"), 0) self.assertEqual(self.list.index(self.obj), 0) self.assertRaises(ValueError, self.list.index, "f") self.assertRaises(ValueError, self.list.index, Object("f")) # ensure trying to index with an object that is a different object # also raises an error self.assertRaises(ValueError, self.list.index, Object("test1")) def testIndependent(self): a = DictList([Object("o1"), Object("o2")]) b = DictList() self.assertIn("o1", a) self.assertNotIn("o1", b) b.append(Object("o3")) self.assertNotIn("o3", a) self.assertIn("o3", b) def testAppend(self): obj2 = Object("test2") self.list.append(obj2) self.assertRaises(ValueError, self.list.append, Object("test1")) self.assertEqual(self.list.index(obj2), 1) self.assertEqual(self.list[1], obj2) self.assertIs(self.list.get_by_id("test2"), obj2) self.assertEqual(len(self.list), 2) def testInsert(self): obj2 = Object("a") self.list.insert(0, obj2) self.assertEqual(self.list.index(obj2), 0) self.assertEqual(self.list.index("test1"), 1) self.assertIs(self.list.get_by_id("a"), obj2) self.assertEqual(len(self.list), 2) self.assertRaises(ValueError, self.list.append, obj2) def testExtend(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list.extend(obj_list) self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) self.assertRaises(ValueError, self.list.extend, [Object("test1")]) # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception self.assertRaises(ValueError, self.list.extend, [Object("testd"), Object("testd")]) def testIadd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] self.list += obj_list self.assertEqual(self.list[1].id, "test2") self.assertEqual(self.list.get_by_id("test2"), obj_list[0]) self.assertEqual(self.list[8].id, "test9") self.assertEqual(len(self.list), 9) def testAdd(self): obj_list = [Object("test%d" % (i)) for i in range(2, 10)] sum = self.list + obj_list self.assertIsNot(sum, self.list) self.assertIsNot(sum, obj_list) self.assertEqual(self.list[0].id, "test1") self.assertEqual(sum[1].id, "test2") self.assertEqual(sum.get_by_id("test2"), obj_list[0]) self.assertEqual(sum[8].id, "test9") self.assertEqual(len(self.list), 1) self.assertEqual(len(sum), 9) def testInitCopy(self): self.list.append(Object("test2")) copied = DictList(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIs(self.list[i], copied[i]) self.assertIs(v, copied.get_by_id(v.id)) def testSlice(self): self.list.append(Object("test2")) self.list.append(Object("test3")) sliced = self.list[:-1] self.assertIsNot(self.list, sliced) self.assertIsInstance(sliced, self.list.__class__) self.assertEqual(len(self.list), len(sliced) + 1) for i, v in enumerate(sliced): self.assertEqual(self.list[i].id, sliced[i].id) self.assertEqual(i, sliced.index(v.id)) self.assertIs(self.list[i], sliced[i]) self.assertIs(self.list[i], sliced.get_by_id(v.id)) def testCopy(self): self.list.append(Object("test2")) copied = copy(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIs(self.list[i], copied[i]) self.assertIs(v, copied.get_by_id(v.id)) def testDeepcopy(self): self.list.append(Object("test2")) copied = deepcopy(self.list) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIsNot(self.list[i], copied[i]) self.assertIsNot(v, copied.get_by_id(v.id)) def testPickle(self): self.list.append(Object("test2")) for protocol in range(HIGHEST_PROTOCOL): pickle_str = dumps(self.list, protocol=protocol) copied = loads(pickle_str) self.assertIsNot(self.list, copied) self.assertIsInstance(copied, self.list.__class__) self.assertEqual(len(self.list), len(copied)) for i, v in enumerate(self.list): self.assertEqual(self.list[i].id, copied[i].id) self.assertEqual(i, copied.index(v.id)) self.assertIsNot(self.list[i], copied[i]) self.assertIsNot(v, copied.get_by_id(v.id)) def testQuery(self): obj2 = Object("test2") obj2.name = "foobar1" self.list.append(obj2) result = self.list.query("test1") # matches only test1 self.assertEqual(len(result), 1) self.assertEqual(result[0], self.obj) result = self.list.query("foo", "name") # matches only test2 self.assertEqual(len(result), 1) self.assertEqual(result[0], obj2) result = self.list.query("test") # matches test1 and test2 self.assertEqual(len(result), 2) # test with a regular expression result = self.list.query(re.compile("test[0-9]")) self.assertEqual(len(result), 2) result = self.list.query(re.compile("test[29]")) self.assertEqual(len(result), 1) # test query of name result = self.list.query(re.compile("foobar."), "name") self.assertEqual(len(result), 1) def testRemoval(self): obj_list = DictList(Object("test%d" % (i)) for i in range(2, 10)) del obj_list[3] self.assertNotIn("test5", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(len(obj_list), 7) del obj_list[3:5] self.assertNotIn("test6", obj_list) self.assertNotIn("test7", obj_list) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(len(obj_list), 5) removed = obj_list.pop(1) self.assertEqual(obj_list.index(obj_list[-1]), len(obj_list) - 1) self.assertEqual(removed.id, "test3") self.assertNotIn("test3", obj_list) self.assertEqual(len(obj_list), 4) removed = obj_list.pop() self.assertEqual(removed.id, "test9") self.assertNotIn(removed.id, obj_list) self.assertEqual(len(obj_list), 3) def testSet(self): obj_list = DictList(Object("test%d" % (i)) for i in range(10)) obj_list[4] = Object("testa") self.assertEqual(obj_list.index("testa"), 4) self.assertEqual(obj_list[4].id, "testa") obj_list[5:7] = [Object("testb"), Object("testc")] self.assertEqual(obj_list.index("testb"), 5) self.assertEqual(obj_list[5].id, "testb") self.assertEqual(obj_list.index("testc"), 6) self.assertEqual(obj_list[6].id, "testc") # Even if the object is unique, if it is present twice in the new # list, it should still raise an exception self.assertRaises(ValueError, obj_list.__setitem__, slice(5, 7), [Object("testd"), Object("testd")]) def testSortandReverse(self): dl = DictList(Object("test%d" % (i)) for i in reversed(range(10))) self.assertEqual(dl[0].id, "test9") dl.sort() self.assertEqual(len(dl), 10) self.assertEqual(dl[0].id, "test0") self.assertEqual(dl.index("test0"), 0) dl.reverse() self.assertEqual(dl[0].id, "test9") self.assertEqual(dl.index("test0"), 9) def testDir(self): """makes sure tab complete will work""" attrs = dir(self.list) self.assertIn("test1", attrs) self.assertIn("_dict", attrs) # attribute of DictList def testUnion(self): self.list.union([Object("test1"), Object("test2")]) # should only add 1 element self.assertEqual(len(self.list), 2) self.assertEqual(self.list.index("test2"), 1)