From 1aec454e2f1196acaa5563392a6f1ef910bef01a Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Tue, 20 May 2014 15:48:50 -0700 Subject: [PATCH] Add tests for the misc.cachedproperty descriptor Add a few tests that verify it is working as expected. Change-Id: I6c062f84f7c2a6baf8fc9a697ebe2d715f82d332 --- taskflow/tests/unit/test_utils.py | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/taskflow/tests/unit/test_utils.py b/taskflow/tests/unit/test_utils.py index fbdf3ec6..ffabe7df 100644 --- a/taskflow/tests/unit/test_utils.py +++ b/taskflow/tests/unit/test_utils.py @@ -312,6 +312,65 @@ class GetAllClassNamesTest(test.TestCase): self.assertEqual(names, test_utils.RUNTIME_ERROR_CLASSES[:-2]) +class CachedPropertyTest(test.TestCase): + def test_attribute_caching(self): + + class A(object): + def __init__(self): + self.call_counter = 0 + + @misc.cachedproperty + def b(self): + self.call_counter += 1 + return 'b' + + a = A() + self.assertEqual('b', a.b) + self.assertEqual('b', a.b) + self.assertEqual(1, a.call_counter) + + def test_custom_property(self): + + class A(object): + @misc.cachedproperty('_c') + def b(self): + return 'b' + + a = A() + self.assertEqual('b', a.b) + self.assertEqual('b', a._c) + + def test_no_delete(self): + + def try_del(a): + del a.b + + class A(object): + @misc.cachedproperty + def b(self): + return 'b' + + a = A() + self.assertEqual('b', a.b) + self.assertRaises(AttributeError, try_del, a) + self.assertEqual('b', a.b) + + def test_set(self): + + def try_set(a): + a.b = 'c' + + class A(object): + @misc.cachedproperty + def b(self): + return 'b' + + a = A() + self.assertEqual('b', a.b) + self.assertRaises(AttributeError, try_set, a) + self.assertEqual('b', a.b) + + class AttrDictTest(test.TestCase): def test_ok_create(self): attrs = {