Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 122 additions & 21 deletions Lib/test/test_userlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,36 @@

from collections import UserList
from test import list_tests
from test import support
import unittest


class UserListSubclass(UserList):
pass

class UserListSubclass2(UserList):
pass


class UserListTest(list_tests.CommonTest):
type2test = UserList

def test_data(self):
u = UserList()
self.assertEqual(u.data, [])
self.assertIs(type(u.data), list)
a = [1, 2]
u = UserList(a)
self.assertEqual(u.data, a)
self.assertIsNot(u.data, a)
self.assertIs(type(u.data), list)
u = UserList(u)
self.assertEqual(u.data, a)
self.assertIs(type(u.data), list)
u = UserList("spam")
self.assertEqual(u.data, list("spam"))
self.assertIs(type(u.data), list)

def test_getslice(self):
super().test_getslice()
l = [0, 1, 2, 3, 4]
Expand All @@ -24,34 +48,74 @@ def test_slice_type(self):
self.assertIsInstance(u[:], u.__class__)
self.assertEqual(u[:],u)

def test_add_specials(self):
u = UserList("spam")
u2 = u + "eggs"
self.assertEqual(u2, list("spameggs"))
def test_mixed_add(self):
for t in UserList, list, str, tuple, iter:
with self.subTest(t.__name__):
u = UserList("spam") + t("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)

u = t("spam") + UserList("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)

u = UserList("spam") + UserListSubclass("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)

def test_radd_specials(self):
u = UserList("eggs")
u2 = "spam" + u
u = UserListSubclass("spam") + UserList("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserListSubclass)

u = UserListSubclass("spam") + UserListSubclass2("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserListSubclass)

u2 = UserList("eggs").__radd__(UserList("spam"))
self.assertEqual(u2, list("spameggs"))
u2 = u.__radd__(UserList("spam"))
self.assertIs(type(u), UserListSubclass)

u2 = UserListSubclass("eggs").__radd__(UserListSubclass2("spam"))
self.assertEqual(u2, list("spameggs"))
self.assertIs(type(u), UserListSubclass)

def test_iadd(self):
super().test_iadd()
u = [0, 1]
u += UserList([0, 1])
self.assertEqual(u, [0, 1, 0, 1])
def test_mixed_iadd(self):
for t in UserList, list, str, tuple, iter:
with self.subTest(t.__name__):
u = u2 = UserList("spam")
u += t("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)
self.assertIs(u, u2)

def test_mixedcmp(self):
u = self.type2test([0, 1])
self.assertEqual(u, [0, 1])
self.assertNotEqual(u, [0])
self.assertNotEqual(u, [0, 2])
u = t("spam")
u += UserList("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)

def test_mixedadd(self):
u = u2 = UserList("spam")
u += UserListSubclass("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserList)
self.assertIs(u, u2)

u = u2 = UserListSubclass("spam")
u += UserList("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserListSubclass)
self.assertIs(u, u2)

u = u2 = UserListSubclass("spam")
u += UserListSubclass2("eggs")
self.assertEqual(u, list("spameggs"))
self.assertIs(type(u), UserListSubclass)
self.assertIs(u, u2)

def test_mixed_cmp(self):
u = self.type2test([0, 1])
self.assertEqual(u + [], u)
self.assertEqual(u + [2], [0, 1, 2])
self._assert_cmp(u, [0, 1], 0)
self._assert_cmp(u, [0], 1)
self._assert_cmp(u, [0, 2], -1)

def test_getitemoverwriteiter(self):
# Verify that __getitem__ overrides *are* recognized by __iter__
Expand All @@ -60,6 +124,43 @@ def __getitem__(self, key):
return str(key) + '!!!'
self.assertEqual(next(iter(T((1,2)))), "0!!!")

def test_implementation(self):
u = UserList([1])
with (support.swap_attr(UserList, '__len__', None),
support.swap_attr(UserList, 'insert', None)):
u.append(2)
self.assertEqual(u, [1, 2])
with support.swap_attr(UserList, 'append', None):
u.extend([3, 4])
self.assertEqual(u, [1, 2, 3, 4])
with support.swap_attr(UserList, 'append', None):
u.extend(UserList([3, 4]))
self.assertEqual(u, [1, 2, 3, 4, 3, 4])
with support.swap_attr(UserList, '__iter__', None):
c = u.count(3)
self.assertEqual(c, 2)
with (support.swap_attr(UserList, '__iter__', None),
support.swap_attr(UserList, '__getitem__', None)):
i = u.index(4)
self.assertEqual(i, 3)
with (support.swap_attr(UserList, 'index', None),
support.swap_attr(UserList, '__getitem__', None)):
u.remove(3)
self.assertEqual(u, [1, 2, 4, 3, 4])
with (support.swap_attr(UserList, '__getitem__', None),
support.swap_attr(UserList, '__delitem__', None)):
u.pop()
self.assertEqual(u, [1, 2, 4, 3])
with (support.swap_attr(UserList, '__len__', None),
support.swap_attr(UserList, '__getitem__', None),
support.swap_attr(UserList, '__setitem__', None)):
u.reverse()
self.assertEqual(u, [3, 4, 2, 1])
with (support.swap_attr(UserList, '__len__', None),
support.swap_attr(UserList, 'pop', None)):
u.clear()
self.assertEqual(u, [])

def test_userlist_copy(self):
u = self.type2test([6, 8, 1, 9, 1])
v = u.copy()
Expand Down
Loading