File: test_userlist.py

package info (click to toggle)
domdf-python-tools 3.10.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,784 kB
  • sloc: python: 10,838; makefile: 7
file content (110 lines) | stat: -rw-r--r-- 2,684 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#  From https://raw.githubusercontent.com/python/cpython/master/Lib/test/test_userlist.py

#  Licensed under the Python Software Foundation License Version 2.
#  Copyright © 2001-2020 Python Software Foundation. All rights reserved.
#  Copyright © 2000 BeOpen.com. All rights reserved.
#  Copyright © 1995-2000 Corporation for National Research Initiatives. All rights reserved.
#  Copyright © 1991-1995 Stichting Mathematisch Centrum. All rights reserved.

# Check every path through every method of UserList

# stdlib
from typing import Sequence, Type, no_type_check

# 3rd party
from coincidence.selectors import not_pypy

# this package
from domdf_python_tools.bases import Lineup, UserList
from tests import list_tests


class TestList(list_tests.CommonTest):
	type2test: Type[Sequence] = list

	def test_getslice(self):
		super().test_getslice()
		l = [0, 1, 2, 3, 4]
		u = self.type2test(l)  # type: ignore
		for i in range(-3, 6):
			assert u[:i] == l[:i]
			assert u[i:] == l[i:]
			for j in range(-3, 6):
				assert u[i:j] == l[i:j]

	def test_slice_type(self):
		l = [0, 1, 2, 3, 4]
		u = self.type2test(l)  # type: ignore
		assert u[:] != u.__class__
		assert u[:] == u

	@not_pypy("Doesn't work on PyPy")
	def test_iadd(self):
		super().test_iadd()
		u = [0, 1]
		u += self.type2test([0, 1])  # type: ignore
		assert u == [0, 1, 0, 1]

	@no_type_check
	def test_mixedcmp(self):
		u = self.type2test([0, 1])
		assert u == [0, 1]
		assert u != [0]
		assert u != [0, 2]

	@no_type_check
	def test_mixedadd(self):
		u = self.type2test([0, 1])
		assert u + [] == u
		assert u + [2] == [0, 1, 2]

	@no_type_check
	def test_userlist_copy(self):
		u = self.type2test([6, 8, 1, 9, 1])
		v = u.copy()
		assert u == v
		assert type(u) == type(v)  # pylint: disable=unidiomatic-typecheck


class TestUserList(TestList):
	type2test: Type[UserList] = UserList

	def test_add_specials(self):
		u = UserList("spam")
		u2 = u + "eggs"
		assert u2 == list("spameggs")

	def test_radd_specials(self):
		u = UserList("eggs")
		u2 = "spam" + u
		assert u2 == list("spameggs")
		u2 = u.__radd__(UserList("spam"))
		assert u2 == list("spameggs")


class TestLineup(TestList):
	type2test: Type[Lineup] = Lineup

	def test_replace(self):
		u = self.type2test([-2, -1, 0, 1, 2])

		u.replace(2, 3)
		assert u[-1] == 3

	def test_fluent(self):
		u = self.type2test([2, 1, 0, -1, -2])

		assert u.sort() is u
		assert u == [-2, -1, 0, 1, 2]

		assert u.replace(2, 3) is u
		assert u == [-2, -1, 0, 1, 3]

		assert u.reverse() is u
		assert u == [3, 1, 0, -1, -2]

		assert u.append(4) is u
		assert u == [3, 1, 0, -1, -2, 4]

		assert u.insert(0, -3) is u
		assert u == [-3, 3, 1, 0, -1, -2, 4]