Mercurial > code
annotate C++/Tests/Luae/TestLuae.cpp @ 225:e01ee0c72c43
Luae: begin refactoring of Luae
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 09 May 2014 17:12:25 +0200 |
parents | |
children | 927c4f3b8a88 |
rev | line source |
---|---|
225
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * TestLuae.cpp -- test the Luae class |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <cppunit/TextTestRunner.h> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <Luae.h> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <LuaeState.h> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include "TestLuae.h" |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 * Custom type Point |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 struct Point { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 int x; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 int y; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 template <> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 struct Luae::TypeInfo<Point> : Luae::TypeCustom { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 static void push(lua_State *L, const Point &point) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 lua_createtable(L, 0, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 lua_pushinteger(L, point.x); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 lua_setfield(L, -2, "x"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 lua_pushinteger(L, point.y); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 lua_setfield(L, -2, "y"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 static Point get(lua_State *L, int index) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 Point p{0, 0}; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 if (lua_type(L, index) == LUA_TTABLE) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 lua_getfield(L, index, "x"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 p.x = luaL_optint(L, -1, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 lua_pop(L, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 lua_getfield(L, index, "y"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 p.y = luaL_optint(L, -1, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 lua_pop(L, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 return p; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 static Point check(lua_State *L, int index) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 luaL_checktype(L, index, LUA_TTABLE); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 return get(L, index); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * Userdata type Object |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 struct Object { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 std::string hello() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 return "hello"; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 template <> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 struct Luae::TypeInfo<Object> : Luae::TypeUserdata { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 static constexpr const char *name = "Object"; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 int l_hello(lua_State *L) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 return Luae::push(L, Luae::check<Object>(L, 1)->hello()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 const Luae::Reg methods { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 { "hello", l_hello } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * Userdata as shared_ptr Widget |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 class Widget { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 private: |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 int m_width; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 int m_height; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 std::string m_name; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 public: |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 Widget(int width, int height, const std::string &name) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 : m_width(width) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 , m_height(height) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 , m_name(name) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 int width() const |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 return m_width; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 int height() const |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 return m_height; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 const std::string &name() const |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 return m_name; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 using WidgetPtr = std::shared_ptr<Widget>; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 template <> |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 struct Luae::TypeInfo<Widget> : Luae::TypeUserdata { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 static constexpr const char *name = "Widget"; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 int l_width(lua_State *L) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 return Luae::push(L, Luae::check<WidgetPtr>(L, 1)->width()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 int l_height(lua_State *L) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 return Luae::push(L, Luae::check<WidgetPtr>(L, 1)->height()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 int l_name(lua_State *L) |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 return Luae::push(L, Luae::check<WidgetPtr>(L, 1)->name()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 const Luae::Reg widgetMethods { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 { "width", l_width }, |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 { "height", l_height }, |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 { "name", l_name } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 }; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 * Push function tests |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 void TestLuae::pushPoint() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 Luae::dofile(L, "push.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 Luae::getglobal(L, "pushPoint"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 Luae::push(L, Point{10, 20}); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 Luae::pcall(L, 1, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 void TestLuae::pushObject() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 // Object metatable |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 Luae::newmetatable(L, "Object"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 Luae::newlib(L, methods); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 Luae::setfield(L, -2, "__index"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 Luae::pop(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 Luae::dofile(L, "push.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 Luae::getglobal(L, "pushObject"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 Luae::push(L, Object()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 Luae::pcall(L, 1, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 void TestLuae::pushShared() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 // Widget metatable |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 Luae::newmetatable(L, "Widget"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 Luae::newlib(L, widgetMethods); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 Luae::setfield(L, -2, "__index"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 Luae::pop(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 Luae::dofile(L, "push.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 Luae::getglobal(L, "pushShared"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 Luae::push(L, std::make_shared<Widget>(100, 200, "Button")); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 Luae::pcall(L, 1, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 void TestLuae::pushSharedTwice() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 // Widget metatable |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 Luae::newmetatable(L, "Widget"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 Luae::newlib(L, widgetMethods); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 Luae::setfield(L, -2, "__index"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 Luae::pop(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 auto widget = std::make_shared<Widget>(640, 480, "Screen"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 Luae::dofile(L, "push.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 Luae::getglobal(L, "pushSharedTwice"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 Luae::push(L, widget); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 Luae::push(L, widget); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 Luae::pcall(L, 2, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 * Other functions |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 void TestLuae::preload() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 Luae::preload(L, "luae", [] (lua_State *L) -> int { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 lua_createtable(L, 0, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 lua_pushstring(L, "1.0"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 lua_setfield(L, -2, "version"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 lua_pushstring(L, "Luae"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 lua_setfield(L, -2, "name"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 return 1; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 }); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 Luae::dofile(L, "loading.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 Luae::getglobal(L, "test"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 void TestLuae::require() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 Luae::require(L, "luae", [] (lua_State *L) -> int { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 lua_createtable(L, 0, 0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 lua_pushstring(L, "1.0"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 lua_setfield(L, -2, "version"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 lua_pushstring(L, "Luae"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 lua_setfield(L, -2, "name"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 return 1; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 }); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 Luae::dofile(L, "loading.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 Luae::getglobal(L, "test"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 /* -------------------------------------------------------- |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 * Standard types push / get / check |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 * -------------------------------------------------------- */ |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 void TestLuae::testbool() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 Luae::getglobal(L, "testbool"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 Luae::push(L, true); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 CPPUNIT_ASSERT_EQUAL(Luae::check<bool>(L, 1), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 void TestLuae::testdouble() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 Luae::getglobal(L, "testdouble"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 Luae::push(L, 10.0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 CPPUNIT_ASSERT_EQUAL(Luae::check<double>(L, 1), -10.0); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 void TestLuae::testint() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 Luae::getglobal(L, "testint"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 Luae::push(L, 123); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 CPPUNIT_ASSERT_EQUAL(Luae::check<int>(L, 1), -123); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 void TestLuae::testlong() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 Luae::getglobal(L, "testlong"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 Luae::push(L, 9999L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 CPPUNIT_ASSERT_EQUAL(Luae::check<long>(L, 1), -9999L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 void TestLuae::testnil() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 Luae::getglobal(L, "testnil"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 Luae::push(L, nullptr); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 CPPUNIT_ASSERT_EQUAL(Luae::type(L, -1), LUA_TNIL); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 void TestLuae::teststring() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
383 Luae::getglobal(L, "teststring"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 Luae::push(L, "Hello"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 CPPUNIT_ASSERT_EQUAL(Luae::check<std::string>(L, 1), std::string("olleH")); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 void TestLuae::testustring() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 LuaeState L; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 Luae::openlibs(L); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 try { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 std::u32string arg{'H', 'e', 'l', 'l', 'o'}; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 std::u32string expected{'o', 'l', 'l', 'e', 'H'}; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 Luae::dofile(L, "standard.lua"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 Luae::getglobal(L, "testustring"); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 Luae::push(L, arg); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 Luae::pcall(L, 1, 1); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 CPPUNIT_ASSERT_MESSAGE("u32string failure", Luae::check<std::u32string>(L, 1) == expected); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 } catch (const std::runtime_error &error) { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 CPPUNIT_ASSERT_MESSAGE("unexpected exception: " + std::string(error.what()), false); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 } |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 int main() |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 { |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 CppUnit::TextTestRunner runnerText; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 runnerText.addTest(TestLuae::suite()); |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 return runnerText.run("", false) == 1 ? 0 : 1; |
e01ee0c72c43
Luae: begin refactoring of Luae
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 } |