blob: 0686c7870ff727a5b138b2f4394cd834fa0e467c [file] [log] [blame]
def test_keys_work():
g = new_graph()
k1 = g.key("t1", "id1")
assert.eq(type(k1), "graph.key")
assert.eq(str(k1), '[t1("id1")]')
assert.true(k1)
k2 = g.key("t1", "id1") # exact same as k1
assert.true(k1 == k2)
k3 = g.key("t1", "id1", "t2", "id2")
assert.true(k1 != k3)
assert.eq(str(k3), '[t1("id1"), t2("id2")]')
# Can be used as key in dicts.
d = {}
d[k1] = "1"
assert.eq(d[k2], "1")
# '@' in front is OK.
g.key("@t1", "id")
g.key("@t1", "id", "t2", "id")
# '@' in IDs is not syntactically significant.
g.key("t1", "@id")
def test_keys_attrs():
g = new_graph()
k = g.key("k1", "i1", "k2", "i2", "k3", "i3")
assert.eq(dir(k), ["container", "id", "kind", "root"])
assert.eq(k.id, "i3")
assert.eq(k.kind, "k3")
assert.eq(k.container, g.key("k1", "i1", "k2", "i2"))
assert.eq(k.container.container, g.key("k1", "i1"))
assert.eq(k.container.container.container, None)
assert.eq(k.root, g.key("k1", "i1"))
assert.eq(k.root.root, k.root) # an invariant for roots
def test_keys_fail():
g = new_graph()
assert.fails(lambda: g.key(), "empty key path")
assert.fails(lambda: g.key("t1"), "has odd number of components")
assert.fails(
lambda: g.key("t1", None),
"all arguments must be strings, arg #1 was NoneType",
)
assert.fails(lambda: g.key("t1", "i1\000sneaky"), "has zero byte inside")
assert.fails(
lambda: g.key("t1", "id", "@t1", "id"),
'kind "@t1" can appear only at the start of the key path',
)
def test_keys_incomparable():
# Keys from different graphs are not equal, even if they have same path.
k1 = new_graph().key("t1", "id1")
k2 = new_graph().key("t1", "id1")
assert.true(k1 != k2)
test_keys_work()
test_keys_attrs()
test_keys_fail()
test_keys_incomparable()