Mercurial > code
annotate C++/tests/Js/main.cpp @ 398:94bfe7ba9a13
Js:
- Rename some functions
- Cleanup a lot
- Add more documentation
- Add specialization of getProperty and getGlobal to void to push on the
stack
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 30 Sep 2015 19:59:12 +0200 |
parents | 6b2db5425836 |
children | 73517fd307dd |
rev | line source |
---|---|
391 | 1 /* |
2 * TestJsUnicode.cpp -- test irccd JS functions | |
3 * | |
4 * Copyright (c) 2013, 2014, 2015 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include <gtest/gtest.h> | |
20 | |
21 #include <Js.h> | |
22 | |
23 using namespace js; | |
24 | |
25 /* -------------------------------------------------------- | |
26 * Push & get | |
27 * -------------------------------------------------------- */ | |
28 | |
29 TEST(PushAndGet, boolean) | |
30 { | |
31 Context context; | |
32 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
33 context.push(true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
34 ASSERT_TRUE(context.get<bool>(-1)); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
35 context.push(false); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
36 ASSERT_FALSE(context.get<bool>(-1)); |
391 | 37 } |
38 | |
39 TEST(PushAndGet, integer) | |
40 { | |
41 Context context; | |
42 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
43 context.push(123); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
44 ASSERT_EQ(123, context.get<int>(-1)); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
45 context.push(456); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
46 ASSERT_EQ(456, context.get<int>(-1)); |
391 | 47 } |
48 | |
49 TEST(PushAndGet, number) | |
50 { | |
51 Context context; | |
52 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
53 context.push(10.5); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
54 ASSERT_EQ(10.5, context.get<double>(-1)); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
55 context.push(50.1); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
56 ASSERT_EQ(50.1, context.get<double>(-1)); |
391 | 57 } |
58 | |
59 TEST(PushAndGet, string) | |
60 { | |
61 Context context; | |
62 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
63 context.push("hello world!"); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
64 ASSERT_EQ("hello world!", context.get<std::string>(-1)); |
391 | 65 } |
66 | |
67 /* -------------------------------------------------------- | |
68 * Basics | |
69 * -------------------------------------------------------- */ | |
70 | |
71 TEST(Basics, global) | |
72 { | |
73 Context context; | |
74 | |
75 // boolean | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
76 context.setGlobal("valueBoolean", true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
77 ASSERT_TRUE(context.getGlobal<bool>("valueBoolean")); |
391 | 78 |
79 // integer | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
80 context.setGlobal("valueInteger", 123); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
81 ASSERT_EQ(123, context.getGlobal<int>("valueInteger")); |
391 | 82 } |
83 | |
84 TEST(Basics, top) | |
85 { | |
86 Context context; | |
87 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
88 int current = context.top(); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
89 context.push(true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
90 ASSERT_EQ(current + 1, context.top()); |
391 | 91 } |
92 | |
93 TEST(Basics, pop1) | |
94 { | |
95 Context context; | |
96 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
97 int current = context.top(); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
98 context.push(true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
99 context.pop(); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
100 ASSERT_EQ(current, context.top()); |
391 | 101 } |
102 | |
103 TEST(Basics, pop2) | |
104 { | |
105 Context context; | |
106 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
107 int current = context.top(); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
108 context.push(true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
109 context.push(true); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
110 context.pop(2); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
111 ASSERT_EQ(current, context.top()); |
391 | 112 } |
113 | |
398 | 114 TEST(Basics, putProperty) |
391 | 115 { |
116 Context context; | |
117 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
118 context.push(Object{}); |
398 | 119 context.putProperty(-1, "x", 123); |
120 ASSERT_EQ(123, context.getProperty<int>(-1, "x")); | |
391 | 121 } |
122 | |
123 TEST(Basics, enumerate) | |
124 { | |
125 Context context; | |
126 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
127 context.push(Object{}); |
398 | 128 context.putProperty(-1, "x", 123); |
129 context.putProperty(-1, "y", 456); | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
130 context.enumerate(-1, 0, true, [] (Context &ctx) { |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
131 ASSERT_EQ(DUK_TYPE_STRING, ctx.type(-2)); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
132 ASSERT_EQ(DUK_TYPE_NUMBER, ctx.type(-1)); |
391 | 133 |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
134 if (ctx.get<std::string>(-2) == "x") |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
135 ASSERT_EQ(123, ctx.get<int>(-1)); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
136 if (ctx.get<std::string>(-2) == "y") |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
137 ASSERT_EQ(456, ctx.get<int>(-1)); |
391 | 138 }); |
139 } | |
140 | |
141 TEST(Basics, call) | |
142 { | |
143 Context context; | |
144 | |
398 | 145 context.push(Function{[] (Context &ctx) -> int { |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
146 ctx.setGlobal("x", 123); |
391 | 147 |
148 return 0; | |
149 }}); | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
150 context.call(); |
391 | 151 |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
152 ASSERT_EQ(123, context.getGlobal<int>("x")); |
391 | 153 } |
154 | |
155 /* ------------------------------------------------------------------ | |
156 * Eval | |
157 * ------------------------------------------------------------------ */ | |
158 | |
159 TEST(Eval, simple) | |
160 { | |
161 Context context; | |
162 | |
398 | 163 context.eval(Script{"x = 123;"}); |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
164 ASSERT_EQ(123, context.getGlobal<int>("x")); |
391 | 165 } |
166 | |
167 TEST(Eval, function) | |
168 { | |
169 Context context; | |
170 | |
398 | 171 context.eval(Script{"function f() { x = 123; }; f();"}); |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
172 ASSERT_EQ(123, context.getGlobal<int>("x")); |
391 | 173 } |
174 | |
175 TEST(Eval, cfunction) | |
176 { | |
177 Context context; | |
178 | |
398 | 179 context.setGlobal("f", Function{[] (Context &ctx) -> int { |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
180 ctx.setGlobal("x", 123); |
391 | 181 |
182 return 0; | |
183 }}); | |
398 | 184 context.eval(Script{"f()"}); |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
185 |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
186 ASSERT_EQ(123, context.getGlobal<int>("x")); |
391 | 187 } |
188 | |
189 /* ------------------------------------------------------------------ | |
190 * Protected eval | |
191 * ------------------------------------------------------------------ */ | |
192 | |
193 TEST(Peval, success) | |
194 { | |
195 Context context; | |
196 | |
197 try { | |
398 | 198 context.peval(Script{"x = 1"}); |
391 | 199 } catch (const ErrorInfo &info) { |
200 FAIL() << "error unexpected: " << info.what(); | |
201 } | |
202 } | |
203 | |
204 TEST(Peval, failure) | |
205 { | |
206 Context context; | |
207 | |
208 try { | |
398 | 209 context.peval(Script{"doesnotexists()"}); |
391 | 210 |
211 FAIL() << "expected exception"; | |
398 | 212 } catch (const std::exception &) { |
391 | 213 } |
214 } | |
215 | |
216 /* ------------------------------------------------------------------ | |
217 * Exception handling | |
218 * ------------------------------------------------------------------ */ | |
219 | |
220 TEST(Exception, error) | |
221 { | |
222 Context context; | |
223 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
224 context.setGlobal("f", Function{[] (ContextPtr pctx) -> duk_idx_t { |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
225 Context ctx{pctx}; |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
226 |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
227 ctx.raise(Error{"error thrown"}); |
391 | 228 |
229 return 0; | |
230 }}); | |
398 | 231 context.eval(Script{ |
391 | 232 "try {" |
233 " f();" | |
234 "} catch (ex) {" | |
235 " name = ex.name;" | |
236 " message = ex.message;" | |
237 " received = true;" | |
238 "}" | |
398 | 239 }); |
391 | 240 |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
241 ASSERT_TRUE(context.getGlobal<bool>("received")); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
242 ASSERT_EQ("Error", context.getGlobal<std::string>("name")); |
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
243 ASSERT_EQ("error thrown", context.getGlobal<std::string>("message")); |
391 | 244 } |
245 | |
397
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
246 /* -------------------------------------------------------- |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
247 * TypeInfo with shared |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
248 * -------------------------------------------------------- */ |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
249 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
250 class Player { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
251 public: |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
252 bool m_updated{false}; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
253 }; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
254 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
255 template <> |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
256 class TypeInfo<std::shared_ptr<Player>> : public TypeInfoShared<Player> { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
257 public: |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
258 static void prototype(Context &ctx) |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
259 { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
260 /* Create a temporary for the test */ |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
261 ctx.push(Object{}); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
262 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
263 /* "update" method */ |
398 | 264 ctx.putProperty(-1, "update", Function{[] (ContextPtr pctx) -> duk_ret_t { |
397
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
265 Context{pctx}.self<std::shared_ptr<Player>>()->m_updated = true; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
266 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
267 return 0; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
268 }}); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
269 } |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
270 }; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
271 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
272 TEST(Shared, simple) |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
273 { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
274 Context ctx; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
275 std::shared_ptr<Player> p{new Player}; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
276 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
277 ctx.push(p); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
278 std::shared_ptr<Player> p2 = ctx.get<std::shared_ptr<Player>>(-1); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
279 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
280 p2->m_updated = true; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
281 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
282 ASSERT_TRUE(p->m_updated); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
283 } |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
284 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
285 TEST(Shared, self) |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
286 { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
287 Context ctx; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
288 std::shared_ptr<Player> p{new Player}; |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
289 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
290 try { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
291 ctx.setGlobal("player", p); |
398 | 292 ctx.peval(Script{"player.update();"}); |
397
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
293 |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
294 ASSERT_TRUE(p->m_updated); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
295 } catch (const std::exception &ex) { |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
296 FAIL() << ex.what(); |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
297 } |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
298 } |
6b2db5425836
Js: initial support for objects as shared_ptr
David Demelier <markand@malikania.fr>
parents:
392
diff
changeset
|
299 |
391 | 300 int main(int argc, char **argv) |
301 { | |
302 testing::InitGoogleTest(&argc, argv); | |
303 | |
304 return RUN_ALL_TESTS(); | |
305 } |