Left: | ||
Right: |
LEFT | RIGHT |
---|---|
(no file at all) | |
1 #include <sstream> | 1 #include <sstream> |
2 #include <AdblockPlus.h> | 2 #include "BaseJsTest.h" |
3 #include <gtest/gtest.h> | |
4 | |
5 #include "../src/Thread.h" | 3 #include "../src/Thread.h" |
6 | |
7 // TODO: Use a fixture here | |
8 | 4 |
9 namespace | 5 namespace |
10 { | 6 { |
11 class TestWebRequest : public AdblockPlus::WebRequest | 7 class MockWebRequest : public AdblockPlus::WebRequest |
12 { | 8 { |
13 public: | 9 public: |
14 AdblockPlus::ServerResponse GET(const std::string& url, const AdblockPlus::H eaderList& requestHeaders) const | 10 AdblockPlus::ServerResponse GET(const std::string& url, const AdblockPlus::H eaderList& requestHeaders) const |
15 { | 11 { |
16 AdblockPlus::Sleep(50); | 12 AdblockPlus::Sleep(50); |
17 | 13 |
18 AdblockPlus::ServerResponse result; | 14 AdblockPlus::ServerResponse result; |
19 result.status = NS_OK; | 15 result.status = NS_OK; |
20 result.responseStatus = 123; | 16 result.responseStatus = 123; |
21 result.responseHeaders.push_back(std::pair<std::string, std::string>("Foo" , "Bar")); | 17 result.responseHeaders.push_back(std::pair<std::string, std::string>("Foo" , "Bar")); |
22 result.responseText = url + "\n" + requestHeaders[0].first + "\n" + reques tHeaders[0].second; | 18 result.responseText = url + "\n" + requestHeaders[0].first + "\n" + reques tHeaders[0].second; |
23 return result; | 19 return result; |
24 } | 20 } |
25 }; | 21 }; |
26 | 22 |
27 std::string ToString(unsigned int i) | 23 template<class T> |
Oleksandr
2013/04/26 13:10:01
Miht be a good idea to make this even more generic
Wladimir Palant
2013/04/26 13:12:58
I tend to resist making code more generic "for fut
| |
24 class WebRequestTest : public BaseJsTest | |
28 { | 25 { |
29 std::stringstream stream; | 26 protected: |
30 stream << i; | 27 void SetUp() |
31 return stream.str(); | 28 { |
32 } | 29 BaseJsTest::SetUp(); |
30 jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(new T)); | |
31 jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); | |
32 } | |
33 }; | |
34 | |
35 typedef WebRequestTest<MockWebRequest> MockWebRequestTest; | |
36 typedef WebRequestTest<AdblockPlus::DefaultWebRequest> DefaultWebRequestTest; | |
33 } | 37 } |
34 | 38 |
35 TEST(WebRequestTest, BadCall) | 39 TEST_F(MockWebRequestTest, BadCall) |
36 { | 40 { |
37 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
38 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET()")); | 41 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET()")); |
39 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('', {}, function(){})")); | 42 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('', {}, function(){})")); |
40 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET({toString: false}, {}, fu nction(){})")); | 43 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET({toString: false}, {}, fu nction(){})")); |
41 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', nu ll, function(){})")); | 44 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', nu ll, function(){})")); |
42 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', {} , null)")); | 45 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', {} , null)")); |
43 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', {} , function(){}, 0)")); | 46 ASSERT_ANY_THROW(jsEngine->Evaluate("_webRequest.GET('http://example.com/', {} , function(){}, 0)")); |
44 } | 47 } |
45 | 48 |
46 TEST(WebRequestTest, TestWebRequest) | 49 TEST_F(MockWebRequestTest, SuccessfulRequest) |
47 { | 50 { |
48 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
49 jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(new TestWebRequest())); | |
50 jsEngine->Evaluate("_webRequest.GET('http://example.com/', {X: 'Y'}, function( result) {foo = result;} )"); | 51 jsEngine->Evaluate("_webRequest.GET('http://example.com/', {X: 'Y'}, function( result) {foo = result;} )"); |
51 ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); | 52 ASSERT_TRUE(jsEngine->Evaluate("this.foo")->IsUndefined()); |
52 AdblockPlus::Sleep(200); | 53 AdblockPlus::Sleep(200); |
53 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("foo.status")->As Int()); | 54 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("foo.status")->As Int()); |
54 ASSERT_EQ(123, jsEngine->Evaluate("foo.responseStatus")->AsInt()); | 55 ASSERT_EQ(123, jsEngine->Evaluate("foo.responseStatus")->AsInt()); |
55 ASSERT_EQ("http://example.com/\nX\nY", jsEngine->Evaluate("foo.responseText")- >AsString()); | 56 ASSERT_EQ("http://example.com/\nX\nY", jsEngine->Evaluate("foo.responseText")- >AsString()); |
56 ASSERT_EQ("{\"Foo\":\"Bar\"}", jsEngine->Evaluate("JSON.stringify(foo.response Headers)")->AsString()); | 57 ASSERT_EQ("{\"Foo\":\"Bar\"}", jsEngine->Evaluate("JSON.stringify(foo.response Headers)")->AsString()); |
57 } | 58 } |
58 | 59 |
59 #if defined(HAVE_CURL) || defined(_WIN32) | 60 #if defined(HAVE_CURL) || defined(_WIN32) |
60 TEST(WebRequestTest, RealWebRequest) | 61 TEST_F(DefaultWebRequestTest, RealWebRequest) |
61 { | 62 { |
62 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
63 | |
64 // This URL should redirect to easylist-downloads.adblockplus.org and we | 63 // This URL should redirect to easylist-downloads.adblockplus.org and we |
65 // should get the actual filter list back. | 64 // should get the actual filter list back. |
66 jsEngine->Evaluate("_webRequest.GET('https://easylist.adblockplus.org/easylist .txt', {}, function(result) {foo = result;} )"); | 65 jsEngine->Evaluate("_webRequest.GET('https://easylist.adblockplus.org/easylist .txt', {}, function(result) {foo = result;} )"); |
67 do | 66 do |
68 { | 67 { |
69 AdblockPlus::Sleep(200); | 68 AdblockPlus::Sleep(200); |
70 } while (jsEngine->Evaluate("this.foo")->IsUndefined()); | 69 } while (jsEngine->Evaluate("this.foo")->IsUndefined()); |
71 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type' ].substr(0, 10)")->AsString()); | 70 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type' ].substr(0, 10)")->AsString()); |
72 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("foo.status")->As Int()); | 71 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("foo.status")->As Int()); |
73 ASSERT_EQ(200, jsEngine->Evaluate("foo.responseStatus")->AsInt()); | 72 ASSERT_EQ(200, jsEngine->Evaluate("foo.responseStatus")->AsInt()); |
74 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("foo.responseText.substr(0, 14) ")->AsString()); | 73 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("foo.responseText.substr(0, 14) ")->AsString()); |
75 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type' ].substr(0, 10)")->AsString()); | 74 ASSERT_EQ("text/plain", jsEngine->Evaluate("foo.responseHeaders['content-type' ].substr(0, 10)")->AsString()); |
76 ASSERT_TRUE(jsEngine->Evaluate("foo.responseHeaders['location']")->IsUndefined ()); | 75 ASSERT_TRUE(jsEngine->Evaluate("foo.responseHeaders['location']")->IsUndefined ()); |
77 } | 76 } |
78 | 77 |
79 TEST(WebRequestTest, XMLHttpRequest) | 78 TEST_F(DefaultWebRequestTest, XMLHttpRequest) |
80 { | 79 { |
81 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
82 AdblockPlus::FilterEngine filterEngine(jsEngine); | 80 AdblockPlus::FilterEngine filterEngine(jsEngine); |
83 | 81 |
84 jsEngine->Evaluate("\ | 82 jsEngine->Evaluate("\ |
85 var result;\ | 83 var result;\ |
86 var request = new XMLHttpRequest();\ | 84 var request = new XMLHttpRequest();\ |
87 request.open('GET', 'https://easylist.adblockplus.org/easylist.txt');\ | 85 request.open('GET', 'https://easylist.adblockplus.org/easylist.txt');\ |
88 request.setRequestHeader('X', 'Y');\ | 86 request.setRequestHeader('X', 'Y');\ |
89 request.overrideMimeType('text/plain');\ | 87 request.overrideMimeType('text/plain');\ |
90 request.addEventListener('load', function() {result = request.responseText;} , false);\ | 88 request.addEventListener('load', function() {result = request.responseText;} , false);\ |
91 request.addEventListener('error', function() {result = 'error';}, false);\ | 89 request.addEventListener('error', function() {result = 'error';}, false);\ |
92 request.send(null);"); | 90 request.send(null);"); |
93 do | 91 do |
94 { | 92 { |
95 AdblockPlus::Sleep(200); | 93 AdblockPlus::Sleep(200); |
96 } while (jsEngine->Evaluate("result")->IsUndefined()); | 94 } while (jsEngine->Evaluate("result")->IsUndefined()); |
97 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("request.channel. status")->AsInt()); | 95 ASSERT_EQ(AdblockPlus::WebRequest::NS_OK, jsEngine->Evaluate("request.channel. status")->AsInt()); |
98 ASSERT_EQ(200, jsEngine->Evaluate("request.status")->AsInt()); | 96 ASSERT_EQ(200, jsEngine->Evaluate("request.status")->AsInt()); |
99 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("result.substr(0, 14)")->AsStri ng()); | 97 ASSERT_EQ("[Adblock Plus ", jsEngine->Evaluate("result.substr(0, 14)")->AsStri ng()); |
100 ASSERT_EQ("text/plain", jsEngine->Evaluate("request.getResponseHeader('Content -Type').substr(0, 10)")->AsString()); | 98 ASSERT_EQ("text/plain", jsEngine->Evaluate("request.getResponseHeader('Content -Type').substr(0, 10)")->AsString()); |
101 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Location')")->IsNul l()); | 99 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Location')")->IsNul l()); |
102 } | 100 } |
103 #else | 101 #else |
104 TEST(WebRequestTest, DummyWebRequest) | 102 TEST_F(DefaultWebRequestTest, DummyWebRequest) |
105 { | 103 { |
106 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
107 jsEngine->Evaluate("_webRequest.GET('https://easylist.adblockplus.org/easylist .txt', {}, function(result) {foo = result;} )"); | 104 jsEngine->Evaluate("_webRequest.GET('https://easylist.adblockplus.org/easylist .txt', {}, function(result) {foo = result;} )"); |
108 do | 105 do |
109 { | 106 { |
110 AdblockPlus::Sleep(200); | 107 AdblockPlus::Sleep(200); |
111 } while (jsEngine->Evaluate("this.foo")->IsUndefined()); | 108 } while (jsEngine->Evaluate("this.foo")->IsUndefined()); |
112 ASSERT_EQ(AdblockPlus::WebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("foo.s tatus")->AsInt()); | 109 ASSERT_EQ(AdblockPlus::WebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("foo.s tatus")->AsInt()); |
113 ASSERT_EQ(0, jsEngine->Evaluate("foo.responseStatus")->AsInt()); | 110 ASSERT_EQ(0, jsEngine->Evaluate("foo.responseStatus")->AsInt()); |
114 ASSERT_EQ("", jsEngine->Evaluate("foo.responseText")->AsString()); | 111 ASSERT_EQ("", jsEngine->Evaluate("foo.responseText")->AsString()); |
115 ASSERT_EQ("{}", jsEngine->Evaluate("JSON.stringify(foo.responseHeaders)")->AsS tring()); | 112 ASSERT_EQ("{}", jsEngine->Evaluate("JSON.stringify(foo.responseHeaders)")->AsS tring()); |
116 } | 113 } |
117 | 114 |
118 TEST(WebRequestTest, XMLHttpRequest) | 115 TEST_F(DefaultWebRequestTest, XMLHttpRequest) |
119 { | 116 { |
120 AdblockPlus::JsEnginePtr jsEngine(AdblockPlus::JsEngine::New()); | |
121 AdblockPlus::FilterEngine filterEngine(jsEngine); | 117 AdblockPlus::FilterEngine filterEngine(jsEngine); |
122 | 118 |
123 jsEngine->Evaluate("\ | 119 jsEngine->Evaluate("\ |
124 var result;\ | 120 var result;\ |
125 var request = new XMLHttpRequest();\ | 121 var request = new XMLHttpRequest();\ |
126 request.open('GET', 'https://easylist.adblockplus.org/easylist.txt');\ | 122 request.open('GET', 'https://easylist.adblockplus.org/easylist.txt');\ |
127 request.setRequestHeader('X', 'Y');\ | 123 request.setRequestHeader('X', 'Y');\ |
128 request.overrideMimeType('text/plain');\ | 124 request.overrideMimeType('text/plain');\ |
129 request.addEventListener('load', function() {result = request.responseText;} , false);\ | 125 request.addEventListener('load', function() {result = request.responseText;} , false);\ |
130 request.addEventListener('error', function() {result = 'error';}, false);\ | 126 request.addEventListener('error', function() {result = 'error';}, false);\ |
131 request.send(null);"); | 127 request.send(null);"); |
132 do | 128 do |
133 { | 129 { |
134 AdblockPlus::Sleep(200); | 130 AdblockPlus::Sleep(200); |
135 } while (jsEngine->Evaluate("result")->IsUndefined()); | 131 } while (jsEngine->Evaluate("result")->IsUndefined()); |
136 ASSERT_EQ(AdblockPlus::WebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("reque st.channel.status")->AsInt()); | 132 ASSERT_EQ(AdblockPlus::WebRequest::NS_ERROR_FAILURE, jsEngine->Evaluate("reque st.channel.status")->AsInt()); |
137 ASSERT_EQ(0, jsEngine->Evaluate("request.status")->AsInt()); | 133 ASSERT_EQ(0, jsEngine->Evaluate("request.status")->AsInt()); |
138 ASSERT_EQ("error", jsEngine->Evaluate("result")->AsString()); | 134 ASSERT_EQ("error", jsEngine->Evaluate("result")->AsString()); |
139 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Content-Type')")->I sNull()); | 135 ASSERT_TRUE(jsEngine->Evaluate("request.getResponseHeader('Content-Type')")->I sNull()); |
140 } | 136 } |
141 | 137 |
142 #endif | 138 #endif |
LEFT | RIGHT |