go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/lucicfg/graph/testdata/edge.star (about) 1 trace = stacktrace() 2 3 def test_add_edge_ok(): 4 g = new_graph() 5 k1 = g.key("t1", "id1") 6 k2 = g.key("t1", "id2") 7 8 g.add_edge(parent = k1, child = k2) 9 g.add_node(k1, {}) 10 g.add_node(k2, {}) 11 12 # Can be successfully finalized. 13 assert.true(g.finalize() == []) 14 15 test_add_edge_ok() 16 17 def test_edge_redeclaration(): 18 g = new_graph() 19 k1 = g.key("t1", "id1") 20 k2 = g.key("t1", "id2") 21 22 g.add_edge(parent = k1, child = k2, title = "blah") 23 24 # Redeclaring is fine. 25 g.add_edge(parent = k1, child = k2, title = "blah") 26 27 # Using a different title is fine too. 28 g.add_edge(parent = k1, child = k2, title = "zzz") 29 30 test_edge_redeclaration() 31 32 def test_cycle_detection(): 33 g = new_graph() 34 edge = lambda par, ch: g.add_edge(g.key("t", par), g.key("t", ch)) 35 36 edge("1", "2") 37 edge("2", "3") 38 edge("1", "3") 39 edge("3", "4") 40 41 assert.fails(lambda: edge("4", "1"), "introduces a cycle") 42 43 test_cycle_detection() 44 45 def test_dangling_edges(): 46 g = new_graph() 47 48 exists = g.key("t", "exists") 49 g.add_node(exists, {}) 50 51 miss = lambda id: g.key("t", str(id)) 52 53 g.add_edge(miss(0), miss(1), title = "edge1") 54 g.add_edge(miss(2), exists, title = "edge2") 55 g.add_edge(exists, miss(3), title = "edge3") 56 57 errs = g.finalize() 58 assert.eq(errs, [ 59 'relation "edge1": refers to t("0") and t("1"), neither is defined', 60 't("exists") in "edge2" refers to undefined t("2")', 61 't("exists") in "edge3" refers to undefined t("3")', 62 ]) 63 64 test_dangling_edges()