Branch data Line data Source code
1 : : /*
2 : : * Copyright 2006-2009 Savarese Software Research Corporation
3 : : *
4 : : * Licensed under the Apache License, Version 2.0 (the "License");
5 : : * you may not use this file except in compliance with the License.
6 : : * You may obtain a copy of the License at
7 : : *
8 : : * http://www.savarese.com/software/ApacheLicense-2.0
9 : : *
10 : : * Unless required by applicable law or agreed to in writing, software
11 : : * distributed under the License is distributed on an "AS IS" BASIS,
12 : : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : : * See the License for the specific language governing permissions and
14 : : * limitations under the License.
15 : : */
16 : :
17 : : #include <tests/TestCommon.h>
18 : : #include <ssrc/wispers/fcgi/parameter_map.h>
19 : : #include <ssrc/wispers/lua/lua.h>
20 : : #include <ssrc/wispers/lua/map.h>
21 : :
22 : : using namespace NS_SSRC_WSPR_LUA;
23 : :
24 [ - + ]: 15 : class LuaTest : public TestCase {
25 : :
26 : : lua_State *_state;
27 : :
28 : : public:
29 : :
30 : 5 : virtual void setUp() {
31 : 5 : _state = luaL_newstate();
32 : 5 : }
33 : :
34 : 5 : virtual void tearDown() {
35 : 5 : lua_close(_state);
36 : 5 : }
37 : :
38 : 1 : void test_get_value() {
39 [ + - + - : 1 : CPPUNIT_ASSERT(luaL_dofile(_state, TEST_LUA) == 0);
+ - + - +
- + - + -
+ - - + +
- + - + -
+ - + - +
- ]
40 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "wspr", "test", "string") == "/tmp");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
41 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "wspr", "test", "int") == 12);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
42 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "wspr", "test", "bool") == true);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
43 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "wspr", "test", "foo") == "");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
44 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "wspr", "test", "foo") == 0);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
45 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "wspr", "test", "foo") == false);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
46 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "wspr", "foo", "string") == "");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
47 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "wspr", "foo", "int") == 0);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
48 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "wspr", "foo", "bool") == false);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
49 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "foo", "test", "string") == "");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
50 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "foo", "test", "int") == 0);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
51 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "foo", "test", "bool") == false);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
52 : 1 : }
53 : :
54 : 1 : void test_create_value() {
55 : 1 : const bool b = true;
56 : 1 : const int num = 1776;
57 [ + - ]: 2 : const string str = "bar";
58 : 1 : const char *ch = "char";
59 : :
60 [ + - ]: 1 : create_value(_state, b, "b");
61 [ + - ]: 1 : create_value(_state, num, "num");
62 [ + - ]: 1 : create_value(_state, str, "str");
63 [ + - ]: 1 : create_value(_state, ch, "ch");
64 [ + - ]: 1 : create_value(_state, "literal", "cch");
65 : :
66 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
67 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
68 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
69 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
70 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
71 : :
72 : : // create_value creates an entirely new set of tables, so you have
73 : : // to assert conditions immediately after each call, or the previous
74 : : // values will be lost.
75 [ + - ]: 1 : create_value(_state, b, "a", "b", "c", "b");
76 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "a", "b", "c", "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
77 : :
78 [ + - ]: 1 : create_value(_state, num, "a", "b", "c","num");
79 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "a", "b", "c", "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
80 : :
81 [ + - ]: 1 : create_value(_state, str, "a", "b", "c", "str");
82 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
83 : :
84 [ + - ]: 1 : create_value(_state, ch, "a", "b", "c", "ch");
85 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
86 : :
87 [ + - ]: 1 : create_value(_state, "literal", "a", "b", "c", "cch");
88 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
89 : 1 : }
90 : :
91 : 1 : void test_set_value() {
92 : 1 : const bool b = true;
93 : 1 : const int num = 1776;
94 [ + - ]: 2 : const string str = "bar";
95 : 1 : const char *ch = "char";
96 : :
97 [ + - ]: 1 : set_value(_state, b, "b");
98 [ + - ]: 1 : set_value(_state, num, "num");
99 [ + - ]: 1 : set_value(_state, str, "str");
100 [ + - ]: 1 : set_value(_state, ch, "ch");
101 [ + - ]: 1 : set_value(_state, "literal", "cch");
102 : :
103 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
104 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
105 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
106 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
107 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
108 : :
109 [ + - ]: 1 : create_value(_state, b, "a", "b", "c", "b");
110 [ + - ]: 1 : set_value(_state, num, "a", "b", "c","num");
111 [ + - ]: 1 : set_value(_state, str, "a", "b", "c", "str");
112 [ + - ]: 1 : set_value(_state, ch, "a", "b", "c", "ch");
113 [ + - ]: 1 : set_value(_state, "literal", "a", "b", "c", "cch");
114 : :
115 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<bool>(_state, "a", "b", "c", "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
116 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<int>(_state, "a", "b", "c", "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
117 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
118 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
119 [ + - + - : 1 : CPPUNIT_ASSERT(get_value<string>(_state, "a", "b", "c", "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
120 : 1 : }
121 : :
122 : 1 : void test_set_field() {
123 : 1 : const bool b = true;
124 : 1 : const int num = 1776;
125 [ + - ]: 2 : const string str = "bar";
126 : 1 : const char *ch = "char";
127 : :
128 [ + - ]: 1 : lua_newtable(_state);
129 : :
130 [ + - ]: 1 : set_field(_state, -1, b, "b");
131 [ + - ]: 1 : set_field(_state, -1, num, "num");
132 [ + - ]: 1 : set_field(_state, -1, str, "str");
133 [ + - ]: 1 : set_field(_state, -1, ch, "ch");
134 [ + - ]: 1 : set_field(_state, -1, "literal", "cch");
135 : :
136 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<bool>(_state, -1, "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
137 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<int>(_state, -1, "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
138 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
139 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
140 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
141 : :
142 [ + - ]: 1 : set_field(_state, -1, b, "a", "b", "c", "b");
143 [ + - ]: 1 : set_field(_state, -1, num, "a", "b", "c","num");
144 [ + - ]: 1 : set_field(_state, -1, str, "a", "b", "c", "str");
145 [ + - ]: 1 : set_field(_state, -1, ch, "a", "b", "c", "ch");
146 [ + - ]: 1 : set_field(_state, -1, "literal", "a", "b", "c", "cch");
147 : :
148 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<bool>(_state, -1, "a", "b", "c", "b") == b);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
149 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<int>(_state, -1, "a", "b", "c", "num") == num);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
150 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "a", "b", "c", "str") == str);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
151 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "a", "b", "c", "ch") == ch);
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
152 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "a", "b", "c", "cch") == "literal");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
153 : :
154 [ + - ]: 1 : lua_pop(_state, 1);
155 : 1 : }
156 : :
157 : 1 : void test_map_to_table() {
158 : : typedef NS_SSRC_WSPR_FCGI::parameter_map parameter_map;
159 : : typedef parameter_map::value_type value_type;
160 [ + - ]: 2 : parameter_map map;
161 : :
162 [ + - ]: 1 : luaL_openlibs(_state);
163 : :
164 [ + - + - : 1 : map.insert(value_type("a", "1"));
+ - ]
165 [ + - + - : 1 : map.insert(value_type("a", "2"));
+ - ]
166 [ + - + - : 1 : map.insert(value_type("a", "3"));
+ - ]
167 [ + - + - : 1 : map.insert(value_type("foo", "bar"));
+ - ]
168 [ + - + - : 1 : map.insert(value_type("bar", "foo"));
+ - ]
169 : :
170 [ + - ]: 1 : map_to_table(_state, map);
171 : :
172 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "foo") == "bar");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
173 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, "bar") == "foo");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
174 : :
175 [ + - ]: 1 : lua_getglobal(_state, "table");
176 [ + - ]: 1 : lua_getfield(_state, -1, "sort");
177 [ + - ]: 1 : lua_getfield(_state, -3, "a");
178 : :
179 [ + - + - : 1 : CPPUNIT_ASSERT(lua_pcall(_state, 1, 0, 0) == 0);
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
180 : :
181 [ + - ]: 1 : lua_pop(_state, 1);
182 [ + - ]: 1 : lua_getfield(_state, -1, "a");
183 : :
184 [ + - + - : 1 : CPPUNIT_ASSERT(3u == lua_objlen(_state, -1));
+ - + - +
- + - + -
+ - + - +
- + - +
- ]
185 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, 1) == "1");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
186 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, 2) == "2");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
187 [ + - + - : 1 : CPPUNIT_ASSERT(get_field<string>(_state, -1, 3) == "3");
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - ]
188 : :
189 [ + - ]: 1 : lua_pop(_state, 2);
190 : 1 : }
191 : :
192 [ + - + - : 4 : CPPUNIT_TEST_SUITE(LuaTest);
+ - # # ]
193 [ + - + - : 1 : CPPUNIT_TEST(test_get_value);
+ - + - +
- + - + -
+ - ]
194 [ + - + - : 1 : CPPUNIT_TEST(test_create_value);
+ - + - +
- + - + -
+ - ]
195 [ + - + - : 1 : CPPUNIT_TEST(test_set_value);
+ - + - +
- + - + -
+ - ]
196 [ + - + - : 1 : CPPUNIT_TEST(test_set_field);
+ - + - +
- + - + -
+ - ]
197 [ + - + - : 1 : CPPUNIT_TEST(test_map_to_table);
+ - + - +
- + - + -
+ - ]
198 [ + - + - : 2 : CPPUNIT_TEST_SUITE_END();
+ - + - +
- + - ]
199 : : };
200 : :
201 [ - + # # ]: 1 : CPPUNIT_TEST_SUITE_REGISTRATION(LuaTest);
202 [ + - + - : 4 : WISP_TEST_MAIN()
+ - + - +
- + - + -
+ - + - +
- + - ]
|