Mercurial > irccd
annotate tests/js-file/main.cpp @ 75:f8160d515a76
Irccd: rework a lot the JavaScript library
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 30 Mar 2016 13:52:47 +0200 |
parents | 1158cffe5a5e |
children | c5f4ca941f79 |
rev | line source |
---|---|
0 | 1 /* |
2 * main.cpp -- test Irccd.File API | |
3 * | |
4 * Copyright (c) 2013-2016 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 <fstream> | |
20 | |
21 #include <gtest/gtest.h> | |
22 | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
23 #include <irccd/js-file.h> |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
24 #include <irccd/js-irccd.h> |
0 | 25 |
26 using namespace irccd; | |
27 | |
28 TEST(TestJsFile, functionBasename) | |
29 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
30 duk::Context ctx; |
0 | 31 |
32 loadJsIrccd(ctx); | |
33 loadJsFile(ctx); | |
34 | |
35 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
36 if (duk::pevalString(ctx, "result = Irccd.File.basename('/usr/local/etc/irccd.conf');") != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
37 throw duk::error(ctx, -1); |
0 | 38 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
39 ASSERT_EQ("irccd.conf", duk::getGlobal<std::string>(ctx, "result")); |
0 | 40 } catch (const std::exception &ex) { |
41 FAIL() << ex.what(); | |
42 } | |
43 } | |
44 | |
45 TEST(TestJsFile, functionDirname) | |
46 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
47 duk::Context ctx; |
0 | 48 |
49 loadJsIrccd(ctx); | |
50 loadJsFile(ctx); | |
51 | |
52 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
53 duk::pevalString(ctx, "result = Irccd.File.dirname('/usr/local/etc/irccd.conf');"); |
0 | 54 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
55 ASSERT_EQ("/usr/local/etc", duk::getGlobal<std::string>(ctx,"result")); |
0 | 56 } catch (const std::exception &ex) { |
57 FAIL() << ex.what(); | |
58 } | |
59 } | |
60 | |
61 TEST(TestJsFile, functionExists) | |
62 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
63 duk::Context ctx; |
0 | 64 |
65 loadJsIrccd(ctx); | |
66 loadJsFile(ctx); | |
67 | |
68 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
69 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
70 duk::pevalString(ctx, "result = Irccd.File.exists(directory + '/file.txt')"); |
0 | 71 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
72 ASSERT_TRUE(duk::getGlobal<bool>(ctx,"result")); |
0 | 73 } catch (const std::exception &ex) { |
74 FAIL() << ex.what(); | |
75 } | |
76 } | |
77 | |
78 TEST(TestJsFile, functionExists2) | |
79 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
80 duk::Context ctx; |
0 | 81 |
82 loadJsIrccd(ctx); | |
83 loadJsFile(ctx); | |
84 | |
85 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
86 duk::pevalString(ctx, "result = Irccd.File.exists('file_which_does_not_exist.txt')"); |
0 | 87 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
88 ASSERT_FALSE(duk::getGlobal<bool>(ctx,"result")); |
0 | 89 } catch (const std::exception &ex) { |
90 FAIL() << ex.what(); | |
91 } | |
92 } | |
93 | |
94 TEST(TestJsFile, functionRemove) | |
95 { | |
96 // First create a dummy file | |
97 { | |
98 std::ofstream out("test-js-fs.remove"); | |
99 } | |
100 | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
101 duk::Context ctx; |
0 | 102 |
103 loadJsIrccd(ctx); | |
104 loadJsFile(ctx); | |
105 | |
106 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
107 if (duk::pevalString(ctx, "Irccd.File.remove('test-js-fs.remove');") != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
108 throw duk::error(ctx, -1); |
0 | 109 } catch (const std::exception &ex) { |
110 FAIL() << ex.what(); | |
111 } | |
112 | |
113 std::ifstream in("test-js-fs.remove"); | |
114 | |
115 ASSERT_FALSE(in.is_open()); | |
116 } | |
117 | |
118 TEST(TestJsFile, methodBasename) | |
119 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
120 duk::Context ctx; |
0 | 121 |
122 loadJsIrccd(ctx); | |
123 loadJsFile(ctx); | |
124 | |
125 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
126 duk::putGlobal(ctx,"directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
127 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
128 auto ret = duk::pevalString(ctx, |
0 | 129 "f = new Irccd.File(directory + '/level-1/file-1.txt', 'r');" |
130 "result = f.basename();" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
131 ); |
0 | 132 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
133 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
134 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
135 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
136 ASSERT_EQ("file-1.txt", duk::getGlobal<std::string>(ctx,"result")); |
0 | 137 } catch (const std::exception &ex) { |
138 FAIL() << ex.what(); | |
139 } | |
140 } | |
141 | |
142 TEST(TestJsFile, methodBasenameClosed) | |
143 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
144 duk::Context ctx; |
0 | 145 |
146 loadJsIrccd(ctx); | |
147 loadJsFile(ctx); | |
148 | |
149 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
150 duk::putGlobal(ctx,"directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
151 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
152 auto ret = duk::pevalString(ctx, |
0 | 153 "f = new Irccd.File(directory + '/level-1/file-1.txt', 'r');" |
154 "f.close();" | |
155 "result = f.basename();" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
156 ); |
0 | 157 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
158 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
159 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
160 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
161 ASSERT_EQ("file-1.txt", duk::getGlobal<std::string>(ctx,"result")); |
0 | 162 } catch (const std::exception &ex) { |
163 FAIL() << ex.what(); | |
164 } | |
165 } | |
166 | |
167 TEST(TestJsFile, methodDirname) | |
168 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
169 duk::Context ctx; |
0 | 170 |
171 loadJsIrccd(ctx); | |
172 loadJsFile(ctx); | |
173 | |
174 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
175 duk::putGlobal(ctx,"directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
176 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
177 auto ret = duk::pevalString(ctx, |
0 | 178 "f = new Irccd.File(directory + '/level-1/file-1.txt', 'r');" |
179 "result = f.dirname();" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
180 ); |
0 | 181 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
182 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
183 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
184 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
185 ASSERT_EQ(std::string{IRCCD_TESTS_DIRECTORY "/level-1"}, duk::getGlobal<std::string>(ctx, "result")); |
0 | 186 } catch (const std::exception &ex) { |
187 FAIL() << ex.what(); | |
188 } | |
189 } | |
190 | |
191 TEST(TestJsFile, methodDirnameClosed) | |
192 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
193 duk::Context ctx; |
0 | 194 |
195 loadJsIrccd(ctx); | |
196 loadJsFile(ctx); | |
197 | |
198 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
199 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
200 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
201 auto ret = duk::pevalString(ctx, |
0 | 202 "f = new Irccd.File(directory + '/level-1/file-1.txt', 'r');" |
203 "f.close();" | |
204 "result = f.dirname();" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
205 ); |
0 | 206 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
207 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
208 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
209 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
210 ASSERT_EQ(std::string{IRCCD_TESTS_DIRECTORY "/level-1"}, duk::getGlobal<std::string>(ctx, "result")); |
0 | 211 } catch (const std::exception &ex) { |
212 FAIL() << ex.what(); | |
213 } | |
214 } | |
215 | |
216 TEST(TestJsFile, methodSeek1) | |
217 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
218 duk::Context ctx; |
0 | 219 |
220 loadJsIrccd(ctx); | |
221 loadJsFile(ctx); | |
222 | |
223 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
224 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
225 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
226 auto ret = duk::pevalString(ctx, |
0 | 227 "f = new Irccd.File(directory + '/file.txt', 'r');" |
228 "f.seek(Irccd.File.SeekSet, 4);" | |
229 "result = f.read(1);" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
230 ); |
0 | 231 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
232 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
233 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
234 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
235 ASSERT_EQ(".", duk::getGlobal<std::string>(ctx, "result")); |
0 | 236 } catch (const std::exception &ex) { |
237 FAIL() << ex.what(); | |
238 } | |
239 } | |
240 | |
241 | |
242 TEST(TestJsFile, methodSeek1Closed) | |
243 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
244 duk::Context ctx; |
0 | 245 |
246 loadJsIrccd(ctx); | |
247 loadJsFile(ctx); | |
248 | |
249 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
250 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
251 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
252 auto ret = duk::pevalString(ctx, |
0 | 253 "f = new Irccd.File(directory + '/file.txt', 'r');" |
254 "f.close();" | |
255 "f.seek(Irccd.File.SeekSet, 4);" | |
256 "result = f.read(1);" | |
257 "result = typeof (result) === \"undefined\";" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
258 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
259 |
0 | 260 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
261 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
262 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
263 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
264 ASSERT_TRUE(duk::getGlobal<bool>(ctx, "result")); |
0 | 265 } catch (const std::exception &ex) { |
266 FAIL() << ex.what(); | |
267 } | |
268 } | |
269 | |
270 TEST(TestJsFile, methodSeek2) | |
271 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
272 duk::Context ctx; |
0 | 273 |
274 loadJsIrccd(ctx); | |
275 loadJsFile(ctx); | |
276 | |
277 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
278 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
279 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
280 auto ret = duk::pevalString(ctx, |
0 | 281 "f = new Irccd.File(directory + '/file.txt', 'r');" |
282 "f.seek(Irccd.File.SeekSet, 2);" | |
283 "f.seek(Irccd.File.SeekCur, 2);" | |
284 "result = f.read(1);" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
285 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
286 |
0 | 287 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
288 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
289 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
290 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
291 ASSERT_EQ(".", duk::getGlobal<std::string>(ctx, "result")); |
0 | 292 } catch (const std::exception &ex) { |
293 FAIL() << ex.what(); | |
294 } | |
295 } | |
296 | |
297 TEST(TestJsFile, methodSeek2Closed) | |
298 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
299 duk::Context ctx; |
0 | 300 |
301 loadJsIrccd(ctx); | |
302 loadJsFile(ctx); | |
303 | |
304 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
305 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
306 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
307 auto ret = duk::pevalString(ctx, |
0 | 308 "f = new Irccd.File(directory + '/file.txt', 'r');" |
309 "f.close();" | |
310 "f.seek(Irccd.File.SeekSet, 2);" | |
311 "f.seek(Irccd.File.SeekCur, 2);" | |
312 "result = f.read(1);" | |
313 "result = typeof (result) === \"undefined\";" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
314 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
315 |
0 | 316 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
317 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
318 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
319 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
320 ASSERT_TRUE(duk::getGlobal<bool>(ctx, "result")); |
0 | 321 } catch (const std::exception &ex) { |
322 FAIL() << ex.what(); | |
323 } | |
324 } | |
325 | |
326 TEST(TestJsFile, methodSeek3) | |
327 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
328 duk::Context ctx; |
0 | 329 |
330 loadJsIrccd(ctx); | |
331 loadJsFile(ctx); | |
332 | |
333 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
334 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
335 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
336 auto ret = duk::pevalString(ctx, |
0 | 337 "f = new Irccd.File(directory + '/file.txt', 'r');" |
338 "f.seek(Irccd.File.SeekEnd, -2);" | |
339 "result = f.read(1);" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
340 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
341 |
0 | 342 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
343 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
344 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
345 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
346 ASSERT_EQ("x", duk::getGlobal<std::string>(ctx, "result")); |
0 | 347 } catch (const std::exception &ex) { |
348 FAIL() << ex.what(); | |
349 } | |
350 } | |
351 | |
352 TEST(TestJsFile, methodSeek3Closed) | |
353 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
354 duk::Context ctx; |
0 | 355 |
356 loadJsIrccd(ctx); | |
357 loadJsFile(ctx); | |
358 | |
359 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
360 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
361 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
362 auto ret = duk::pevalString(ctx, |
0 | 363 "f = new Irccd.File(directory + '/file.txt', 'r');" |
364 "f.close();" | |
365 "f.seek(Irccd.File.SeekEnd, -2);" | |
366 "result = f.read(1);" | |
367 "result = typeof (result) === \"undefined\";" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
368 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
369 |
0 | 370 |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
371 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
372 throw duk::error(ctx, -1); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
373 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
374 ASSERT_TRUE(duk::getGlobal<bool>(ctx, "result")); |
0 | 375 } catch (const std::exception &ex) { |
376 FAIL() << ex.what(); | |
377 } | |
378 } | |
379 | |
380 TEST(TestJsFile, methodReadline) | |
381 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
382 duk::Context ctx; |
0 | 383 |
384 loadJsIrccd(ctx); | |
385 loadJsFile(ctx); | |
386 | |
387 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
388 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
389 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
390 auto ret = duk::pevalString(ctx, |
0 | 391 "lines = [];" |
392 "f = new Irccd.File(directory + '/lines.txt', 'r');" | |
393 "for (var s; s = f.readline(); ) {" | |
394 " lines.push(s);" | |
395 "}" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
396 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
397 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
398 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
399 throw duk::error(ctx, -1); |
0 | 400 |
401 std::vector<std::string> expected{"a", "b", "c"}; | |
402 | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
403 ASSERT_EQ(expected, duk::getGlobal<std::vector<std::string>>(ctx, "lines")); |
0 | 404 } catch (const std::exception &ex) { |
405 FAIL() << ex.what(); | |
406 } | |
407 } | |
408 | |
409 TEST(TestJsFile, methodReadlineClosed) | |
410 { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
411 duk::Context ctx; |
0 | 412 |
413 loadJsIrccd(ctx); | |
414 loadJsFile(ctx); | |
415 | |
416 try { | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
417 duk::putGlobal(ctx, "directory", IRCCD_TESTS_DIRECTORY); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
418 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
419 auto ret = duk::pevalString(ctx, |
0 | 420 "lines = [];" |
421 "f = new Irccd.File(directory + '/lines.txt', 'r');" | |
422 "f.close();" | |
423 "for (var s; s = f.readline(); ) {" | |
424 " lines.push(s);" | |
425 "}" | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
426 ); |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
427 |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
428 if (ret != 0) |
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
429 throw duk::error(ctx, -1); |
0 | 430 |
431 std::vector<std::string> expected; | |
432 | |
75
f8160d515a76
Irccd: rework a lot the JavaScript library
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
433 ASSERT_EQ(expected, duk::getGlobal<std::vector<std::string>>(ctx, "lines")); |
0 | 434 } catch (const std::exception &ex) { |
435 FAIL() << ex.what(); | |
436 } | |
437 } | |
438 | |
439 int main(int argc, char **argv) | |
440 { | |
441 testing::InitGoogleTest(&argc, argv); | |
442 | |
443 return RUN_ALL_TESTS(); | |
444 } |