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
...
@@ -684,6 +684,14 @@ namespace NLua
LuaLib
.
LuaPushNil
(
luaState
);
LuaLib
.
LuaPushNil
(
luaState
);
}
}
}
else
{
}
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
// 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
// is not sufficient. valid data members may return nil and therefore there must be some
// way to know the member just doesn't exist.
// way to know the member just doesn't exist.
...
...
tests/LuaTests.cs
View file @
d7f1849b
...
@@ -21,69 +21,94 @@ using NUnit.Framework;
...
@@ -21,69 +21,94 @@ using NUnit.Framework;
namespace
NLuaTest
namespace
NLuaTest
{
{
#
if
MONOTOUCH
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
[
Preserve
(
AllMembers
=
true
)]
#
endif
#
endif
public
class
TestCaseName
{
public
class
master
public
string
name
=
"name"
;
public
string
Name
{
get
{
return
"**"
+
name
+
"**"
;
}
}
}
#if MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
#endif
public
class
Vector
{
{
public
double
x
;
public
static
string
read
()
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
();
return
"test-master"
;
r
.
x
=
v
.
x
*
k
;
r
.
y
=
v
.
y
*
k
;
return
r
;
}
public
void
Func
()
{
Console
.
WriteLine
(
"Func"
);
}
}
}
}
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
]
[
TestFixture
]
#
if
MONOTOUCH
#
if
MONOTOUCH
[
Preserve
(
AllMembers
=
true
)]
[
Preserve
(
AllMembers
=
true
)]
#
endif
#
endif
public
class
LuaTests
public
class
LuaTests
{
{
public
static
readonly
char
UnicodeChar
=
'\
uE007
'
;
public
static
readonly
char
UnicodeChar
=
'\
uE007
'
;
public
static
string
UnicodeString
public
static
string
UnicodeString
{
{
get
get
{
{
return
Convert
.
ToString
(
UnicodeChar
);
return
Convert
.
ToString
(
UnicodeChar
);
}
}
}
}
/*
/*
* Tests capturing an exception
* Tests capturing an exception
...
@@ -165,20 +190,20 @@ namespace NLuaTest
...
@@ -165,20 +190,20 @@ namespace NLuaTest
lua
.
DoString
(
"val=test.Struct.val"
);
lua
.
DoString
(
"val=test.Struct.val"
);
Assert
.
AreEqual
(
2.0d
,
(
double
)
lua
[
"val"
]);
Assert
.
AreEqual
(
2.0d
,
(
double
)
lua
[
"val"
]);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestStructHashesEqual
()
public
void
TestStructHashesEqual
()
{
{
using
(
Lua
lua
=
new
Lua
())
using
(
Lua
lua
=
new
Lua
())
{
{
lua
.
DoString
(
"luanet.load_assembly('NLuaTest')"
);
lua
.
DoString
(
"luanet.load_assembly('NLuaTest')"
);
lua
.
DoString
(
"TestStruct=luanet.import_type('NLuaTest.Mock.TestStruct')"
);
lua
.
DoString
(
"TestStruct=luanet.import_type('NLuaTest.Mock.TestStruct')"
);
lua
.
DoString
(
"struct1=TestStruct(0)"
);
lua
.
DoString
(
"struct1=TestStruct(0)"
);
lua
.
DoString
(
"struct2=TestStruct(0)"
);
lua
.
DoString
(
"struct2=TestStruct(0)"
);
lua
.
DoString
(
"struct2.val=1"
);
lua
.
DoString
(
"struct2.val=1"
);
Assert
.
AreEqual
(
0
,
(
double
)
lua
[
"struct1.val"
]);
Assert
.
AreEqual
(
0
,
(
double
)
lua
[
"struct1.val"
]);
}
}
}
}
[
Test
]
[
Test
]
...
@@ -1887,17 +1912,17 @@ namespace NLuaTest
...
@@ -1887,17 +1912,17 @@ namespace NLuaTest
lua
.
DoString
(
"test:Print('this will pass')"
);
lua
.
DoString
(
"test:Print('this will pass')"
);
lua
.
DoString
(
"test:Print('this will ','fail')"
);
lua
.
DoString
(
"test:Print('this will ','fail')"
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestCtype
()
public
void
TestCtype
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
"import'System'"
);
lua
.
DoString
(
"import'System'"
);
var
x
=
lua
.
DoString
(
"return luanet.ctype(String)"
)[
0
];
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
]
[
Test
]
...
@@ -1910,298 +1935,310 @@ namespace NLuaTest
...
@@ -1910,298 +1935,310 @@ namespace NLuaTest
}
}
[
Test
]
[
Test
]
public
void
TestUnicodeChars
()
public
void
TestUnicodeChars
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
"import('NLuaTest')"
);
lua
.
DoString
(
"import('NLuaTest')"
);
lua
.
DoString
(
"res = LuaTests.UnicodeString"
);
lua
.
DoString
(
"res = LuaTests.UnicodeString"
);
string
res
=
(
string
)
lua
[
"res"
];
string
res
=
(
string
)
lua
[
"res"
];
Assert
.
AreEqual
(
LuaTests
.
UnicodeString
,
res
);
Assert
.
AreEqual
(
LuaTests
.
UnicodeString
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestCoroutine
()
public
void
TestCoroutine
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
RegisterFunction
(
"func1"
,
null
,
typeof
(
TestClass2
).
GetMethod
(
"func"
));
lua
.
RegisterFunction
(
"func1"
,
null
,
typeof
(
TestClass2
).
GetMethod
(
"func"
));
lua
.
DoString
(
"function yielder() "
+
lua
.
DoString
(
"function yielder() "
+
"a=1;"
+
"coroutine.yield();"
+
"a=1;"
+
"coroutine.yield();"
+
"func1(3,2);"
+
"coroutine.yield();"
+
// This line triggers System.NullReferenceException
"func1(3,2);"
+
"coroutine.yield();"
+
// This line triggers System.NullReferenceException
"a=2;"
+
"coroutine.yield();"
+
"a=2;"
+
"coroutine.yield();"
+
"end;"
+
"end;"
+
"co_routine = coroutine.create(yielder);"
+
"co_routine = coroutine.create(yielder);"
+
"while coroutine.resume(co_routine) do end;"
);
"while coroutine.resume(co_routine) do end;"
);
double
num
=
lua
.
GetNumber
(
"a"
);
double
num
=
lua
.
GetNumber
(
"a"
);
//Console.WriteLine("a="+num);
//Console.WriteLine("a="+num);
Assert
.
AreEqual
(
num
,
2d
);
Assert
.
AreEqual
(
num
,
2d
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestDebugHook
()
public
void
TestDebugHook
()
{
{
int
[]
lines
=
{
1
,
2
,
1
,
3
};
int
[]
lines
=
{
1
,
2
,
1
,
3
};
int
line
=
0
;
int
line
=
0
;
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DebugHook
+=
(
sender
,
args
)
=>
{
lua
.
DebugHook
+=
(
sender
,
args
)
=>
{
Assert
.
AreEqual
(
args
.
LuaDebug
.
currentline
,
lines
[
line
]);
Assert
.
AreEqual
(
args
.
LuaDebug
.
currentline
,
lines
[
line
]);
line
++;
line
++;
};
};
lua
.
SetDebugHook
(
NLua
.
Event
.
EventMasks
.
LUA_MASKLINE
,
0
);
lua
.
SetDebugHook
(
NLua
.
Event
.
EventMasks
.
LUA_MASKLINE
,
0
);
lua
.
DoString
(
@"function testing_hooks() return 10 end
lua
.
DoString
(
@"function testing_hooks() return 10 end
val = testing_hooks()
val = testing_hooks()
val = val + 1"
);
val = val + 1"
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestKeyWithDots
()
public
void
TestKeyWithDots
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
DoString
(
@"g_dot = {}
lua
.
DoString
(
@"g_dot = {}
g_dot['key.with.dot'] = 42"
);
g_dot['key.with.dot'] = 42"
);
Assert
.
AreEqual
(
42
,
(
int
)(
double
)
lua
[
"g_dot.key\\.with\\.dot"
]);
Assert
.
AreEqual
(
42
,
(
int
)(
double
)
lua
[
"g_dot.key\\.with\\.dot"
]);
}
}
}
}
#if !WINDOWS_PHONE && !NET_3_5
#if !WINDOWS_PHONE && !NET_3_5
[
Test
]
[
Test
]
public
void
TestOperatorAdd
()
public
void
TestOperatorAdd
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
+
b
;
var
x
=
a
+
b
;
lua
[
"a"
]
=
a
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a + b"
)
[
0
];
var
res
=
lua
.
DoString
(
@"return a + b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
Assert
.
AreEqual
(
x
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestOperatorMinus
()
public
void
TestOperatorMinus
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
-
b
;
var
x
=
a
-
b
;
lua
[
"a"
]
=
a
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a - b"
)
[
0
];
var
res
=
lua
.
DoString
(
@"return a - b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
Assert
.
AreEqual
(
x
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestOperatorMultiply
()
public
void
TestOperatorMultiply
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
*
b
;
var
x
=
a
*
b
;
lua
[
"a"
]
=
a
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a * b"
)
[
0
];
var
res
=
lua
.
DoString
(
@"return a * b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
Assert
.
AreEqual
(
x
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestOperatorEqual
()
public
void
TestOperatorEqual
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
==
b
;
var
x
=
a
==
b
;
lua
[
"a"
]
=
a
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a == b"
)
[
0
];
var
res
=
lua
.
DoString
(
@"return a == b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
Assert
.
AreEqual
(
x
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestOperatorNotEqual
()
public
void
TestOperatorNotEqual
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
a
=
new
System
.
Numerics
.
Complex
(
10
,
0
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
b
=
new
System
.
Numerics
.
Complex
(
0
,
3
);
var
x
=
a
!=
b
;
var
x
=
a
!=
b
;
lua
[
"a"
]
=
a
;
lua
[
"a"
]
=
a
;
lua
[
"b"
]
=
b
;
lua
[
"b"
]
=
b
;
var
res
=
lua
.
DoString
(
@"return a ~= b"
)
[
0
];
var
res
=
lua
.
DoString
(
@"return a ~= b"
)
[
0
];
Assert
.
AreEqual
(
x
,
res
);
Assert
.
AreEqual
(
x
,
res
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestUnaryMinus
()
public
void
TestUnaryMinus
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('System.Numerics')
lua
.
DoString
(
@" import ('System.Numerics')
c = Complex (10, 5)
c = Complex (10, 5)
c = -c "
);
c = -c "
);
var
expected
=
new
System
.
Numerics
.
Complex
(-
10
,
-
5
);
var
expected
=
new
System
.
Numerics
.
Complex
(-
10
,
-
5
);
var
res
=
lua
[
"c"
];
var
res
=
lua
[
"c"
];
Assert
.
AreEqual
(
expected
,
res
);
Assert
.
AreEqual
(
expected
,
res
);
}
}
}
}
#endif
#endif
[
Test
]
[
Test
]
public
void
TestCaseFields
()
public
void
TestCaseFields
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
lua
.
DoString
(
@" import ('NLuaTest')
x = TestCaseName()
x = TestCaseName()
name = x.name;
name = x.name;
name2 = x.Name;
name2 = x.Name;
Name = x.Name;
Name = x.Name;
Name2 = x.name"
);
Name2 = x.name"
);
Assert
.
AreEqual
(
"name"
,
lua
[
"name"
]);
Assert
.
AreEqual
(
"name"
,
lua
[
"name"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"name2"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"name2"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"Name"
]);
Assert
.
AreEqual
(
"**name**"
,
lua
[
"Name"
]);
Assert
.
AreEqual
(
"name"
,
lua
[
"Name2"
]);
Assert
.
AreEqual
(
"name"
,
lua
[
"Name2"
]);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestStaticOperators
()
public
void
TestStaticOperators
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v = Vector()
v.x = 10
v.x = 10
v.y = 3
v.y = 3
v = v*2 "
);
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
var
v
=
(
Vector
)
lua
[
"v"
];
Assert
.
AreEqual
(
20
,
v
.
x
,
"#1"
);
Assert
.
AreEqual
(
20
,
v
.
x
,
"#1"
);
Assert
.
AreEqual
(
6
,
v
.
y
,
"#2"
);
Assert
.
AreEqual
(
6
,
v
.
y
,
"#2"
);
lua
.
DoString
(
@" x = 2 * v"
);
lua
.
DoString
(
@" x = 2 * v"
);
var
x
=
(
Vector
)
lua
[
"x"
];
var
x
=
(
Vector
)
lua
[
"x"
];
Assert
.
AreEqual
(
40
,
x
.
x
,
"#3"
);
Assert
.
AreEqual
(
40
,
x
.
x
,
"#3"
);
Assert
.
AreEqual
(
12
,
x
.
y
,
"#4"
);
Assert
.
AreEqual
(
12
,
x
.
y
,
"#4"
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestExtensionMethods
()
public
void
TestExtensionMethods
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
lua
.
DoString
(
@" import ('NLuaTest')
lua
.
DoString
(
@" import ('NLuaTest')
v = Vector()
v = Vector()
v.x = 10
v.x = 10
v.y = 3
v.y = 3
v = v*2 "
);
v = v*2 "
);
var
v
=
(
Vector
)
lua
[
"v"
];
var
v
=
(
Vector
)
lua
[
"v"
];
double
len
=
v
.
Lenght
();
double
len
=
v
.
Lenght
();
lua
.
DoString
(
" v:Lenght() "
);
lua
.
DoString
(
" v:Lenght() "
);
lua
.
DoString
(
@" len2 = v:Lenght()"
);
lua
.
DoString
(
@" len2 = v:Lenght()"
);
double
len2
=
(
double
)
lua
[
"len2"
];
double
len2
=
(
double
)
lua
[
"len2"
];
Assert
.
AreEqual
(
len
,
len2
,
"#1"
);
Assert
.
AreEqual
(
len
,
len2
,
"#1"
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestOverloadedMethods
()
public
void
TestOverloadedMethods
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
var
obj
=
new
TestClassWithOverloadedMethod
();
var
obj
=
new
TestClassWithOverloadedMethod
();
lua
[
"obj"
]
=
obj
;
lua
[
"obj"
]
=
obj
;
lua
.
DoString
(
@"
lua
.
DoString
(
@"
obj:Func (10)
obj:Func (10)
obj:Func ('10')
obj:Func ('10')
obj:Func (10)
obj:Func (10)
obj:Func ('10')
obj:Func ('10')
obj:Func (10)
obj:Func (10)
"
);
"
);
Assert
.
AreEqual
(
3
,
obj
.
CallsToIntFunc
,
"#integer"
);
Assert
.
AreEqual
(
3
,
obj
.
CallsToIntFunc
,
"#integer"
);
Assert
.
AreEqual
(
2
,
obj
.
CallsToStringFunc
,
"#string"
);
Assert
.
AreEqual
(
2
,
obj
.
CallsToStringFunc
,
"#string"
);
}
}
}
}
[
Test
]
[
Test
]
public
void
TestGetStack
()
public
void
TestGetStack
()
{
{
using
(
Lua
lua
=
new
Lua
())
{
using
(
Lua
lua
=
new
Lua
())
{
lua
.
LoadCLRPackage
();
lua
.
LoadCLRPackage
();
m_lua
=
lua
;
m_lua
=
lua
;
lua
.
DoString
(
@"
lua
.
DoString
(
@"
import ('NLuaTest')
import ('NLuaTest')
function f1 ()
function f1 ()
f2 ()
f2 ()
end
end
function f2()
function f2()
f3()
f3()
end
end
function f3()
function f3()
LuaTests.func()
LuaTests.func()
end
end
f1 ()
f1 ()
"
);
"
);
}
}
m_lua
=
null
;
m_lua
=
null
;
}
}
public
static
void
func
()
public
static
void
func
()
{
{
#if USE_KOPILUA
#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"
;
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
();
KopiLua
.
LuaDebug
info
=
new
KopiLua
.
LuaDebug
();
#else
#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";
//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
();
KeraLua
.
LuaDebug
info
=
new
KeraLua
.
LuaDebug
();
#endif
#endif
int
level
=
0
;
int
level
=
0
;
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
();
while
(
m_lua
.
GetStack
(
level
,
ref
info
)
!=
0
)
{
while
(
m_lua
.
GetStack
(
level
,
ref
info
)
!=
0
)
{
m_lua
.
GetInfo
(
"nSl"
,
ref
info
);
m_lua
.
GetInfo
(
"nSl"
,
ref
info
);
string
name
=
"<unknow>"
;
string
name
=
"<unknow>"
;
if
(
info
.
name
!=
null
&&
!
string
.
IsNullOrEmpty
(
info
.
name
.
ToString
()))
if
(
info
.
name
!=
null
&&
!
string
.
IsNullOrEmpty
(
info
.
name
.
ToString
()))
name
=
info
.
name
.
ToString
();
name
=
info
.
name
.
ToString
();
sb
.
AppendFormat
(
"[{0}] {1}:{2} -- {3} [{4}]\n"
,
sb
.
AppendFormat
(
"[{0}] {1}:{2} -- {3} [{4}]\n"
,
level
,
info
.
shortsrc
,
info
.
currentline
,
level
,
info
.
shortsrc
,
info
.
currentline
,
name
,
info
.
namewhat
);
name
,
info
.
namewhat
);
++
level
;
++
level
;
}
}
string
x
=
sb
.
ToString
();
string
x
=
sb
.
ToString
();
Assert
.
True
(!
string
.
IsNullOrEmpty
(
x
));
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
;
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