Пример #1
0
def test_forward_call():
    
    forward = ForwardContext()
    
    class Result: 
        def foo(self, *args, **kwargs):
            self.args = args
            self.kwargs = kwargs
    
    R1 = Result()
    
    fa = forward_call(setattr, R1, 'x', 1)
    assert fa.barrier == 0
    assert hasattr(fa, 'result')
    assert R1.x==1

    X = forward('X')
    
    forward_call(setattr, R1, 'y', X)
    assert not hasattr(R1,'y')
    
    forward.define(10, 'X')
    assert R1.y == 10
    
    forward_call(delattr, R1, 'y')
    assert not hasattr(R1,'y')
    
    forward_call(R1.foo, 1,2, k1='a', k2='b')
    assert R1.args == (1,2)
    assert R1.kwargs == {'k1':'a', 'k2':'b'}
    

    R2 = forward('R2')
    
    def make_tuple(*x): return x
    
    tup = forward_call(make_tuple, R2.T1, R2.T2 )
    fa = forward_call(R1.foo, R2.A1, R2.A2, key1=R2.K1, key2 = tup )
    
    assert fa.barrier == 4
    
    R2 = Result()
    R2.A1 = 10
    R2.A2 = 20
    R2.K1 = 0
    R2.T1 = 'a'
    R2.T2 = 'b'
    
    forward.define(R2, 'R2')
    assert fa.barrier == 0
    
    assert R1.args == (10,20)
    assert R1.kwargs == { 'key1': 0, 'key2': ('a','b')}
    

    assert not forward.PENDING
Пример #2
0
def test_forward_context():
    
    fc = ForwardContext()
    
    assert fc.get_name(test_forward_context) == 'test_forward_context'
    assert fc.get_name(ForwardContext) == 'ForwardContext'
    assert fc.get_name('') == ''
    assert fc.get_name('howdy there') == 'howdy there'
    assert fc.get_name(int) == 'int'
    
    with pytest.raises(NameError):
        fc.get_name(1)
    with pytest.raises(NameError):
        fc.get_name(None)
    with pytest.raises(NameError):
        fc.get_name([])
    with pytest.raises(NameError):
        fc.get_name({})
    
    assert isinstance(fc('foo'), ForwardReference)
    
    foo = fc('foo1')
    with pytest.raises(NameError):
        fc('foo1')
    
    assert fc.TOPLEVEL['foo1'] is foo
    assert not fc.PENDING

    class Dummy:
        x=0
        def add(self, a, index=None):
            self.x = self.x+a

    d=Dummy()
    d.add(10)
    assert d.x == 10
    
    foo._.attach(d.add)
    assert foo in fc.PENDING
    
    fc.define(10, name='foo1')
    assert not fc.PENDING    
    assert d.x==20