コード例 #1
0
ファイル: test_reactive.py プロジェクト: pysight/translucent
def test_observer_suspending():

    rc = Context()
    rc.new_value(v=1)
    rc.new_expression('a', lambda env: env.v)
    rc.new_observer('b', lambda env: env.a)

    raises(Exception, rc.suspend, 'v')
    raises(Exception, rc.suspend, 'a')
    raises(Exception, rc.resume, 'v')
    raises(Exception, rc.resume, 'a')
    rc.suspend('b')
    rc.run()
    assert rc['a'].exec_count is 1
    assert rc['b'].exec_count is 1

    rc.resume('b')
    rc.run()
    assert rc['a'].exec_count is 1
    assert rc['b'].exec_count is 1

    rc.suspend('b')
    assert not rc['b'].invalidated
    rc.set_value(v=2)
    assert rc['b'].invalidated
    assert rc['a'].exec_count is 1
    assert rc['b'].exec_count is 1

    rc['b'].resume()
    rc.set_value(v=2.5)
    rc['b'].suspend()
    rc.run()
    assert rc['a'].exec_count is 2
    assert rc['b'].exec_count is 2

    rc.set_value(v=3)
    assert rc['a'].exec_count is 2
    assert rc['b'].exec_count is 2

    assert rc['b'].invalidated
    rc.set_value(v=4)
    rc['b'].resume()
    rc.run()
    assert rc['a'].exec_count is 3
    assert rc['b'].exec_count is 3
    assert not rc['b'].invalidated

    rc.suspend('b')
    rc.set_value(v=5)
    rc.resume('b', run=True)
    assert rc['a'].exec_count is 4
    assert rc['b'].exec_count is 4