1 // Copyright 2011 Google Inc.
2 // All rights reserved.
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of Google Inc. nor the names of its contributors
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 #include <atf-c++.hpp>
40 #include "exceptions.hpp"
41 #include "test_utils.hpp"
44 // A note about the lutok::state tests.
46 // The methods of lutok::state are, in general, thin wrappers around the
47 // corresponding Lua C API methods. The tests below are simple unit tests that
48 // ensure that these functions just delegate the calls to the Lua library. We
49 // do not intend to test the validity of the methods themselves (that's the
50 // job of the Lua authors). That said, we test those conditions we rely on,
51 // such as the reporting of errors and the default values to the API.
53 // Lastly, for every test case that stresses a single lutok::state method, we
54 // only call that method directly. All other Lua state manipulation operations
55 // are performed by means of direct calls to the Lua C API. This is to ensure
56 // that the wrapped methods are really talking to Lua.
62 /// Checks if a symbol is available.
64 /// \param state The Lua state.
65 /// \param symbol The symbol to check for.
67 /// \return True if the symbol is defined, false otherwise.
69 is_available(lutok::state
& state
, const char* symbol
)
71 luaL_loadstring(raw(state
), (std::string("return ") + symbol
).c_str());
72 const bool ok
= (lua_pcall(raw(state
), 0, 1, 0) == 0 &&
73 !lua_isnil(raw(state
), -1));
74 lua_pop(raw(state
), 1);
75 std::cout
<< "Symbol " << symbol
<< (ok
? " found\n" : " not found\n");
80 /// Checks that no modules are present or that only one has been loaded.
82 /// \post The test case terminates if there is any module present when expected
83 /// is empty or if there two modules loaded when expected is defined.
85 /// \param state The Lua state.
86 /// \param expected The module to expect. Empty if no modules are allowed.
88 check_modules(lutok::state
& state
, const std::string
& expected
)
90 std::cout
<< "Checking loaded modules" <<
91 (expected
.empty() ? "" : (" (" + expected
+ " expected)")) << "\n";
92 ATF_REQUIRE(!((expected
== "base") ^ (is_available(state
, "assert"))));
93 ATF_REQUIRE(!((expected
== "string") ^
94 (is_available(state
, "string.byte"))));
95 ATF_REQUIRE(!((expected
== "table") ^
96 (is_available(state
, "table.concat"))));
100 /// A C closure that returns its two integral upvalues.
102 /// \post stack(-2) contains the first upvalue.
103 /// \post stack(-1) contains the second upvalue.
105 /// \param raw_state The raw Lua state.
107 /// \return The number of result values, i.e. 2.
109 c_get_upvalues(lua_State
* raw_state
)
111 lutok::state state
= lutok::state_c_gate::connect(raw_state
);
112 const int i1
= lua_tointeger(raw_state
, state
.upvalue_index(1));
113 const int i2
= lua_tointeger(raw_state
, state
.upvalue_index(2));
114 lua_pushinteger(raw_state
, i1
);
115 lua_pushinteger(raw_state
, i2
);
120 /// A custom C++ multiply function with one of its factors on its closure.
122 /// \pre stack(-1) contains the second factor.
123 /// \post stack(-1) contains the product of the two input factors.
125 /// \param state The Lua state.
127 /// \return The number of result values, i.e. 1.
129 cxx_multiply_closure(lutok::state
& state
)
131 const int f1
= lua_tointeger(raw(state
), lua_upvalueindex(1));
132 const int f2
= lua_tointeger(raw(state
), -1);
133 lua_pushinteger(raw(state
), f1
* f2
);
138 /// A custom C++ integral division function for Lua.
140 /// \pre stack(-2) contains the dividend.
141 /// \pre stack(-1) contains the divisor.
142 /// \post stack(-2) contains the quotient of the division.
143 /// \post stack(-1) contains the remainder of the division.
145 /// \param state The Lua state.
147 /// \return The number of result values, i.e. 1.
149 /// \throw std::runtime_error If the divisor is zero.
150 /// \throw std::string If the dividend or the divisor are negative. This is an
151 /// exception not derived from std::exception on purpose to ensure that the
152 /// C++ wrapping correctly captures any exception regardless of its type.
154 cxx_divide(lutok::state
& state
)
156 const int dividend
= state
.to_integer(-2);
157 const int divisor
= state
.to_integer(-1);
159 throw std::runtime_error("Divisor is 0");
160 if (dividend
< 0 || divisor
< 0)
161 throw std::string("Cannot divide negative numbers");
162 state
.push_integer(dividend
/ divisor
);
163 state
.push_integer(dividend
% divisor
);
168 /// A Lua function that raises a very long error message.
170 /// \pre stack(-1) contains the length of the message to construct.
172 /// \param state The Lua state.
174 /// \return Never returns.
176 /// \throw std::runtime_error Unconditionally, with an error message formed by
177 /// the repetition of 'A' as many times as requested.
179 raise_long_error(lutok::state
& state
)
181 const int length
= state
.to_integer();
182 throw std::runtime_error(std::string(length
, 'A').c_str());
186 } // anonymous namespace
189 ATF_TEST_CASE_WITHOUT_HEAD(close
);
190 ATF_TEST_CASE_BODY(close
)
194 // The destructor for state will run now. If it does a second close, we may
195 // crash, so let's see if we don't.
199 ATF_TEST_CASE_WITHOUT_HEAD(get_global__ok
);
200 ATF_TEST_CASE_BODY(get_global__ok
)
203 ATF_REQUIRE(luaL_dostring(raw(state
), "test_variable = 3") == 0);
204 state
.get_global("test_variable");
205 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
206 lua_pop(raw(state
), 1);
210 ATF_TEST_CASE_WITHOUT_HEAD(get_global__undefined
);
211 ATF_TEST_CASE_BODY(get_global__undefined
)
214 state
.get_global("test_variable");
215 ATF_REQUIRE(lua_isnil(raw(state
), -1));
216 lua_pop(raw(state
), 1);
220 ATF_TEST_CASE_WITHOUT_HEAD(get_global_table
);
221 ATF_TEST_CASE_BODY(get_global_table
)
224 ATF_REQUIRE(luaL_dostring(raw(state
), "global_variable = 'hello'") == 0);
225 state
.get_global_table();
226 lua_pushstring(raw(state
), "global_variable");
227 lua_gettable(raw(state
), -2);
228 ATF_REQUIRE(lua_isstring(raw(state
), -1));
229 ATF_REQUIRE(std::strcmp("hello", lua_tostring(raw(state
), -1)) == 0);
230 lua_pop(raw(state
), 2);
234 ATF_TEST_CASE_WITHOUT_HEAD(get_metafield__ok
);
235 ATF_TEST_CASE_BODY(get_metafield__ok
)
238 luaL_openlibs(raw(state
));
239 ATF_REQUIRE(luaL_dostring(raw(state
), "meta = { foo = 567 }; "
240 "t = {}; setmetatable(t, meta)") == 0);
241 lua_getglobal(raw(state
), "t");
242 ATF_REQUIRE(state
.get_metafield(-1, "foo"));
243 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
244 ATF_REQUIRE_EQ(567, lua_tointeger(raw(state
), -1));
245 lua_pop(raw(state
), 2);
249 ATF_TEST_CASE_WITHOUT_HEAD(get_metafield__undefined
);
250 ATF_TEST_CASE_BODY(get_metafield__undefined
)
253 luaL_openlibs(raw(state
));
254 ATF_REQUIRE(luaL_dostring(raw(state
), "meta = { foo = 567 }; "
255 "t = {}; setmetatable(t, meta)") == 0);
256 lua_getglobal(raw(state
), "t");
257 ATF_REQUIRE(!state
.get_metafield(-1, "bar"));
258 lua_pop(raw(state
), 1);
262 ATF_TEST_CASE_WITHOUT_HEAD(get_metatable__top
);
263 ATF_TEST_CASE_BODY(get_metatable__top
)
266 luaL_openlibs(raw(state
));
267 ATF_REQUIRE(luaL_dostring(raw(state
), "meta = { foo = 567 }; "
268 "t = {}; setmetatable(t, meta)") == 0);
269 lua_getglobal(raw(state
), "t");
270 ATF_REQUIRE(state
.get_metatable());
271 ATF_REQUIRE(lua_istable(raw(state
), -1));
272 lua_pushstring(raw(state
), "foo");
273 lua_gettable(raw(state
), -2);
274 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
275 ATF_REQUIRE_EQ(567, lua_tointeger(raw(state
), -1));
276 lua_pop(raw(state
), 3);
280 ATF_TEST_CASE_WITHOUT_HEAD(get_metatable__explicit
);
281 ATF_TEST_CASE_BODY(get_metatable__explicit
)
284 luaL_openlibs(raw(state
));
285 ATF_REQUIRE(luaL_dostring(raw(state
), "meta = { foo = 567 }; "
286 "t = {}; setmetatable(t, meta)") == 0);
287 lua_getglobal(raw(state
), "t");
288 lua_pushinteger(raw(state
), 5555);
289 ATF_REQUIRE(state
.get_metatable(-2));
290 ATF_REQUIRE(lua_istable(raw(state
), -1));
291 lua_pushstring(raw(state
), "foo");
292 lua_gettable(raw(state
), -2);
293 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
294 ATF_REQUIRE_EQ(567, lua_tointeger(raw(state
), -1));
295 lua_pop(raw(state
), 4);
299 ATF_TEST_CASE_WITHOUT_HEAD(get_metatable__undefined
);
300 ATF_TEST_CASE_BODY(get_metatable__undefined
)
303 ATF_REQUIRE(luaL_dostring(raw(state
), "t = {}") == 0);
304 lua_getglobal(raw(state
), "t");
305 ATF_REQUIRE(!state
.get_metatable(-1));
306 lua_pop(raw(state
), 1);
310 ATF_TEST_CASE_WITHOUT_HEAD(get_table__ok
);
311 ATF_TEST_CASE_BODY(get_table__ok
)
314 ATF_REQUIRE(luaL_dostring(raw(state
), "t = { a = 1, bar = 234 }") == 0);
315 lua_getglobal(raw(state
), "t");
316 lua_pushstring(raw(state
), "bar");
318 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
319 ATF_REQUIRE_EQ(234, lua_tointeger(raw(state
), -1));
320 lua_pop(raw(state
), 2);
324 ATF_TEST_CASE_WITHOUT_HEAD(get_table__nil
);
325 ATF_TEST_CASE_BODY(get_table__nil
)
328 lua_pushnil(raw(state
));
329 lua_pushinteger(raw(state
), 1);
330 REQUIRE_API_ERROR("lua_gettable", state
.get_table());
331 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
332 lua_pop(raw(state
), 2);
336 ATF_TEST_CASE_WITHOUT_HEAD(get_table__unknown_index
);
337 ATF_TEST_CASE_BODY(get_table__unknown_index
)
340 ATF_REQUIRE(luaL_dostring(raw(state
),
341 "the_table = { foo = 1, bar = 2 }") == 0);
342 lua_getglobal(raw(state
), "the_table");
343 lua_pushstring(raw(state
), "baz");
345 ATF_REQUIRE(lua_isnil(raw(state
), -1));
346 lua_pop(raw(state
), 2);
350 ATF_TEST_CASE_WITHOUT_HEAD(get_top
);
351 ATF_TEST_CASE_BODY(get_top
)
354 ATF_REQUIRE_EQ(0, state
.get_top());
355 lua_pushinteger(raw(state
), 3);
356 ATF_REQUIRE_EQ(1, state
.get_top());
357 lua_pushinteger(raw(state
), 3);
358 ATF_REQUIRE_EQ(2, state
.get_top());
359 lua_pop(raw(state
), 2);
363 ATF_TEST_CASE_WITHOUT_HEAD(insert
);
364 ATF_TEST_CASE_BODY(insert
)
367 lua_pushinteger(raw(state
), 1);
368 lua_pushinteger(raw(state
), 2);
369 lua_pushinteger(raw(state
), 3);
370 lua_pushinteger(raw(state
), 4);
372 ATF_REQUIRE_EQ(3, lua_tointeger(raw(state
), -1));
373 ATF_REQUIRE_EQ(2, lua_tointeger(raw(state
), -2));
374 ATF_REQUIRE_EQ(4, lua_tointeger(raw(state
), -3));
375 ATF_REQUIRE_EQ(1, lua_tointeger(raw(state
), -4));
376 lua_pop(raw(state
), 4);
380 ATF_TEST_CASE_WITHOUT_HEAD(is_boolean__empty
);
381 ATF_TEST_CASE_BODY(is_boolean__empty
)
384 ATF_REQUIRE(!state
.is_boolean());
388 ATF_TEST_CASE_WITHOUT_HEAD(is_boolean__top
);
389 ATF_TEST_CASE_BODY(is_boolean__top
)
392 lua_pushnil(raw(state
));
393 ATF_REQUIRE(!state
.is_boolean());
394 lua_pushboolean(raw(state
), 1);
395 ATF_REQUIRE(state
.is_boolean());
396 lua_pop(raw(state
), 2);
400 ATF_TEST_CASE_WITHOUT_HEAD(is_boolean__explicit
);
401 ATF_TEST_CASE_BODY(is_boolean__explicit
)
404 lua_pushboolean(raw(state
), 1);
405 ATF_REQUIRE(state
.is_boolean(-1));
406 lua_pushinteger(raw(state
), 5);
407 ATF_REQUIRE(!state
.is_boolean(-1));
408 ATF_REQUIRE(state
.is_boolean(-2));
409 lua_pop(raw(state
), 2);
413 ATF_TEST_CASE_WITHOUT_HEAD(is_function__empty
);
414 ATF_TEST_CASE_BODY(is_function__empty
)
417 ATF_REQUIRE(!state
.is_function());
421 ATF_TEST_CASE_WITHOUT_HEAD(is_function__top
);
422 ATF_TEST_CASE_BODY(is_function__top
)
425 luaL_dostring(raw(state
), "function my_func(a, b) return a + b; end");
427 lua_pushnil(raw(state
));
428 ATF_REQUIRE(!state
.is_function());
429 lua_getglobal(raw(state
), "my_func");
430 ATF_REQUIRE(state
.is_function());
431 lua_pop(raw(state
), 2);
435 ATF_TEST_CASE_WITHOUT_HEAD(is_function__explicit
);
436 ATF_TEST_CASE_BODY(is_function__explicit
)
439 luaL_dostring(raw(state
), "function my_func(a, b) return a + b; end");
441 lua_getglobal(raw(state
), "my_func");
442 ATF_REQUIRE(state
.is_function(-1));
443 lua_pushinteger(raw(state
), 5);
444 ATF_REQUIRE(!state
.is_function(-1));
445 ATF_REQUIRE(state
.is_function(-2));
446 lua_pop(raw(state
), 2);
450 ATF_TEST_CASE_WITHOUT_HEAD(is_nil__empty
);
451 ATF_TEST_CASE_BODY(is_nil__empty
)
454 ATF_REQUIRE(state
.is_nil());
458 ATF_TEST_CASE_WITHOUT_HEAD(is_nil__top
);
459 ATF_TEST_CASE_BODY(is_nil__top
)
462 lua_pushnil(raw(state
));
463 ATF_REQUIRE(state
.is_nil());
464 lua_pushinteger(raw(state
), 5);
465 ATF_REQUIRE(!state
.is_nil());
466 lua_pop(raw(state
), 2);
470 ATF_TEST_CASE_WITHOUT_HEAD(is_nil__explicit
);
471 ATF_TEST_CASE_BODY(is_nil__explicit
)
474 lua_pushnil(raw(state
));
475 ATF_REQUIRE(state
.is_nil(-1));
476 lua_pushinteger(raw(state
), 5);
477 ATF_REQUIRE(!state
.is_nil(-1));
478 ATF_REQUIRE(state
.is_nil(-2));
479 lua_pop(raw(state
), 2);
483 ATF_TEST_CASE_WITHOUT_HEAD(is_number__empty
);
484 ATF_TEST_CASE_BODY(is_number__empty
)
487 ATF_REQUIRE(!state
.is_number());
491 ATF_TEST_CASE_WITHOUT_HEAD(is_number__top
);
492 ATF_TEST_CASE_BODY(is_number__top
)
495 lua_pushnil(raw(state
));
496 ATF_REQUIRE(!state
.is_number());
497 lua_pushinteger(raw(state
), 5);
498 ATF_REQUIRE(state
.is_number());
499 lua_pop(raw(state
), 2);
503 ATF_TEST_CASE_WITHOUT_HEAD(is_number__explicit
);
504 ATF_TEST_CASE_BODY(is_number__explicit
)
507 lua_pushnil(raw(state
));
508 ATF_REQUIRE(!state
.is_number(-1));
509 lua_pushinteger(raw(state
), 5);
510 ATF_REQUIRE(state
.is_number(-1));
511 ATF_REQUIRE(!state
.is_number(-2));
512 lua_pop(raw(state
), 2);
516 ATF_TEST_CASE_WITHOUT_HEAD(is_string__empty
);
517 ATF_TEST_CASE_BODY(is_string__empty
)
520 ATF_REQUIRE(!state
.is_string());
524 ATF_TEST_CASE_WITHOUT_HEAD(is_string__top
);
525 ATF_TEST_CASE_BODY(is_string__top
)
528 lua_pushnil(raw(state
));
529 ATF_REQUIRE(!state
.is_string());
530 lua_pushinteger(raw(state
), 3);
531 ATF_REQUIRE(state
.is_string());
532 lua_pushstring(raw(state
), "foo");
533 ATF_REQUIRE(state
.is_string());
534 lua_pop(raw(state
), 3);
538 ATF_TEST_CASE_WITHOUT_HEAD(is_string__explicit
);
539 ATF_TEST_CASE_BODY(is_string__explicit
)
542 lua_pushinteger(raw(state
), 3);
543 ATF_REQUIRE(state
.is_string(-1));
544 lua_pushnil(raw(state
));
545 ATF_REQUIRE(!state
.is_string(-1));
546 ATF_REQUIRE(state
.is_string(-2));
547 lua_pushstring(raw(state
), "foo");
548 ATF_REQUIRE(state
.is_string(-1));
549 ATF_REQUIRE(!state
.is_string(-2));
550 ATF_REQUIRE(state
.is_string(-3));
551 lua_pop(raw(state
), 3);
555 ATF_TEST_CASE_WITHOUT_HEAD(is_table__empty
);
556 ATF_TEST_CASE_BODY(is_table__empty
)
559 ATF_REQUIRE(!state
.is_table());
563 ATF_TEST_CASE_WITHOUT_HEAD(is_table__top
);
564 ATF_TEST_CASE_BODY(is_table__top
)
567 luaL_dostring(raw(state
), "t = {3, 4, 5}");
569 lua_pushstring(raw(state
), "foo");
570 ATF_REQUIRE(!state
.is_table());
571 lua_getglobal(raw(state
), "t");
572 ATF_REQUIRE(state
.is_table());
573 lua_pop(raw(state
), 2);
577 ATF_TEST_CASE_WITHOUT_HEAD(is_table__explicit
);
578 ATF_TEST_CASE_BODY(is_table__explicit
)
581 luaL_dostring(raw(state
), "t = {3, 4, 5}");
583 lua_pushstring(raw(state
), "foo");
584 ATF_REQUIRE(!state
.is_table(-1));
585 lua_getglobal(raw(state
), "t");
586 ATF_REQUIRE(state
.is_table(-1));
587 ATF_REQUIRE(!state
.is_table(-2));
588 lua_pop(raw(state
), 2);
592 ATF_TEST_CASE_WITHOUT_HEAD(is_userdata__empty
);
593 ATF_TEST_CASE_BODY(is_userdata__empty
)
596 ATF_REQUIRE(!state
.is_userdata());
600 ATF_TEST_CASE_WITHOUT_HEAD(is_userdata__top
);
601 ATF_TEST_CASE_BODY(is_userdata__top
)
605 lua_pushstring(raw(state
), "foo");
606 ATF_REQUIRE(!state
.is_userdata());
607 lua_newuserdata(raw(state
), 1234);
608 ATF_REQUIRE(state
.is_userdata());
609 lua_pop(raw(state
), 2);
613 ATF_TEST_CASE_WITHOUT_HEAD(is_userdata__explicit
);
614 ATF_TEST_CASE_BODY(is_userdata__explicit
)
618 lua_pushstring(raw(state
), "foo");
619 ATF_REQUIRE(!state
.is_userdata(-1));
620 lua_newuserdata(raw(state
), 543);
621 ATF_REQUIRE(state
.is_userdata(-1));
622 ATF_REQUIRE(!state
.is_userdata(-2));
623 lua_pop(raw(state
), 2);
627 ATF_TEST_CASE_WITHOUT_HEAD(load_file__ok
);
628 ATF_TEST_CASE_BODY(load_file__ok
)
630 std::ofstream
output("test.lua");
631 output
<< "in_the_file = \"oh yes\"\n";
635 state
.load_file("test.lua");
636 ATF_REQUIRE(lua_pcall(raw(state
), 0, 0, 0) == 0);
637 lua_getglobal(raw(state
), "in_the_file");
638 ATF_REQUIRE(std::strcmp("oh yes", lua_tostring(raw(state
), -1)) == 0);
639 lua_pop(raw(state
), 1);
643 ATF_TEST_CASE_WITHOUT_HEAD(load_file__api_error
);
644 ATF_TEST_CASE_BODY(load_file__api_error
)
646 std::ofstream
output("test.lua");
647 output
<< "I have a bad syntax! Wohoo!\n";
651 REQUIRE_API_ERROR("luaL_loadfile", state
.load_file("test.lua"));
655 ATF_TEST_CASE_WITHOUT_HEAD(load_file__file_not_found_error
);
656 ATF_TEST_CASE_BODY(load_file__file_not_found_error
)
659 ATF_REQUIRE_THROW_RE(lutok::file_not_found_error
, "missing.lua",
660 state
.load_file("missing.lua"));
664 ATF_TEST_CASE_WITHOUT_HEAD(load_string__ok
);
665 ATF_TEST_CASE_BODY(load_string__ok
)
668 state
.load_string("return 2 + 3");
669 ATF_REQUIRE(lua_pcall(raw(state
), 0, 1, 0) == 0);
670 ATF_REQUIRE_EQ(5, lua_tointeger(raw(state
), -1));
671 lua_pop(raw(state
), 1);
675 ATF_TEST_CASE_WITHOUT_HEAD(load_string__fail
);
676 ATF_TEST_CASE_BODY(load_string__fail
)
679 REQUIRE_API_ERROR("luaL_loadstring", state
.load_string("-"));
683 ATF_TEST_CASE_WITHOUT_HEAD(new_table
);
684 ATF_TEST_CASE_BODY(new_table
)
688 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
689 ATF_REQUIRE(lua_istable(raw(state
), -1));
690 lua_pop(raw(state
), 1);
694 ATF_TEST_CASE_WITHOUT_HEAD(new_userdata
);
695 ATF_TEST_CASE_BODY(new_userdata
)
698 int* pointer
= state
.new_userdata
< int >();
700 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
701 ATF_REQUIRE(lua_isuserdata(raw(state
), -1));
702 lua_pop(raw(state
), 1);
706 ATF_TEST_CASE_WITHOUT_HEAD(next__empty
);
707 ATF_TEST_CASE_BODY(next__empty
)
710 luaL_dostring(raw(state
), "t = {}");
712 lua_getglobal(raw(state
), "t");
713 lua_pushstring(raw(state
), "this is a dummy value");
714 lua_pushnil(raw(state
));
715 ATF_REQUIRE(!state
.next(-3));
716 lua_pop(raw(state
), 2);
720 ATF_TEST_CASE_WITHOUT_HEAD(next__many
);
721 ATF_TEST_CASE_BODY(next__many
)
724 luaL_dostring(raw(state
), "t = {}; t[1] = 100; t[2] = 200");
726 lua_getglobal(raw(state
), "t");
727 lua_pushnil(raw(state
));
729 ATF_REQUIRE(state
.next());
730 ATF_REQUIRE_EQ(3, lua_gettop(raw(state
)));
731 ATF_REQUIRE(lua_isnumber(raw(state
), -2));
732 ATF_REQUIRE_EQ(1, lua_tointeger(raw(state
), -2));
733 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
734 ATF_REQUIRE_EQ(100, lua_tointeger(raw(state
), -1));
735 lua_pop(raw(state
), 1);
737 ATF_REQUIRE(state
.next());
738 ATF_REQUIRE_EQ(3, lua_gettop(raw(state
)));
739 ATF_REQUIRE(lua_isnumber(raw(state
), -2));
740 ATF_REQUIRE_EQ(2, lua_tointeger(raw(state
), -2));
741 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
742 ATF_REQUIRE_EQ(200, lua_tointeger(raw(state
), -1));
743 lua_pop(raw(state
), 1);
745 ATF_REQUIRE(!state
.next());
746 lua_pop(raw(state
), 1);
750 ATF_TEST_CASE_WITHOUT_HEAD(open_base
);
751 ATF_TEST_CASE_BODY(open_base
)
754 check_modules(state
, "");
756 check_modules(state
, "base");
760 ATF_TEST_CASE_WITHOUT_HEAD(open_string
);
761 ATF_TEST_CASE_BODY(open_string
)
764 check_modules(state
, "");
766 check_modules(state
, "string");
770 ATF_TEST_CASE_WITHOUT_HEAD(open_table
);
771 ATF_TEST_CASE_BODY(open_table
)
774 check_modules(state
, "");
776 check_modules(state
, "table");
780 ATF_TEST_CASE_WITHOUT_HEAD(pcall__ok
);
781 ATF_TEST_CASE_BODY(pcall__ok
)
784 luaL_loadstring(raw(state
), "function mul(a, b) return a * b; end");
785 state
.pcall(0, 0, 0);
786 state
.get_global_table();
787 lua_pushstring(raw(state
), "mul");
788 lua_gettable(raw(state
), -2);
789 lua_pushinteger(raw(state
), 3);
790 lua_pushinteger(raw(state
), 5);
791 state
.pcall(2, 1, 0);
792 ATF_REQUIRE_EQ(15, lua_tointeger(raw(state
), -1));
793 lua_pop(raw(state
), 2);
797 ATF_TEST_CASE_WITHOUT_HEAD(pcall__fail
);
798 ATF_TEST_CASE_BODY(pcall__fail
)
801 lua_pushnil(raw(state
));
802 REQUIRE_API_ERROR("lua_pcall", state
.pcall(0, 0, 0));
806 ATF_TEST_CASE_WITHOUT_HEAD(pop__one
);
807 ATF_TEST_CASE_BODY(pop__one
)
810 lua_pushinteger(raw(state
), 10);
811 lua_pushinteger(raw(state
), 20);
812 lua_pushinteger(raw(state
), 30);
814 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
815 ATF_REQUIRE_EQ(20, lua_tointeger(raw(state
), -1));
816 lua_pop(raw(state
), 2);
820 ATF_TEST_CASE_WITHOUT_HEAD(pop__many
);
821 ATF_TEST_CASE_BODY(pop__many
)
824 lua_pushinteger(raw(state
), 10);
825 lua_pushinteger(raw(state
), 20);
826 lua_pushinteger(raw(state
), 30);
828 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
829 ATF_REQUIRE_EQ(10, lua_tointeger(raw(state
), -1));
830 lua_pop(raw(state
), 1);
834 ATF_TEST_CASE_WITHOUT_HEAD(push_boolean
);
835 ATF_TEST_CASE_BODY(push_boolean
)
838 state
.push_boolean(true);
839 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
840 ATF_REQUIRE(lua_toboolean(raw(state
), -1));
841 state
.push_boolean(false);
842 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
843 ATF_REQUIRE(!lua_toboolean(raw(state
), -1));
844 ATF_REQUIRE(lua_toboolean(raw(state
), -2));
845 lua_pop(raw(state
), 2);
849 ATF_TEST_CASE_WITHOUT_HEAD(push_cxx_closure
);
850 ATF_TEST_CASE_BODY(push_cxx_closure
)
853 state
.push_integer(15);
854 state
.push_cxx_closure(cxx_multiply_closure
, 1);
855 lua_setglobal(raw(state
), "cxx_multiply_closure");
857 ATF_REQUIRE(luaL_dostring(raw(state
),
858 "return cxx_multiply_closure(10)") == 0);
859 ATF_REQUIRE_EQ(150, lua_tointeger(raw(state
), -1));
860 lua_pop(raw(state
), 1);
864 ATF_TEST_CASE_WITHOUT_HEAD(push_cxx_function__ok
);
865 ATF_TEST_CASE_BODY(push_cxx_function__ok
)
868 state
.push_cxx_function(cxx_divide
);
869 lua_setglobal(raw(state
), "cxx_divide");
871 ATF_REQUIRE(luaL_dostring(raw(state
), "return cxx_divide(17, 3)") == 0);
872 ATF_REQUIRE_EQ(5, lua_tointeger(raw(state
), -2));
873 ATF_REQUIRE_EQ(2, lua_tointeger(raw(state
), -1));
874 lua_pop(raw(state
), 2);
878 ATF_TEST_CASE_WITHOUT_HEAD(push_cxx_function__fail_exception
);
879 ATF_TEST_CASE_BODY(push_cxx_function__fail_exception
)
882 state
.push_cxx_function(cxx_divide
);
883 lua_setglobal(raw(state
), "cxx_divide");
885 ATF_REQUIRE(luaL_dostring(raw(state
), "return cxx_divide(15, 0)") != 0);
886 ATF_REQUIRE_MATCH("Divisor is 0", lua_tostring(raw(state
), -1));
887 lua_pop(raw(state
), 1);
891 ATF_TEST_CASE_WITHOUT_HEAD(push_cxx_function__fail_anything
);
892 ATF_TEST_CASE_BODY(push_cxx_function__fail_anything
)
895 state
.push_cxx_function(cxx_divide
);
896 lua_setglobal(raw(state
), "cxx_divide");
898 ATF_REQUIRE(luaL_dostring(raw(state
), "return cxx_divide(-3, -1)") != 0);
899 ATF_REQUIRE_MATCH("Unhandled exception", lua_tostring(raw(state
), -1));
900 lua_pop(raw(state
), 1);
904 ATF_TEST_CASE_WITHOUT_HEAD(push_cxx_function__fail_overflow
);
905 ATF_TEST_CASE_BODY(push_cxx_function__fail_overflow
)
908 state
.push_cxx_function(raise_long_error
);
909 lua_setglobal(raw(state
), "fail");
911 ATF_REQUIRE(luaL_dostring(raw(state
), "return fail(900)") != 0);
912 ATF_REQUIRE_MATCH(std::string(900, 'A'), lua_tostring(raw(state
), -1));
913 lua_pop(raw(state
), 1);
915 ATF_REQUIRE(luaL_dostring(raw(state
), "return fail(8192)") != 0);
916 ATF_REQUIRE_MATCH(std::string(900, 'A'), lua_tostring(raw(state
), -1));
917 lua_pop(raw(state
), 1);
921 ATF_TEST_CASE_WITHOUT_HEAD(push_integer
);
922 ATF_TEST_CASE_BODY(push_integer
)
925 state
.push_integer(12);
926 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
927 ATF_REQUIRE_EQ(12, lua_tointeger(raw(state
), -1));
928 state
.push_integer(34);
929 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
930 ATF_REQUIRE_EQ(34, lua_tointeger(raw(state
), -1));
931 ATF_REQUIRE_EQ(12, lua_tointeger(raw(state
), -2));
932 lua_pop(raw(state
), 2);
936 ATF_TEST_CASE_WITHOUT_HEAD(push_nil
);
937 ATF_TEST_CASE_BODY(push_nil
)
941 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
942 ATF_REQUIRE(lua_isnil(raw(state
), -1));
943 state
.push_integer(34);
944 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
945 ATF_REQUIRE(!lua_isnil(raw(state
), -1));
946 ATF_REQUIRE(lua_isnil(raw(state
), -2));
947 lua_pop(raw(state
), 2);
951 ATF_TEST_CASE_WITHOUT_HEAD(push_string
);
952 ATF_TEST_CASE_BODY(push_string
)
957 std::string str
= "first";
958 state
.push_string(str
);
959 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
960 ATF_REQUIRE_EQ(std::string("first"), lua_tostring(raw(state
), -1));
962 state
.push_string(str
);
964 ATF_REQUIRE_EQ(2, lua_gettop(raw(state
)));
965 ATF_REQUIRE_EQ(std::string("second"), lua_tostring(raw(state
), -1));
966 ATF_REQUIRE_EQ(std::string("first"), lua_tostring(raw(state
), -2));
967 lua_pop(raw(state
), 2);
971 ATF_TEST_CASE_WITHOUT_HEAD(push_value__top
);
972 ATF_TEST_CASE_BODY(push_value__top
)
976 lua_pushinteger(raw(state
), 10);
977 lua_pushinteger(raw(state
), 20);
979 ATF_REQUIRE_EQ(3, lua_gettop(raw(state
)));
980 ATF_REQUIRE_EQ(20, lua_tointeger(raw(state
), -1));
981 ATF_REQUIRE_EQ(20, lua_tointeger(raw(state
), -2));
982 ATF_REQUIRE_EQ(10, lua_tointeger(raw(state
), -3));
983 lua_pop(raw(state
), 3);
987 ATF_TEST_CASE_WITHOUT_HEAD(push_value__explicit
);
988 ATF_TEST_CASE_BODY(push_value__explicit
)
992 lua_pushinteger(raw(state
), 10);
993 lua_pushinteger(raw(state
), 20);
994 state
.push_value(-2);
995 ATF_REQUIRE_EQ(3, lua_gettop(raw(state
)));
996 ATF_REQUIRE_EQ(10, lua_tointeger(raw(state
), -1));
997 ATF_REQUIRE_EQ(20, lua_tointeger(raw(state
), -2));
998 ATF_REQUIRE_EQ(10, lua_tointeger(raw(state
), -3));
999 lua_pop(raw(state
), 3);
1003 ATF_TEST_CASE_WITHOUT_HEAD(raw_get__top
);
1004 ATF_TEST_CASE_BODY(raw_get__top
)
1008 luaL_openlibs(raw(state
));
1009 ATF_REQUIRE(luaL_dostring(
1010 raw(state
), "t = {foo=123} ; setmetatable(t, {__index=1})") == 0);
1011 lua_getglobal(raw(state
), "t");
1012 lua_pushstring(raw(state
), "foo");
1014 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1015 ATF_REQUIRE_EQ(123, lua_tointeger(raw(state
), -1));
1016 lua_pop(raw(state
), 2);
1020 ATF_TEST_CASE_WITHOUT_HEAD(raw_get__explicit
);
1021 ATF_TEST_CASE_BODY(raw_get__explicit
)
1025 luaL_openlibs(raw(state
));
1026 ATF_REQUIRE(luaL_dostring(
1027 raw(state
), "t = {foo=123} ; setmetatable(t, {__index=1})") == 0);
1028 lua_getglobal(raw(state
), "t");
1029 lua_pushinteger(raw(state
), 9876);
1030 lua_pushstring(raw(state
), "foo");
1032 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1033 ATF_REQUIRE_EQ(123, lua_tointeger(raw(state
), -1));
1034 ATF_REQUIRE_EQ(9876, lua_tointeger(raw(state
), -2));
1035 lua_pop(raw(state
), 3);
1039 ATF_TEST_CASE_WITHOUT_HEAD(raw_set__top
);
1040 ATF_TEST_CASE_BODY(raw_set__top
)
1044 luaL_openlibs(raw(state
));
1045 ATF_REQUIRE(luaL_dostring(
1046 raw(state
), "t = {} ; setmetatable(t, {__newindex=1})") == 0);
1047 lua_getglobal(raw(state
), "t");
1048 lua_pushstring(raw(state
), "foo");
1049 lua_pushinteger(raw(state
), 345);
1051 ATF_REQUIRE(luaL_dostring(raw(state
), "return t.foo") == 0);
1052 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1053 ATF_REQUIRE_EQ(345, lua_tointeger(raw(state
), -1));
1054 lua_pop(raw(state
), 2);
1058 ATF_TEST_CASE_WITHOUT_HEAD(raw_set__explicit
);
1059 ATF_TEST_CASE_BODY(raw_set__explicit
)
1063 luaL_openlibs(raw(state
));
1064 ATF_REQUIRE(luaL_dostring(
1065 raw(state
), "t = {} ; setmetatable(t, {__newindex=1})") == 0);
1066 lua_getglobal(raw(state
), "t");
1067 lua_pushinteger(raw(state
), 876);
1068 lua_pushstring(raw(state
), "foo");
1069 lua_pushinteger(raw(state
), 345);
1071 ATF_REQUIRE(luaL_dostring(raw(state
), "return t.foo") == 0);
1072 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1073 ATF_REQUIRE_EQ(345, lua_tointeger(raw(state
), -1));
1074 ATF_REQUIRE_EQ(876, lua_tointeger(raw(state
), -2));
1075 lua_pop(raw(state
), 3);
1079 ATF_TEST_CASE_WITHOUT_HEAD(registry_index
);
1080 ATF_TEST_CASE_BODY(registry_index
)
1083 lua_pushvalue(raw(state
), lutok::registry_index
);
1084 lua_pushstring(raw(state
), "custom_variable");
1085 lua_pushstring(raw(state
), "custom value");
1086 lua_settable(raw(state
), -3);
1087 lua_pop(raw(state
), 1);
1088 ATF_REQUIRE(luaL_dostring(raw(state
),
1089 "return custom_variable == nil") == 0);
1090 ATF_REQUIRE(lua_isboolean(raw(state
), -1));
1091 ATF_REQUIRE(lua_toboolean(raw(state
), -1));
1092 lua_pop(raw(state
), 1);
1096 ATF_TEST_CASE_WITHOUT_HEAD(set_global
);
1097 ATF_TEST_CASE_BODY(set_global
)
1100 lua_pushinteger(raw(state
), 3);
1101 state
.set_global("test_variable");
1102 ATF_REQUIRE(luaL_dostring(raw(state
), "return test_variable + 1") == 0);
1103 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1104 ATF_REQUIRE_EQ(4, lua_tointeger(raw(state
), -1));
1105 lua_pop(raw(state
), 1);
1109 ATF_TEST_CASE_WITHOUT_HEAD(set_metatable__top
);
1110 ATF_TEST_CASE_BODY(set_metatable__top
)
1113 ATF_REQUIRE(luaL_dostring(
1116 "mt.__add = function(a, b) return a[1] + b end\n"
1118 "numbers[1] = 5\n") == 0);
1120 lua_getglobal(raw(state
), "numbers");
1121 lua_getglobal(raw(state
), "mt");
1122 state
.set_metatable();
1123 lua_pop(raw(state
), 1);
1125 ATF_REQUIRE(luaL_dostring(raw(state
), "return numbers + 2") == 0);
1126 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1127 ATF_REQUIRE_EQ(7, lua_tointeger(raw(state
), -1));
1128 lua_pop(raw(state
), 1);
1132 ATF_TEST_CASE_WITHOUT_HEAD(set_metatable__explicit
);
1133 ATF_TEST_CASE_BODY(set_metatable__explicit
)
1136 ATF_REQUIRE(luaL_dostring(
1139 "mt.__add = function(a, b) return a[1] + b end\n"
1141 "numbers[1] = 5\n") == 0);
1143 lua_getglobal(raw(state
), "numbers");
1144 lua_pushinteger(raw(state
), 1234);
1145 lua_getglobal(raw(state
), "mt");
1146 state
.set_metatable(-3);
1147 lua_pop(raw(state
), 2);
1149 ATF_REQUIRE(luaL_dostring(raw(state
), "return numbers + 2") == 0);
1150 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1151 ATF_REQUIRE_EQ(7, lua_tointeger(raw(state
), -1));
1152 lua_pop(raw(state
), 1);
1156 ATF_TEST_CASE_WITHOUT_HEAD(set_table__ok
);
1157 ATF_TEST_CASE_BODY(set_table__ok
)
1160 ATF_REQUIRE(luaL_dostring(raw(state
), "t = { a = 1, bar = 234 }") == 0);
1161 lua_getglobal(raw(state
), "t");
1163 lua_pushstring(raw(state
), "bar");
1164 lua_pushstring(raw(state
), "baz");
1166 ATF_REQUIRE_EQ(1, lua_gettop(raw(state
)));
1168 lua_pushstring(raw(state
), "a");
1169 lua_gettable(raw(state
), -2);
1170 ATF_REQUIRE(lua_isnumber(raw(state
), -1));
1171 ATF_REQUIRE_EQ(1, lua_tointeger(raw(state
), -1));
1172 lua_pop(raw(state
), 1);
1174 lua_pushstring(raw(state
), "bar");
1175 lua_gettable(raw(state
), -2);
1176 ATF_REQUIRE(lua_isstring(raw(state
), -1));
1177 ATF_REQUIRE_EQ(std::string("baz"), lua_tostring(raw(state
), -1));
1178 lua_pop(raw(state
), 1);
1180 lua_pop(raw(state
), 1);
1184 ATF_TEST_CASE_WITHOUT_HEAD(set_table__nil
);
1185 ATF_TEST_CASE_BODY(set_table__nil
)
1188 lua_pushnil(raw(state
));
1189 lua_pushinteger(raw(state
), 1);
1190 lua_pushinteger(raw(state
), 2);
1191 REQUIRE_API_ERROR("lua_settable", state
.set_table(-3));
1192 lua_pop(raw(state
), 3);
1196 ATF_TEST_CASE_WITHOUT_HEAD(to_boolean__top
);
1197 ATF_TEST_CASE_BODY(to_boolean__top
)
1200 lua_pushboolean(raw(state
), 1);
1201 ATF_REQUIRE(state
.to_boolean());
1202 lua_pushboolean(raw(state
), 0);
1203 ATF_REQUIRE(!state
.to_boolean());
1204 lua_pop(raw(state
), 2);
1208 ATF_TEST_CASE_WITHOUT_HEAD(to_boolean__explicit
);
1209 ATF_TEST_CASE_BODY(to_boolean__explicit
)
1212 lua_pushboolean(raw(state
), 0);
1213 lua_pushboolean(raw(state
), 1);
1214 ATF_REQUIRE(!state
.to_boolean(-2));
1215 ATF_REQUIRE(state
.to_boolean(-1));
1216 lua_pop(raw(state
), 2);
1220 ATF_TEST_CASE_WITHOUT_HEAD(to_integer__top
);
1221 ATF_TEST_CASE_BODY(to_integer__top
)
1224 lua_pushstring(raw(state
), "34");
1225 ATF_REQUIRE_EQ(34, state
.to_integer());
1226 lua_pushinteger(raw(state
), 12);
1227 ATF_REQUIRE_EQ(12, state
.to_integer());
1228 lua_pop(raw(state
), 2);
1232 ATF_TEST_CASE_WITHOUT_HEAD(to_integer__explicit
);
1233 ATF_TEST_CASE_BODY(to_integer__explicit
)
1236 lua_pushinteger(raw(state
), 12);
1237 lua_pushstring(raw(state
), "foobar");
1238 ATF_REQUIRE_EQ(12, state
.to_integer(-2));
1239 lua_pop(raw(state
), 2);
1243 ATF_TEST_CASE_WITHOUT_HEAD(to_string__top
);
1244 ATF_TEST_CASE_BODY(to_string__top
)
1247 lua_pushstring(raw(state
), "foobar");
1248 ATF_REQUIRE_EQ("foobar", state
.to_string());
1249 lua_pushinteger(raw(state
), 12);
1250 ATF_REQUIRE_EQ("12", state
.to_string());
1251 lua_pop(raw(state
), 2);
1255 ATF_TEST_CASE_WITHOUT_HEAD(to_string__explicit
);
1256 ATF_TEST_CASE_BODY(to_string__explicit
)
1259 lua_pushstring(raw(state
), "foobar");
1260 lua_pushinteger(raw(state
), 12);
1261 ATF_REQUIRE_EQ("foobar", state
.to_string(-2));
1262 ATF_REQUIRE_EQ("12", state
.to_string(-1));
1263 lua_pop(raw(state
), 2);
1267 ATF_TEST_CASE_WITHOUT_HEAD(to_userdata__top
);
1268 ATF_TEST_CASE_BODY(to_userdata__top
)
1272 int* pointer
= static_cast< int* >(
1273 lua_newuserdata(raw(state
), sizeof(int)));
1277 int* pointer
= state
.to_userdata
< int >();
1278 ATF_REQUIRE_EQ(987, *pointer
);
1279 lua_pop(raw(state
), 1);
1283 ATF_TEST_CASE_WITHOUT_HEAD(to_userdata__explicit
);
1284 ATF_TEST_CASE_BODY(to_userdata__explicit
)
1288 int* pointer
= static_cast< int* >(
1289 lua_newuserdata(raw(state
), sizeof(int)));
1293 lua_pushinteger(raw(state
), 3);
1294 int* pointer
= state
.to_userdata
< int >(-2);
1295 ATF_REQUIRE_EQ(987, *pointer
);
1296 lua_pop(raw(state
), 2);
1300 ATF_TEST_CASE_WITHOUT_HEAD(upvalue_index
);
1301 ATF_TEST_CASE_BODY(upvalue_index
)
1304 lua_pushinteger(raw(state
), 25);
1305 lua_pushinteger(raw(state
), 30);
1306 lua_pushcclosure(raw(state
), c_get_upvalues
, 2);
1307 lua_setglobal(raw(state
), "c_get_upvalues");
1309 ATF_REQUIRE(luaL_dostring(raw(state
),
1310 "return c_get_upvalues()") == 0);
1311 ATF_REQUIRE_EQ(25, lua_tointeger(raw(state
), -2));
1312 ATF_REQUIRE_EQ(30, lua_tointeger(raw(state
), -1));
1313 lua_pop(raw(state
), 2);
1317 ATF_INIT_TEST_CASES(tcs
)
1319 ATF_ADD_TEST_CASE(tcs
, close
);
1320 ATF_ADD_TEST_CASE(tcs
, get_global__ok
);
1321 ATF_ADD_TEST_CASE(tcs
, get_global__undefined
);
1322 ATF_ADD_TEST_CASE(tcs
, get_global_table
);
1323 ATF_ADD_TEST_CASE(tcs
, get_metafield__ok
);
1324 ATF_ADD_TEST_CASE(tcs
, get_metafield__undefined
);
1325 ATF_ADD_TEST_CASE(tcs
, get_metatable__top
);
1326 ATF_ADD_TEST_CASE(tcs
, get_metatable__explicit
);
1327 ATF_ADD_TEST_CASE(tcs
, get_metatable__undefined
);
1328 ATF_ADD_TEST_CASE(tcs
, get_table__ok
);
1329 ATF_ADD_TEST_CASE(tcs
, get_table__nil
);
1330 ATF_ADD_TEST_CASE(tcs
, get_table__unknown_index
);
1331 ATF_ADD_TEST_CASE(tcs
, get_top
);
1332 ATF_ADD_TEST_CASE(tcs
, insert
);
1333 ATF_ADD_TEST_CASE(tcs
, is_boolean__empty
);
1334 ATF_ADD_TEST_CASE(tcs
, is_boolean__top
);
1335 ATF_ADD_TEST_CASE(tcs
, is_boolean__explicit
);
1336 ATF_ADD_TEST_CASE(tcs
, is_function__empty
);
1337 ATF_ADD_TEST_CASE(tcs
, is_function__top
);
1338 ATF_ADD_TEST_CASE(tcs
, is_function__explicit
);
1339 ATF_ADD_TEST_CASE(tcs
, is_nil__empty
);
1340 ATF_ADD_TEST_CASE(tcs
, is_nil__top
);
1341 ATF_ADD_TEST_CASE(tcs
, is_nil__explicit
);
1342 ATF_ADD_TEST_CASE(tcs
, is_number__empty
);
1343 ATF_ADD_TEST_CASE(tcs
, is_number__top
);
1344 ATF_ADD_TEST_CASE(tcs
, is_number__explicit
);
1345 ATF_ADD_TEST_CASE(tcs
, is_string__empty
);
1346 ATF_ADD_TEST_CASE(tcs
, is_string__top
);
1347 ATF_ADD_TEST_CASE(tcs
, is_string__explicit
);
1348 ATF_ADD_TEST_CASE(tcs
, is_table__empty
);
1349 ATF_ADD_TEST_CASE(tcs
, is_table__top
);
1350 ATF_ADD_TEST_CASE(tcs
, is_table__explicit
);
1351 ATF_ADD_TEST_CASE(tcs
, is_userdata__empty
);
1352 ATF_ADD_TEST_CASE(tcs
, is_userdata__top
);
1353 ATF_ADD_TEST_CASE(tcs
, is_userdata__explicit
);
1354 ATF_ADD_TEST_CASE(tcs
, load_file__ok
);
1355 ATF_ADD_TEST_CASE(tcs
, load_file__api_error
);
1356 ATF_ADD_TEST_CASE(tcs
, load_file__file_not_found_error
);
1357 ATF_ADD_TEST_CASE(tcs
, load_string__ok
);
1358 ATF_ADD_TEST_CASE(tcs
, load_string__fail
);
1359 ATF_ADD_TEST_CASE(tcs
, new_table
);
1360 ATF_ADD_TEST_CASE(tcs
, new_userdata
);
1361 ATF_ADD_TEST_CASE(tcs
, next__empty
);
1362 ATF_ADD_TEST_CASE(tcs
, next__many
);
1363 ATF_ADD_TEST_CASE(tcs
, open_base
);
1364 ATF_ADD_TEST_CASE(tcs
, open_string
);
1365 ATF_ADD_TEST_CASE(tcs
, open_table
);
1366 ATF_ADD_TEST_CASE(tcs
, pcall__ok
);
1367 ATF_ADD_TEST_CASE(tcs
, pcall__fail
);
1368 ATF_ADD_TEST_CASE(tcs
, pop__one
);
1369 ATF_ADD_TEST_CASE(tcs
, pop__many
);
1370 ATF_ADD_TEST_CASE(tcs
, push_boolean
);
1371 ATF_ADD_TEST_CASE(tcs
, push_cxx_closure
);
1372 ATF_ADD_TEST_CASE(tcs
, push_cxx_function__ok
);
1373 ATF_ADD_TEST_CASE(tcs
, push_cxx_function__fail_exception
);
1374 ATF_ADD_TEST_CASE(tcs
, push_cxx_function__fail_anything
);
1375 ATF_ADD_TEST_CASE(tcs
, push_cxx_function__fail_overflow
);
1376 ATF_ADD_TEST_CASE(tcs
, push_integer
);
1377 ATF_ADD_TEST_CASE(tcs
, push_nil
);
1378 ATF_ADD_TEST_CASE(tcs
, push_string
);
1379 ATF_ADD_TEST_CASE(tcs
, push_value__top
);
1380 ATF_ADD_TEST_CASE(tcs
, push_value__explicit
);
1381 ATF_ADD_TEST_CASE(tcs
, raw_get__top
);
1382 ATF_ADD_TEST_CASE(tcs
, raw_get__explicit
);
1383 ATF_ADD_TEST_CASE(tcs
, raw_set__top
);
1384 ATF_ADD_TEST_CASE(tcs
, raw_set__explicit
);
1385 ATF_ADD_TEST_CASE(tcs
, registry_index
);
1386 ATF_ADD_TEST_CASE(tcs
, set_global
);
1387 ATF_ADD_TEST_CASE(tcs
, set_metatable__top
);
1388 ATF_ADD_TEST_CASE(tcs
, set_metatable__explicit
);
1389 ATF_ADD_TEST_CASE(tcs
, set_table__ok
);
1390 ATF_ADD_TEST_CASE(tcs
, set_table__nil
);
1391 ATF_ADD_TEST_CASE(tcs
, to_boolean__top
);
1392 ATF_ADD_TEST_CASE(tcs
, to_boolean__explicit
);
1393 ATF_ADD_TEST_CASE(tcs
, to_integer__top
);
1394 ATF_ADD_TEST_CASE(tcs
, to_integer__explicit
);
1395 ATF_ADD_TEST_CASE(tcs
, to_string__top
);
1396 ATF_ADD_TEST_CASE(tcs
, to_string__explicit
);
1397 ATF_ADD_TEST_CASE(tcs
, to_userdata__top
);
1398 ATF_ADD_TEST_CASE(tcs
, to_userdata__explicit
);
1399 ATF_ADD_TEST_CASE(tcs
, upvalue_index
);