diff --git a/src/test/errors/args.lua b/src/test/errors/args.lua index 90f4182f..692bb838 100644 --- a/src/test/errors/args.lua +++ b/src/test/errors/args.lua @@ -53,16 +53,19 @@ notatable = except(sometable) notafunction = except(somefunction) notanil = except(somenil) +local structtypes = { + ['table']='', + ['function']='', + ['thread']='', + ['userdata']='', +} + local function signature(name,arglist) local t = {} for i=1,#arglist do - if type(arglist[i]) == 'table' then - t[i] = 'table' - elseif type(arglist[i]) == 'function' then - t[i] = 'function' - else - t[i] = tostring(arglist[i]) - end + local ai = arglist[i] + local ti = type(ai) + t[i] = structtypes[ti] or tostring(ai) end return name..'('..table.concat(t,',')..')' end diff --git a/src/test/errors/coroutinelibargs.lua b/src/test/errors/coroutinelibargs.lua new file mode 100644 index 00000000..15669002 --- /dev/null +++ b/src/test/errors/coroutinelibargs.lua @@ -0,0 +1,43 @@ +package.path = "?.lua;src/test/errors/?.lua" +require 'args' + +-- arg type tests for coroutine library functions + +-- coroutine.create +banner('coroutine.create') +checkallpass('coroutine.create',{somefunction}) +checkallerrors('coroutine.create',{notafunction},'bad argument') + +-- coroutine.resume +banner('coroutine.resume') +local co = coroutine.create(function() while true do coroutine.yield() end end) +checkallpass('coroutine.resume',{{co},anylua}) +checkallerrors('coroutine.resume',{anylua},'bad argument') + +-- coroutine.running +banner('coroutine.running') +checkallpass('coroutine.running',{anylua}) + +-- coroutine.status +banner('coroutine.status') +checkallpass('coroutine.status',{{co}}) +checkallerrors('coroutine.status',{anylua},'bad argument') + +-- coroutine.wrap +banner('coroutine.wrap') +checkallpass('coroutine.wrap',{somefunction}) +checkallerrors('coroutine.wrap',{notafunction},'bad argument') + +-- coroutine.yield +banner('coroutine.yield') +local function f() + print( 'yield', coroutine.yield() ) + print( 'yield', coroutine.yield(astring) ) + print( 'yield', coroutine.yield(anumber) ) + print( 'yield', coroutine.yield(aboolean) ) +end +local co = coroutine.create( f ) +repeat + print( 'resume', coroutine.resume(co,astring,anumber) ) +until coroutine.status(co) ~= 'suspended' +