def test_select(): context = Context(foo="foo", bar="bar", lst=[1, 2, 3]) assert context.select("foo") == Value("foo") assert context.select("bar") == Value("bar") assert context.select("lst") == CtxList([1, 2, 3]) assert context.select("lst.0") == Value(1) with pytest.raises(KeyNotInContext): context.select("baz") d = { "lst": [ { "foo0": "foo0", "bar0": "bar0" }, { "foo1": "foo1", "bar1": "bar1" }, ] } context = Context(d) assert context.select("lst") == CtxList(d["lst"]) assert context.select("lst.0") == CtxDict(d["lst"][0]) assert context.select("lst.1") == CtxDict(d["lst"][1]) with pytest.raises(KeyNotInContext): context.select("lst.2") for i, _ in enumerate(d["lst"]): assert context.select(f"lst.{i}.foo{i}") == Value(f"foo{i}") assert context.select(f"lst.{i}.bar{i}") == Value(f"bar{i}")
def test_context_list(): lst = ["foo", "bar", "baz"] context = Context(lst=lst) assert context["lst"] == CtxList(lst) assert context["lst"][0] == Value("foo") del context["lst"][-1] assert "baz" not in context with pytest.raises(IndexError): _ = context["lst"][3] context["lst"].insert(0, "baz") assert context["lst"] == CtxList(["baz"] + lst[:2])
def test_context_setitem_getitem(): context = Context() lst = [1, 2, "three", True, pi, b"bytes", None] context["list"] = lst assert isinstance(context["list"], CtxList) assert context["list"] == CtxList(lst) for i, val in enumerate(lst): assert context["list"][i] == Value(val) d = { "foo": "foo", "bar": "bar", "list": [ { "foo0": "foo0", "bar0": "bar0" }, { "foo1": "foo1", "bar1": "bar1" }, ], } context["data"] = d assert isinstance(context["data"], CtxDict) assert context["data"] == CtxDict(d) assert context["data"]["foo"] == Value("foo") assert context["data"]["bar"] == Value("bar") assert isinstance(context["data"]["list"], CtxList) assert context["data"]["list"] == CtxList(d["list"]) for i, val in enumerate(d["list"]): c = context["data"]["list"][i] assert isinstance(c, CtxDict) assert c == CtxDict(val) assert c[f"foo{i}"] == Value(f"foo{i}") assert c[f"bar{i}"] == Value(f"bar{i}") with pytest.raises(TypeError): context["set"] = {1, 2, 3}
def test_loop_context(): context = Context({"foo": "foo", "bar": "bar", "lst": [1, 2, 3]}) assert list(context) == ["foo", "bar", "lst"] assert len(context) == 3 assert list(context["lst"]) == [Value(i) for i in [1, 2, 3]] assert len(context["lst"]) == 3 assert list(context.items()) == [ ("foo", Value("foo")), ("bar", Value("bar")), ("lst", CtxList([1, 2, 3])), ]