Add metatag test.
This commit is contained in:
@@ -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)); }
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
39
test/lua/metatags.lua
Normal 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
|
||||||
|
|
||||||
Reference in New Issue
Block a user