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