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

Side by Side Diff: test/JsEngine.cpp

Issue 10297026: Remove JsEngine::Load() (Closed)
Patch Set: Created April 18, 2013, 1:34 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/JsEngine.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include <AdblockPlus.h> 1 #include <AdblockPlus.h>
2 #include <fstream> 2 #include <fstream>
3 #include <gtest/gtest.h> 3 #include <gtest/gtest.h>
4 #include <sstream> 4 #include <sstream>
5 5
6 class BaseFileSystem : public AdblockPlus::FileSystem
7 {
8 void Write(const std::string& path,
9 std::tr1::shared_ptr<std::ostream> content)
10 {
11 throw std::runtime_error("Write is not implemented");
12 }
13
14 void Move(const std::string& fromPath, const std::string& toPath)
15 {
16 throw std::runtime_error("Move is not implemented");
17 }
18
19 void Remove(const std::string& path)
20 {
21 throw std::runtime_error("Remove is not implemented");
22 }
23
24 StatResult Stat(const std::string& path) const
25 {
26 throw std::runtime_error("Stat is not implemented");
27 }
28 };
29
30 class ThrowingErrorCallback : public AdblockPlus::ErrorCallback 6 class ThrowingErrorCallback : public AdblockPlus::ErrorCallback
31 { 7 {
32 public: 8 public:
33 void operator()(const std::string& message) 9 void operator()(const std::string& message)
34 { 10 {
35 throw std::runtime_error("Unexpected error: " + message); 11 throw std::runtime_error("Unexpected error: " + message);
36 } 12 }
37 }; 13 };
38 14
39 class StubFileSystem : public BaseFileSystem 15 TEST(JsEngineTest, Evaluate)
40 {
41 public:
42 std::tr1::shared_ptr<std::istream> Read(const std::string& path) const
43 {
44 std::stringstream* const source = new std::stringstream;
45 *source << "function hello() { return 'Hello'; }";
46 return std::tr1::shared_ptr<std::istream>(source);
47 }
48 };
49
50 class BadFileSystem : public BaseFileSystem
51 {
52 public:
53 std::tr1::shared_ptr<std::istream> Read(const std::string& path) const
54 {
55 std::ifstream* const file = new std::ifstream;
56 file->open("");
57 return std::tr1::shared_ptr<std::istream>(file);
58 }
59
60 void Write(const std::string& path,
61 std::tr1::shared_ptr<std::ostream> content)
62 {
63 throw std::runtime_error("No writing");
64 }
65 };
66
67 TEST(JsEngineTest, EvaluateAndCall)
68 { 16 {
69 AdblockPlus::JsEngine jsEngine; 17 AdblockPlus::JsEngine jsEngine;
70 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack())); 18 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack()));
71 const std::string source = "function hello() { return 'Hello'; }"; 19 jsEngine.Evaluate("function hello() { return 'Hello'; }");
72 jsEngine.Evaluate(source);
73 AdblockPlus::JsValuePtr result = jsEngine.Evaluate("hello()"); 20 AdblockPlus::JsValuePtr result = jsEngine.Evaluate("hello()");
74 ASSERT_TRUE(result->IsString()); 21 ASSERT_TRUE(result->IsString());
75 ASSERT_EQ("Hello", result->AsString()); 22 ASSERT_EQ("Hello", result->AsString());
76 } 23 }
77 24
78 TEST(JsEngineTest, LoadAndCall)
79 {
80 AdblockPlus::JsEngine jsEngine;
81 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack()));
82 jsEngine.SetFileSystem(AdblockPlus::FileSystemPtr(new StubFileSystem()));
83 jsEngine.Load("hello.js");
84 AdblockPlus::JsValuePtr result = jsEngine.Evaluate("hello()");
85 ASSERT_TRUE(result->IsString());
86 ASSERT_EQ("Hello", result->AsString());
87 }
88
89 TEST(JsEngineTest, LoadBadStreamFails)
90 {
91 AdblockPlus::JsEngine jsEngine;
92 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack()));
93 jsEngine.SetFileSystem(AdblockPlus::FileSystemPtr(new BadFileSystem()));
94 ASSERT_ANY_THROW(jsEngine.Load("hello.js"));
95 }
96
97 TEST(JsEngineTest, RuntimeExceptionIsThrown) 25 TEST(JsEngineTest, RuntimeExceptionIsThrown)
98 { 26 {
99 AdblockPlus::JsEngine jsEngine; 27 AdblockPlus::JsEngine jsEngine;
100 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack())); 28 jsEngine.SetErrorCallback(AdblockPlus::ErrorCallbackPtr(new ThrowingErrorCallb ack()));
101 ASSERT_THROW(jsEngine.Evaluate("doesnotexist()"), AdblockPlus::JsError); 29 ASSERT_THROW(jsEngine.Evaluate("doesnotexist()"), AdblockPlus::JsError);
102 } 30 }
103 31
104 TEST(JsEngineTest, CompileTimeExceptionIsThrown) 32 TEST(JsEngineTest, CompileTimeExceptionIsThrown)
105 { 33 {
106 AdblockPlus::JsEngine jsEngine; 34 AdblockPlus::JsEngine jsEngine;
(...skipping 16 matching lines...) Expand all
123 ASSERT_EQ(12, value->AsInt()); 51 ASSERT_EQ(12, value->AsInt());
124 52
125 value = jsEngine.NewValue(true); 53 value = jsEngine.NewValue(true);
126 ASSERT_TRUE(value->IsBool()); 54 ASSERT_TRUE(value->IsBool());
127 ASSERT_TRUE(value->AsBool()); 55 ASSERT_TRUE(value->AsBool());
128 56
129 value = jsEngine.NewObject(); 57 value = jsEngine.NewObject();
130 ASSERT_TRUE(value->IsObject()); 58 ASSERT_TRUE(value->IsObject());
131 ASSERT_EQ(0u, value->GetOwnPropertyNames().size()); 59 ASSERT_EQ(0u, value->GetOwnPropertyNames().size());
132 } 60 }
OLDNEW
« no previous file with comments | « src/JsEngine.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld