Ejemplo n.º 1
0
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)