go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/starlark/builtins/fail_test.go (about) 1 // Copyright 2018 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package builtins 16 17 import ( 18 "testing" 19 20 "go.starlark.net/starlark" 21 22 . "github.com/smartystreets/goconvey/convey" 23 ) 24 25 func TestFail(t *testing.T) { 26 t.Parallel() 27 28 runScript := func(code string) error { 29 th := &starlark.Thread{} 30 fc := &FailureCollector{} 31 fc.Install(th) 32 _, err := starlark.ExecFile(th, "main", code, starlark.StringDict{ 33 "fail": Fail, 34 "stacktrace": Stacktrace, 35 }) 36 if f := fc.LatestFailure(); f != nil { 37 return f 38 } 39 return err 40 } 41 42 Convey("Works with default trace", t, func() { 43 err := runScript(`fail("boo")`) 44 So(err.Error(), ShouldEqual, "boo") 45 So(NormalizeStacktrace(err.(*Failure).Backtrace()), 46 ShouldContainSubstring, "main: in <toplevel>") 47 }) 48 49 Convey("Works with custom trace", t, func() { 50 err := runScript(` 51 def capture(): 52 return stacktrace() 53 54 s = capture() 55 56 fail("boo", 123, ['z'], None, trace=s) 57 `) 58 So(err.Error(), ShouldEqual, `boo 123 ["z"] None`) 59 So(NormalizeStacktrace(err.(*Failure).Backtrace()), 60 ShouldContainSubstring, "main: in capture") 61 }) 62 }