mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-08 01:19:12 +00:00
197 lines
4.6 KiB
Python
197 lines
4.6 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import unittest
|
|
|
|
from mozunit import main
|
|
|
|
from mozbuild.util import (
|
|
KeyedDefaultDict,
|
|
List,
|
|
OrderedDefaultDict,
|
|
ReadOnlyDefaultDict,
|
|
ReadOnlyDict,
|
|
ReadOnlyKeyedDefaultDict,
|
|
)
|
|
|
|
from collections import OrderedDict
|
|
|
|
|
|
class TestReadOnlyDict(unittest.TestCase):
|
|
def test_basic(self):
|
|
original = {'foo': 1, 'bar': 2}
|
|
|
|
test = ReadOnlyDict(original)
|
|
|
|
self.assertEqual(original, test)
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
with self.assertRaises(KeyError):
|
|
value = test['missing']
|
|
|
|
with self.assertRaises(Exception):
|
|
test['baz'] = True
|
|
|
|
def test_update(self):
|
|
original = {'foo': 1, 'bar': 2}
|
|
|
|
test = ReadOnlyDict(original)
|
|
|
|
with self.assertRaises(Exception):
|
|
test.update(foo=2)
|
|
|
|
self.assertEqual(original, test)
|
|
|
|
def test_del(self):
|
|
original = {'foo': 1, 'bar': 2}
|
|
|
|
test = ReadOnlyDict(original)
|
|
|
|
with self.assertRaises(Exception):
|
|
del test['foo']
|
|
|
|
self.assertEqual(original, test)
|
|
|
|
|
|
class TestReadOnlyDefaultDict(unittest.TestCase):
|
|
def test_simple(self):
|
|
original = {'foo': 1, 'bar': 2}
|
|
|
|
test = ReadOnlyDefaultDict(bool, original)
|
|
|
|
self.assertEqual(original, test)
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
def test_assignment(self):
|
|
test = ReadOnlyDefaultDict(bool, {})
|
|
|
|
with self.assertRaises(Exception):
|
|
test['foo'] = True
|
|
|
|
def test_defaults(self):
|
|
test = ReadOnlyDefaultDict(bool, {'foo': 1})
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
self.assertEqual(test['qux'], False)
|
|
|
|
|
|
class TestList(unittest.TestCase):
|
|
def test_add_list(self):
|
|
test = List([1, 2, 3])
|
|
|
|
test += [4, 5, 6]
|
|
self.assertIsInstance(test, List)
|
|
self.assertEqual(test, [1, 2, 3, 4, 5, 6])
|
|
|
|
test = test + [7, 8]
|
|
self.assertIsInstance(test, List)
|
|
self.assertEqual(test, [1, 2, 3, 4, 5, 6, 7, 8])
|
|
|
|
def test_add_string(self):
|
|
test = List([1, 2, 3])
|
|
|
|
with self.assertRaises(ValueError):
|
|
test += 'string'
|
|
|
|
def test_none(self):
|
|
"""As a special exception, we allow None to be treated as an empty
|
|
list."""
|
|
test = List([1, 2, 3])
|
|
|
|
test += None
|
|
self.assertEqual(test, [1, 2, 3])
|
|
|
|
test = test + None
|
|
self.assertIsInstance(test, List)
|
|
self.assertEqual(test, [1, 2, 3])
|
|
|
|
with self.assertRaises(ValueError):
|
|
test += False
|
|
|
|
with self.assertRaises(ValueError):
|
|
test = test + False
|
|
|
|
class TestOrderedDefaultDict(unittest.TestCase):
|
|
def test_simple(self):
|
|
original = OrderedDict(foo=1, bar=2)
|
|
|
|
test = OrderedDefaultDict(bool, original)
|
|
|
|
self.assertEqual(original, test)
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
self.assertEqual(test.keys(), ['foo', 'bar' ])
|
|
|
|
def test_defaults(self):
|
|
test = OrderedDefaultDict(bool, {'foo': 1 })
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
self.assertEqual(test['qux'], False)
|
|
|
|
self.assertEqual(test.keys(), ['foo', 'qux' ])
|
|
|
|
|
|
class TestKeyedDefaultDict(unittest.TestCase):
|
|
def test_simple(self):
|
|
original = {'foo': 1, 'bar': 2 }
|
|
|
|
test = KeyedDefaultDict(lambda x: x, original)
|
|
|
|
self.assertEqual(original, test)
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
def test_defaults(self):
|
|
test = KeyedDefaultDict(lambda x: x, {'foo': 1 })
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
self.assertEqual(test['qux'], 'qux')
|
|
|
|
self.assertEqual(test['bar'], 'bar')
|
|
|
|
test['foo'] = 2
|
|
test['qux'] = None
|
|
test['baz'] = 'foo'
|
|
|
|
self.assertEqual(test['foo'], 2)
|
|
|
|
self.assertEqual(test['qux'], None)
|
|
|
|
self.assertEqual(test['baz'], 'foo')
|
|
|
|
|
|
class TestReadOnlyKeyedDefaultDict(unittest.TestCase):
|
|
def test_defaults(self):
|
|
test = ReadOnlyKeyedDefaultDict(lambda x: x, {'foo': 1 })
|
|
|
|
self.assertEqual(test['foo'], 1)
|
|
|
|
self.assertEqual(test['qux'], 'qux')
|
|
|
|
self.assertEqual(test['bar'], 'bar')
|
|
|
|
copy = dict(test)
|
|
|
|
with self.assertRaises(Exception):
|
|
test['foo'] = 2
|
|
|
|
with self.assertRaises(Exception):
|
|
test['qux'] = None
|
|
|
|
with self.assertRaises(Exception):
|
|
test['baz'] = 'foo'
|
|
|
|
self.assertEqual(test, copy)
|
|
|
|
self.assertEqual(len(test), 3)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|