go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/lucicfg/graph/testdata/key.star (about) 1 def test_keys_work(): 2 g = new_graph() 3 4 k1 = g.key("t1", "id1") 5 assert.eq(type(k1), "graph.key") 6 assert.eq(str(k1), '[t1("id1")]') 7 assert.true(k1) 8 9 k2 = g.key("t1", "id1") # exact same as k1 10 assert.true(k1 == k2) 11 12 k3 = g.key("t1", "id1", "t2", "id2") 13 assert.true(k1 != k3) 14 assert.eq(str(k3), '[t1("id1"), t2("id2")]') 15 16 # Can be used as key in dicts. 17 d = {} 18 d[k1] = "1" 19 assert.eq(d[k2], "1") 20 21 # '@' in front is OK. 22 g.key("@t1", "id") 23 g.key("@t1", "id", "t2", "id") 24 25 # '@' in IDs is not syntactically significant. 26 g.key("t1", "@id") 27 28 def test_keys_attrs(): 29 g = new_graph() 30 31 k = g.key("k1", "i1", "k2", "i2", "k3", "i3") 32 assert.eq(dir(k), ["container", "id", "kind", "root"]) 33 assert.eq(k.id, "i3") 34 assert.eq(k.kind, "k3") 35 36 assert.eq(k.container, g.key("k1", "i1", "k2", "i2")) 37 assert.eq(k.container.container, g.key("k1", "i1")) 38 assert.eq(k.container.container.container, None) 39 40 assert.eq(k.root, g.key("k1", "i1")) 41 assert.eq(k.root.root, k.root) # an invariant for roots 42 43 def test_keys_fail(): 44 g = new_graph() 45 46 assert.fails(lambda: g.key(), "empty key path") 47 assert.fails(lambda: g.key("t1"), "has odd number of components") 48 assert.fails( 49 lambda: g.key("t1", None), 50 "all arguments must be strings, arg #1 was NoneType", 51 ) 52 assert.fails(lambda: g.key("t1", "i1\000sneaky"), "has zero byte inside") 53 54 assert.fails( 55 lambda: g.key("t1", "id", "@t1", "id"), 56 'kind "@t1" can appear only at the start of the key path', 57 ) 58 59 def test_keys_incomparable(): 60 # Keys from different graphs are not equal, even if they have same path. 61 k1 = new_graph().key("t1", "id1") 62 k2 = new_graph().key("t1", "id1") 63 assert.true(k1 != k2) 64 65 test_keys_work() 66 test_keys_attrs() 67 test_keys_fail() 68 test_keys_incomparable()