Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

# 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 collections import OrderedDict, defaultdict
from mozunit import main
from mozbuild.util import (
KeyedDefaultDict,
List,
ReadOnlyDefaultDict,
ReadOnlyDict,
ReadOnlyKeyedDefaultDict,
ReadOnlyNamespace,
)
class TestReadOnlyNamespace(unittest.TestCase):
def test_basic(self):
test = ReadOnlyNamespace(foo=1, bar=2)
self.assertEqual(test.foo, 1)
self.assertEqual(test.bar, 2)
self.assertEqual(
sorted(i for i in dir(test) if not i.startswith("__")), ["bar", "foo"]
)
with self.assertRaises(AttributeError):
test.missing
with self.assertRaises(Exception):
test.foo = 2
with self.assertRaises(Exception):
del test.foo
self.assertEqual(test, test)
self.assertEqual(test, ReadOnlyNamespace(foo=1, bar=2))
self.assertNotEqual(test, ReadOnlyNamespace(foo="1", bar=2))
self.assertNotEqual(test, ReadOnlyNamespace(foo=1, bar=2, qux=3))
self.assertNotEqual(test, ReadOnlyNamespace(foo=1, qux=3))
self.assertNotEqual(test, ReadOnlyNamespace(foo=3, bar="42"))
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):
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 = defaultdict(bool, original)
self.assertEqual(original, test)
self.assertEqual(test["foo"], 1)
self.assertEqual(list(test), ["foo", "bar"])
def test_defaults(self):
test = defaultdict(bool, {"foo": 1})
self.assertEqual(test["foo"], 1)
self.assertEqual(test["qux"], False)
self.assertEqual(list(test), ["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()