Add metatag test.

This commit is contained in:
James Roseborough
2010-08-18 15:03:34 +00:00
parent ac7abee7b0
commit fdeb392205
4 changed files with 43 additions and 2 deletions

View File

@@ -216,7 +216,7 @@ public class LuaValue extends Varargs {
public LuaValue call() { return callmt().call(this); } public LuaValue call() { return callmt().call(this); }
public LuaValue call(LuaValue arg) { return callmt().call(this,arg); } public LuaValue call(LuaValue arg) { return callmt().call(this,arg); }
public LuaValue call(LuaValue arg1, LuaValue arg2) { return callmt().call(this,arg1,arg2); } public LuaValue call(LuaValue arg1, LuaValue arg2) { return callmt().call(this,arg1,arg2); }
public LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) { return callmt().invoke(LuaValue.varargsOf(new LuaValue[]{this,arg1,arg2,arg3})).arg1(); } public LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) { return callmt().invoke(new LuaValue[]{this,arg1,arg2,arg3}).arg1(); }
public LuaValue method(String name) { return this.get(name).call(this); } public LuaValue method(String name) { return this.get(name).call(this); }
public LuaValue method(LuaValue name) { return this.get(name).call(this); } public LuaValue method(LuaValue name) { return this.get(name).call(this); }
public LuaValue method(String name, LuaValue arg) { return this.get(name).call(this,arg); } public LuaValue method(String name, LuaValue arg) { return this.get(name).call(this,arg); }
@@ -224,7 +224,7 @@ public class LuaValue extends Varargs {
public LuaValue method(String name, LuaValue arg1, LuaValue arg2) { return this.get(name).call(this,arg1,arg2); } public LuaValue method(String name, LuaValue arg1, LuaValue arg2) { return this.get(name).call(this,arg1,arg2); }
public LuaValue method(LuaValue name, LuaValue arg1, LuaValue arg2) { return this.get(name).call(this,arg1,arg2); } public LuaValue method(LuaValue name, LuaValue arg1, LuaValue arg2) { return this.get(name).call(this,arg1,arg2); }
public Varargs invoke() { return invoke(NONE); } public Varargs invoke() { return invoke(NONE); }
public Varargs invoke(Varargs args) { return callmt().invoke(args); } public Varargs invoke(Varargs args) { return callmt().invoke(this,args); }
public Varargs invoke(LuaValue arg,Varargs varargs) { return invoke(varargsOf(arg,varargs)); } public Varargs invoke(LuaValue arg,Varargs varargs) { return invoke(varargsOf(arg,varargs)); }
public Varargs invoke(LuaValue arg1,LuaValue arg2,Varargs varargs) { return invoke(varargsOf(arg1,arg2,varargs)); } public Varargs invoke(LuaValue arg1,LuaValue arg2,Varargs varargs) { return invoke(varargsOf(arg1,arg2,varargs)); }
public Varargs invoke(LuaValue[] args) { return invoke(varargsOf(args)); } public Varargs invoke(LuaValue[] args) { return invoke(varargsOf(args)); }

View File

@@ -557,6 +557,7 @@ public class DebugLib extends VarArgFunction {
case TBOOLEAN: LuaBoolean.s_metatable = mt; break; case TBOOLEAN: LuaBoolean.s_metatable = mt; break;
case TSTRING: LuaString.s_metatable = mt; break; case TSTRING: LuaString.s_metatable = mt; break;
case TFUNCTION: LuaFunction.s_metatable = mt; break; case TFUNCTION: LuaFunction.s_metatable = mt; break;
case TTHREAD: LuaThread.s_metatable = mt; break;
default: object.setmetatable( mt ); default: object.setmetatable( mt );
} }
return LuaValue.TRUE; return LuaValue.TRUE;

View File

@@ -49,6 +49,7 @@ public class CompatibiltyTest extends TestSuite {
public void testIoLib() { runTest("iolib"); } public void testIoLib() { runTest("iolib"); }
public void testManyUpvals() { runTest("manyupvals"); } public void testManyUpvals() { runTest("manyupvals"); }
public void testMathLib() { runTest("mathlib"); } public void testMathLib() { runTest("mathlib"); }
public void testMetatags() { runTest("metatags"); }
public void testOsLib() { runTest("oslib"); } public void testOsLib() { runTest("oslib"); }
public void testStringLib() { runTest("stringlib"); } public void testStringLib() { runTest("stringlib"); }
public void testTableLib() { runTest("tablelib"); } public void testTableLib() { runTest("tablelib"); }

39
test/lua/metatags.lua Normal file
View File

@@ -0,0 +1,39 @@
print( '---- initial metatables' )
local values = { 1, false, coroutine.create( function() end ) }
for i=1,#values do
print( debug.getmetatable( values[i] ) )
end
local mt = {
__call=function(a,b,c)
print( 'mt.__call()', type(a), type(b), type(c), b, c )
return '__call-result'
end,
}
-- pcall a function and check for a pattern in the error string
ecall = function(pattern, ...)
local s,e = pcall(...)
if not s then e = string.match(e,pattern) or e end
return s,e
end
print( '---- __call' )
for i=1,#values do
print( type(values[i]), 'before', ecall( 'attempt to call', function() return values[i]('a','b') end ) )
print( debug.setmetatable( values[i], mt ) )
print( type(values[i]), 'after', pcall( function() return values[i]() end ) )
print( type(values[i]), 'after', pcall( function() return values[i]('a') end ) )
print( type(values[i]), 'after', pcall( function() return values[i]('a','b') end ) )
print( type(values[i]), 'after', pcall( function() return values[i]('a','b','c') end ) )
print( type(values[i]), 'after', pcall( function() return values[i]('a','b','c','d') end ) )
print( debug.setmetatable( values[i], nil ) )
end
print( '---- final metatables' )
for i=1,#values do
print( debug.getmetatable( values[i] ) )
end