예제 #1
0
def test_modifier_supply():
    class A:
        foo = 0
        bar = 0

    class B:
        a = Unique(A)

    mod1 = InstanceModifier(A).thatSets(foo=1)
    mod2 = InstanceModifier(A).thatSets(bar=1)

    b1 = Builder(B).withA(mod1, mod2).build()
    b2 = Builder(B).withA([mod1, mod2]).build()
    b3 = Builder(B).withA(*[mod1, mod2]).build()
    b4 = Builder(B).withA([mod1], [mod2]).build()
    b5 = Builder(B).withA([mod1], mod2).build()

    def test(b):
        assert b.a.foo == 1
        assert b.a.bar == 1

    test(b1)
    test(b2)
    test(b3)
    test(b4)
    test(b5)
예제 #2
0
def test_reuse():
    d1 = Builder(Down).withA(InstanceModifier(Up).thatSets(id=1)).build()

    # assert d1 in d1.up.downs  FIXME: this should work

    d2 = Builder(Down).withA(InstanceModifier(Up).thatSets(id=1)).build()
    d3 = Builder(Down).withA(InstanceModifier(Up).thatSets(id=2)).build()

    assert d1.up == d2.up
    # assert d1 in d2.up.downs  FIXME: this should work
    # assert d2 in d2.up.downs  FIXME: this should work
    assert d1.up != d3.up
예제 #3
0
def test_reused_keys_mod():
    builder = Builder(ReusingKey).withA(
        InstanceModifier(A).thatSets(b='ololo'))
    rk1 = builder.build()
    rk2 = builder.build()
    rk3 = builder.withA(InstanceModifier(A).thatSets(b='hahaha')).build()

    assert isinstance(rk1.a, A)
    assert isinstance(rk2.a, A)
    assert isinstance(rk3.a, A)
    assert rk1.a == rk2.a
    assert rk1.b == rk2.b
    assert rk1.a != rk3.a
예제 #4
0
def test_class_modifiers_over_lambda():
    modifier = InstanceModifier(A).thatDoes(lambda a: setattr(a, 'value', 8))

    a = Builder(A).withA(modifier).build()

    assert isinstance(a, A)
    assert a.value == 8
예제 #5
0
def test_thatSetsCarefully_is_careful():
    with pytest.raises(AssertionError) as e:
        Builder(CarefulA).withA(
            InstanceModifier(CarefulA).thatCarefullySets(foo='bar')).build()

    assert 'foo' in e.value.message
    assert 'missing' in e.value.message
예제 #6
0
def test_thatSets():
    class A:
        pass

    a = Builder(A).withA(InstanceModifier(A).thatSets(ololo=1,
                                                      hahaha=2)).build()
    assert a.ololo == 1
    assert a.hahaha == 2
예제 #7
0
def test_one_of():
    class A:
        a = 0
        b = Uplink()

    class B:
        values = Collection(A)

    A.b.linksTo(B, B.values)

    b = Builder(B).withA(NumberOf(B.values, 3)).\
        withA(OneOf(B.values, InstanceModifier(A).thatSets(a=8))).\
        withA(OneOf(B.values, InstanceModifier(A).thatSets(a=5))).\
        build()

    assert len(b.values) == 3
    assert len([a for a in b.values if a.a == 8]) == 1
    assert len([a for a in b.values if a.a == 5]) == 1
예제 #8
0
def test_another_modifier():
    class A:
        a = 0
        b = Uplink()

    class B:
        values = Collection(A)

    A.b.linksTo(B, B.values)

    b = Builder(B).withA(NumberOf(B.values, 1)).\
        withA(Another(B.values, InstanceModifier(A).thatSets(a=4))).\
        withA(Another(B.values, InstanceModifier(A).thatSets(a=28))).build()

    assert len(b.values) == 3
    assert len([a for a in b.values if a.a == 0]) == 1
    assert len([a for a in b.values if a.a == 4]) == 1
    assert len([a for a in b.values if a.a == 28]) == 1
예제 #9
0
def test_class_modifier_as_class():
    def set_value(instance):
        A.value = 5

    M = InstanceModifier(A).thatDoes(set_value)

    a = Builder(A).withA(M).build()

    assert isinstance(a, A)
    assert a.value == 5
예제 #10
0
def test_modifies_dont_affect_given():
    class A:
        value = 0

    class B:
        a = Unique(A)

    myA = A()
    myA.value = 1

    b = Builder(B).withA(Given(B.a, myA)).withA(
        InstanceModifier(A).thatSets(value=5)).build()

    assert b.a.value == 1
    assert b.a == myA
예제 #11
0
def test_sum():
    mod_1 = InstanceModifier(A).thatSets(x=1)
    mod_2 = InstanceModifier(B).thatSets(x=1)

    assert mod_1 + mod_2 == [mod_1, mod_2]
예제 #12
0
def test_thatSetsCarefully_works():
    a = Builder(CarefulA).withA(
        InstanceModifier(CarefulA).thatCarefullySets(ololo=1,
                                                     hahaha=2)).build()
    assert a.ololo == 1
    assert a.hahaha == 2
예제 #13
0
from builders.construct import Collection, Unique, Maybe


class A(ValuesMixin):
    a = 1


class B:
    a = Unique(A)
    ma = Maybe(Unique(A))
    aa = Collection(A)


def foo(a):
    pass


@pytest.mark.parametrize('modifier', [
    InstanceModifier(A).thatDoes(foo),
    InstanceModifier(A).thatSets(a=2),
    InstanceModifier(A).thatCarefullySets(a=2),
    A.values(a=2),
    NumberOf(B.aa, 2),
    HavingIn(B.aa, A()),
    Given(B.a, A()),
    Enabled(B.ma),
    OneOf(B.aa, [[]])
])
def test_modifier(modifier):
    assert pickle.loads(pickle.dumps(modifier))
예제 #14
0
def test_modifier_over_collection():
    modifier = InstanceModifier(B).thatDoes(lambda b: setattr(b, 'value', 8))
    d = Builder(D).withA(modifier).build()

    for b in d.bs:
        assert b.value == 8
예제 #15
0
def test_simple_setter():
    modifier = InstanceModifier(B).thatDoes(lambda b: setattr(b, 'value', 1))

    built = Builder(B).withA(modifier).build()
    assert built.value == 1