github.com/rhettli/gopher-lua@v0.0.0-20200830072439-712e2f816099/auxlib_test.go (about) 1 package lua 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 ) 8 9 func TestCheckInt(t *testing.T) { 10 L := NewState() 11 defer L.Close() 12 errorIfGFuncNotFail(t, L, func(L *LState) int { 13 L.Push(LNumber(10)) 14 errorIfNotEqual(t, 10, L.CheckInt(2)) 15 L.Push(LString("aaa")) 16 L.CheckInt(3) 17 return 0 18 }, "number expected, got string") 19 } 20 21 func TestCheckInt64(t *testing.T) { 22 L := NewState() 23 defer L.Close() 24 errorIfGFuncNotFail(t, L, func(L *LState) int { 25 L.Push(LNumber(10)) 26 errorIfNotEqual(t, int64(10), L.CheckInt64(2)) 27 L.Push(LString("aaa")) 28 L.CheckInt64(3) 29 return 0 30 }, "number expected, got string") 31 } 32 33 func TestCheckNumber(t *testing.T) { 34 L := NewState() 35 defer L.Close() 36 errorIfGFuncNotFail(t, L, func(L *LState) int { 37 L.Push(LNumber(10)) 38 errorIfNotEqual(t, LNumber(10), L.CheckNumber(2)) 39 L.Push(LString("aaa")) 40 L.CheckNumber(3) 41 return 0 42 }, "number expected, got string") 43 } 44 45 func TestCheckString(t *testing.T) { 46 L := NewState() 47 defer L.Close() 48 errorIfGFuncNotFail(t, L, func(L *LState) int { 49 L.Push(LString("aaa")) 50 errorIfNotEqual(t, "aaa", L.CheckString(2)) 51 L.Push(LNumber(10)) 52 errorIfNotEqual(t, "10", L.CheckString(3)) 53 L.Push(L.NewTable()) 54 L.CheckString(4) 55 return 0 56 }, "string expected, got table") 57 } 58 59 func TestCheckBool(t *testing.T) { 60 L := NewState() 61 defer L.Close() 62 errorIfGFuncNotFail(t, L, func(L *LState) int { 63 L.Push(LTrue) 64 errorIfNotEqual(t, true, L.CheckBool(2)) 65 L.Push(LNumber(10)) 66 L.CheckBool(3) 67 return 0 68 }, "boolean expected, got number") 69 } 70 71 func TestCheckTable(t *testing.T) { 72 L := NewState() 73 defer L.Close() 74 errorIfGFuncNotFail(t, L, func(L *LState) int { 75 tbl := L.NewTable() 76 L.Push(tbl) 77 errorIfNotEqual(t, tbl, L.CheckTable(2)) 78 L.Push(LNumber(10)) 79 L.CheckTable(3) 80 return 0 81 }, "table expected, got number") 82 } 83 84 func TestCheckFunction(t *testing.T) { 85 L := NewState() 86 defer L.Close() 87 errorIfGFuncNotFail(t, L, func(L *LState) int { 88 fn := L.NewFunction(func(l *LState) int { return 0 }) 89 L.Push(fn) 90 errorIfNotEqual(t, fn, L.CheckFunction(2)) 91 L.Push(LNumber(10)) 92 L.CheckFunction(3) 93 return 0 94 }, "function expected, got number") 95 } 96 97 func TestCheckUserData(t *testing.T) { 98 L := NewState() 99 defer L.Close() 100 errorIfGFuncNotFail(t, L, func(L *LState) int { 101 ud := L.NewUserData() 102 L.Push(ud) 103 errorIfNotEqual(t, ud, L.CheckUserData(2)) 104 L.Push(LNumber(10)) 105 L.CheckUserData(3) 106 return 0 107 }, "userdata expected, got number") 108 } 109 110 func TestCheckThread(t *testing.T) { 111 L := NewState() 112 defer L.Close() 113 errorIfGFuncNotFail(t, L, func(L *LState) int { 114 th, _ := L.NewThread() 115 L.Push(th) 116 errorIfNotEqual(t, th, L.CheckThread(2)) 117 L.Push(LNumber(10)) 118 L.CheckThread(3) 119 return 0 120 }, "thread expected, got number") 121 } 122 123 func TestCheckChannel(t *testing.T) { 124 L := NewState() 125 defer L.Close() 126 errorIfGFuncNotFail(t, L, func(L *LState) int { 127 ch := make(chan LValue) 128 L.Push(LChannel(ch)) 129 errorIfNotEqual(t, ch, L.CheckChannel(2)) 130 L.Push(LString("aaa")) 131 L.CheckChannel(3) 132 return 0 133 }, "channel expected, got string") 134 } 135 136 func TestCheckType(t *testing.T) { 137 L := NewState() 138 defer L.Close() 139 errorIfGFuncNotFail(t, L, func(L *LState) int { 140 L.Push(LNumber(10)) 141 L.CheckType(2, LTNumber) 142 L.CheckType(2, LTString) 143 return 0 144 }, "string expected, got number") 145 } 146 147 func TestCheckTypes(t *testing.T) { 148 L := NewState() 149 defer L.Close() 150 errorIfGFuncNotFail(t, L, func(L *LState) int { 151 L.Push(LNumber(10)) 152 L.CheckTypes(2, LTString, LTBool, LTNumber) 153 L.CheckTypes(2, LTString, LTBool) 154 return 0 155 }, "string or boolean expected, got number") 156 } 157 158 func TestCheckOption(t *testing.T) { 159 opts := []string{ 160 "opt1", 161 "opt2", 162 "opt3", 163 } 164 L := NewState() 165 defer L.Close() 166 errorIfGFuncNotFail(t, L, func(L *LState) int { 167 L.Push(LString("opt1")) 168 errorIfNotEqual(t, 0, L.CheckOption(2, opts)) 169 L.Push(LString("opt5")) 170 L.CheckOption(3, opts) 171 return 0 172 }, "invalid option: opt5 \\(must be one of opt1,opt2,opt3\\)") 173 } 174 175 func TestOptInt(t *testing.T) { 176 L := NewState() 177 defer L.Close() 178 errorIfGFuncNotFail(t, L, func(L *LState) int { 179 errorIfNotEqual(t, 99, L.OptInt(1, 99)) 180 L.Push(LNumber(10)) 181 errorIfNotEqual(t, 10, L.OptInt(2, 99)) 182 L.Push(LString("aaa")) 183 L.OptInt(3, 99) 184 return 0 185 }, "number expected, got string") 186 } 187 188 func TestOptInt64(t *testing.T) { 189 L := NewState() 190 defer L.Close() 191 errorIfGFuncNotFail(t, L, func(L *LState) int { 192 errorIfNotEqual(t, int64(99), L.OptInt64(1, int64(99))) 193 L.Push(LNumber(10)) 194 errorIfNotEqual(t, int64(10), L.OptInt64(2, int64(99))) 195 L.Push(LString("aaa")) 196 L.OptInt64(3, int64(99)) 197 return 0 198 }, "number expected, got string") 199 } 200 201 func TestOptNumber(t *testing.T) { 202 L := NewState() 203 defer L.Close() 204 errorIfGFuncNotFail(t, L, func(L *LState) int { 205 errorIfNotEqual(t, LNumber(99), L.OptNumber(1, LNumber(99))) 206 L.Push(LNumber(10)) 207 errorIfNotEqual(t, LNumber(10), L.OptNumber(2, LNumber(99))) 208 L.Push(LString("aaa")) 209 L.OptNumber(3, LNumber(99)) 210 return 0 211 }, "number expected, got string") 212 } 213 214 func TestOptString(t *testing.T) { 215 L := NewState() 216 defer L.Close() 217 errorIfGFuncNotFail(t, L, func(L *LState) int { 218 errorIfNotEqual(t, "bbb", L.OptString(1, "bbb")) 219 L.Push(LString("aaa")) 220 errorIfNotEqual(t, "aaa", L.OptString(2, "bbb")) 221 L.Push(LNumber(10)) 222 L.OptString(3, "bbb") 223 return 0 224 }, "string expected, got number") 225 } 226 227 func TestOptBool(t *testing.T) { 228 L := NewState() 229 defer L.Close() 230 errorIfGFuncNotFail(t, L, func(L *LState) int { 231 errorIfNotEqual(t, true, L.OptBool(1, true)) 232 L.Push(LTrue) 233 errorIfNotEqual(t, true, L.OptBool(2, false)) 234 L.Push(LNumber(10)) 235 L.OptBool(3, false) 236 return 0 237 }, "boolean expected, got number") 238 } 239 240 func TestOptTable(t *testing.T) { 241 L := NewState() 242 defer L.Close() 243 errorIfGFuncNotFail(t, L, func(L *LState) int { 244 deftbl := L.NewTable() 245 errorIfNotEqual(t, deftbl, L.OptTable(1, deftbl)) 246 tbl := L.NewTable() 247 L.Push(tbl) 248 errorIfNotEqual(t, tbl, L.OptTable(2, deftbl)) 249 L.Push(LNumber(10)) 250 L.OptTable(3, deftbl) 251 return 0 252 }, "table expected, got number") 253 } 254 255 func TestOptFunction(t *testing.T) { 256 L := NewState() 257 defer L.Close() 258 errorIfGFuncNotFail(t, L, func(L *LState) int { 259 deffn := L.NewFunction(func(l *LState) int { return 0 }) 260 errorIfNotEqual(t, deffn, L.OptFunction(1, deffn)) 261 fn := L.NewFunction(func(l *LState) int { return 0 }) 262 L.Push(fn) 263 errorIfNotEqual(t, fn, L.OptFunction(2, deffn)) 264 L.Push(LNumber(10)) 265 L.OptFunction(3, deffn) 266 return 0 267 }, "function expected, got number") 268 } 269 270 func TestOptUserData(t *testing.T) { 271 L := NewState() 272 defer L.Close() 273 errorIfGFuncNotFail(t, L, func(L *LState) int { 274 defud := L.NewUserData() 275 errorIfNotEqual(t, defud, L.OptUserData(1, defud)) 276 ud := L.NewUserData() 277 L.Push(ud) 278 errorIfNotEqual(t, ud, L.OptUserData(2, defud)) 279 L.Push(LNumber(10)) 280 L.OptUserData(3, defud) 281 return 0 282 }, "userdata expected, got number") 283 } 284 285 func TestOptChannel(t *testing.T) { 286 L := NewState() 287 defer L.Close() 288 errorIfGFuncNotFail(t, L, func(L *LState) int { 289 defch := make(chan LValue) 290 errorIfNotEqual(t, defch, L.OptChannel(1, defch)) 291 ch := make(chan LValue) 292 L.Push(LChannel(ch)) 293 errorIfNotEqual(t, ch, L.OptChannel(2, defch)) 294 L.Push(LString("aaa")) 295 L.OptChannel(3, defch) 296 return 0 297 }, "channel expected, got string") 298 } 299 300 func TestLoadFileForShebang(t *testing.T) { 301 tmpFile, err := ioutil.TempFile("", "") 302 errorIfNotNil(t, err) 303 304 err = ioutil.WriteFile(tmpFile.Name(), []byte(`#!/path/to/lua 305 print("hello") 306 `), 0644) 307 errorIfNotNil(t, err) 308 309 defer func() { 310 tmpFile.Close() 311 os.Remove(tmpFile.Name()) 312 }() 313 314 L := NewState() 315 defer L.Close() 316 317 _, err = L.LoadFile(tmpFile.Name()) 318 errorIfNotNil(t, err) 319 } 320 321 func TestLoadFileForEmptyFile(t *testing.T) { 322 tmpFile, err := ioutil.TempFile("", "") 323 errorIfNotNil(t, err) 324 325 defer func() { 326 tmpFile.Close() 327 os.Remove(tmpFile.Name()) 328 }() 329 330 L := NewState() 331 defer L.Close() 332 333 _, err = L.LoadFile(tmpFile.Name()) 334 errorIfNotNil(t, err) 335 }