class TestAtomNotification(unittest.TestCase): def setUp(self): expressions = { 'a': Expr('2'), 'b': Expr('a*10'), } self.ant = ANT() self.ns = ExpressionNamespace(expressions) self.ns.observe('_locals', self.ant.mark_observed) def test_get_value_notification(self): for v in ('a', 'b'): self.ant.observed = False self.ns.get_value(v) self.assertTrue(self.ant.observed) def test_set_value_notification(self): self.ant.observed = False self.ns.set_value('c', 5) self.assertTrue(self.ant.observed) def test_get_value_notification_no_change(self): self.ant.observed = False self.ns.get_value('b') self.assertTrue(self.ant.observed) # Should not trigger notification because 'a' was already computed when # getting 'b', so there was no change in value. self.ant.observed = False self.ns.get_value('a') self.assertFalse(self.ant.observed)