diff --git a/src/test/res/require.lua b/src/test/res/require.lua new file mode 100644 index 00000000..ed3ff7a4 --- /dev/null +++ b/src/test/res/require.lua @@ -0,0 +1,66 @@ +-- unit tests for require() function +local ids = {} +local function id(obj) + if not obj or type(obj) == 'number' or type(obj) == 'string' then + return obj + end + local v = ids[obj] + if v then + return v + end + table.insert(ids,obj) + ids[obj] = type(obj)..'.'..tostring(#ids) + return ids[obj] +end + +-- tests on require +function f( name ) + print( module( 'testmod', package.seeall ) ) + print( 'before', id(sample), id(bogus), id(_G[name]) ); + local status,result = pcall( require, name ) + if status then + print( 'pcall(require,"'..name..'")', status, id(result) ) + print( 'after', id(sample), id(bogus), id(_G[name]) ); + else + print( 'pcall(require,"'..name..'")', status ) + end +end +f('sample') +print( 'main', id(sample), id(bogus), id(custom) ); +f('sample') +print( 'main', id(sample), id(bogus), id(custom) ); +f('bogus') +print( 'main', id(sample), id(bogus), id(custom) ); + +-- custom loader chain +for i=1,4 do + print( i,id(package.loaders[i]) ) +end +function loader1( ... ) + print ('in loader1', ...) + return "loader1 didn't find anything" +end +function loader2( name, ... ) + print ('in loader2', ...) + if name ~= 'custom' then + message = "name is not 'custom'" + print ('loader2 is returning', message ) + return message + end + table = {} + result = function() + print( 'in loader function, returning', id(table) ) + return table + end + print ('loader2 is returning', id(result) ) + return result +end +function loader3( ... ) + print ('in loader3', ...) + return nil +end +package.loaders = { loader1, loader2, loader3 } +f( 'bogus' ) +print( 'main', id(sample), id(bogus), id(custom) ); +f( 'custom' ) +print( 'main', id(sample), id(bogus), id(custom) ); diff --git a/src/test/res/sample.lua b/src/test/res/sample.lua new file mode 100644 index 00000000..712560f7 --- /dev/null +++ b/src/test/res/sample.lua @@ -0,0 +1,7 @@ +-- helper file for require() tests +module( 'sample', package.seeall ) +function h() + print 'in sample.h' +end +print 'loading sample.lua' +