From d4247f516724cae2e84a4d1bef71bd47aa2fd1d8 Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Fri, 5 Mar 2021 15:59:12 +0000 Subject: text/template: wrap errors returned by template functions instead of stringifying them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #34201 Change-Id: Ic2e2967e4b01167345cf38bd006cabb206a64377 GitHub-Last-Rev: 5d0c4856550614484a8dbfb68c37aa1abcfcc529 GitHub-Pull-Request: golang/go#42398 Reviewed-on: https://go-review.googlesource.com/c/go/+/267838 Reviewed-by: Daniel Martí Trust: Daniel Martí Trust: Pontus Leitzler Trust: Cuong Manh Le Run-TryBot: Daniel Martí TryBot-Result: Go Bot --- src/text/template/exec_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/text/template/exec_test.go') diff --git a/src/text/template/exec_test.go b/src/text/template/exec_test.go index 1a129ed5af..255b111b34 100644 --- a/src/text/template/exec_test.go +++ b/src/text/template/exec_test.go @@ -902,6 +902,28 @@ func TestExecError(t *testing.T) { } } +type CustomError struct{} + +func (*CustomError) Error() string { return "heyo !" } + +// Check that a custom error can be returned. +func TestExecError_CustomError(t *testing.T) { + failingFunc := func() (string, error) { + return "", &CustomError{} + } + tmpl := Must(New("top").Funcs(FuncMap{ + "err": failingFunc, + }).Parse("{{ err }}")) + + var b bytes.Buffer + err := tmpl.Execute(&b, nil) + + var e *CustomError + if !errors.As(err, &e) { + t.Fatalf("expected custom error; got %s", err) + } +} + func TestJSEscaping(t *testing.T) { testCases := []struct { in, exp string -- cgit v1.3-5-g9baa