github.com/coinstack/gopher-lua@v0.0.0-20180626044619-c9c62d4ee45e/_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)