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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }