Private GIT

Skip to content
Snippets Groups Projects
Commit 83bad581 authored by labrys's avatar labrys
Browse files

Lint 10/10

parent 4b6acf51
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,8 @@
Unit Tests for sickbeard/numdict.py
"""
# pylint: disable=line-too-long
import sys
import os.path
import unittest
......@@ -16,7 +18,7 @@ from sickbeard.numdict import NumDict
PY3 = sys.version_info >= (3, )
if PY3:
from collections import UserDict
from collections import UserDict # pylint: disable=no-name-in-module
else:
from UserDict import UserDict
......@@ -25,97 +27,97 @@ class NumDictTest(unittest.TestCase):
"""
Test the NumDict class
"""
def test_constructors(self):
def test_constructors(self): # pylint: disable=too-many-locals, too-many-statements
"""
Test NumDict constructors
"""
# dicts for testing
d0 = {} # Empty dictionary
d1 = {1: 'Elephant'} # Single numeric key
d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
d3 = {'3': 'Aardvark'} # Numeric string key
d4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys
d5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys
d6 = {1: None, '2': None} # None as values
d7 = {None: 'Empty'} # None as key
dict_0 = {} # Empty dictionary
dict_1 = {1: 'Elephant'} # Single numeric key
dict_2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
dict_3 = {'3': 'Aardvark'} # Numeric string key
dict_4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys
dict_5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys
dict_6 = {1: None, '2': None} # None as values
dict_7 = {None: 'Empty'} # None as key
# Construct NumDicts from dicts
n = NumDict()
n0 = NumDict(d0)
n1 = NumDict(d1)
n2 = NumDict(d2)
n3 = NumDict(d3)
n4 = NumDict(d4)
n5 = NumDict(d5)
n6 = NumDict(d6)
n7 = NumDict(d7)
num_dict = NumDict()
num_dict_0 = NumDict(dict_0)
num_dict_1 = NumDict(dict_1)
num_dict_2 = NumDict(dict_2)
num_dict_3 = NumDict(dict_3)
num_dict_4 = NumDict(dict_4)
num_dict_5 = NumDict(dict_5)
num_dict_6 = NumDict(dict_6)
num_dict_7 = NumDict(dict_7)
# Most NumDicts from dicts should compare equal...
self.assertEqual(n, {})
self.assertEqual(n0, d0)
self.assertEqual(n1, d1)
self.assertEqual(n2, d2)
self.assertEqual(num_dict, {})
self.assertEqual(num_dict_0, dict_0)
self.assertEqual(num_dict_1, dict_1)
self.assertEqual(num_dict_2, dict_2)
# ...however, numeric keys are not equal to numeric string keys...
self.assertNotEqual(n3, d3)
self.assertNotEqual(n4, d4)
self.assertNotEqual(n5, d5)
self.assertNotEqual(n6, d6)
self.assertNotEqual(num_dict_3, dict_3)
self.assertNotEqual(num_dict_4, dict_4)
self.assertNotEqual(num_dict_5, dict_5)
self.assertNotEqual(num_dict_6, dict_6)
# ...but None keys work just fine
self.assertEqual(n7, d7)
self.assertEqual(num_dict_7, dict_7)
# Construct dicts from NumDicts
dn = dict(n)
dn1 = dict(n1)
dn2 = dict(n2)
dn3 = dict(n3)
dn4 = dict(n4)
dn5 = dict(n5)
dn6 = dict(n6)
dn7 = dict(n7)
dict_from_num_dict = dict(num_dict)
dict_from_num_dict_1 = dict(num_dict_1)
dict_from_num_dict_2 = dict(num_dict_2)
dict_from_num_dict_3 = dict(num_dict_3)
dict_from_num_dict_4 = dict(num_dict_4)
dict_from_num_dict_5 = dict(num_dict_5)
dict_from_num_dict_6 = dict(num_dict_6)
dict_from_num_dict_7 = dict(num_dict_7)
# All dicts from NumDicts should compare equal
self.assertEqual(n, dn)
self.assertEqual(n1, dn1)
self.assertEqual(n2, dn2)
self.assertEqual(n3, dn3)
self.assertEqual(n4, dn4)
self.assertEqual(n5, dn5)
self.assertEqual(n6, dn6)
self.assertEqual(n7, dn7)
self.assertEqual(num_dict, dict_from_num_dict)
self.assertEqual(num_dict_1, dict_from_num_dict_1)
self.assertEqual(num_dict_2, dict_from_num_dict_2)
self.assertEqual(num_dict_3, dict_from_num_dict_3)
self.assertEqual(num_dict_4, dict_from_num_dict_4)
self.assertEqual(num_dict_5, dict_from_num_dict_5)
self.assertEqual(num_dict_6, dict_from_num_dict_6)
self.assertEqual(num_dict_7, dict_from_num_dict_7)
# Construct NumDicts from NumDicts
nn = NumDict(n)
nn0 = NumDict(n0)
nn1 = NumDict(n1)
nn2 = NumDict(n2)
nn3 = NumDict(n3)
nn4 = NumDict(n4)
nn5 = NumDict(n5)
nn6 = NumDict(n6)
nn7 = NumDict(n7)
num_dict_from_num_dict = NumDict(num_dict)
num_dict_from_num_dict_0 = NumDict(num_dict_0)
num_dict_from_num_dict_1 = NumDict(num_dict_1)
num_dict_from_num_dict_2 = NumDict(num_dict_2)
num_dict_from_num_dict_3 = NumDict(num_dict_3)
num_dict_from_num_dict_4 = NumDict(num_dict_4)
num_dict_from_num_dict_5 = NumDict(num_dict_5)
num_dict_from_num_dict_6 = NumDict(num_dict_6)
num_dict_from_num_dict_7 = NumDict(num_dict_7)
# All NumDicts from NumDicts should compare equal
self.assertEqual(n, nn)
self.assertEqual(n0, nn0)
self.assertEqual(n1, nn1)
self.assertEqual(n2, nn2)
self.assertEqual(n3, nn3)
self.assertEqual(n4, nn4)
self.assertEqual(n5, nn5)
self.assertEqual(n6, nn6)
self.assertEqual(n7, nn7)
self.assertEqual(num_dict, num_dict_from_num_dict)
self.assertEqual(num_dict_0, num_dict_from_num_dict_0)
self.assertEqual(num_dict_1, num_dict_from_num_dict_1)
self.assertEqual(num_dict_2, num_dict_from_num_dict_2)
self.assertEqual(num_dict_3, num_dict_from_num_dict_3)
self.assertEqual(num_dict_4, num_dict_from_num_dict_4)
self.assertEqual(num_dict_5, num_dict_from_num_dict_5)
self.assertEqual(num_dict_6, num_dict_from_num_dict_6)
self.assertEqual(num_dict_7, num_dict_from_num_dict_7)
# keyword arg constructor should fail
with self.assertRaises(TypeError):
NumDict(one=1, two=2) # Raise TypeError since we can't have numeric keywords
# item sequence constructors work fine...
self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2)
self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2)
self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2)
self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2)
self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dict_from_num_dict_2)
self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
# ...unless you have a non-numeric key
with self.assertRaises(TypeError):
......@@ -128,39 +130,42 @@ class NumDictTest(unittest.TestCase):
NumDict([(1, 'one'), (2, 'two')], two=3, five=4)
# alternate constructors
d8 = {1: 'Echo', 2: 'Echo'}
self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6)
self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6)
self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8)
self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8)
self.assertTrue(n1.fromkeys('1 2'.split()) is not n1)
self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict)
def test_repr(self):
dict_8 = {1: 'Echo', 2: 'Echo'}
self.assertEqual(NumDict.fromkeys('1 2'.split()), dict_from_num_dict_6)
self.assertEqual(NumDict().fromkeys('1 2'.split()), dict_from_num_dict_6)
self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), dict_8)
self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), dict_8)
self.assertTrue(num_dict_1.fromkeys('1 2'.split()) is not num_dict_1)
self.assertIsInstance(num_dict_1.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(num_dict_2.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(num_dict_3.fromkeys('1 2'.split()), NumDict)
self.assertIsInstance(num_dict_4.fromkeys('1 2'.split()), NumDict)
def test_repr(self): # pylint: disable=too-many-locals
"""
Test representation of NumDicts
"""
# dicts for testing
d0 = {} # Empty dictionary
d1 = {1: 'Elephant'} # Single numeric key
d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
d3 = {'3': 'Aardvark'} # Numeric string key
d4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys
d5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys
d6 = {1: None, '2': None} # None as values
d7 = {None: 'Empty'} # None as key
dict_0 = {} # Empty dictionary
dict_1 = {1: 'Elephant'} # Single numeric key
dict_2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
dict_3 = {'3': 'Aardvark'} # Numeric string key
dict_4 = {'3': 'Aardvark', '4': 'Ant'} # Multiple numeric string keys
dict_5 = {5: 'Cat', '6': 'Dog'} # Mixed numeric and numeric string keys
dict_6 = {1: None, '2': None} # None as values
dict_7 = {None: 'Empty'} # None as key
# Construct NumDicts from dicts
n = NumDict()
n0 = NumDict(d0)
n1 = NumDict(d1)
n2 = NumDict(d2)
n3 = NumDict(d3)
n4 = NumDict(d4)
n5 = NumDict(d5)
n6 = NumDict(d6)
n7 = NumDict(d7)
num_dict = NumDict()
num_dict_0 = NumDict(dict_0)
num_dict_1 = NumDict(dict_1)
num_dict_2 = NumDict(dict_2)
num_dict_3 = NumDict(dict_3)
num_dict_4 = NumDict(dict_4)
num_dict_5 = NumDict(dict_5)
num_dict_6 = NumDict(dict_6)
num_dict_7 = NumDict(dict_7)
reps = (
"{}",
......@@ -174,137 +179,143 @@ class NumDictTest(unittest.TestCase):
)
# Most representations of NumDicts should compare equal to dicts...
self.assertEqual(str(n), str({}))
self.assertEqual(repr(n), repr({}))
self.assertIn(repr(n), reps)
self.assertEqual(str(num_dict), str({}))
self.assertEqual(repr(num_dict), repr({}))
self.assertIn(repr(num_dict), reps)
self.assertEqual(str(n0), str(d0))
self.assertEqual(repr(n0), repr(d0))
self.assertIn(repr(n0), reps)
self.assertEqual(str(num_dict_0), str(dict_0))
self.assertEqual(repr(num_dict_0), repr(dict_0))
self.assertIn(repr(num_dict_0), reps)
self.assertEqual(str(n1), str(d1))
self.assertEqual(repr(n1), repr(d1))
self.assertIn(repr(n1), reps)
self.assertEqual(str(num_dict_1), str(dict_1))
self.assertEqual(repr(num_dict_1), repr(dict_1))
self.assertIn(repr(num_dict_1), reps)
self.assertEqual(str(n2), str(d2))
self.assertEqual(repr(n2), repr(d2))
self.assertIn(repr(n2), reps)
self.assertEqual(str(num_dict_2), str(dict_2))
self.assertEqual(repr(num_dict_2), repr(dict_2))
self.assertIn(repr(num_dict_2), reps)
# ...however, numeric keys are not equal to numeric string keys...
# ...so the string representations for those are different...
self.assertNotEqual(str(n3), str(d3))
self.assertNotEqual(repr(n3), repr(d3))
self.assertNotIn(repr(n3), reps)
self.assertNotEqual(str(num_dict_3), str(dict_3))
self.assertNotEqual(repr(num_dict_3), repr(dict_3))
self.assertNotIn(repr(num_dict_3), reps)
self.assertNotEqual(str(n4), str(d4))
self.assertNotEqual(repr(n4), repr(d4))
self.assertNotIn(repr(n4), reps)
self.assertNotEqual(str(num_dict_4), str(dict_4))
self.assertNotEqual(repr(num_dict_4), repr(dict_4))
self.assertNotIn(repr(num_dict_4), reps)
self.assertNotEqual(str(n5), str(d5))
self.assertNotEqual(repr(n5), repr(d5))
self.assertNotIn(repr(n5), reps)
self.assertNotEqual(str(num_dict_5), str(dict_5))
self.assertNotEqual(repr(num_dict_5), repr(dict_5))
self.assertNotIn(repr(num_dict_5), reps)
self.assertNotEqual(str(n6), str(d6))
self.assertNotEqual(repr(n6), repr(d6))
self.assertNotIn(repr(n6), reps)
self.assertNotEqual(str(num_dict_6), str(dict_6))
self.assertNotEqual(repr(num_dict_6), repr(dict_6))
self.assertNotIn(repr(num_dict_6), reps)
# ...but None keys work just fine
self.assertEqual(str(n7), str(d7))
self.assertEqual(repr(n7), repr(d7))
self.assertIn(repr(n7), reps)
self.assertEqual(str(num_dict_7), str(dict_7))
self.assertEqual(repr(num_dict_7), repr(dict_7))
self.assertIn(repr(num_dict_7), reps)
def test_rich_comparison_and_len(self):
"""
Test rich comparison and length
"""
# dicts for testing
d0 = {} # Empty dictionary
d1 = {1: 'Elephant'} # Single numeric key
d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
dict_0 = {} # Empty dictionary
dict_1 = {1: 'Elephant'} # Single numeric key
dict_2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
# Construct NumDicts from dicts
n = NumDict()
n0 = NumDict(d0)
n1 = NumDict(d1)
n2 = NumDict(d2)
num_dict = NumDict()
num_dict_0 = NumDict(dict_0)
num_dict_1 = NumDict(dict_1)
num_dict_2 = NumDict(dict_2)
# Construct NumDicts from NumDicts
nn = NumDict(n)
nn0 = NumDict(n0)
nn1 = NumDict(n1)
nn2 = NumDict(n2)
num_dict_from_num_dict = NumDict(num_dict)
num_dict_from_num_dict_0 = NumDict(num_dict_0)
num_dict_from_num_dict_1 = NumDict(num_dict_1)
num_dict_from_num_dict_2 = NumDict(num_dict_2)
all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2]
for a in all_dicts:
for b in all_dicts:
self.assertEqual(a == b, len(a) == len(b))
all_dicts = [dict_0, dict_1, dict_2, num_dict, num_dict_0, num_dict_1, num_dict_2, num_dict_from_num_dict, num_dict_from_num_dict_0, num_dict_from_num_dict_1, num_dict_from_num_dict_2]
for val_a in all_dicts:
for val_b in all_dicts:
self.assertEqual(val_a == val_b, len(val_a) == len(val_b))
def test_dict_access_and_modification(self):
def test_dict_access_and_mod(self): # pylint: disable=too-many-locals, too-many-statements
"""
Test num dict access and modification
"""
# dicts for testing
d0 = {} # Empty dictionary
d1 = {1: 'Elephant'} # Single numeric key
d2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
dict_0 = {} # Empty dictionary
dict_1 = {1: 'Elephant'} # Single numeric key
dict_2 = {1: 'Elephant', 2: 'Mouse'} # Multiple numeric keys
# Construct NumDicts from dicts
n0 = NumDict()
n1 = NumDict(d1)
n2 = NumDict(d2)
num_dict_0 = NumDict()
num_dict_1 = NumDict(dict_1)
num_dict_2 = NumDict(dict_2)
# test __getitem__
self.assertEqual(n2[1], 'Elephant')
self.assertEqual(num_dict_2[1], 'Elephant')
with self.assertRaises(KeyError):
n1['Mouse'] # key is not numeric
_ = num_dict_1['Mouse'] # key is not numeric
with self.assertRaises(KeyError):
n1.__getitem__('Mouse') # key is not numeric
_ = num_dict_1.__getitem__('Mouse') # key is not numeric
with self.assertRaises(KeyError):
n1[None] # key does not exist
_ = num_dict_1[None] # key does not exist
with self.assertRaises(KeyError):
n1.__getitem__(None) # key does not exist
_ = num_dict_1.__getitem__(None) # key does not exist
# Test __setitem__
n3 = NumDict(n2)
self.assertEqual(n2, n3)
num_dict_3 = NumDict(num_dict_2)
self.assertEqual(num_dict_2, num_dict_3)
n3[2] = 'Frog'
self.assertNotEqual(n2, n3)
num_dict_3[2] = 'Frog'
self.assertNotEqual(num_dict_2, num_dict_3)
# Check None keys and numeric key conversion
n3['3'] = 'Armadillo'
n3[None] = 'Cockroach'
num_dict_3['3'] = 'Armadillo'
num_dict_3[None] = 'Cockroach'
# Check long ints
n3[12390809518259081208909880312] = 'Squid'
n3['12390809518259081208909880312'] = 'Octopus'
self.assertEqual(n3[12390809518259081208909880312], 'Octopus')
num_dict_3[12390809518259081208909880312] = 'Squid'
num_dict_3['12390809518259081208909880312'] = 'Octopus'
self.assertEqual(num_dict_3[12390809518259081208909880312], 'Octopus')
with self.assertRaises(TypeError):
n3.__setitem__('Gorilla', 1) # key is not numeric
num_dict_3.__setitem__('Gorilla', 1) # key is not numeric
with self.assertRaises(TypeError):
n3['Chimpanzee'] = 1 # key is not numeric
num_dict_3['Chimpanzee'] = 1 # key is not numeric
with self.assertRaises(TypeError):
n3[(4, 1)] = 1 # key is not numeric
num_dict_3[(4, 1)] = 1 # key is not numeric
with self.assertRaises(TypeError):
n3[[1, 3, 4]] = 1 # key is not numeric and is not hashable
num_dict_3[[1, 3, 4]] = 1 # key is not numeric and is not hashable
# Test __delitem__
del n3[3]
del n3[None]
del num_dict_3[3]
del num_dict_3[None]
with self.assertRaises(KeyError):
del n3[3] # already deleted
del num_dict_3[3] # already deleted
with self.assertRaises(KeyError):
n3.__delitem__(3) # already deleted
num_dict_3.__delitem__(3) # already deleted
with self.assertRaises(KeyError):
del n3['Mouse'] # key would not exist, since it is not numeric
del num_dict_3['Mouse'] # key would not exist, since it is not numeric
# Test clear
n3.clear()
self.assertEqual(n3, {})
num_dict_3.clear()
self.assertEqual(num_dict_3, {})
# Test copy()
n2a = d2.copy()
self.assertEqual(n2, n2a)
n2b = n2.copy()
self.assertEqual(n2b, n2)
n2c = UserDict({1: 'Elephant', 2: 'Mouse'})
n2d = n2c.copy() # making a copy of a UserDict is special cased
self.assertEqual(n2c, n2d)
num_dict_2a = dict_2.copy()
self.assertEqual(num_dict_2, num_dict_2a)
num_dict_2b = num_dict_2.copy()
self.assertEqual(num_dict_2b, num_dict_2)
num_dict_2c = UserDict({1: 'Elephant', 2: 'Mouse'})
num_dict_2d = num_dict_2c.copy() # making a copy of a UserDict is special cased
self.assertEqual(num_dict_2c, num_dict_2d)
class MyNumDict(NumDict):
"""
......@@ -316,131 +327,135 @@ class NumDictTest(unittest.TestCase):
"""
print('MyNumDict:', self)
m2 = MyNumDict(n2)
m2a = m2.copy()
self.assertEqual(m2a, m2)
my_num_dict = MyNumDict(num_dict_2)
my_num_dict_a = my_num_dict.copy()
self.assertEqual(my_num_dict_a, my_num_dict)
m2[1] = 'Frog'
self.assertNotEqual(m2a, m2)
my_num_dict[1] = 'Frog'
self.assertNotEqual(my_num_dict_a, my_num_dict)
# Test keys, items, values
self.assertEqual(sorted(n2.keys()), sorted(d2.keys()))
self.assertEqual(sorted(n2.items()), sorted(d2.items()))
self.assertEqual(sorted(n2.values()), sorted(d2.values()))
self.assertEqual(sorted(num_dict_2.keys()), sorted(dict_2.keys()))
self.assertEqual(sorted(num_dict_2.items()), sorted(dict_2.items()))
self.assertEqual(sorted(num_dict_2.values()), sorted(dict_2.values()))
# Test "in".
for i in n2:
self.assertIn(i, n2)
self.assertEqual(i in n1, i in d1)
self.assertEqual(i in n0, i in d0)
for i in num_dict_2:
self.assertIn(i, num_dict_2)
self.assertEqual(i in num_dict_1, i in dict_1)
self.assertEqual(i in num_dict_0, i in dict_0)
self.assertFalse(None in n2)
self.assertEqual(None in n2, None in d2)
self.assertFalse(None in num_dict_2)
self.assertEqual(None in num_dict_2, None in dict_2)
d2[None] = 'Cow'
n2[None] = d2[None]
self.assertTrue(None in n2)
self.assertEqual(None in n2, None in d2)
dict_2[None] = 'Cow'
num_dict_2[None] = dict_2[None]
self.assertTrue(None in num_dict_2)
self.assertEqual(None in num_dict_2, None in dict_2)
self.assertEqual(n2.has_key(None), None in d2)
self.assertEqual(num_dict_2.has_key(None), None in dict_2)
if not PY3:
self.assertEqual(n2.has_key(None), d2.has_key(None))
self.assertFalse('Penguin' in n2)
self.assertEqual(num_dict_2.has_key(None), dict_2.has_key(None))
self.assertFalse('Penguin' in num_dict_2)
# Test update
t = NumDict()
t.update(d2)
self.assertEqual(t, n2)
test = NumDict()
test.update(dict_2)
self.assertEqual(test, num_dict_2)
# Test get
for i in n2:
self.assertEqual(n2.get(i), n2[i])
self.assertEqual(n1.get(i), d1.get(i))
self.assertEqual(n0.get(i), d0.get(i))
for i in num_dict_2:
self.assertEqual(num_dict_2.get(i), num_dict_2[i])
self.assertEqual(num_dict_1.get(i), dict_1.get(i))
self.assertEqual(num_dict_0.get(i), dict_0.get(i))
for i in ['purple', None, 12312301924091284, 23]:
self.assertEqual(n2.get(i), d2.get(i), i)
self.assertEqual(num_dict_2.get(i), dict_2.get(i), i)
with self.assertRaises(AssertionError):
i = '1'
self.assertEqual(n2.get(i), d2.get(i), i) # d2 expects string key which does not exist
self.assertEqual(num_dict_2.get(i), dict_2.get(i), i) # dict_2 expects string key which does not exist
# Test "in" iteration.
n2b = n2
num_dict_2b = num_dict_2
for i in range(20):
n2[i] = str(i)
n2b[str(i)] = str(i)
self.assertEqual(n2, n2b)
num_dict_2[i] = str(i)
num_dict_2b[str(i)] = str(i)
self.assertEqual(num_dict_2, num_dict_2b)
ikeys = []
for k in n2:
for k in num_dict_2:
ikeys.append(k)
self.assertEqual(set(ikeys), set(n2.keys()))
self.assertEqual(set(ikeys), set(num_dict_2.keys()))
# Test setdefault
x = 1
t = NumDict()
self.assertEqual(t.setdefault(x, 42), 42)
self.assertEqual(t.setdefault(x, '42'), 42)
self.assertNotEqual(t.setdefault(x, 42), '42')
self.assertNotEqual(t.setdefault(x, '42'), '42')
self.assertIn(x, t)
self.assertEqual(t.setdefault(x, 23), 42)
self.assertEqual(t.setdefault(x, '23'), 42)
self.assertNotEqual(t.setdefault(x, 23), '42')
self.assertNotEqual(t.setdefault(x, '23'), '42')
self.assertIn(x, t)
val = 1
test = NumDict()
self.assertEqual(test.setdefault(val, 42), 42)
self.assertEqual(test.setdefault(val, '42'), 42)
self.assertNotEqual(test.setdefault(val, 42), '42')
self.assertNotEqual(test.setdefault(val, '42'), '42')
self.assertIn(val, test)
self.assertEqual(test.setdefault(val, 23), 42)
self.assertEqual(test.setdefault(val, '23'), 42)
self.assertNotEqual(test.setdefault(val, 23), '42')
self.assertNotEqual(test.setdefault(val, '23'), '42')
self.assertIn(val, test)
# Test pop
x = 1
t = NumDict({x: 42})
self.assertEqual(t.pop(x), 42)
self.assertRaises(KeyError, t.pop, x)
self.assertEqual(t.pop(x, 1), 1)
t[x] = 42
self.assertEqual(t.pop(x, 1), 42)
val = 1
test = NumDict({val: 42})
self.assertEqual(test.pop(val), 42)
self.assertRaises(KeyError, test.pop, val)
self.assertEqual(test.pop(val, 1), 1)
test[val] = 42
self.assertEqual(test.pop(val, 1), 42)
# Test popitem
x = 1
t = NumDict({x: 42})
self.assertEqual(t.popitem(), (x, 42))
self.assertRaises(KeyError, t.popitem)
val = 1
test = NumDict({val: 42})
self.assertEqual(test.popitem(), (val, 42))
self.assertRaises(KeyError, test.popitem)
def test_missing(self):
"""
Test missing keys
"""
# Make sure NumDict doesn't have a __missing__ method
self.assertEqual(hasattr(NumDict, "__missing__"), False)
class D(NumDict):
class NumDictD(NumDict):
"""
subclass defines __missing__ method returning a value
"""
def __missing__(self, key):
return 42
d = D({1: 2, 3: 4})
self.assertEqual(d[1], 2)
self.assertEqual(d[3], 4)
self.assertNotIn(2, d)
self.assertNotIn(2, d.keys())
self.assertEqual(d[2], 42)
class E(NumDict):
def __missing__(self, key): # pylint: disable=no-self-use
key = 42
return key
num_dict_d = NumDictD({1: 2, 3: 4})
self.assertEqual(num_dict_d[1], 2)
self.assertEqual(num_dict_d[3], 4)
self.assertNotIn(2, num_dict_d)
self.assertNotIn(2, num_dict_d.keys())
self.assertEqual(num_dict_d[2], 42)
class NumDictE(NumDict):
"""
subclass defines __missing__ method raising RuntimeError
"""
def __missing__(self, key):
def __missing__(self, key): # pylint: disable=no-self-use
raise RuntimeError(key)
e = E()
num_dict_e = NumDictE()
try:
e[42]
num_dict_e[42]
except RuntimeError as err:
self.assertEqual(err.args, (42,))
else:
self.fail("e[42] didn't raise RuntimeError")
self.fail("num_dict_e[42] didn't raise RuntimeError")
class F(NumDict):
class NumDictF(NumDict):
"""
subclass sets __missing__ instance variable (no effect)
"""
......@@ -448,40 +463,43 @@ class NumDictTest(unittest.TestCase):
# An instance variable __missing__ should have no effect
self.__missing__ = lambda key: None
NumDict.__init__(self)
f = F()
num_dict_f = NumDictF()
try:
f[42]
num_dict_f[42]
except KeyError as err:
self.assertEqual(err.args, (42,))
else:
self.fail("f[42] didn't raise KeyError")
self.fail("num_dict_f[42] didn't raise KeyError")
class G(NumDict):
class NumDictG(NumDict):
"""
subclass doesn't define __missing__ at a all
"""
pass
g = G()
num_dict_g = NumDictG()
try:
g[42]
num_dict_g[42]
except KeyError as err:
self.assertEqual(err.args, (42,))
else:
self.fail("g[42] didn't raise KeyError")
self.fail("num_dict_g[42] didn't raise KeyError")
class H(D):
class NumDictH(NumDictD):
"""
subclass calls super classes __missing__ and modifies the value before returning it
"""
def __missing__(self, key):
return super(H, self).__missing__(key) + 1
def __missing__(self, key): # pylint: disable=arguments-differ
return super(NumDictH, self).__missing__(key) + 1
h = H()
self.assertEqual(h[None], d[None]+1)
num_dict_h = NumDictH()
self.assertEqual(num_dict_h[None], num_dict_d[None]+1)
def test_main():
"""
Run tests when run as main
"""
import logging
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment