*** empty log message ***
[luabind.git] / test / test_construction.cpp
blob262bb81f626aa4ee67a32e04f283946ad748403c
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 namespace
28 struct A : counted_type<A>
30 int test;
31 A(int a) { test = a; }
32 A(const A&) { test = 1; }
33 A() { test = 2; }
34 ~A() {}
37 void f(A*, const A&) {}
39 struct B: A, counted_type<B>
41 int test2;
42 B(int a):A(a) { test2 = a; }
43 B() { test2 = 3; }
44 ~B() {}
47 struct C : counted_type<C> {};
49 struct base1 : counted_type<base1>
51 virtual void doSomething() = 0;
52 virtual ~base1() {}
55 struct deriv_1 : base1, counted_type<deriv_1>
57 void doSomething() {}
60 struct deriv_2 : deriv_1, counted_type<deriv_2>
62 void doMore() {}
66 } // anonymous namespace
69 void test_construction()
71 COUNTER_GUARD(A);
72 COUNTER_GUARD(B);
73 COUNTER_GUARD(C);
74 COUNTER_GUARD(base1);
75 COUNTER_GUARD(deriv_1);
76 COUNTER_GUARD(deriv_2);
78 lua_state L;
80 using namespace luabind;
82 module(L)
84 class_<A>("A")
85 .def("f", &f)
86 .def_readonly("test", &A::test)
87 .def(constructor<int>())
88 .def(constructor<const A&>())
89 .def(constructor<>()),
91 class_<B, A>("B")
92 .def(constructor<int>())
93 .def(constructor<>())
94 .def_readonly("test2", &B::test2),
96 class_<C>("C")
100 DOSTRING_EXPECTED(L, "a = C()", "no constructor of 'C' matched the arguments ()\n candidates are:\n");
102 DOSTRING(L,
103 "a = A(4)\n"
104 "assert(a.test == 4)");
106 DOSTRING(L,
107 "a2 = A(a)\n"
108 "assert(a2.test == 1)");
110 DOSTRING(L,
111 "b = B(6)\n"
112 "assert(b.test2 == 6)\n");
113 DOSTRING(L, "assert(b.test == 6)");
115 DOSTRING(L,
116 "b2 = B()\n"
117 "assert(b2.test2 == 3)\n");
118 DOSTRING(L, "assert(b2.test == 2)");