summaryrefslogtreecommitdiff
path: root/ThirdParty/toluapp/src/tests/tclass.lua
blob: 6dea5e98af539b56c415e6ab5232d74fc1d50e85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
if not Test then
	local loadlib
	if not package then
		loadlib = _G['loadlib']
	else
		loadlib = package.loadlib
	end
	f, e, eo = loadlib("./libtclass.so", "luaopen_tclass")
	if f then
		f()
	else
		print(eo, e)
		os.exit()
	end
end

a = {}
rawset(a, ".c_instance", "something")

function hello()

	print("hello world")
end

rawset(Test.B, "hello", hello)

-- type convertion tests
--print(Test.A)
--print(tolua.type(Test.A.last))
--assert(tolua.type(Test.A.last) == 'Test::Tst_A') -- first time the object is mapped
--assert(tolua.type(Test.B.last) == 'Test::Tst_B') -- type convertion to specialized type
--assert(tolua.type(Test.A.last) == 'Test::Tst_B') -- no convertion: obj already mapped as B


local a = Test.A:new()
assert(tolua.type(Test.A.last) == 'Test::Tst_A') -- no type convertion: same type
local b = Test.B:new()
assert(tolua.type(Test.A.last) == 'Test::Tst_B') -- no convertion: obj already mapped as B
local c = Test.luaC:new(0)
assert(tolua.type(Test.A.last) == 'Test::Tst_C') -- no convertion: obj already mapped as C
assert(tolua.type(Test.luaC.last) == 'Test::Tst_C')

local aa = Test.A.AA:new()
local bb = Test.A.BB:new()
local xx = Test.create_aa()

-- method calling tests
assert(a:a() == 'A')
assert(b:a() == 'A')
assert(b:b() == 'B')
assert(c:a() == 'A')
assert(c:b() == 'B')
assert(c:c() == 'C')
assert(aa:aa() == 'AA')
assert(bb:aa() == bb:Base():aa())
assert(xx:aa() == 'AA')
assert(Test.is_aa(bb) == true)

-- test ownershipping handling
-- should delete objects: 6 7 8 9 10 (it may vary!)
local set = {}
for i=1,10 do
 local c = Test.luaC:new(i)
	if i>5 then
		tolua.takeownership(c)
	end
	--set[i] = c
end



e = Test.B:new_local()

print("e is type "..tolua.type(e))
print("ae is type "..tolua.type(ae))

--e:delete()

b:hello()

----------
local out = Test.Outside:new_local()
out:outside()
Test.Outside:outside_static(nil)


print "***** cast"
local acast = Test.B:create_void()
print("type is "..tolua.type(acast))
local bcast = tolua.cast(acast, "Test::Tst_B")
print("bcast is "..tostring(bcast))
print("type is "..tolua.type(bcast))
print(bcast:b())

-- test properies
local n = 7
a.number = n
assert(a.number == n*2)

-- constructors
print(getmetatable(Test.A))
print(getmetatable(Test.B))
print(getmetatable(Test.E))

local a = Test.A()
local b = Test.B()
local e = Test.E(5)
--print(e+5)
print(tostring(getmetatable(Test.B).__call))
print(tostring(Test.B.__call))
print(tostring(Test.B.__call(Test.B)))
print(tolua.type(b))

e:set_ptr(e)
local ve = tolua.cast(e:get_ptr(), "Test::Tst_E")
ve:set_ptr(ve)

print"1"
Test.A.pete = {}
print"2"
table.insert(Test.A.pete, a)
print"3"


for i=1,100000 do
	la = {}
	tolua.inherit(la, a)
end

print("Class test OK")