Example #1
0
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'))