Bug 1260624 - Add support for simple comparisons of ReadOnlyNamespaces. r=ted
--- a/python/mozbuild/mozbuild/test/test_containers.py
+++ b/python/mozbuild/mozbuild/test/test_containers.py
@@ -33,16 +33,23 @@ class TestReadOnlyNamespace(unittest.Tes
value = 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)
--- a/python/mozbuild/mozbuild/util.py
+++ b/python/mozbuild/mozbuild/util.py
@@ -79,16 +79,22 @@ class ReadOnlyNamespace(object):
super(ReadOnlyNamespace, self).__setattr__(k, v)
def __delattr__(self, key):
raise Exception('Object does not support deletion.')
def __setattr__(self, key, value):
raise Exception('Object does not support assignment.')
+ def __ne__(self, other):
+ return not (self == other)
+
+ def __eq__(self, other):
+ return self is other or self.__dict__ == other.__dict__
+
class ReadOnlyDict(dict):
"""A read-only dictionary."""
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
def __delitem__(self, key):
raise Exception('Object does not support deletion.')