Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
NLua
Commits
d7f1849b
Commit
d7f1849b
authored
Oct 24, 2014
by
Vinicius Jarina
Browse files
Fixed #116 problem accessing base class method
+ regression test.
parent
f70558bd
Changes
2
Hide whitespace changes
Inline
Side-by-side
Core/NLua/Metatables.cs
View file @
d7f1849b
...
...
@@ -684,6 +684,14 @@ namespace NLua
LuaLib
.
LuaPushNil
(
luaState
);
}
}
else
{
if
(
objType
.
UnderlyingSystemType
!=
typeof
(
object
))
{
#
if
NETFX_CORE
return
GetMember
(
luaState
,
new
ProxyType
(
objType
.
UnderlyingSystemType
.
GetTypeInfo
().
BaseType
),
obj
,
methodName
,
bindingType
);
#
else
return
GetMember
(
luaState
,
new
ProxyType
(
objType
.
UnderlyingSystemType
.
BaseType
),
obj
,
methodName
,
bindingType
);
#
endif
}
// kevinh - we want to throw an exception because meerly returning 'nil' in this case
// is not sufficient. valid data members may return nil and therefore there must be some
// way to know the member just doesn't exist.
...
...
tests/LuaTests.cs
View file @
d7f1849b
...
...
@@ -21,69 +21,94 @@ using NUnit.Framework;
namespace
NLuaTest
{
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#
endif
public
class
TestCaseName
{
public
string
name
=
"name"
;
public
string
Name
{
get
{
return
"**"
+
name
+
"**"
;
}
}
}
#if MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#endif
public
class
Vector
public
class
master
{
public
double
x
;
public
double
y
;
public
static
Vector
operator
*
(
float
k
,
Vector
v
)
{
var
r
=
new
Vector
();
r
.
x
=
v
.
x
*
k
;
r
.
y
=
v
.
y
*
k
;
return
r
;
}
public
static
Vector
operator
*
(
Vector
v
,
float
k
)
public
static
string
read
()
{
var
r
=
new
Vector
();
r
.
x
=
v
.
x
*
k
;
r
.
y
=
v
.
y
*
k
;
return
r
;
}
public
void
Func
()
{
Console
.
WriteLine
(
"Func"
);
return
"test-master"
;
}
}
public
static
class
VectorExtension
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#
endif
public
class
testClass
:
master
{
public
static
double
Lenght
(
this
Vector
v
)
public
String
strData
;
public
int
intData
;
public
static
string
read2
()
{
return
v
.
x
*
v
.
x
+
v
.
y
*
v
.
y
;
return
"test"
;
}
}
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#
endif
public
class
TestCaseName
{
public
string
name
=
"name"
;
public
string
Name
{
get
{
return
"**"
+
name
+
"**"
;
}
}
}
#if MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#endif
public
class
Vector
{
public
double
x
;
public
double
y
;
public
static
Vector
operator
*
(
float
k
,
Vector
v
)
{
var
r
=
new
Vector
();
r
.
x
=
v
.
x
*
k
;
r
.
y
=
v
.
y
*
k
;
return
r
;
}
public
static
Vector
operator
*
(
Vector
v
,
float
k
)
{
var
r
=
new
Vector
();
r
.
x
=
v
.
x
*
k
;
r
.
y
=
v
.
y
*
k
;
return
r
;
}
public
void
Func
()
{
Console
.
WriteLine
(
"Func"
);
}
}
public
static
class
VectorExtension
{
public
static
double
Lenght
(
this
Vector
v
)
{
return
v
.
x
*
v
.
x
+
v
.
y
*
v
.
y
;
}
}
[
TestFixture
]
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#
endif
public
class
LuaTests
{
public
static
readonly
char
UnicodeChar
=
'\
uE007
'
;
public
static
string
UnicodeString
{
get
{
return
Convert
.
ToString
(
UnicodeChar
);
}
{
public
static
readonly
char
UnicodeChar
=
'\
uE007
'
;
public
static
string
UnicodeString
{
get
{
return
Convert
.
ToString
(
UnicodeChar
);
}
}
/*
* Tests capturing an exception
...
...
@@ -165,20 +190,20 @@ namespace NLuaTest
lua
.
DoString
(
"val=test.Struct.val"
);
Assert
.
AreEqual
(
2.0d
,
(
double
)
lua
[
"val"
]);
}
}
[
Test
]
public
void
TestStructHashesEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
"luanet.load_assembly('NLuaTest')"
);
lua
.
DoString
(
"TestStruct=luanet.import_type('NLuaTest.Mock.TestStruct')"
);
lua
.
DoString
(
"struct1=TestStruct(0)"
);
lua
.
DoString
(
"struct2=TestStruct(0)"
);
lua
.
DoString
(
"struct2.val=1"
);
Assert
.
AreEqual
(
0
,
(
double
)
lua
[
"struct1.val"
]);
}
}
[
Test
]
public
void
TestStructHashesEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
"luanet.load_assembly('NLuaTest')"
);
lua
.
DoString
(
"TestStruct=luanet.import_type('NLuaTest.Mock.TestStruct')"
);
lua
.
DoString
(
"struct1=TestStruct(0)"
);
lua
.
DoString
(
"struct2=TestStruct(0)"
);
lua
.
DoString
(
"struct2.val=1"
);
Assert
.
AreEqual
(
0
,
(
double
)
lua
[
"struct1.val"
]);
}
}
[
Test
]
...
...
@@ -1887,17 +1912,17 @@ namespace NLuaTest
lua
.
DoString
(
"test:Print('this will pass')"
);
lua
.
DoString
(
"test:Print('this will ','fail')"
);
}
}
[
Test
]
public
void
TestCtype
()
{
using
(
Lua
lua
=
new
Lua
())
{
}
[
Test
]
public
void
TestCtype
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
"import'System'"
);
lua
.
DoString
(
"import'System'"
);
var
x
=
lua
.
DoString
(
"return luanet.ctype(String)"
)[
0
];
Assert
.
AreEqual
(
x
,
typeof
(
String
),
"#1 String ctype test"
);
}
Assert
.
AreEqual
(
x
,
typeof
(
String
),
"#1 String ctype test"
);
}
}
[
Test
]
...
...
@@ -1910,298 +1935,310 @@ namespace NLuaTest
}
[
Test
]
public
void
TestUnicodeChars
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
"import('NLuaTest')"
);
lua
.
DoString
(
"res = LuaTests.UnicodeString"
);
string
res
=
(
string
)
lua
[
"res"
];
Assert
.
AreEqual
(
LuaTests
.
UnicodeString
,
res
);
}
}
[
Test
]
public
void
TestCoroutine
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
RegisterFunction
(
"func1"
,
null
,
typeof
(
TestClass2
).
GetMethod
(
"func"
));
lua
.
DoString
(
"function yielder() "
+
"a=1;"
+
"coroutine.yield();"
+
"func1(3,2);"
+
"coroutine.yield();"
+
// This line triggers System.NullReferenceException
"a=2;"
+
"coroutine.yield();"
+
"end;"
+
"co_routine = coroutine.create(yielder);"
+
"while coroutine.resume(co_routine) do end;"
);
double
num
=
lua
.
GetNumber
(
"a"
);
//Console.WriteLine("a="+num);
Assert
.
AreEqual
(
num
,
2d
);
}
}
[
Test
]
public
void
TestDebugHook
()
{
int
[]
lines
=
{
1
,
2
,
1
,
3
};
int
line
=
0
;
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DebugHook
+=
(
sender
,
args
)
=>
{
Assert
.
AreEqual
(
args
.
LuaDebug
.
currentline
,
lines
[
line
]);
line
++;
};
lua
.
SetDebugHook
(
NLua
.
Event
.
EventMasks
.
LUA_MASKLINE
,
0
);
lua
.
DoString
(
@"function testing_hooks() return 10 end
val = testing_hooks()
val = val + 1"
);
}
}
[
Test
]
public
void
TestKeyWithDots
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
@"g_dot = {}
g_dot['key.with.dot'] = 42"
);
Assert
.
AreEqual
(
42
,
(
int
)(
double
)
lua
[
"g_dot.key\\.with\\.dot"
]);
}
public
void
TestUnicodeChars
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
"import('NLuaTest')"
);
lua
.
DoString
(
"res = LuaTests.UnicodeString"
);
string
res
=
(
string
)
lua
[
"res"
];
Assert
.
AreEqual
(
LuaTests
.
UnicodeString
,
res
);
}
}
[
Test
]
public
void
TestCoroutine
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
RegisterFunction
(
"func1"
,
null
,
typeof
(
TestClass2
).
GetMethod
(
"func"
));
lua
.
DoString
(
"function yielder() "
+
"a=1;"
+
"coroutine.yield();"
+
"func1(3,2);"
+
"coroutine.yield();"
+
// This line triggers System.NullReferenceException
"a=2;"
+
"coroutine.yield();"
+
"end;"
+
"co_routine = coroutine.create(yielder);"
+
"while coroutine.resume(co_routine) do end;"
);
double
num
=
lua
.
GetNumber
(
"a"
);
//Console.WriteLine("a="+num);
Assert
.
AreEqual
(
num
,
2d
);
}
}
[
Test
]
public
void
TestDebugHook
()
{
int
[]
lines
=
{
1
,
2
,
1
,
3
};
int
line
=
0
;
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DebugHook
+=
(
sender
,
args
)
=>
{
Assert
.
AreEqual
(
args
.
LuaDebug
.
currentline
,
lines
[
line
]);
line
++;
};
lua
.
SetDebugHook
(
NLua
.
Event
.
EventMasks
.
LUA_MASKLINE
,
0
);
lua
.
DoString
(
@"function testing_hooks() return 10 end
val = testing_hooks()
val = val + 1"
);
}
}
[
Test
]
public
void
TestKeyWithDots
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
@"g_dot = {}
g_dot['key.with.dot'] = 42"
);
Assert
.
AreEqual
(
42
,
(
int
)(
double
)
lua
[
"g_dot.key\\.with\\.dot"
]);
}
}
#if !WINDOWS_PHONE && !NET_3_5
[
Test
]
public
void
TestOperatorAdd
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
+
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a + b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorMinus
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
-
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a - b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorMultiply
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
*
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a * b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
==
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a == b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorNotEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
!=
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a ~= b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestUnaryMinus
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('System.Numerics')
c = Complex (10, 5)
c = -c "
);
var
expected
=
new
System
.
Numerics
.
Complex
(-
10
,
-
5
);
var
res
=
lua
[
"c"
];
Assert
.
AreEqual
(
expected
,
res
);
}
public
void
TestOperatorAdd
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
+
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a + b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorMinus
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
-
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a - b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorMultiply
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
*
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a * b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
==
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a == b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestOperatorNotEqual
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
!=
b
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a ~= b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
}
}
[
Test
]
public
void
TestUnaryMinus
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('System.Numerics')
c = Complex (10, 5)
c = -c "
);
var
expected
=
new
System
.
Numerics
.
Complex
(-
10
,
-
5
);
var
res
=
lua
[
"c"
];
Assert
.
AreEqual
(
expected
,
res
);
}
}
#endif
[
Test
]
public
void
TestCaseFields
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
x = TestCaseName()
name = x.name;
name2 = x.Name;
Name = x.Name;
Name2 = x.name"
);
Assert
.
AreEqual
(
"name"
,
lua
[
"name"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"name2"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"Name"
]);
Assert
.
AreEqual
(
"name"
,
lua
[
"Name2"
]);
}
}
[
Test
]
public
void
TestStaticOperators
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v.x = 10
v.y = 3
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
Assert
.
AreEqual
(
20
,
v
.
x
,
"#1"
);
Assert
.
AreEqual
(
6
,
v
.
y
,
"#2"
);
lua
.
DoString
(
@" x = 2 * v"
);
var
x
=
(
Vector
)
lua
[
"x"
];
Assert
.
AreEqual
(
40
,
x
.
x
,
"#3"
);
Assert
.
AreEqual
(
12
,
x
.
y
,
"#4"
);
}
}
[
Test
]
public
void
TestExtensionMethods
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v.x = 10
v.y = 3
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
double
len
=
v
.
Lenght
();
lua
.
DoString
(
" v:Lenght() "
);
lua
.
DoString
(
@" len2 = v:Lenght()"
);
double
len2
=
(
double
)
lua
[
"len2"
];
Assert
.
AreEqual
(
len
,
len2
,
"#1"
);
}
}
[
Test
]
public
void
TestOverloadedMethods
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
obj
=
new
TestClassWithOverloadedMethod
();
lua
[
"obj"
]
=
obj
;
lua
.
DoString
(
@"
obj:Func (10)
obj:Func ('10')
obj:Func (10)
obj:Func ('10')
obj:Func (10)
"
);
Assert
.
AreEqual
(
3
,
obj
.
CallsToIntFunc
,
"#integer"
);
Assert
.
AreEqual
(
2
,
obj
.
CallsToStringFunc
,
"#string"
);
}
}
[
Test
]
public
void
TestGetStack
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
m_lua
=
lua
;
lua
.
DoString
(
@"
import ('NLuaTest')
function f1 ()
f2 ()
end
function f2()
f3()
end
function f3()
LuaTests.func()
end
f1 ()
"
);
}
m_lua
=
null
;
}
public
static
void
func
()
{
#if USE_KOPILUA
string
expected
=
"[0] [C]:-1 -- func [field]\n[1] [string \"chunk\"]:12 -- f3 [global]\n[2] [string \"chunk\"]:8 -- f2 [global]\n[3] [string \"chunk\"]:4 -- f1 [global]\n[4] [string \"chunk\"]:15 -- <unknow> []\n"
;
KopiLua
.
LuaDebug
info
=
new
KopiLua
.
LuaDebug
();
#else
//string expected = "[0] func:-1 -- <unknown> [func]\n[1] f3:12 -- <unknown> [f3]\n[2] f2:8 -- <unknown> [f2]\n[3] f1:4 -- <unknown> [f1]\n[4] :15 -- []\n";
KeraLua
.
LuaDebug
info
=
new
KeraLua
.
LuaDebug
();
#endif
int
level
=
0
;
StringBuilder
sb
=
new
StringBuilder
();
while
(
m_lua
.
GetStack
(
level
,
ref
info
)
!=
0
)
{
m_lua
.
GetInfo
(
"nSl"
,
ref
info
);
string
name
=
"<unknow>"
;
if
(
info
.
name
!=
null
&&
!
string
.
IsNullOrEmpty
(
info
.
name
.
ToString
()))
name
=
info
.
name
.
ToString
();
sb
.
AppendFormat
(
"[{0}] {1}:{2} -- {3} [{4}]\n"
,
level
,
info
.
shortsrc
,
info
.
currentline
,
name
,
info
.
namewhat
);
++
level
;
}
string
x
=
sb
.
ToString
();
Assert
.
True
(!
string
.
IsNullOrEmpty
(
x
));
}
public
void
TestCaseFields
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
x = TestCaseName()
name = x.name;
name2 = x.Name;
Name = x.Name;
Name2 = x.name"
);
Assert
.
AreEqual
(
"name"
,
lua
[
"name"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"name2"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"Name"
]);
Assert
.
AreEqual
(
"name"
,
lua
[
"Name2"
]);
}
}
[
Test
]
public
void
TestStaticOperators
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v.x = 10
v.y = 3
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
Assert
.
AreEqual
(
20
,
v
.
x
,
"#1"
);
Assert
.
AreEqual
(
6
,
v
.
y
,
"#2"
);
lua
.
DoString
(
@" x = 2 * v"
);
var
x
=
(
Vector
)
lua
[
"x"
];
Assert
.
AreEqual
(
40
,
x
.
x
,
"#3"
);
Assert
.
AreEqual
(
12
,
x
.
y
,
"#4"
);
}
}
[
Test
]
public
void
TestExtensionMethods
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v.x = 10
v.y = 3
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
double
len
=
v
.
Lenght
();
lua
.
DoString
(
" v:Lenght() "
);
lua
.
DoString
(
@" len2 = v:Lenght()"
);
double
len2
=
(
double
)
lua
[
"len2"
];
Assert
.
AreEqual
(
len
,
len2
,
"#1"
);
}
}
[
Test
]
public
void
TestOverloadedMethods
()
{
using
(
Lua
lua
=
new
Lua
())
{
var
obj
=
new
TestClassWithOverloadedMethod
();
lua
[
"obj"
]
=
obj
;
lua
.
DoString
(
@"
obj:Func (10)
obj:Func ('10')
obj:Func (10)
obj:Func ('10')
obj:Func (10)
"
);
Assert
.
AreEqual
(
3
,
obj
.
CallsToIntFunc
,
"#integer"
);
Assert
.
AreEqual
(
2
,
obj
.
CallsToStringFunc
,
"#string"
);
}
}
[
Test
]
public
void
TestGetStack
()
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
m_lua
=
lua
;
lua
.
DoString
(
@"
import ('NLuaTest')
function f1 ()
f2 ()
end
function f2()
f3()
end
function f3()
LuaTests.func()
end
f1 ()
"
);
}
m_lua
=
null
;
}
public
static
void
func
()
{
#if USE_KOPILUA
string
expected
=
"[0] [C]:-1 -- func [field]\n[1] [string \"chunk\"]:12 -- f3 [global]\n[2] [string \"chunk\"]:8 -- f2 [global]\n[3] [string \"chunk\"]:4 -- f1 [global]\n[4] [string \"chunk\"]:15 -- <unknow> []\n"
;
KopiLua
.
LuaDebug
info
=
new
KopiLua
.
LuaDebug
();
#else
//string expected = "[0] func:-1 -- <unknown> [func]\n[1] f3:12 -- <unknown> [f3]\n[2] f2:8 -- <unknown> [f2]\n[3] f1:4 -- <unknown> [f1]\n[4] :15 -- []\n";
KeraLua
.
LuaDebug
info
=
new
KeraLua
.
LuaDebug
();
#endif
int
level
=
0
;
StringBuilder
sb
=
new
StringBuilder
();
while
(
m_lua
.
GetStack
(
level
,
ref
info
)
!=
0
)
{
m_lua
.
GetInfo
(
"nSl"
,
ref
info
);
string
name
=
"<unknow>"
;
if
(
info
.
name
!=
null
&&
!
string
.
IsNullOrEmpty
(
info
.
name
.
ToString
()))
name
=
info
.
name
.
ToString
();
sb
.
AppendFormat
(
"[{0}] {1}:{2} -- {3} [{4}]\n"
,
level
,
info
.
shortsrc
,
info
.
currentline
,
name
,
info
.
namewhat
);
++
level
;
}
string
x
=
sb
.
ToString
();
Assert
.
True
(!
string
.
IsNullOrEmpty
(
x
));
}
[
Test
]
public
void
TestCallImplicitBaseMethod
()
{
using
(
var
l
=
new
Lua
())
{
l
.
LoadCLRPackage
();
l
.
DoString
(
"import ('NLuaTest')"
);
l
.
DoString
(
"res = testClass.read() "
);
string
res
=
(
string
)
l
[
"res"
];
Assert
.
AreEqual
(
testClass
.
read
(),
res
);
}
}
static
Lua
m_lua
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment