def test_environment_provides(): oe1 = Environment(a = { 'b': 1 }) oe2 = Environment(a = { 'b': { 'c': List(Integer)([1,2,3]) } } ) oe = Environment(oe1, oe2) for address in ['a.b', 'a.b.c', 'a.b.c[0]']: assert oe.provides(ref(address)) for address in ['a', 'b', 'b.c', 'a.c', 'a.b.c.d', 'a.b.c[2].d']: assert not oe.provides(ref(address)) class Nested(Struct): value = String class Composite(Struct): first = String checks = Map(Integer, Nested) ce = Environment(composite = Composite()) assert not ce.provides(ref('random')) assert ce.provides(ref('composite')) assert ce.provides(ref('composite.first')) assert not ce.provides(ref('composite.first.poop')) assert ce.provides(ref('composite.checks')) assert ce.provides(ref('composite.checks[0]')) assert ce.provides(ref('composite.checks[0].value')) assert not ce.provides(ref('composite.checks[0].nonvalue')) assert not ce.provides(ref('composite.checks[0][nonvalue]')) ce = Environment({'composite': {'unioned': 1}}, composite = Composite()) assert ce.provides(ref('composite')) assert ce.provides(ref('composite.first')) assert ce.provides(ref('composite.unioned')) assert not ce.provides(ref('composite.unioned.anythingelse'))