Skip to content

Commit d38b998

Browse files
authored
fix error message (#9)
1 parent 482919b commit d38b998

3 files changed

Lines changed: 27 additions & 4 deletions

File tree

fixtures/error1.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
local api = require("test")
2+
3+
function main(input)
4+
return api.error1(input)
5+
end

module.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import (
1313
)
1414

1515
var (
16-
errFuncInput = errors.New("lua: function input arguments must be of type lua.Value")
17-
errFuncOutput = errors.New("lua: function return values must be either (error) or (lua.Value, error)")
16+
errFuncInput = errors.New("lua: function input arguments must be of type lua.Value")
17+
errFuncOutput = errors.New("lua: function return values must be either (error) or (lua.Value, error)")
18+
errorInterface = reflect.TypeOf((*error)(nil)).Elem()
1819
)
1920

2021
var builtin = make(map[reflect.Type]func(any) lua.LGFunction, 8)
@@ -94,12 +95,12 @@ func (g *fngen) generate() lua.LGFunction {
9495
switch len(out) {
9596
case 1:
9697
if err := out[0]; !err.IsNil() {
97-
state.RaiseError(err.String())
98+
state.RaiseError(err.Interface().(error).Error())
9899
}
99100
return 0
100101
default:
101102
if err := out[1]; !err.IsNil() {
102-
state.RaiseError(err.String())
103+
state.RaiseError(err.Interface().(error).Error())
103104
return 0
104105
}
105106

module_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package lua
55

66
import (
77
"context"
8+
"errors"
89
"fmt"
910
"hash/fnv"
1011
"strings"
@@ -29,6 +30,7 @@ func testModule() Module {
2930
must(m.Register("enrich", enrich))
3031
must(m.Register("batch", batch))
3132
must(m.Register("error", errorfunc))
33+
must(m.Register("error1", errorfunc1))
3234
return m
3335
}
3436

@@ -44,6 +46,10 @@ func errorfunc(v String) (String, error) {
4446
return "", fmt.Errorf("error with input (%v)", v)
4547
}
4648

49+
func errorfunc1(_ Table) (String, error) {
50+
return "", errors.New("throwing error")
51+
}
52+
4753
func hash(s String) (Number, error) {
4854
h := fnv.New32a()
4955
h.Write([]byte(s))
@@ -202,6 +208,17 @@ func TestErrorMessage(t *testing.T) {
202208
assert.Contains(t, err.Error(), "error with input (roman)")
203209
}
204210

211+
func TestErrorMessage1(t *testing.T) {
212+
s, err := newScript("fixtures/error1.lua")
213+
assert.NoError(t, err)
214+
215+
_, err = s.Run(context.Background(), map[string]string{
216+
"test1": "default",
217+
})
218+
assert.Error(t, err)
219+
assert.Contains(t, err.Error(), "throwing error")
220+
}
221+
205222
func TestEnrichComplexTable(t *testing.T) {
206223
s, err := newScript("fixtures/enrich.lua")
207224
assert.NoError(t, err)

0 commit comments

Comments
 (0)