File: luaez_test.go

package info (click to toggle)
golang-github-brentp-goluaez 0.0~git20160116.dd35d08-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 92 kB
  • sloc: makefile: 4
file content (171 lines) | stat: -rw-r--r-- 3,942 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package goluaez_test

import (
	"testing"

	"github.com/brentp/goluaez"
	"github.com/yuin/gopher-lua"

	. "gopkg.in/check.v1"
)

func Test(t *testing.T) { TestingT(t) }

type Tester struct{}

var _ = Suite(&Tester{})

func (t *Tester) TestNew(c *C) {
	s, err := goluaez.NewState()
	c.Assert(err, IsNil)
	c.Assert(s, Not(IsNil))
}

func (t *Tester) TestNewWithCode(c *C) {
	s, err := goluaez.NewState("fnction(a, b) return a + b end")
	c.Assert(err, Not(IsNil))

	s, err = goluaez.NewState("uu = function(a, b) return a + b end")
	c.Assert(err, IsNil)
	c.Assert(s, Not(IsNil))
}

func (t *Tester) TestFuncFloat(c *C) {
	s, err := goluaez.NewState("uu = function(a, b) return a + b end")
	c.Assert(err, IsNil)
	v, e := s.Run("uu(2, 9)")
	c.Assert(e, IsNil)
	c.Assert(v, Equals, float64(11))
}

func (t *Tester) TestFuncString(c *C) {
	s, err := goluaez.NewState("uu = function(a, b) return a .. b end")
	c.Assert(err, IsNil)
	v, e := s.Run("uu(2, 9)")
	c.Assert(e, IsNil)
	c.Assert(v, Equals, "29")

}

func (t *Tester) TestFuncBool(c *C) {
	s, err := goluaez.NewState("uu = function(a, b) return a == b end")
	c.Assert(err, IsNil)
	v, e := s.Run("uu(2, 9)")
	c.Assert(e, IsNil)
	c.Assert(v, Equals, false)

	v, e = s.Run("uu('aa', 'aa')")
	c.Assert(e, IsNil)
	c.Assert(v, Equals, true)
}

func (t *Tester) TestFuncNil(c *C) {
	s, err := goluaez.NewState("uu = function(a) end")
	c.Assert(err, IsNil)
	v, e := s.Run("uu(22)")
	c.Assert(e, IsNil)
	c.Assert(v, IsNil)

}

func (t *Tester) TestFuncTable(c *C) {
	s, err := goluaez.NewState(`uu = function() 
	    a = {}
		a["a"] = 1
		a["b"] = 2
		a["c"] = 3
		return a
	end`)
	c.Assert(err, IsNil)
	v, e := s.Run("uu()")
	c.Assert(e, IsNil)
	vv, ok := v.(map[string]interface{})
	c.Assert(ok, Equals, true)
	c.Assert(len(vv), Equals, 3)
	c.Assert(vv["b"], Equals, float64(2))
}

func (t *Tester) TestFuncSlice(c *C) {
	s, err := goluaez.NewState(`uu = function()
	    local a = {22,33,44,55}
		return a
	end`)
	c.Assert(err, IsNil)
	v, e := s.Run("uu()")
	c.Assert(e, IsNil)

	vv, ok := v.([]interface{})
	c.Assert(ok, Equals, true)
	c.Assert(len(vv), Equals, 4)
	c.Assert(vv[1], Equals, float64(33))

}

func (t *Tester) TestRun(c *C) {
	s, err := goluaez.NewState(`fn = function(a, b, c)
		return a + b + c
	end`)
	c.Assert(err, IsNil)

	v, err := s.Run("fn(a, b, c)", map[string]interface{}{"a": 22, "b": float64(22), "c": "22"})
	c.Assert(err, IsNil)

	c.Assert(v, Equals, float64(66))

}

func (t *Tester) TestSliceToTable(c *C) {
	s, _ := goluaez.NewState()

	v, err := s.Run("#tbl", map[string]interface{}{"tbl": []string{"aaa", "bbb", "cccc"}})
	c.Assert(err, IsNil)
	c.Assert(v, Equals, float64(3))

	v, err = s.Run("table.concat(tbl, ',')", map[string]interface{}{"tbl": []string{"aaa", "bbb", "cccc"}})
	c.Assert(err, IsNil)
	c.Assert(v, Equals, "aaa,bbb,cccc")

	/*
		v, err = s.Run("table.concat(tbl, ',')", map[string]interface{}{"tbl": [3]string{"aaa", "bbb", "cccc"}})
		c.Assert(err, IsNil)
		c.Assert(v, Equals, "aaa,bbb,cccc")
	*/

}

func (t *Tester) TestSplit(c *C) {
	s, _ := goluaez.NewState()

	v, err := s.Run("x:split('%s')", map[string]interface{}{"x": "a b c"})
	c.Assert(err, IsNil)
	c.Assert(len(v.([]interface{})), Equals, 3)
}

func (t *Tester) TestStrip(c *C) {
	s, _ := goluaez.NewState()

	v, err := s.Run("x:strip()", map[string]interface{}{"x": " a b c "})
	c.Assert(err, IsNil)
	c.Assert(v.(string), Equals, "a b c")
}

func (t *Tester) TestGo2LValue(c *C) {

	v, err := goluaez.Go2LValue(64)
	c.Assert(err, IsNil)
	c.Assert(v, Equals, lua.LNumber(64))

	v, err = goluaez.Go2LValue(float32(32))
	c.Assert(err, IsNil)
	c.Assert(v, Equals, lua.LNumber(32))

	v, err = goluaez.Go2LValue("string")
	c.Assert(err, IsNil)
	c.Assert(v, Equals, lua.LString("string"))

	v, err = goluaez.Go2LValue([]string{"thing 1", "thing 2"})
	c.Assert(err, IsNil)
	c.Assert(v.(*lua.LTable).Len(), Equals, 2)
	c.Assert(v.(*lua.LTable).RawGetInt(2).String(), Equals, "thing 2")

}