Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: test/FileSystemJsObject.cpp

Issue 29449592: Issue 5183 - Provide async interface for FileSystem (Closed) Base URL: https://hg.adblockplus.org/libadblockplus/
Left Patch Set: Updated patch after review. Created June 16, 2017, 9:52 p.m.
Right Patch Set: Rebase on master. Last changes. Created July 7, 2017, 1:36 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « test/DefaultFileSystem.cpp ('k') | test/FilterEngine.cpp » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2017 eyeo GmbH 3 * Copyright (C) 2006-2017 eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #include <sstream> 18 #include <sstream>
19 #include "BaseJsTest.h" 19 #include "BaseJsTest.h"
20 #include "../src/Thread.h" 20 #include "../src/Thread.h"
21 21
22 namespace 22 namespace
23 { 23 {
24 class MockFileSystem : public AdblockPlus::IFileSystem 24 class MockFileSystem : public AdblockPlus::IFileSystem
25 { 25 {
26 public: 26 public:
27 bool success; 27 bool success;
28 std::string contentToRead; 28 IOBuffer contentToRead;
29 std::string lastWrittenPath; 29 std::string lastWrittenPath;
30 std::string lastWrittenContent; 30 IOBuffer lastWrittenContent;
31 std::string movedFrom; 31 std::string movedFrom;
32 std::string movedTo; 32 std::string movedTo;
33 std::string removedPath; 33 std::string removedPath;
34 mutable std::string statPath; 34 mutable std::string statPath;
35 bool statExists; 35 bool statExists;
36 bool statIsDirectory; 36 bool statIsDirectory;
37 bool statIsFile; 37 bool statIsFile;
38 int statLastModified; 38 int statLastModified;
39 39
40 MockFileSystem() : success(true) 40 MockFileSystem() : success(true)
41 { 41 {
42 } 42 }
43 43
44 void Read(const std::string& path, const ReadCallback& callback) const 44 void Read(const std::string& path, const ReadCallback& callback) const
45 { 45 {
46 if (!success) 46 if (!success)
47 { 47 {
48 callback("", "Unable to read " + path); 48 callback(IOBuffer(), "Unable to read " + path);
49 return; 49 return;
50 } 50 }
51 callback(std::string(contentToRead), ""); 51 callback(IOBuffer(contentToRead), "");
52 } 52 }
53 53
54 void Write(const std::string& path, const std::string& data, 54 void Write(const std::string& path, const IOBuffer& data,
55 const Callback& callback) 55 const Callback& callback)
56 { 56 {
57 if (!success) 57 if (!success)
58 { 58 {
59 callback("Unable to write to " + path); 59 callback("Unable to write to " + path);
60 return; 60 return;
61 } 61 }
62 lastWrittenPath = path; 62 lastWrittenPath = path;
63 63
64 lastWrittenContent = data; 64 lastWrittenContent = data;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 mockFileSystem = MockFileSystemPtr(new MockFileSystem); 136 mockFileSystem = MockFileSystemPtr(new MockFileSystem);
137 JsEngineCreationParameters params; 137 JsEngineCreationParameters params;
138 params.fileSystem = mockFileSystem; 138 params.fileSystem = mockFileSystem;
139 jsEngine = CreateJsEngine(std::move(params)); 139 jsEngine = CreateJsEngine(std::move(params));
140 } 140 }
141 }; 141 };
142 } 142 }
143 143
144 TEST_F(FileSystemJsObjectTest, Read) 144 TEST_F(FileSystemJsObjectTest, Read)
145 { 145 {
146 mockFileSystem->contentToRead = "foo"; 146 mockFileSystem->contentToRead =
147 AdblockPlus::IFileSystem::IOBuffer{'f', 'o', 'o'};
147 std::string content; 148 std::string content;
148 std::string error; 149 std::string error;
149 ReadFile(jsEngine, content, error); 150 ReadFile(jsEngine, content, error);
150 ASSERT_EQ("foo", content); 151 ASSERT_EQ("foo", content);
151 ASSERT_EQ("", error); 152 ASSERT_EQ("undefined", error);
152 } 153 }
153 154
154 TEST_F(FileSystemJsObjectTest, ReadIllegalArguments) 155 TEST_F(FileSystemJsObjectTest, ReadIllegalArguments)
155 { 156 {
156 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read()")); 157 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read()"));
157 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read('', '')")); 158 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read('', '')"));
158 } 159 }
159 160
160 TEST_F(FileSystemJsObjectTest, ReadError) 161 TEST_F(FileSystemJsObjectTest, ReadError)
161 { 162 {
162 mockFileSystem->success = false; 163 mockFileSystem->success = false;
163 std::string content; 164 std::string content;
164 std::string error; 165 std::string error;
165 ReadFile(jsEngine, content, error); 166 ReadFile(jsEngine, content, error);
166 ASSERT_NE("", error); 167 ASSERT_NE("", error);
167 ASSERT_EQ("", content); 168 ASSERT_EQ("", content);
168 } 169 }
169 170
170 TEST_F(FileSystemJsObjectTest, Write) 171 TEST_F(FileSystemJsObjectTest, Write)
171 { 172 {
172 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})") ; 173 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})") ;
173 AdblockPlus::Sleep(50); 174 AdblockPlus::Sleep(50);
174 ASSERT_EQ("foo", mockFileSystem->lastWrittenPath); 175 ASSERT_EQ("foo", mockFileSystem->lastWrittenPath);
175 ASSERT_EQ("bar", mockFileSystem->lastWrittenContent); 176 ASSERT_EQ((AdblockPlus::IFileSystem::IOBuffer{'b', 'a', 'r'}),
176 ASSERT_EQ("", jsEngine->Evaluate("error").AsString()); 177 mockFileSystem->lastWrittenContent);
178 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
177 } 179 }
178 180
179 TEST_F(FileSystemJsObjectTest, WriteIllegalArguments) 181 TEST_F(FileSystemJsObjectTest, WriteIllegalArguments)
180 { 182 {
181 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write()")); 183 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write()"));
182 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write('', '', '')")); 184 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write('', '', '')"));
183 } 185 }
184 186
185 TEST_F(FileSystemJsObjectTest, WriteError) 187 TEST_F(FileSystemJsObjectTest, WriteError)
186 { 188 {
187 mockFileSystem->success = false; 189 mockFileSystem->success = false;
188 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})") ; 190 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})") ;
189 AdblockPlus::Sleep(50); 191 AdblockPlus::Sleep(50);
190 ASSERT_NE("", jsEngine->Evaluate("error").AsString()); 192 ASSERT_NE("", jsEngine->Evaluate("error").AsString());
191 } 193 }
192 194
193 TEST_F(FileSystemJsObjectTest, Move) 195 TEST_F(FileSystemJsObjectTest, Move)
194 { 196 {
195 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})"); 197 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})");
196 AdblockPlus::Sleep(50); 198 AdblockPlus::Sleep(50);
197 ASSERT_EQ("foo", mockFileSystem->movedFrom); 199 ASSERT_EQ("foo", mockFileSystem->movedFrom);
198 ASSERT_EQ("bar", mockFileSystem->movedTo); 200 ASSERT_EQ("bar", mockFileSystem->movedTo);
199 ASSERT_EQ("", jsEngine->Evaluate("error").AsString()); 201 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
200 } 202 }
201 203
202 TEST_F(FileSystemJsObjectTest, MoveIllegalArguments) 204 TEST_F(FileSystemJsObjectTest, MoveIllegalArguments)
203 { 205 {
204 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move()")); 206 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move()"));
205 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move('', '', '')")); 207 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move('', '', '')"));
206 } 208 }
207 209
208 TEST_F(FileSystemJsObjectTest, MoveError) 210 TEST_F(FileSystemJsObjectTest, MoveError)
209 { 211 {
210 mockFileSystem->success = false; 212 mockFileSystem->success = false;
211 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})"); 213 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})");
212 AdblockPlus::Sleep(50); 214 AdblockPlus::Sleep(50);
213 ASSERT_NE("", jsEngine->Evaluate("error").AsString()); 215 ASSERT_FALSE(jsEngine->Evaluate("error").IsUndefined());
214 } 216 }
215 217
216 TEST_F(FileSystemJsObjectTest, Remove) 218 TEST_F(FileSystemJsObjectTest, Remove)
217 { 219 {
218 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); 220 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})");
219 AdblockPlus::Sleep(50); 221 AdblockPlus::Sleep(50);
220 ASSERT_EQ("foo", mockFileSystem->removedPath); 222 ASSERT_EQ("foo", mockFileSystem->removedPath);
221 ASSERT_EQ("", jsEngine->Evaluate("error").AsString()); 223 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined());
222 } 224 }
223 225
224 TEST_F(FileSystemJsObjectTest, RemoveIllegalArguments) 226 TEST_F(FileSystemJsObjectTest, RemoveIllegalArguments)
225 { 227 {
226 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove()")); 228 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove()"));
227 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove('', '')")); 229 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove('', '')"));
228 } 230 }
229 231
230 TEST_F(FileSystemJsObjectTest, RemoveError) 232 TEST_F(FileSystemJsObjectTest, RemoveError)
231 { 233 {
232 mockFileSystem->success = false; 234 mockFileSystem->success = false;
233 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); 235 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})");
234 AdblockPlus::Sleep(50); 236 AdblockPlus::Sleep(50);
235 ASSERT_NE("", jsEngine->Evaluate("error").AsString()); 237 ASSERT_NE("", jsEngine->Evaluate("error").AsString());
236 } 238 }
237 239
238 TEST_F(FileSystemJsObjectTest, Stat) 240 TEST_F(FileSystemJsObjectTest, Stat)
239 { 241 {
240 mockFileSystem->statExists = true; 242 mockFileSystem->statExists = true;
241 mockFileSystem->statIsDirectory= false; 243 mockFileSystem->statIsDirectory= false;
242 mockFileSystem->statIsFile = true; 244 mockFileSystem->statIsFile = true;
243 mockFileSystem->statLastModified = 1337; 245 mockFileSystem->statLastModified = 1337;
244 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); 246 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})");
245 AdblockPlus::Sleep(50); 247 AdblockPlus::Sleep(50);
246 ASSERT_EQ("foo", mockFileSystem->statPath); 248 ASSERT_EQ("foo", mockFileSystem->statPath);
247 ASSERT_EQ("", jsEngine->Evaluate("result.error").AsString()); 249 ASSERT_TRUE(jsEngine->Evaluate("result.error").IsUndefined());
248 ASSERT_TRUE(jsEngine->Evaluate("result.exists").AsBool()); 250 ASSERT_TRUE(jsEngine->Evaluate("result.exists").AsBool());
249 ASSERT_FALSE(jsEngine->Evaluate("result.isDirectory").AsBool()); 251 ASSERT_FALSE(jsEngine->Evaluate("result.isDirectory").AsBool());
250 ASSERT_TRUE(jsEngine->Evaluate("result.isFile").AsBool()); 252 ASSERT_TRUE(jsEngine->Evaluate("result.isFile").AsBool());
251 ASSERT_EQ(1337, jsEngine->Evaluate("result.lastModified").AsInt()); 253 ASSERT_EQ(1337, jsEngine->Evaluate("result.lastModified").AsInt());
252 } 254 }
253 255
254 TEST_F(FileSystemJsObjectTest, StatIllegalArguments) 256 TEST_F(FileSystemJsObjectTest, StatIllegalArguments)
255 { 257 {
256 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat()")); 258 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat()"));
257 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat('', '')")); 259 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat('', '')"));
258 } 260 }
259 261
260 TEST_F(FileSystemJsObjectTest, StatError) 262 TEST_F(FileSystemJsObjectTest, StatError)
261 { 263 {
262 mockFileSystem->success = false; 264 mockFileSystem->success = false;
263 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); 265 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})");
264 AdblockPlus::Sleep(50); 266 AdblockPlus::Sleep(50);
265 ASSERT_NE("", jsEngine->Evaluate("result.error").AsString()); 267 ASSERT_FALSE(jsEngine->Evaluate("result.error").IsUndefined());
266 } 268 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld