data structures: Dictionaries: tests

tests

the code in tests/test_dictionaries.py from dictionaries

import unittest


class TestDictionaries(unittest.TestCase):

    def test_make_a_dictionary(self):
        self.assertEqual(dict(), {})
        self.assertEqual(dict(key='value'), {'key': 'value'})

    def test_make_a_dictionary_w_none_as_a_key(self):
        self.assertEqual({None: 'boom'}, {None: 'boom'})

    def test_make_a_dictionary_w_a_boolean_as_a_key(self):
        self.assertEqual(
            {False: 'boom', True: 'bap'},
            {False: 'boom', True: 'bap'}
        )

    def test_make_a_dictionary_w_a_number_as_a_key(self):
        self.assertEqual(
            {0: 'boom', 0.1: 'bap'},
            {0: 'boom', 0.1: 'bap'}
        )

    def test_make_a_dictionary_w_a_tuple_as_a_key(self):
        self.assertEqual(
            {(0, 1): 'boom'},
            {(0, 1): 'boom'}
        )

    def test_make_a_dictionary_w_a_list_as_a_key(self):
        with self.assertRaises(TypeError):
            {[3, 2, 1]: 'BOOM!'}

    def test_make_a_dictionary_w_a_set_as_a_key(self):
        with self.assertRaises(TypeError):
            {{3, 2, 1}: 'BOOM!'}

    def test_make_a_dictionary_w_a_dictionary_as_a_key(self):
        a_dictionary = {'key': 'value'}
        with self.assertRaises(TypeError):
            {a_dictionary: 'BOOM!'}

    def test_attributes_and_methods_of_dictionaries(self):
        self.maxDiff = None
        self.assertEqual(
            dir(dict),
            [
                '__class__',
                '__class_getitem__',
                '__contains__',
                '__delattr__',
                '__delitem__',
                '__dir__',
                '__doc__',
                '__eq__',
                '__format__',
                '__ge__',
                '__getattribute__',
                '__getitem__',
                '__getstate__',
                '__gt__',
                '__hash__',
                '__init__',
                '__init_subclass__',
                '__ior__',
                '__iter__',
                '__le__',
                '__len__',
                '__lt__',
                '__ne__',
                '__new__',
                '__or__',
                '__reduce__',
                '__reduce_ex__',
                '__repr__',
                '__reversed__',
                '__ror__',
                '__setattr__',
                '__setitem__',
                '__sizeof__',
                '__str__',
                '__subclasshook__',
                'clear',
                'copy',
                'fromkeys',
                'get',
                'items',
                'keys',
                'pop',
                'popitem',
                'setdefault',
                'update',
                'values'
            ]
        )

    def test_clear_empties_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertIsNone(a_dictionary.clear())
        self.assertEqual(a_dictionary, {})

    def test_copy_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertEqual(a_dictionary.copy(), {'key': 'value'})
        self.assertEqual(a_dictionary, {'key': 'value'})

    def test_fromkeys_makes_a_dictionary_from_an_iterable(self):
        self.assertEqual(
            dict.fromkeys((0, 1), 'default'),
            {0: 'default', 1: 'default'}
        )

    def test_get_a_value_from_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertEqual(a_dictionary.get('not_in_dictionary', 'default'), 'default')
        self.assertEqual(a_dictionary.get('key', 'default'), 'value')

    def test_items_returns_key_value_pairs_of_a_dictionary(self):
        a_dictionary = {
            'key1': 'value1',
            'keyN': 'valueN',
        }
        self.assertEqual(
            list(a_dictionary.items()),
            [('key1', 'value1'), ('keyN', 'valueN')]
        )

    def test_keys_of_a_dictionary(self):
        a_dictionary = {
            'key1': 'value1',
            'keyN': 'valueN',
        }
        self.assertEqual(
            list(a_dictionary.keys()),
            ['key1', 'keyN']
        )

    def test_pop_removes_given_key_from_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertEqual(a_dictionary.pop('key'), 'value')
        self.assertEqual(a_dictionary, {})

        with self.assertRaises(KeyError):
            a_dictionary.pop('not_in_dictionary')

    def test_popitem_removes_and_returns_last_key_value_pair_from_a_dictionary(self):
        a_dictionary = {
            'key1': 'value1',
            'keyN': 'valueN',
        }
        self.assertEqual(a_dictionary.popitem(), ('keyN', 'valueN'))
        self.assertEqual(a_dictionary, {'key1': 'value1'})
        self.assertEqual(a_dictionary.popitem(), ('key1', 'value1'))

    def test_setdefault_adds_key_w_a_default_value_to_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertEqual(a_dictionary.setdefault('new_key', 'default'), 'default')
        self.assertEqual(a_dictionary.setdefault('key', 'default'), 'value')
        self.assertEqual(
            a_dictionary,
            {
                'key': 'value',
                'new_key': 'default',
            }
        )

    def test_update_a_dictionary(self):
        a_dictionary = {'key': 'value'}
        self.assertIsNone(a_dictionary.update(new_key='new value'))
        self.assertIsNone(a_dictionary.update(key='updated value'))
        self.assertIsNone(a_dictionary.update({'another_key': 'another value'}))
        self.assertEqual(
            a_dictionary,
            {
                'key': 'updated value',
                'new_key': 'new value',
                'another_key': 'another value',
            }
        )

    def test_values_of_a_dictionary(self):
        a_dictionary = {
            'key1': 'value1',
            'keyN': 'valueN',
        }
        self.assertEqual(
            list(a_dictionary.values()),
            ['value1', 'valueN']
        )

    def test_key_error(self):
        a_dictionary = {'key': 'value'}
        self.assertEqual(a_dictionary['key'], 'value')
        self.assertEqual(a_dictionary.get('not_in_dictionary', 'default'), 'default')

        with self.assertRaises(KeyError):
            a_dictionary['not_in_dictionary']
        with self.assertRaises(KeyError):
            a_dictionary.pop('not_in_dictionary')
        with self.assertRaises(KeyError):
            {}.popitem()


# Exceptions Encountered
# AssertionError
# TypeError
# NameError
# KeyError