OLD | NEW |
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 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 } | 107 } |
108 | 108 |
109 std::string Resolve(const std::string& path) const override | 109 std::string Resolve(const std::string& path) const override |
110 { | 110 { |
111 if (!success) | 111 if (!success) |
112 throw std::runtime_error("Unable to stat " + path); | 112 throw std::runtime_error("Unable to stat " + path); |
113 return path; | 113 return path; |
114 } | 114 } |
115 }; | 115 }; |
116 | 116 |
117 void ReadFile(AdblockPlus::JsEnginePtr jsEngine, std::string& content, | 117 void ReadFile(AdblockPlus::JsEngine& jsEngine, std::string& content, |
118 std::string& error) | 118 std::string& error) |
119 { | 119 { |
120 jsEngine->Evaluate("_fileSystem.read('', function(r) {result = r})"); | 120 jsEngine.Evaluate("_fileSystem.read('', function(r) {result = r})"); |
121 content = jsEngine->Evaluate("result.content").AsString(); | 121 content = jsEngine.Evaluate("result.content").AsString(); |
122 error = jsEngine->Evaluate("result.error").AsString(); | 122 error = jsEngine.Evaluate("result.error").AsString(); |
123 } | 123 } |
124 | 124 |
125 typedef std::shared_ptr<MockFileSystem> MockFileSystemPtr; | 125 typedef std::shared_ptr<MockFileSystem> MockFileSystemPtr; |
126 | 126 |
127 class FileSystemJsObjectTest : public BaseJsTest | 127 class FileSystemJsObjectTest : public BaseJsTest |
128 { | 128 { |
129 protected: | 129 protected: |
130 MockFileSystemPtr mockFileSystem; | 130 MockFileSystemPtr mockFileSystem; |
131 AdblockPlus::JsEnginePtr jsEngine; | |
132 | 131 |
133 void SetUp() | 132 void SetUp() |
134 { | 133 { |
135 mockFileSystem = MockFileSystemPtr(new MockFileSystem()); | 134 mockFileSystem = MockFileSystemPtr(new MockFileSystem()); |
136 ThrowingPlatformCreationParameters params; | 135 ThrowingPlatformCreationParameters params; |
137 params.fileSystem = mockFileSystem; | 136 params.fileSystem = mockFileSystem; |
138 platform.reset(new AdblockPlus::Platform(std::move(params))); | 137 platform.reset(new AdblockPlus::Platform(std::move(params))); |
139 jsEngine = platform->GetJsEngine(); | |
140 } | 138 } |
141 }; | 139 }; |
142 } | 140 } |
143 | 141 |
144 TEST_F(FileSystemJsObjectTest, Read) | 142 TEST_F(FileSystemJsObjectTest, Read) |
145 { | 143 { |
146 mockFileSystem->contentToRead = | 144 mockFileSystem->contentToRead = |
147 AdblockPlus::IFileSystem::IOBuffer{'f', 'o', 'o'}; | 145 AdblockPlus::IFileSystem::IOBuffer{'f', 'o', 'o'}; |
148 std::string content; | 146 std::string content; |
149 std::string error; | 147 std::string error; |
150 ReadFile(jsEngine, content, error); | 148 ReadFile(GetJsEngine(), content, error); |
151 ASSERT_EQ("foo", content); | 149 ASSERT_EQ("foo", content); |
152 ASSERT_EQ("undefined", error); | 150 ASSERT_EQ("undefined", error); |
153 } | 151 } |
154 | 152 |
155 TEST_F(FileSystemJsObjectTest, ReadIllegalArguments) | 153 TEST_F(FileSystemJsObjectTest, ReadIllegalArguments) |
156 { | 154 { |
157 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read()")); | 155 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.read()")); |
158 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.read('', '')")); | 156 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.read('', '')")); |
159 } | 157 } |
160 | 158 |
161 TEST_F(FileSystemJsObjectTest, ReadError) | 159 TEST_F(FileSystemJsObjectTest, ReadError) |
162 { | 160 { |
163 mockFileSystem->success = false; | 161 mockFileSystem->success = false; |
164 std::string content; | 162 std::string content; |
165 std::string error; | 163 std::string error; |
166 ReadFile(jsEngine, content, error); | 164 ReadFile(GetJsEngine(), content, error); |
167 ASSERT_NE("", error); | 165 ASSERT_NE("", error); |
168 ASSERT_EQ("", content); | 166 ASSERT_EQ("", content); |
169 } | 167 } |
170 | 168 |
171 TEST_F(FileSystemJsObjectTest, Write) | 169 TEST_F(FileSystemJsObjectTest, Write) |
172 { | 170 { |
173 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})")
; | 171 GetJsEngine().Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e
})"); |
174 ASSERT_EQ("foo", mockFileSystem->lastWrittenPath); | 172 ASSERT_EQ("foo", mockFileSystem->lastWrittenPath); |
175 ASSERT_EQ((AdblockPlus::IFileSystem::IOBuffer{'b', 'a', 'r'}), | 173 ASSERT_EQ((AdblockPlus::IFileSystem::IOBuffer{'b', 'a', 'r'}), |
176 mockFileSystem->lastWrittenContent); | 174 mockFileSystem->lastWrittenContent); |
177 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined()); | 175 ASSERT_TRUE(GetJsEngine().Evaluate("error").IsUndefined()); |
178 } | 176 } |
179 | 177 |
180 TEST_F(FileSystemJsObjectTest, WriteIllegalArguments) | 178 TEST_F(FileSystemJsObjectTest, WriteIllegalArguments) |
181 { | 179 { |
182 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write()")); | 180 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.write()")); |
183 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.write('', '', '')")); | 181 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.write('', '', '')")); |
184 } | 182 } |
185 | 183 |
186 TEST_F(FileSystemJsObjectTest, WriteError) | 184 TEST_F(FileSystemJsObjectTest, WriteError) |
187 { | 185 { |
188 mockFileSystem->success = false; | 186 mockFileSystem->success = false; |
189 jsEngine->Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e})")
; | 187 GetJsEngine().Evaluate("_fileSystem.write('foo', 'bar', function(e) {error = e
})"); |
190 ASSERT_NE("", jsEngine->Evaluate("error").AsString()); | 188 ASSERT_NE("", GetJsEngine().Evaluate("error").AsString()); |
191 } | 189 } |
192 | 190 |
193 TEST_F(FileSystemJsObjectTest, Move) | 191 TEST_F(FileSystemJsObjectTest, Move) |
194 { | 192 { |
195 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})"); | 193 GetJsEngine().Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e}
)"); |
196 ASSERT_EQ("foo", mockFileSystem->movedFrom); | 194 ASSERT_EQ("foo", mockFileSystem->movedFrom); |
197 ASSERT_EQ("bar", mockFileSystem->movedTo); | 195 ASSERT_EQ("bar", mockFileSystem->movedTo); |
198 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined()); | 196 ASSERT_TRUE(GetJsEngine().Evaluate("error").IsUndefined()); |
199 } | 197 } |
200 | 198 |
201 TEST_F(FileSystemJsObjectTest, MoveIllegalArguments) | 199 TEST_F(FileSystemJsObjectTest, MoveIllegalArguments) |
202 { | 200 { |
203 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move()")); | 201 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.move()")); |
204 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.move('', '', '')")); | 202 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.move('', '', '')")); |
205 } | 203 } |
206 | 204 |
207 TEST_F(FileSystemJsObjectTest, MoveError) | 205 TEST_F(FileSystemJsObjectTest, MoveError) |
208 { | 206 { |
209 mockFileSystem->success = false; | 207 mockFileSystem->success = false; |
210 jsEngine->Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e})"); | 208 GetJsEngine().Evaluate("_fileSystem.move('foo', 'bar', function(e) {error = e}
)"); |
211 ASSERT_FALSE(jsEngine->Evaluate("error").IsUndefined()); | 209 ASSERT_FALSE(GetJsEngine().Evaluate("error").IsUndefined()); |
212 } | 210 } |
213 | 211 |
214 TEST_F(FileSystemJsObjectTest, Remove) | 212 TEST_F(FileSystemJsObjectTest, Remove) |
215 { | 213 { |
216 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); | 214 GetJsEngine().Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); |
217 ASSERT_EQ("foo", mockFileSystem->removedPath); | 215 ASSERT_EQ("foo", mockFileSystem->removedPath); |
218 ASSERT_TRUE(jsEngine->Evaluate("error").IsUndefined()); | 216 ASSERT_TRUE(GetJsEngine().Evaluate("error").IsUndefined()); |
219 } | 217 } |
220 | 218 |
221 TEST_F(FileSystemJsObjectTest, RemoveIllegalArguments) | 219 TEST_F(FileSystemJsObjectTest, RemoveIllegalArguments) |
222 { | 220 { |
223 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove()")); | 221 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.remove()")); |
224 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.remove('', '')")); | 222 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.remove('', '')")); |
225 } | 223 } |
226 | 224 |
227 TEST_F(FileSystemJsObjectTest, RemoveError) | 225 TEST_F(FileSystemJsObjectTest, RemoveError) |
228 { | 226 { |
229 mockFileSystem->success = false; | 227 mockFileSystem->success = false; |
230 jsEngine->Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); | 228 GetJsEngine().Evaluate("_fileSystem.remove('foo', function(e) {error = e})"); |
231 ASSERT_NE("", jsEngine->Evaluate("error").AsString()); | 229 ASSERT_NE("", GetJsEngine().Evaluate("error").AsString()); |
232 } | 230 } |
233 | 231 |
234 TEST_F(FileSystemJsObjectTest, Stat) | 232 TEST_F(FileSystemJsObjectTest, Stat) |
235 { | 233 { |
236 mockFileSystem->statExists = true; | 234 mockFileSystem->statExists = true; |
237 mockFileSystem->statIsDirectory= false; | 235 mockFileSystem->statIsDirectory= false; |
238 mockFileSystem->statIsFile = true; | 236 mockFileSystem->statIsFile = true; |
239 mockFileSystem->statLastModified = 1337; | 237 mockFileSystem->statLastModified = 1337; |
240 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); | 238 GetJsEngine().Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); |
241 ASSERT_EQ("foo", mockFileSystem->statPath); | 239 ASSERT_EQ("foo", mockFileSystem->statPath); |
242 ASSERT_TRUE(jsEngine->Evaluate("result.error").IsUndefined()); | 240 ASSERT_TRUE(GetJsEngine().Evaluate("result.error").IsUndefined()); |
243 ASSERT_TRUE(jsEngine->Evaluate("result.exists").AsBool()); | 241 ASSERT_TRUE(GetJsEngine().Evaluate("result.exists").AsBool()); |
244 ASSERT_FALSE(jsEngine->Evaluate("result.isDirectory").AsBool()); | 242 ASSERT_FALSE(GetJsEngine().Evaluate("result.isDirectory").AsBool()); |
245 ASSERT_TRUE(jsEngine->Evaluate("result.isFile").AsBool()); | 243 ASSERT_TRUE(GetJsEngine().Evaluate("result.isFile").AsBool()); |
246 ASSERT_EQ(1337, jsEngine->Evaluate("result.lastModified").AsInt()); | 244 ASSERT_EQ(1337, GetJsEngine().Evaluate("result.lastModified").AsInt()); |
247 } | 245 } |
248 | 246 |
249 TEST_F(FileSystemJsObjectTest, StatIllegalArguments) | 247 TEST_F(FileSystemJsObjectTest, StatIllegalArguments) |
250 { | 248 { |
251 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat()")); | 249 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.stat()")); |
252 ASSERT_ANY_THROW(jsEngine->Evaluate("_fileSystem.stat('', '')")); | 250 ASSERT_ANY_THROW(GetJsEngine().Evaluate("_fileSystem.stat('', '')")); |
253 } | 251 } |
254 | 252 |
255 TEST_F(FileSystemJsObjectTest, StatError) | 253 TEST_F(FileSystemJsObjectTest, StatError) |
256 { | 254 { |
257 mockFileSystem->success = false; | 255 mockFileSystem->success = false; |
258 jsEngine->Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); | 256 GetJsEngine().Evaluate("_fileSystem.stat('foo', function(r) {result = r})"); |
259 ASSERT_FALSE(jsEngine->Evaluate("result.error").IsUndefined()); | 257 ASSERT_FALSE(GetJsEngine().Evaluate("result.error").IsUndefined()); |
260 } | 258 } |
OLD | NEW |