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()