go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/lucicfg/testdata/misc/rule.star (about) 1 load("@stdlib//internal/graph.star", "graph") 2 load("@stdlib//internal/lucicfg.star", "lucicfg") 3 4 key = graph.key("kind", "id") 5 6 def _some_rule(ctx, arg, *, kwarg): 7 assert.eq(arg, "arg") 8 assert.eq(kwarg, "kwarg") 9 assert.eq(ctx.defaults.zzz.get(), "zzz value") 10 return graph.keyset(key) 11 12 some_rule = lucicfg.rule( 13 impl = _some_rule, 14 defaults = {"zzz": lucicfg.var()}, 15 ) 16 17 some_rule.defaults.zzz.set("zzz value") 18 19 assert.eq(str(some_rule), "<rule some_rule>") 20 assert.eq(some_rule("arg", kwarg = "kwarg").get("kind"), key) 21 22 broken_rule = lucicfg.rule(impl = lambda ctx: 123) 23 assert.fails(lambda: broken_rule(), "must return graph.keyset, got int") 24 25 assert.fails( 26 lambda: lucicfg.rule(impl = lambda: None, defaults = {123: None}), 27 "must be strings", 28 ) 29 30 assert.fails( 31 lambda: lucicfg.rule(impl = lambda: None, defaults = {"zzz": 123}), 32 "must be lucicfg.var", 33 )