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-present eyeo GmbH | 3 * Copyright (C) 2006-present 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 package org.adblockplus.libadblockplus.tests; | 18 package org.adblockplus.libadblockplus.tests; |
19 | 19 |
20 import org.adblockplus.libadblockplus.JsEngine; | 20 import android.os.SystemClock; |
| 21 |
| 22 import org.adblockplus.libadblockplus.BaseFilterEngineTest; |
| 23 import org.adblockplus.libadblockplus.HeaderEntry; |
21 import org.adblockplus.libadblockplus.WebRequest; | 24 import org.adblockplus.libadblockplus.WebRequest; |
22 import org.adblockplus.libadblockplus.android.AndroidWebRequest; | 25 import org.adblockplus.libadblockplus.android.AndroidWebRequest; |
23 import org.adblockplus.libadblockplus.JsValue; | 26 import org.adblockplus.libadblockplus.JsValue; |
24 import org.adblockplus.libadblockplus.ServerResponse; | 27 import org.adblockplus.libadblockplus.ServerResponse; |
25 | 28 |
26 import org.junit.Test; | 29 import org.junit.Test; |
27 | 30 |
28 import java.net.MalformedURLException; | 31 import java.net.MalformedURLException; |
29 import java.util.List; | 32 import java.util.List; |
30 | 33 |
31 // It inherits the fixture instantiating FilterEngine which is not explicitly | 34 // It inherits the fixture instantiating FilterEngine which is not explicitly |
32 // used in the test bodies in order to provide with JS XMLHttpRequest class | 35 // used in the test bodies in order to provide with JS XMLHttpRequest class |
33 // which is defined in compat.js, but the latter is properly loaded by | 36 // which is defined in compat.js, but the latter is properly loaded by |
34 // FilterEngine. | 37 // FilterEngine. |
35 public class AndroidWebRequestTest extends BaseFilterEngineTest | 38 public class AndroidWebRequestTest extends BaseFilterEngineTest |
36 { | 39 { |
| 40 private static class AndroidWebRequestWrapper implements WebRequest |
| 41 { |
| 42 private AndroidWebRequest androidWebRequest = new AndroidWebRequest(true, tr
ue); |
| 43 private volatile int requestCount; |
| 44 |
| 45 public int getRequestCount() |
| 46 { |
| 47 return requestCount; |
| 48 } |
| 49 |
| 50 @Override |
| 51 public ServerResponse httpGET(String url, List<HeaderEntry> headers) |
| 52 { |
| 53 ServerResponse response = androidWebRequest.httpGET(url, headers); |
| 54 requestCount++; |
| 55 return response; |
| 56 } |
| 57 } |
| 58 |
| 59 private AndroidWebRequestWrapper webRequestWrapper = new AndroidWebRequestWrap
per(); |
| 60 |
37 @Override | 61 @Override |
38 protected WebRequest createWebRequest() | 62 protected void setUp() throws Exception |
39 { | 63 { |
40 return new AndroidWebRequest(true, true); | 64 setWebRequest(webRequestWrapper); |
| 65 super.setUp(); |
41 } | 66 } |
42 | 67 |
43 @Test | 68 @Test |
44 public void testRealWebRequest() | 69 public void testRealWebRequest() |
45 { | 70 { |
46 JsEngine jsEngine = platform.getJsEngine(); | |
47 // This URL should redirect to easylist-downloads.adblockplus.org and we | 71 // This URL should redirect to easylist-downloads.adblockplus.org and we |
48 // should get the actual filter list back. | 72 // should get the actual filter list back. |
49 jsEngine.evaluate( | 73 jsEngine.evaluate( |
50 "let foo; _webRequest.GET('https://easylist-downloads.adblockplus.org/easy
list.txt', {}, " + | 74 "let foo; _webRequest.GET('https://easylist-downloads.adblockplus.org/easy
list.txt', {}, " + |
51 "function(result) {foo = result;} )"); | 75 "function(result) {foo = result;} )"); |
52 do | 76 do |
53 { | 77 { |
54 try | 78 SystemClock.sleep(50); |
55 { | |
56 Thread.sleep(200); | |
57 } | |
58 catch (InterruptedException e) | |
59 { | |
60 throw new RuntimeException(e); | |
61 } | |
62 } while (jsEngine.evaluate("foo").isUndefined()); | 79 } while (jsEngine.evaluate("foo").isUndefined()); |
63 | 80 |
64 String response = jsEngine.evaluate("foo.responseText").asString(); | 81 String response = jsEngine.evaluate("foo.responseText").asString(); |
65 assertNotNull(response); | 82 assertNotNull(response); |
66 assertEquals( | 83 assertEquals( |
67 ServerResponse.NsStatus.OK.getStatusCode(), | 84 ServerResponse.NsStatus.OK.getStatusCode(), |
68 jsEngine.evaluate("foo.status").asLong()); | 85 jsEngine.evaluate("foo.status").asLong()); |
69 assertEquals(200l, jsEngine.evaluate("foo.responseStatus").asLong()); | 86 assertEquals(200l, jsEngine.evaluate("foo.responseStatus").asLong()); |
70 assertEquals( | 87 assertEquals( |
71 "[Adblock Plus ", | 88 "[Adblock Plus ", |
72 jsEngine.evaluate("foo.responseText.substr(0, 14)").asString()); | 89 jsEngine.evaluate("foo.responseText.substr(0, 14)").asString()); |
73 JsValue jsHeaders = jsEngine.evaluate("foo.responseHeaders"); | 90 JsValue jsHeaders = jsEngine.evaluate("foo.responseHeaders"); |
74 assertNotNull(jsHeaders); | 91 assertNotNull(jsHeaders); |
75 assertFalse(jsHeaders.isUndefined()); | 92 assertFalse(jsHeaders.isUndefined()); |
76 assertFalse(jsHeaders.isNull()); | 93 assertFalse(jsHeaders.isNull()); |
77 assertTrue(jsHeaders.isObject()); | 94 assertTrue(jsHeaders.isObject()); |
78 assertEquals( | 95 assertEquals( |
79 "text/plain", | 96 "text/plain", |
80 jsEngine.evaluate("foo.responseHeaders['content-type'].substr(0, 10)").asS
tring()); | 97 jsEngine.evaluate("foo.responseHeaders['content-type'].substr(0, 10)").asS
tring()); |
81 assertTrue(jsEngine.evaluate("foo.responseHeaders['location']").isUndefined(
)); | 98 assertTrue(jsEngine.evaluate("foo.responseHeaders['location']").isUndefined(
)); |
82 } | 99 } |
83 | 100 |
84 @Test | 101 @Test |
85 public void testXMLHttpRequest() | 102 public void testXMLHttpRequest() |
86 { | 103 { |
87 JsEngine jsEngine = platform.getJsEngine(); | |
88 jsEngine.evaluate( | 104 jsEngine.evaluate( |
89 "var result;\n" + | 105 "var result;\n" + |
90 "var request = new XMLHttpRequest();\n" + | 106 "var request = new XMLHttpRequest();\n" + |
91 "request.open('GET', 'https://easylist-downloads.adblockplus.org/easylist.
txt');\n" + | 107 "request.open('GET', 'https://easylist-downloads.adblockplus.org/easylist.
txt');\n" + |
92 "request.setRequestHeader('X', 'Y');\n" + | 108 "request.setRequestHeader('X', 'Y');\n" + |
93 "request.setRequestHeader('X2', 'Y2');\n" + | 109 "request.setRequestHeader('X2', 'Y2');\n" + |
94 "request.overrideMimeType('text/plain');\n" + | 110 "request.overrideMimeType('text/plain');\n" + |
95 "request.addEventListener('load',function() {result=request.responseText;}
, false);\n" + | 111 "request.addEventListener('load',function() {result=request.responseText;}
, false);\n" + |
96 "request.addEventListener('error',function() {result='error';}, false);\n"
+ | 112 "request.addEventListener('error',function() {result='error';}, false);\n"
+ |
97 "request.send(null);"); | 113 "request.send(null);"); |
98 | 114 |
99 do | 115 do |
100 { | 116 { |
101 try | 117 SystemClock.sleep(50); |
102 { | |
103 Thread.sleep(200); | |
104 } | |
105 catch (InterruptedException e) | |
106 { | |
107 throw new RuntimeException(e); | |
108 } | |
109 } while (jsEngine.evaluate("result").isUndefined()); | 118 } while (jsEngine.evaluate("result").isUndefined()); |
110 | 119 |
111 assertEquals( | 120 assertEquals( |
112 ServerResponse.NsStatus.OK.getStatusCode(), | 121 ServerResponse.NsStatus.OK.getStatusCode(), |
113 jsEngine.evaluate("request.channel.status").asLong()); | 122 jsEngine.evaluate("request.channel.status").asLong()); |
114 | 123 |
115 assertEquals(200l, jsEngine.evaluate("request.status").asLong()); | 124 assertEquals(200l, jsEngine.evaluate("request.status").asLong()); |
116 assertEquals("[Adblock Plus ", jsEngine.evaluate("result.substr(0, 14)").asS
tring()); | 125 assertEquals("[Adblock Plus ", jsEngine.evaluate("result.substr(0, 14)").asS
tring()); |
117 assertEquals( | 126 assertEquals( |
118 "text/plain", | 127 "text/plain", |
119 jsEngine.evaluate("request.getResponseHeader('Content-Type').substr(0, 10)
").asString()); | 128 jsEngine.evaluate("request.getResponseHeader('Content-Type').substr(0, 10)
").asString()); |
120 assertTrue(jsEngine.evaluate("request.getResponseHeader('Location')").isNull
()); | 129 assertTrue(jsEngine.evaluate("request.getResponseHeader('Location')").isNull
()); |
121 } | 130 } |
122 | 131 |
123 @Test | 132 @Test |
124 public void testGetElemhideElements() throws MalformedURLException, Interrupte
dException | 133 public void testGetElemhideElements() throws MalformedURLException |
125 { | 134 { |
126 Thread.sleep(20 * 1000); // wait for the subscription to be downloaded | 135 // Wait for Easylist & AA |
| 136 while (webRequestWrapper.getRequestCount() < 2) |
| 137 { |
| 138 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS / UPDATE_SUBSCRIPTION
S_WAIT_CHUNKS); |
| 139 } |
| 140 // A grace period, just in case |
| 141 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS / UPDATE_SUBSCRIPTIONS_
WAIT_CHUNKS); |
127 | 142 |
128 final String url = "www.mobile01.com/somepage.html"; | 143 final String url = "www.mobile01.com/somepage.html"; |
129 | 144 |
130 boolean isDocumentWhitelisted = filterEngine.isDocumentWhitelisted(url, null
); | 145 boolean isDocumentWhitelisted = filterEngine.isDocumentWhitelisted(url, null
); |
131 assertFalse(isDocumentWhitelisted); | 146 assertFalse(isDocumentWhitelisted); |
132 | 147 |
133 boolean isElemhideWhitelisted = filterEngine.isElemhideWhitelisted(url, null
); | 148 boolean isElemhideWhitelisted = filterEngine.isElemhideWhitelisted(url, null
); |
134 assertFalse(isElemhideWhitelisted); | 149 assertFalse(isElemhideWhitelisted); |
135 | 150 |
136 List<String> selectors = filterEngine.getElementHidingSelectors(url); | 151 List<String> selectors = filterEngine.getElementHidingSelectors(url); |
137 assertNotNull(selectors); | 152 assertNotNull(selectors); |
138 assertTrue(selectors.size() > 0); | 153 assertTrue(selectors.size() > 0); |
139 } | 154 } |
140 } | 155 } |
OLD | NEW |