示例#1
0
def test_content():
    class OneNode(Node):
        def __init__(self):
            Node.__init__(self, None)

        version = 0

        def create_content(self):
            self.version += 1
            return self.version

    n = OneNode()
    s = Sequence()
    s.append(n)
    s.append(n)
    m2 = Mapping()
    m2["s"] = s
    m = Mapping()
    m["s"] = s
    m["n"] = n
    m["m2"] = m2

    assert m["s"][0] == 1
    assert m["s"][1] == 1
    assert m["n"] == 1
    assert m["m2"]["s"] == [1, 1]
示例#2
0
def test_merge_mapping():
    class TestNode(MergeKey):
        def __init__(self):
            Node.__init__(self, None)

        def entries(self, value):
            return value

    sub = Mapping()
    sub["b"] = Scalar(2)
    sub["c"] = Scalar(3)
    m = Mapping({Scalar("a"): Scalar(1), TestNode(): sub})

    assert m == {"a": 1, "b": 2, "c": 3}
示例#3
0
def test_constant():
    m = Mapping()
    m["a"] = Scalar(1)
    assert m["a"] == 1
    s = Sequence()
    s.append(Scalar("hello"))
    assert s[0] == "hello"
示例#4
0
def test_unresolved_key():
    m = Mapping()
    m["a"] = Expression(".b", doc)
    init_doc(m)
    try:
        m.receive(lambda x: x)
    except Exception as e:
        assert type(e.cause) is KeyError
示例#5
0
def test_unknown_method():
    m = Mapping()
    m["a"] = Expression(".b()", doc)
    init_doc(m)
    try:
        m.receive(lambda x: x)
    except Exception as e:
        assert type(
            e.cause) is yaql.language.exceptions.NoMethodRegisteredException
示例#6
0
def test_merge_sequence():
    class TestNode(MergeKey):
        def __init__(self):
            Node.__init__(self, None)

        def entries(self, value):
            return value

    sub = Sequence([Scalar(1), Scalar(2)])
    Sequence([Scalar(0), Mapping({TestNode(): sub}), Scalar(3)])
示例#7
0
def test_mapping_accessors():
    m = Mapping()
    m["a"] = Scalar(1)
    hidden = Scalar(3)
    hidden.visible = False
    m["X"] = hidden
    m["b"] = Scalar(2)
    assert [i for i in m.items()] == [("a", 1), ("b", 2)]
    assert m == {"a": 1, "b": 2}
    assert m["X"] == 3
示例#8
0
def test_sequence_references():
    m = Mapping()
    s = Sequence()
    m["s"] = s
    s.append(Expression(".s[1] + 1", doc))
    s.append(Scalar(2))
    m["a"] = Expression(".s[0] + 1", doc)
    init_doc(m)
    assert m["a"] == 4
    assert m == {"s": [3, 2], "a": 4}
示例#9
0
def test_multiple_references():
    m = Mapping()
    s = Sequence()
    m["s"] = s
    s.append(Expression(".s[1] + 1", doc))
    s.append(Scalar(2))
    m["a"] = Expression(".s[0] + 1", doc)
    m["b"] = Expression('$_["a"] * 2', doc)
    init_doc(m)
    assert m["b"] == 8
    assert m == {"s": [3, 2], "b": 8, "a": 4}
示例#10
0
def test_circular_reference():
    m = Mapping()
    s = Sequence()
    m["s"] = s
    s.append(Expression(".s[1]", doc))
    s.append(Expression(".b", doc))
    m["b"] = Expression(".s[0]", doc)
    init_doc(m)
    try:
        m["b"]
    except Exception:
        return
示例#11
0
def test_constructor():
    m = Mapping({Scalar("a"): Scalar(2)})
    assert m["a"] == 2
    s = Sequence([Scalar(1), Scalar(2)])
    assert s[1] == 2
示例#12
0
def test_simple_reference():
    m = Mapping()
    m["a"] = Scalar(2)
    m["b"] = Expression(".a + 1", doc)
    init_doc(m)
    assert m["b"] == 3