...
1
2
3
4
5 package resolve_test
6
7 import (
8 "strings"
9 "testing"
10
11 "go.starlark.net/internal/chunkedfile"
12 "go.starlark.net/resolve"
13 "go.starlark.net/starlarktest"
14 "go.starlark.net/syntax"
15 )
16
17 func setOptions(src string) {
18 resolve.AllowGlobalReassign = option(src, "globalreassign")
19 resolve.AllowRecursion = option(src, "recursion")
20 resolve.AllowSet = option(src, "set")
21 resolve.LoadBindsGlobally = option(src, "loadbindsglobally")
22 }
23
24 func option(chunk, name string) bool {
25 return strings.Contains(chunk, "option:"+name)
26 }
27
28 func TestResolve(t *testing.T) {
29 defer setOptions("")
30 filename := starlarktest.DataFile("resolve", "testdata/resolve.star")
31 for _, chunk := range chunkedfile.Read(filename, t) {
32 f, err := syntax.Parse(filename, chunk.Source, 0)
33 if err != nil {
34 t.Error(err)
35 continue
36 }
37
38
39 setOptions(chunk.Source)
40
41 if err := resolve.File(f, isPredeclared, isUniversal); err != nil {
42 for _, err := range err.(resolve.ErrorList) {
43 chunk.GotError(int(err.Pos.Line), err.Msg)
44 }
45 }
46 chunk.Done()
47 }
48 }
49
50 func TestDefVarargsAndKwargsSet(t *testing.T) {
51 source := "def f(*args, **kwargs): pass\n"
52 file, err := syntax.Parse("foo.star", source, 0)
53 if err != nil {
54 t.Fatal(err)
55 }
56 if err := resolve.File(file, isPredeclared, isUniversal); err != nil {
57 t.Fatal(err)
58 }
59 fn := file.Stmts[0].(*syntax.DefStmt).Function.(*resolve.Function)
60 if !fn.HasVarargs {
61 t.Error("HasVarargs not set")
62 }
63 if !fn.HasKwargs {
64 t.Error("HasKwargs not set")
65 }
66 }
67
68 func TestLambdaVarargsAndKwargsSet(t *testing.T) {
69 source := "f = lambda *args, **kwargs: 0\n"
70 file, err := syntax.Parse("foo.star", source, 0)
71 if err != nil {
72 t.Fatal(err)
73 }
74 if err := resolve.File(file, isPredeclared, isUniversal); err != nil {
75 t.Fatal(err)
76 }
77 lam := file.Stmts[0].(*syntax.AssignStmt).RHS.(*syntax.LambdaExpr).Function.(*resolve.Function)
78 if !lam.HasVarargs {
79 t.Error("HasVarargs not set")
80 }
81 if !lam.HasKwargs {
82 t.Error("HasKwargs not set")
83 }
84 }
85
86 func isPredeclared(name string) bool { return name == "M" }
87
88 func isUniversal(name string) bool { return name == "U" || name == "float" }
89
View as plain text