*** empty log message ***
[luabind.git] / test / test_construction.cpp
blob4fd960da5531921e9003cc970206403cfa10f491
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;
54 struct deriv_1 : base1, counted_type<deriv_1>
56 void doSomething() {}
59 struct deriv_2 : deriv_1, counted_type<deriv_2>
61 void doMore() {}
65 } // anonymous namespace
68 void test_construction()
70 COUNTER_GUARD(A);
71 COUNTER_GUARD(B);
72 COUNTER_GUARD(C);
73 COUNTER_GUARD(base1);
74 COUNTER_GUARD(deriv_1);
75 COUNTER_GUARD(deriv_2);
77 lua_state L;
79 using namespace luabind;
81 module(L)
83 class_<A>("A")
84 .def("f", &f)
85 .def_readonly("test", &A::test)
86 .def(constructor<int>())
87 .def(constructor<const A&>())
88 .def(constructor<>()),
90 class_<B, A>("B")
91 .def(constructor<int>())
92 .def(constructor<>())
93 .def_readonly("test2", &B::test2),
95 class_<C>("C")
99 DOSTRING_EXPECTED(L, "a = C()", "no constructor of 'C' matched the arguments ()\n candidates are:\n");
101 DOSTRING(L,
102 "a = A(4)\n"
103 "assert(a.test == 4)");
105 DOSTRING(L,
106 "a2 = A(a)\n"
107 "assert(a2.test == 1)");
109 DOSTRING(L,
110 "b = B(6)\n"
111 "assert(b.test2 == 6)\n");
112 DOSTRING(L, "assert(b.test == 6)");
114 DOSTRING(L,
115 "b2 = B()\n"
116 "assert(b2.test2 == 3)\n");
117 DOSTRING(L, "assert(b2.test == 2)");