xref: /netbsd/external/bsd/lutok/dist/c_gate_test.cpp (revision d3ca3027)
11c30bac8Sjmmv // Copyright 2011 Google Inc.
21c30bac8Sjmmv // All rights reserved.
31c30bac8Sjmmv //
41c30bac8Sjmmv // Redistribution and use in source and binary forms, with or without
51c30bac8Sjmmv // modification, are permitted provided that the following conditions are
61c30bac8Sjmmv // met:
71c30bac8Sjmmv //
81c30bac8Sjmmv // * Redistributions of source code must retain the above copyright
91c30bac8Sjmmv //   notice, this list of conditions and the following disclaimer.
101c30bac8Sjmmv // * Redistributions in binary form must reproduce the above copyright
111c30bac8Sjmmv //   notice, this list of conditions and the following disclaimer in the
121c30bac8Sjmmv //   documentation and/or other materials provided with the distribution.
131c30bac8Sjmmv // * Neither the name of Google Inc. nor the names of its contributors
141c30bac8Sjmmv //   may be used to endorse or promote products derived from this software
151c30bac8Sjmmv //   without specific prior written permission.
161c30bac8Sjmmv //
171c30bac8Sjmmv // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
181c30bac8Sjmmv // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
191c30bac8Sjmmv // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
201c30bac8Sjmmv // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
211c30bac8Sjmmv // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
221c30bac8Sjmmv // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
231c30bac8Sjmmv // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
241c30bac8Sjmmv // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
251c30bac8Sjmmv // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
261c30bac8Sjmmv // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
271c30bac8Sjmmv // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
281c30bac8Sjmmv 
291c30bac8Sjmmv #include "c_gate.hpp"
301c30bac8Sjmmv 
311c30bac8Sjmmv #include <atf-c++.hpp>
321c30bac8Sjmmv #include <lua.hpp>
331c30bac8Sjmmv 
341c30bac8Sjmmv #include "state.ipp"
351c30bac8Sjmmv #include "test_utils.hpp"
361c30bac8Sjmmv 
371c30bac8Sjmmv 
381c30bac8Sjmmv ATF_TEST_CASE_WITHOUT_HEAD(connect);
ATF_TEST_CASE_BODY(connect)391c30bac8Sjmmv ATF_TEST_CASE_BODY(connect)
401c30bac8Sjmmv {
41*d3ca3027Sjmmv     lua_State* raw_state = luaL_newstate();
421c30bac8Sjmmv     ATF_REQUIRE(raw_state != NULL);
431c30bac8Sjmmv 
441c30bac8Sjmmv     {
451c30bac8Sjmmv         lutok::state state = lutok::state_c_gate::connect(raw_state);
461c30bac8Sjmmv         lua_pushinteger(raw(state), 123);
471c30bac8Sjmmv     }
481c30bac8Sjmmv     // If the wrapper object had closed the Lua state, we could very well crash
491c30bac8Sjmmv     // here.
501c30bac8Sjmmv     ATF_REQUIRE_EQ(123, lua_tointeger(raw_state, -1));
511c30bac8Sjmmv 
521c30bac8Sjmmv     lua_close(raw_state);
531c30bac8Sjmmv }
541c30bac8Sjmmv 
551c30bac8Sjmmv 
561c30bac8Sjmmv ATF_TEST_CASE_WITHOUT_HEAD(c_state);
ATF_TEST_CASE_BODY(c_state)571c30bac8Sjmmv ATF_TEST_CASE_BODY(c_state)
581c30bac8Sjmmv {
591c30bac8Sjmmv     lutok::state state;
601c30bac8Sjmmv     state.push_integer(5);
611c30bac8Sjmmv     {
621c30bac8Sjmmv         lutok::state_c_gate gate(state);
631c30bac8Sjmmv         lua_State* raw_state = gate.c_state();
641c30bac8Sjmmv         ATF_REQUIRE_EQ(5, lua_tointeger(raw_state, -1));
651c30bac8Sjmmv     }
661c30bac8Sjmmv     state.pop(1);
671c30bac8Sjmmv }
681c30bac8Sjmmv 
691c30bac8Sjmmv 
ATF_INIT_TEST_CASES(tcs)701c30bac8Sjmmv ATF_INIT_TEST_CASES(tcs)
711c30bac8Sjmmv {
721c30bac8Sjmmv     ATF_ADD_TEST_CASE(tcs, c_state);
731c30bac8Sjmmv     ATF_ADD_TEST_CASE(tcs, connect);
741c30bac8Sjmmv }
75