Teach adopt() to hold the adopted pointer in custom pointer type.
[luabind.git] / test / test_construction.cpp
blobee1d887b8773635f66e754407c354bf730891484
1 // Copyright (c) 2004 Daniel Wallin and Arvid Norberg
3 // Permission is hereby granted, free of charge, to any person obtaining a
4 // copy of this software and associated documentation files (the "Software"),
5 // to deal in the Software without restriction, including without limitation
6 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 // and/or sell copies of the Software, and to permit persons to whom the
8 // Software is furnished to do so, subject to the following conditions:
10 // The above copyright notice and this permission notice shall be included
11 // in all copies or substantial portions of the Software.
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
14 // ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
15 // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
16 // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17 // SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
18 // ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
21 // OR OTHER DEALINGS IN THE SOFTWARE.
23 #include "test.hpp"
24 #include <luabind/luabind.hpp>
26 struct A : counted_type<A>
28 int test;
29 A(int a) { test = a; }
30 A(const A&) { test = 1; }
31 A() { test = 2; }
32 ~A() {}
35 void f(A*, const A&) {}
37 struct B: A, counted_type<B>
39 int test2;
40 B(int a):A(a) { test2 = a; }
41 B() { test2 = 3; }
42 ~B() {}
45 struct C : counted_type<C> {};
47 struct base1 : counted_type<base1>
49 virtual void doSomething() = 0;
50 virtual ~base1() {}
53 struct deriv_1 : base1, counted_type<deriv_1>
55 void doSomething() {}
58 struct deriv_2 : deriv_1, counted_type<deriv_2>
60 void doMore() {}
63 COUNTER_GUARD(A);
64 COUNTER_GUARD(B);
65 COUNTER_GUARD(C);
66 COUNTER_GUARD(base1);
67 COUNTER_GUARD(deriv_1);
68 COUNTER_GUARD(deriv_2);
70 void test_main(lua_State* L)
72 using namespace luabind;
74 module(L)
76 class_<A>("A")
77 .def("f", &f)
78 .def_readonly("test", &A::test)
79 .def(constructor<int>())
80 .def(constructor<const A&>())
81 .def(constructor<>()),
83 class_<B, A>("B")
84 .def(constructor<int>())
85 .def(constructor<>())
86 .def_readonly("test2", &B::test2),
88 class_<C>("C")
92 DOSTRING_EXPECTED(L, "a = C()", "attempt to call a nil value");
94 DOSTRING(L,
95 "a = A(4)\n"
96 "assert(a.test == 4)");
98 DOSTRING(L,
99 "a2 = A(a)\n"
100 "assert(a2.test == 1)");
102 DOSTRING(L,
103 "b = B(6)\n"
104 "assert(b.test2 == 6)\n");
105 DOSTRING(L, "assert(b.test == 6)");
107 DOSTRING(L,
108 "b2 = B()\n"
109 "assert(b2.test2 == 3)\n");
110 DOSTRING(L, "assert(b2.test == 2)");