github.com/rhettli/gopher-lua@v0.0.0-20200830072439-712e2f816099/_glua-tests/issues.lua (about) 1 2 -- issue #10 3 local function inspect(options) 4 options = options or {} 5 return type(options) 6 end 7 assert(inspect(nil) == "table") 8 9 local function inspect(options) 10 options = options or setmetatable({}, {__mode = "test"}) 11 return type(options) 12 end 13 assert(inspect(nil) == "table") 14 15 -- issue #16 16 local ok, msg = pcall(function() 17 local a = {} 18 a[nil] = 1 19 end) 20 assert(not ok and string.find(msg, "table index is nil", 1, true)) 21 22 -- issue #19 23 local tbl = {1,2,3,4,5} 24 assert(#tbl == 5) 25 assert(table.remove(tbl) == 5) 26 assert(#tbl == 4) 27 assert(table.remove(tbl, 3) == 3) 28 assert(#tbl == 3) 29 30 -- issue #24 31 local tbl = {string.find('hello.world', '.', 0)} 32 assert(tbl[1] == 1 and tbl[2] == 1) 33 assert(string.sub('hello.world', 0, 2) == "he") 34 35 -- issue 33 36 local a,b 37 a = function () 38 pcall(function() 39 end) 40 coroutine.yield("a") 41 return b() 42 end 43 44 b = function () 45 return "b" 46 end 47 48 local co = coroutine.create(a) 49 assert(select(2, coroutine.resume(co)) == "a") 50 assert(select(2, coroutine.resume(co)) == "b") 51 assert(coroutine.status(co) == "dead") 52 53 -- issue 37 54 function test(a, b, c) 55 b = b or string.format("b%s", a) 56 c = c or string.format("c%s", a) 57 assert(a == "test") 58 assert(b == "btest") 59 assert(c == "ctest") 60 end 61 test("test") 62 63 -- issue 39 64 assert(string.match("あいうえお", ".*あ.*") == "あいうえお") 65 assert(string.match("あいうえお", "あいうえお") == "あいうえお") 66 67 -- issue 47 68 assert(string.gsub("A\nA", ".", "A") == "AAA") 69 70 -- issue 62 71 local function level4() error("error!") end 72 local function level3() level4() end 73 local function level2() level3() end 74 local function level1() level2() end 75 local ok, result = xpcall(level1, function(err) 76 return debug.traceback("msg", 10) 77 end) 78 assert(result == [[msg 79 stack traceback:]]) 80 ok, result = xpcall(level1, function(err) 81 return debug.traceback("msg", 9) 82 end) 83 assert(result == string.gsub([[msg 84 stack traceback: 85 @TAB@[G]: ?]], "@TAB@", "\t")) 86 local ok, result = xpcall(level1, function(err) 87 return debug.traceback("msg", 0) 88 end) 89 90 assert(result == string.gsub([[msg 91 stack traceback: 92 @TAB@[G]: in function 'traceback' 93 @TAB@issues.lua:87: in function <issues.lua:86> 94 @TAB@[G]: in function 'error' 95 @TAB@issues.lua:71: in function 'level4' 96 @TAB@issues.lua:72: in function 'level3' 97 @TAB@issues.lua:73: in function 'level2' 98 @TAB@issues.lua:74: in function <issues.lua:74> 99 @TAB@[G]: in function 'xpcall' 100 @TAB@issues.lua:86: in main chunk 101 @TAB@[G]: ?]], "@TAB@", "\t")) 102 103 local ok, result = xpcall(level1, function(err) 104 return debug.traceback("msg", 3) 105 end) 106 107 assert(result == string.gsub([[msg 108 stack traceback: 109 @TAB@issues.lua:71: in function 'level4' 110 @TAB@issues.lua:72: in function 'level3' 111 @TAB@issues.lua:73: in function 'level2' 112 @TAB@issues.lua:74: in function <issues.lua:74> 113 @TAB@[G]: in function 'xpcall' 114 @TAB@issues.lua:103: in main chunk 115 @TAB@[G]: ?]], "@TAB@", "\t")) 116 117 -- issue 81 118 local tbl = { 119 [-1] = "a", 120 [0] = "b", 121 [1] = "c", 122 } 123 local a, b = next(tbl, nil) 124 assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c") 125 local a, b = next(tbl, a) 126 assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c") 127 local a, b = next(tbl, a) 128 assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c") 129 local a, b = next(tbl, a) 130 assert( a == nil and b == nil) 131 132 local tbl = {'a', 'b'} 133 local a, b = next(tbl, nil) 134 assert(a == 1 and b == "a") 135 local a, b = next(tbl, a) 136 assert(a == 2 and b == "b") 137 local a, b = next(tbl, a) 138 assert(a == nil and b == nil) 139 140 -- issue 82 141 local cr = function() 142 return coroutine.wrap(function() 143 coroutine.yield(1, "a") 144 coroutine.yield(2, "b") 145 end) 146 end 147 148 local f = cr() 149 local a, b = f() 150 assert(a == 1 and b == "a") 151 local a, b = f() 152 assert(a == 2 and b == "b") 153 154 -- issue 91, 92 155 local url = "www.aaa.bbb_abc123-321-cba_abc123" 156 assert(string.match(url, ".-([%w-]*)[.]*") == "www") 157 158 local s = "hello.world" 159 assert(s:match("([^.]+).world") == "hello") 160 161 local s = "hello-world" 162 assert(s:match("([^-]+)-world") == "hello") 163 164 -- issue 93 165 local t = {} 166 local ok, msg = pcall(function() t.notfound() end) 167 assert(not ok and string.find(msg, "attempt to call a non-function object", 1, true)) 168 169 -- issue 150 170 local util = { 171 fn = function() end 172 } 173 local b 174 local x = util.fn( 175 1, 176 (b or {}).x) 177 178 local s = [=[["a"]['b'][9] - ["a"]['b'][8] > ]=] 179 local result = {} 180 for i in s:gmatch([=[[[][^%s,]*[]]]=]) do 181 table.insert(result, i) 182 end 183 assert(result[1] == [=[["a"]['b'][9]]=]) 184 assert(result[2] == [=[["a"]['b'][8]]=]) 185 186 -- issue 168 187 local expected = 1 188 189 local result = math.random(1) 190 191 assert(result == expected) 192 193 -- issue 202 194 local t = {} 195 ok, res = pcall(table.remove, t) 196 if not ok or not res then 197 table.insert(t, {}) 198 else 199 assert(false) 200 end 201 ok, res = pcall(table.remove, t) 202 ok, res = pcall(table.remove, t) 203 assert(not ok or not res) 204 205 -- issue 204 206 local ok, message = pcall(nil) 207 assert(not ok) 208 assert(message == "attempt to call a nil value") 209 210 local ok, message = pcall(1) 211 assert(not ok) 212 assert(message == "attempt to call a number value") 213 214 ok, message = pcall(function() 215 pcall() 216 end) 217 assert(not ok and string.find(message, "bad argument #1 to pcall", 1, true)) 218 219 -- issue 216 220 local function bar() 221 return "bar" 222 end 223 224 local function test(foo) 225 local should_not_change 226 foo = foo or bar() 227 print(should_not_change) 228 return should_not_change 229 end 230 231 assert(test(nil) == nil) 232 233 -- issue 220 234 function test() 235 function f(v) 236 return v 237 end 238 local tbl = {y=0} 239 local a,b 240 a, b = f(10), f(20) 241 assert(tbl.y == 0) 242 end 243 test() 244 245 -- issue 222 246 function test() 247 local m = {n=2} 248 249 function m:f1() 250 return self:f3() >= self.n 251 end 252 253 function m:f2() 254 local v1, v2, v3 = m:f1() 255 assert(v1 == true) 256 assert(v2 == nil) 257 assert(v3 == nil) 258 end 259 260 function m:f3() 261 return 3 262 end 263 264 m:f2() 265 end 266 test() 267 268 -- issue #292 269 function test() 270 t0 = {} 271 t0.year = 2006 272 t0.month = 1 273 t0.day = 2 274 t0.hour = 15 275 t0.min = 4 276 t0.sec = 5 277 278 t1 = {} 279 t1.year = "2006" 280 t1.month = "1" 281 t1.day = "2" 282 t1.hour = "15" 283 t1.min = "4" 284 t1.sec = "5" 285 286 assert(os.time(t0) == os.time(t1)) 287 288 t2 = {} 289 t2.year = " 2006"--prefix blank space 290 t2.month = "1" 291 t2.day = "2" 292 t2.hour = "15" 293 t2.min = "4" 294 t2.sec = "5" 295 assert(os.time(t0) == os.time(t2)) 296 297 t3 = {} 298 t3.year = " 0002006"--prefix blank space and 0 299 t3.month = "1" 300 t3.day = "2" 301 t3.hour = "15" 302 t3.min = "4" 303 t3.sec = "5" 304 assert(os.time(t1) == os.time(t3)) 305 306 t4 = {} 307 t4.year = "0002006"--prefix 0 308 t4.month = "1" 309 t4.day = "2" 310 t4.hour = "15" 311 t4.min = "4" 312 t4.sec = "5" 313 assert(os.time(t1) == os.time(t4)) 314 315 t5 = {} 316 t5.year = "0x7d6"--prefix 0x 317 t5.month = "1" 318 t5.day = "2" 319 t5.hour = "15" 320 t5.min = "4" 321 t5.sec = "5" 322 assert(os.time(t1) == os.time(t5)) 323 324 t6 = {} 325 t6.year = "0X7d6"--prefix 0X 326 t6.month = "1" 327 t6.day = "2" 328 t6.hour = "15" 329 t6.min = "4" 330 t6.sec = "5" 331 assert(os.time(t1) == os.time(t6)) 332 end 333 test()