Skip to content

Commit 22391d3

Browse files
committed
test: trigger the cancelation from the execution
1 parent 1a793e5 commit 22391d3

1 file changed

Lines changed: 15 additions & 31 deletions

File tree

starlark/eval_test.go

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@ import (
1313
"os/exec"
1414
"path/filepath"
1515
"reflect"
16-
"regexp"
1716
"sort"
1817
"strings"
19-
"sync/atomic"
2018
"testing"
2119

2220
"go.starlark.net/internal/chunkedfile"
@@ -982,12 +980,10 @@ func TestCancel(t *testing.T) {
982980
// expected backtrace.
983981
{
984982
thread := new(starlark.Thread)
985-
var ready atomic.Bool
986983
predeclared := starlark.StringDict{
987-
"fibonacci": fib{},
988-
"ready": starlark.NewBuiltin("ready", func(_ *starlark.Thread, _ *starlark.Builtin, _ starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
989-
ready.Store(true)
990-
return starlark.True, nil
984+
"cancel": starlark.NewBuiltin("cancel", func(thread *starlark.Thread, _ *starlark.Builtin, _ starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
985+
thread.Cancel("nope")
986+
return starlark.None, nil
991987
}),
992988
}
993989
src := `
@@ -998,16 +994,10 @@ def g():
998994
h()
999995
1000996
def h():
1001-
for x in fibonacci:
1002-
ready()
997+
cancel()
1003998
1004999
f()
10051000
`
1006-
go func() {
1007-
for !ready.Load() {
1008-
}
1009-
thread.Cancel("nope")
1010-
}()
10111001
_, err := starlark.ExecFile(thread, "cancel.star", src, predeclared)
10121002
if fmt.Sprint(err) != "Starlark computation canceled: nope" {
10131003
t.Errorf("ExecFile returned error %q, want cancellation", err)
@@ -1020,11 +1010,12 @@ f()
10201010
t.Errorf("ExecFile: expected *starlark.EvalError; got %T, %v", err, err)
10211011
}
10221012
expectedBacktace := `
1023-
cancel.star:12:2: in <toplevel>
1013+
cancel.star:11:2: in <toplevel>
10241014
cancel.star:3:3: in f
10251015
cancel.star:6:3: in g
1016+
cancel.star:9:8: in h
10261017
`
1027-
if !strings.Contains(evalErr.Backtrace(), expectedBacktace) || !regexp.MustCompile(`cancel\.star:(10:\d+|9:\d+): in h`).MatchString(evalErr.Backtrace()) {
1018+
if !strings.Contains(evalErr.Backtrace(), expectedBacktace) {
10281019
t.Errorf("ExecFile: expected backtrace to include calls to f(), g(), and h(); got %s", evalErr.Backtrace())
10291020
}
10301021
}
@@ -1085,12 +1076,11 @@ func TestCancelWithError(t *testing.T) {
10851076
// expected backtrace.
10861077
{
10871078
thread := new(starlark.Thread)
1088-
var ready atomic.Bool
1079+
cancelErr := errors.New("nope")
10891080
predeclared := starlark.StringDict{
1090-
"fibonacci": fib{},
1091-
"ready": starlark.NewBuiltin("ready", func(_ *starlark.Thread, _ *starlark.Builtin, _ starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
1092-
ready.Store(true)
1093-
return starlark.True, nil
1081+
"cancel": starlark.NewBuiltin("cancel", func(thread *starlark.Thread, _ *starlark.Builtin, _ starlark.Tuple, _ []starlark.Tuple) (starlark.Value, error) {
1082+
thread.CancelWithError(cancelErr)
1083+
return starlark.None, nil
10941084
}),
10951085
}
10961086
src := `
@@ -1101,17 +1091,10 @@ def g():
11011091
h()
11021092
11031093
def h():
1104-
for x in fibonacci:
1105-
ready()
1094+
cancel()
11061095
11071096
f()
11081097
`
1109-
cancelErr := errors.New("nope")
1110-
go func() {
1111-
for !ready.Load() {
1112-
}
1113-
thread.CancelWithError(cancelErr)
1114-
}()
11151098
_, err := starlark.ExecFile(thread, "cancel.star", src, predeclared)
11161099
if fmt.Sprint(err) != "Starlark computation canceled: nope" {
11171100
t.Errorf("ExecFile returned error %q, want cancellation", err)
@@ -1127,11 +1110,12 @@ f()
11271110
t.Errorf("ExecFile: expected *starlark.EvalError; got %T, %v", err, err)
11281111
}
11291112
expectedBacktace := `
1130-
cancel.star:12:2: in <toplevel>
1113+
cancel.star:11:2: in <toplevel>
11311114
cancel.star:3:3: in f
11321115
cancel.star:6:3: in g
1116+
cancel.star:9:8: in h
11331117
`
1134-
if !strings.Contains(evalErr.Backtrace(), expectedBacktace) || !regexp.MustCompile(`cancel\.star:(10:\d+|9:\d+): in h`).MatchString(evalErr.Backtrace()) {
1118+
if !strings.Contains(evalErr.Backtrace(), expectedBacktace) {
11351119
t.Errorf("ExecFile: expected backtrace to include calls to f(), g(), and h(); got %s", evalErr.Backtrace())
11361120
}
11371121
}

0 commit comments

Comments
 (0)