def _test_add_radd_iadd(self, builder): """Run tests on __r/i/add__ of a list built with *builder*.""" list1 = builder(range(5)) list2 = builder(range(5, 10)) self.assertEqual([0, 1, 2, 3, 4, 5, 6], list1 + [5, 6]) self.assertEqual([0, 1, 2, 3, 4], list1) self.assertEqual(list(range(10)), list1 + list2) self.assertEqual([-2, -1, 0, 1, 2, 3, 4], [-2, -1] + list1) self.assertEqual([0, 1, 2, 3, 4], list1) list1 += ["foo", "bar", "baz"] self.assertEqual([0, 1, 2, 3, 4, "foo", "bar", "baz"], list1)
def assertWikicodeEqual(self, expected, actual): """Assert that two Wikicode objects have the same data.""" self.assertIsInstance(actual, Wikicode) length = len(expected.nodes) self.assertEqual(length, len(actual.nodes)) for i in range(length): self.assertNodeEqual(expected.get(i), actual.get(i))
def assertTemplateNodeEqual(self, expected, actual): """Assert that two Template nodes have the same data.""" self.assertWikicodeEqual(expected.name, actual.name) length = len(expected.params) self.assertEqual(length, len(actual.params)) for i in range(length): exp_param = expected.params[i] act_param = actual.params[i] self.assertWikicodeEqual(exp_param.name, act_param.name) self.assertWikicodeEqual(exp_param.value, act_param.value) self.assertIs(exp_param.showkey, act_param.showkey)
def test_other_magics(self): """test other magically implemented features, like len() and iter()""" str1 = _FakeString("fake string") str2 = _FakeString("") expected = ["f", "a", "k", "e", " ", "s", "t", "r", "i", "n", "g"] self.assertTrue(str1) self.assertFalse(str2) self.assertEqual(11, len(str1)) self.assertEqual(0, len(str2)) out = [] for ch in str1: out.append(ch) self.assertEqual(expected, out) out = [] for ch in str2: out.append(ch) self.assertEqual([], out) gen1 = iter(str1) gen2 = iter(str2) self.assertIsInstance(gen1, GeneratorType) self.assertIsInstance(gen2, GeneratorType) out = [] for i in range(len(str1)): out.append(next(gen1)) self.assertRaises(StopIteration, next, gen1) self.assertEqual(expected, out) self.assertRaises(StopIteration, next, gen2) self.assertEqual("gnirts ekaf", "".join(list(reversed(str1)))) self.assertEqual([], list(reversed(str2))) self.assertEqual("f", str1[0]) self.assertEqual(" ", str1[4]) self.assertEqual("g", str1[10]) self.assertEqual("n", str1[-2]) self.assertRaises(IndexError, lambda: str1[11]) self.assertRaises(IndexError, lambda: str2[0]) self.assertTrue("k" in str1) self.assertTrue("fake" in str1) self.assertTrue("str" in str1) self.assertTrue("" in str1) self.assertTrue("" in str2) self.assertFalse("real" in str1) self.assertFalse("s" in str2)
def test_other_magics(self): """test other magically implemented features, like len() and iter()""" str1 = _FakeString("fake string") str2 = _FakeString("") expected = ["f", "a", "k", "e", " ", "s", "t", "r", "i", "n", "g"] self.assertTrue(str1) self.assertFalse(str2) self.assertEqual(11, len(str1)) self.assertEqual(0, len(str2)) out = [] for ch in str1: out.append(ch) self.assertEqual(expected, out) out = [] for ch in str2: out.append(ch) self.assertEqual([], out) gen1 = iter(str1) gen2 = iter(str2) self.assertIsInstance(gen1, GeneratorType) self.assertIsInstance(gen2, GeneratorType) out = [] for i in range(len(str1)): out.append(next(gen1)) self.assertRaises(StopIteration, next, gen1) self.assertEqual(expected, out) self.assertRaises(StopIteration, next, gen2) self.assertEqual("gnirts ekaf", "".join(list(reversed(str1)))) self.assertEqual([], list(reversed(str2))) self.assertEqual("f", str1[0]) self.assertEqual(" ", str1[4]) self.assertEqual("g", str1[10]) self.assertEqual("n", str1[-2]) self.assertRaises(IndexError, lambda: str1[11]) self.assertRaises(IndexError, lambda: str2[0]) self.assertIn("k", str1) self.assertIn("fake", str1) self.assertIn("str", str1) self.assertIn("", str1) self.assertIn("", str2) self.assertNotIn("real", str1) self.assertNotIn("s", str2)
def assertTagNodeEqual(self, expected, actual): """Assert that two Tag nodes have the same data.""" self.assertWikicodeEqual(expected.tag, actual.tag) if expected.contents is not None: self.assertWikicodeEqual(expected.contents, actual.contents) length = len(expected.attributes) self.assertEqual(length, len(actual.attributes)) for i in range(length): exp_attr = expected.attributes[i] act_attr = actual.attributes[i] self.assertWikicodeEqual(exp_attr.name, act_attr.name) if exp_attr.value is not None: self.assertWikicodeEqual(exp_attr.value, act_attr.value) self.assertIs(exp_attr.quoted, act_attr.quoted) self.assertEqual(exp_attr.pad_first, act_attr.pad_first) self.assertEqual(exp_attr.pad_before_eq, act_attr.pad_before_eq) self.assertEqual(exp_attr.pad_after_eq, act_attr.pad_after_eq) self.assertEqual(expected.wiki_markup, actual.wiki_markup) self.assertIs(expected.self_closing, actual.self_closing) self.assertIs(expected.invalid, actual.invalid) self.assertIs(expected.implicit, actual.implicit) self.assertEqual(expected.padding, actual.padding) self.assertWikicodeEqual(expected.closing_tag, actual.closing_tag)
def _test_get_set_del_item(self, builder): """Run tests on __get/set/delitem__ of a list built with *builder*.""" def assign(L, s1, s2, s3, val): L[s1:s2:s3] = val def delete(L, s1): del L[s1] list1 = builder([0, 1, 2, 3, "one", "two"]) list2 = builder(list(range(10))) self.assertEqual(1, list1[1]) self.assertEqual("one", list1[-2]) self.assertEqual([2, 3], list1[2:4]) self.assertRaises(IndexError, lambda: list1[6]) self.assertRaises(IndexError, lambda: list1[-7]) self.assertEqual([0, 1, 2], list1[:3]) self.assertEqual([0, 1, 2, 3, "one", "two"], list1[:]) self.assertEqual([3, "one", "two"], list1[3:]) self.assertEqual([3, "one", "two"], list1[3:100]) self.assertEqual(["one", "two"], list1[-2:]) self.assertEqual([0, 1], list1[:-4]) self.assertEqual([], list1[6:]) self.assertEqual([], list1[4:2]) self.assertEqual([0, 2, "one"], list1[0:5:2]) self.assertEqual([0, 2], list1[0:-3:2]) self.assertEqual([0, 1, 2, 3, "one", "two"], list1[::]) self.assertEqual([2, 3, "one", "two"], list1[2::]) self.assertEqual([0, 1, 2, 3], list1[:4:]) self.assertEqual([2, 3], list1[2:4:]) self.assertEqual([0, 2, 4, 6, 8], list2[::2]) self.assertEqual([2, 5, 8], list2[2::3]) self.assertEqual([0, 3], list2[:6:3]) self.assertEqual([2, 5, 8], list2[-8:9:3]) self.assertEqual([], list2[100000:1000:-100]) list1[3] = 100 self.assertEqual(100, list1[3]) list1[-3] = 101 self.assertEqual([0, 1, 2, 101, "one", "two"], list1) list1[5:] = [6, 7, 8] self.assertEqual([6, 7, 8], list1[5:]) self.assertEqual([0, 1, 2, 101, "one", 6, 7, 8], list1) list1[2:4] = [-1, -2, -3, -4, -5] self.assertEqual([0, 1, -1, -2, -3, -4, -5, "one", 6, 7, 8], list1) list1[0:-3] = [99] self.assertEqual([99, 6, 7, 8], list1) list2[0:6:2] = [100, 102, 104] self.assertEqual([100, 1, 102, 3, 104, 5, 6, 7, 8, 9], list2) list2[::3] = [200, 203, 206, 209] self.assertEqual([200, 1, 102, 203, 104, 5, 206, 7, 8, 209], list2) list2[::] = range(7) self.assertEqual([0, 1, 2, 3, 4, 5, 6], list2) self.assertRaises(ValueError, assign, list2, 0, 5, 2, [100, 102, 104, 106]) with self.assertRaises(IndexError): list2[7] = "foo" with self.assertRaises(IndexError): list2[-8] = "foo" del list2[2] self.assertEqual([0, 1, 3, 4, 5, 6], list2) del list2[-3] self.assertEqual([0, 1, 3, 5, 6], list2) self.assertRaises(IndexError, delete, list2, 100) self.assertRaises(IndexError, delete, list2, -6) list2[:] = range(10) del list2[3:6] self.assertEqual([0, 1, 2, 6, 7, 8, 9], list2) del list2[-2:] self.assertEqual([0, 1, 2, 6, 7], list2) del list2[:2] self.assertEqual([2, 6, 7], list2) list2[:] = range(10) del list2[2:8:2] self.assertEqual([0, 1, 3, 5, 7, 8, 9], list2)
def _test_list_methods(self, builder): """Run tests on the public methods of a list built with *builder*.""" list1 = builder(range(5)) list2 = builder(["foo"]) list3 = builder([("a", 5), ("d", 2), ("b", 8), ("c", 3)]) list1.append(5) list1.append(1) list1.append(2) self.assertEqual([0, 1, 2, 3, 4, 5, 1, 2], list1) self.assertEqual(0, list1.count(6)) self.assertEqual(2, list1.count(1)) list1.extend(range(5, 8)) self.assertEqual([0, 1, 2, 3, 4, 5, 1, 2, 5, 6, 7], list1) self.assertEqual(1, list1.index(1)) self.assertEqual(6, list1.index(1, 3)) self.assertEqual(6, list1.index(1, 3, 7)) self.assertRaises(ValueError, list1.index, 1, 3, 5) list1.insert(0, -1) self.assertEqual([-1, 0, 1, 2, 3, 4, 5, 1, 2, 5, 6, 7], list1) list1.insert(-1, 6.5) self.assertEqual([-1, 0, 1, 2, 3, 4, 5, 1, 2, 5, 6, 6.5, 7], list1) list1.insert(13, 8) self.assertEqual([-1, 0, 1, 2, 3, 4, 5, 1, 2, 5, 6, 6.5, 7, 8], list1) self.assertEqual(8, list1.pop()) self.assertEqual(7, list1.pop()) self.assertEqual([-1, 0, 1, 2, 3, 4, 5, 1, 2, 5, 6, 6.5], list1) self.assertEqual(-1, list1.pop(0)) self.assertEqual(5, list1.pop(5)) self.assertEqual(6.5, list1.pop(-1)) self.assertEqual([0, 1, 2, 3, 4, 1, 2, 5, 6], list1) self.assertEqual("foo", list2.pop()) self.assertRaises(IndexError, list2.pop) self.assertEqual([], list2) list1.remove(6) self.assertEqual([0, 1, 2, 3, 4, 1, 2, 5], list1) list1.remove(1) self.assertEqual([0, 2, 3, 4, 1, 2, 5], list1) list1.remove(1) self.assertEqual([0, 2, 3, 4, 2, 5], list1) self.assertRaises(ValueError, list1.remove, 1) list1.reverse() self.assertEqual([5, 2, 4, 3, 2, 0], list1) list1.sort() self.assertEqual([0, 2, 2, 3, 4, 5], list1) list1.sort(reverse=True) self.assertEqual([5, 4, 3, 2, 2, 0], list1) if not py3k: func = lambda x, y: abs(3 - x) - abs(3 - y) # Distance from 3 list1.sort(cmp=func) self.assertEqual([3, 4, 2, 2, 5, 0], list1) list1.sort(cmp=func, reverse=True) self.assertEqual([0, 5, 4, 2, 2, 3], list1) list3.sort(key=lambda i: i[1]) self.assertEqual([("d", 2), ("c", 3), ("a", 5), ("b", 8)], list3) list3.sort(key=lambda i: i[1], reverse=True) self.assertEqual([("b", 8), ("a", 5), ("c", 3), ("d", 2)], list3)
def _test_other_magic_methods(self, builder): """Run tests on other magic methods of a list built with *builder*.""" list1 = builder([0, 1, 2, 3, "one", "two"]) list2 = builder([]) list3 = builder([0, 2, 3, 4]) list4 = builder([0, 1, 2]) if py3k: self.assertEqual("[0, 1, 2, 3, 'one', 'two']", str(list1)) self.assertEqual(b"\x00\x01\x02", bytes(list4)) self.assertEqual("[0, 1, 2, 3, 'one', 'two']", repr(list1)) else: self.assertEqual("[0, 1, 2, 3, u'one', u'two']", unicode(list1)) self.assertEqual(b"[0, 1, 2, 3, u'one', u'two']", str(list1)) self.assertEqual(b"[0, 1, 2, 3, u'one', u'two']", repr(list1)) self.assertTrue(list1 < list3) self.assertTrue(list1 <= list3) self.assertFalse(list1 == list3) self.assertTrue(list1 != list3) self.assertFalse(list1 > list3) self.assertFalse(list1 >= list3) other1 = [0, 2, 3, 4] self.assertTrue(list1 < other1) self.assertTrue(list1 <= other1) self.assertFalse(list1 == other1) self.assertTrue(list1 != other1) self.assertFalse(list1 > other1) self.assertFalse(list1 >= other1) other2 = [0, 0, 1, 2] self.assertFalse(list1 < other2) self.assertFalse(list1 <= other2) self.assertFalse(list1 == other2) self.assertTrue(list1 != other2) self.assertTrue(list1 > other2) self.assertTrue(list1 >= other2) other3 = [0, 1, 2, 3, "one", "two"] self.assertFalse(list1 < other3) self.assertTrue(list1 <= other3) self.assertTrue(list1 == other3) self.assertFalse(list1 != other3) self.assertFalse(list1 > other3) self.assertTrue(list1 >= other3) self.assertTrue(bool(list1)) self.assertFalse(bool(list2)) self.assertEqual(6, len(list1)) self.assertEqual(0, len(list2)) out = [] for obj in list1: out.append(obj) self.assertEqual([0, 1, 2, 3, "one", "two"], out) out = [] for ch in list2: out.append(ch) self.assertEqual([], out) gen1 = iter(list1) out = [] for i in range(len(list1)): out.append(next(gen1)) self.assertRaises(StopIteration, next, gen1) self.assertEqual([0, 1, 2, 3, "one", "two"], out) gen2 = iter(list2) self.assertRaises(StopIteration, next, gen2) self.assertEqual(["two", "one", 3, 2, 1, 0], list(reversed(list1))) self.assertEqual([], list(reversed(list2))) self.assertTrue("one" in list1) self.assertTrue(3 in list1) self.assertFalse(10 in list1) self.assertFalse(0 in list2) self.assertEqual([], list2 * 5) self.assertEqual([], 5 * list2) self.assertEqual([0, 1, 2, 0, 1, 2, 0, 1, 2], list4 * 3) self.assertEqual([0, 1, 2, 0, 1, 2, 0, 1, 2], 3 * list4) list4 *= 2 self.assertEqual([0, 1, 2, 0, 1, 2], list4)
def _test_get_set_del_item(self, builder): """Run tests on __get/set/delitem__ of a list built with *builder*.""" def assign(L, s1, s2, s3, val): L[s1:s2:s3] = val def delete(L, s1): del L[s1] list1 = builder([0, 1, 2, 3, "one", "two"]) list2 = builder(list(range(10))) self.assertEqual(1, list1[1]) self.assertEqual("one", list1[-2]) self.assertEqual([2, 3], list1[2:4]) self.assertRaises(IndexError, lambda: list1[6]) self.assertRaises(IndexError, lambda: list1[-7]) self.assertEqual([0, 1, 2], list1[:3]) self.assertEqual([0, 1, 2, 3, "one", "two"], list1[:]) self.assertEqual([3, "one", "two"], list1[3:]) self.assertEqual(["one", "two"], list1[-2:]) self.assertEqual([0, 1], list1[:-4]) self.assertEqual([], list1[6:]) self.assertEqual([], list1[4:2]) self.assertEqual([0, 2, "one"], list1[0:5:2]) self.assertEqual([0, 2], list1[0:-3:2]) self.assertEqual([0, 1, 2, 3, "one", "two"], list1[::]) self.assertEqual([2, 3, "one", "two"], list1[2::]) self.assertEqual([0, 1, 2, 3], list1[:4:]) self.assertEqual([2, 3], list1[2:4:]) self.assertEqual([0, 2, 4, 6, 8], list2[::2]) self.assertEqual([2, 5, 8], list2[2::3]) self.assertEqual([0, 3], list2[:6:3]) self.assertEqual([2, 5, 8], list2[-8:9:3]) self.assertEqual([], list2[100000:1000:-100]) list1[3] = 100 self.assertEqual(100, list1[3]) list1[-3] = 101 self.assertEqual([0, 1, 2, 101, "one", "two"], list1) list1[5:] = [6, 7, 8] self.assertEqual([6, 7, 8], list1[5:]) self.assertEqual([0, 1, 2, 101, "one", 6, 7, 8], list1) list1[2:4] = [-1, -2, -3, -4, -5] self.assertEqual([0, 1, -1, -2, -3, -4, -5, "one", 6, 7, 8], list1) list1[0:-3] = [99] self.assertEqual([99, 6, 7, 8], list1) list2[0:6:2] = [100, 102, 104] self.assertEqual([100, 1, 102, 3, 104, 5, 6, 7, 8, 9], list2) list2[::3] = [200, 203, 206, 209] self.assertEqual([200, 1, 102, 203, 104, 5, 206, 7, 8, 209], list2) list2[::] = range(7) self.assertEqual([0, 1, 2, 3, 4, 5, 6], list2) self.assertRaises(ValueError, assign, list2, 0, 5, 2, [100, 102, 104, 106]) del list2[2] self.assertEqual([0, 1, 3, 4, 5, 6], list2) del list2[-3] self.assertEqual([0, 1, 3, 5, 6], list2) self.assertRaises(IndexError, delete, list2, 100) self.assertRaises(IndexError, delete, list2, -6) list2[:] = range(10) del list2[3:6] self.assertEqual([0, 1, 2, 6, 7, 8, 9], list2) del list2[-2:] self.assertEqual([0, 1, 2, 6, 7], list2) del list2[:2] self.assertEqual([2, 6, 7], list2) list2[:] = range(10) del list2[2:8:2] self.assertEqual([0, 1, 3, 5, 7, 8, 9], list2)