Index: libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/FilterEngineTest.java |
diff --git a/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/FilterEngineTest.java b/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/FilterEngineTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..23952b6201679804d9b05910abbd033db0817edf |
--- /dev/null |
+++ b/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/FilterEngineTest.java |
@@ -0,0 +1,388 @@ |
+/* |
+ * This file is part of Adblock Plus <https://adblockplus.org/>, |
+ * Copyright (C) 2006-2016 Eyeo GmbH |
+ * |
+ * Adblock Plus is free software: you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License version 3 as |
+ * published by the Free Software Foundation. |
+ * |
+ * Adblock Plus is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
+ |
+package org.adblockplus.libadblockplus.tests; |
+ |
+import android.util.Log; |
+import org.adblockplus.libadblockplus.Filter; |
+import org.adblockplus.libadblockplus.FilterEngine; |
+import org.adblockplus.libadblockplus.MockFilterChangeCallback; |
+import org.adblockplus.libadblockplus.Subscription; |
+ |
+import org.junit.Test; |
+ |
+public class FilterEngineTest extends FilterEngineGenericTest |
+{ |
+ @Test |
+ public void testFilterCreation() |
+ { |
+ Filter filter1 = filterEngine.getFilter("foo"); |
+ assertEquals(Filter.Type.BLOCKING, filter1.getType()); |
+ Filter filter2 = filterEngine.getFilter("@@foo"); |
+ assertEquals(Filter.Type.EXCEPTION, filter2.getType()); |
+ Filter filter3 = filterEngine.getFilter("example.com##foo"); |
+ assertEquals(Filter.Type.ELEMHIDE, filter3.getType()); |
+ Filter filter4 = filterEngine.getFilter("example.com#@#foo"); |
+ assertEquals(Filter.Type.ELEMHIDE_EXCEPTION, filter4.getType()); |
+ Filter filter5 = filterEngine.getFilter(" foo "); |
+ assertEquals(filter1, filter5); |
+ } |
+ |
+ @Test |
+ public void testAddRemoveFilters() |
+ { |
+ while (filterEngine.getListedFilters().size() > 0) |
+ { |
+ filterEngine.getListedFilters().get(0).removeFromList(); |
+ } |
+ |
+ assertEquals(0, filterEngine.getListedFilters().size()); |
+ Filter filter = filterEngine.getFilter("foo"); |
+ assertEquals(0, filterEngine.getListedFilters().size()); |
+ assertFalse(filter.isListed()); |
+ |
+ filter.addToList(); |
+ assertEquals(1, filterEngine.getListedFilters().size()); |
+ assertEquals(filter, filterEngine.getListedFilters().get(0)); |
+ assertTrue(filter.isListed()); |
+ |
+ filter.addToList(); |
+ assertEquals(1, filterEngine.getListedFilters().size()); |
+ assertEquals(filter, filterEngine.getListedFilters().get(0)); |
+ assertTrue(filter.isListed()); |
+ |
+ filter.removeFromList(); |
+ assertEquals(0, filterEngine.getListedFilters().size()); |
+ assertFalse(filter.isListed()); |
+ |
+ filter.removeFromList(); |
+ assertEquals(0, filterEngine.getListedFilters().size()); |
+ assertFalse(filter.isListed()); |
+ } |
+ |
+ @Test |
+ public void testAddRemoveSubscriptions() |
+ { |
+ while (filterEngine.getListedSubscriptions().size() > 0) |
+ { |
+ filterEngine.getListedSubscriptions().get(0).removeFromList(); |
+ } |
+ |
+ assertEquals(0, filterEngine.getListedSubscriptions().size()); |
+ Subscription subscription = filterEngine.getSubscription("foo"); |
+ assertEquals(0, filterEngine.getListedSubscriptions().size()); |
+ assertFalse(subscription.isListed()); |
+ subscription.addToList(); |
+ assertEquals(1, filterEngine.getListedSubscriptions().size()); |
+ assertEquals(subscription, filterEngine.getListedSubscriptions().get(0)); |
+ assertTrue(subscription.isListed()); |
+ subscription.addToList(); |
+ assertEquals(1, filterEngine.getListedSubscriptions().size()); |
+ assertEquals(subscription, filterEngine.getListedSubscriptions().get(0)); |
+ assertTrue(subscription.isListed()); |
+ subscription.removeFromList(); |
+ assertEquals(0, filterEngine.getListedSubscriptions().size()); |
+ assertFalse(subscription.isListed()); |
+ subscription.removeFromList(); |
+ assertEquals(0, filterEngine.getListedSubscriptions().size()); |
+ assertFalse(subscription.isListed()); |
+ } |
+ |
+ @Test |
+ public void testSubscriptionUpdates() |
+ { |
+ Subscription subscription = filterEngine.getSubscription("foo"); |
+ assertFalse(subscription.isUpdating()); |
+ subscription.updateFilters(); |
+ } |
+ |
+ @Test |
+ public void testMatches() |
+ { |
+ filterEngine.getFilter("adbanner.gif").addToList(); |
+ filterEngine.getFilter("@@notbanner.gif").addToList(); |
+ filterEngine.getFilter("tpbanner.gif$third-party").addToList(); |
+ filterEngine.getFilter("fpbanner.gif$~third-party").addToList(); |
+ filterEngine.getFilter("combanner.gif$domain=example.com").addToList(); |
+ filterEngine.getFilter("orgbanner.gif$domain=~example.com").addToList(); |
+ |
+ Filter match1 = filterEngine.matches( |
+ "http://example.org/foobar.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ ""); |
+ assertNull(match1); |
+ |
+ Filter match2 = filterEngine.matches( |
+ "http://example.org/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ ""); |
+ assertNotNull(match2); |
+ assertEquals(Filter.Type.BLOCKING, match2.getType()); |
+ |
+ Filter match3 = filterEngine.matches( |
+ "http://example.org/notbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ ""); |
+ assertNotNull(match3); |
+ assertEquals(Filter.Type.EXCEPTION, match3.getType()); |
+ |
+ Filter match4 = filterEngine.matches( |
+ "http://example.org/notbanner.gif", |
+ FilterEngine.ContentType.IMAGE, ""); |
+ assertNotNull(match4); |
+ assertEquals(Filter.Type.EXCEPTION, match4.getType()); |
+ |
+ Filter match5 = filterEngine.matches( |
+ "http://example.org/tpbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.org/"); |
+ assertNull(match5); |
+ |
+ Filter match6 = filterEngine.matches( |
+ "http://example.org/fpbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.org/"); |
+ assertNotNull(match6); |
+ assertEquals(Filter.Type.BLOCKING, match6.getType()); |
+ |
+ Filter match7 = filterEngine.matches( |
+ "http://example.org/tpbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.com/"); |
+ assertNotNull(match7); |
+ assertEquals(Filter.Type.BLOCKING, match7.getType()); |
+ |
+ Filter match8 = filterEngine.matches( |
+ "http://example.org/fpbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.com/"); |
+ assertNull(match8); |
+ |
+ Filter match9 = filterEngine.matches( |
+ "http://example.org/combanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.com/"); |
+ assertNotNull(match9); |
+ assertEquals(Filter.Type.BLOCKING, match9.getType()); |
+ |
+ Filter match10 = filterEngine.matches( |
+ "http://example.org/combanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.org/"); |
+ assertNull(match10); |
+ |
+ Filter match11 = filterEngine.matches( |
+ "http://example.org/orgbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.com/"); |
+ assertNull(match11); |
+ |
+ Filter match12 = filterEngine.matches( |
+ "http://example.org/orgbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.org/"); |
+ assertNotNull(match12); |
+ assertEquals(Filter.Type.BLOCKING, match12.getType()); |
+ } |
+ |
+ @Test |
+ public void testMatchesOnWhitelistedDomain() |
+ { |
+ filterEngine.getFilter("adbanner.gif").addToList(); |
+ filterEngine.getFilter("@@||example.org^$document").addToList(); |
+ |
+ Filter match1 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.com/"); |
+ assertNotNull(match1); |
+ assertEquals(Filter.Type.BLOCKING, match1.getType()); |
+ |
+ Filter match2 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ "http://example.org/"); |
+ assertNotNull(match2); |
+ assertEquals(Filter.Type.EXCEPTION, match2.getType()); |
+ } |
+ |
+ @Test |
+ public void testMatchesNestedFrameRequest() |
+ { |
+ filterEngine.getFilter("adbanner.gif").addToList(); |
+ filterEngine.getFilter("@@adbanner.gif$domain=example.org").addToList(); |
+ |
+ Filter match1 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://ads.com/frame/", |
+ "http://example.com/" |
+ }); |
+ assertNotNull(match1); |
+ assertEquals(Filter.Type.BLOCKING, match1.getType()); |
+ |
+ Filter match2 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://ads.com/frame/", |
+ "http://example.org/" |
+ }); |
+ assertNotNull(match2); |
+ assertEquals(Filter.Type.EXCEPTION, match2.getType()); |
+ |
+ Filter match3 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://example.org/", |
+ "http://ads.com/frame/" |
+ }); |
+ assertNotNull(match3); |
+ assertEquals(Filter.Type.BLOCKING, match3.getType()); |
+ } |
+ |
+ @Test |
+ public void testMatchesNestedFrameOnWhitelistedDomain() |
+ { |
+ filterEngine.getFilter("adbanner.gif").addToList(); |
+ filterEngine.getFilter("@@||example.org^$document,domain=ads.com").addToList(); |
+ |
+ Filter match1 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://ads.com/frame/", |
+ "http://example.com/" |
+ }); |
+ assertNotNull(match1); |
+ assertEquals(Filter.Type.BLOCKING, match1.getType()); |
+ |
+ Filter match2 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://ads.com/frame/", |
+ "http://example.org/" |
+ }); |
+ assertNotNull(match2); |
+ assertEquals(Filter.Type.EXCEPTION, match2.getType()); |
+ |
+ Filter match3 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://example.org/" |
+ }); |
+ assertNotNull(match3); |
+ assertEquals(Filter.Type.BLOCKING, match3.getType()); |
+ |
+ Filter match4 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://example.org/", |
+ "http://ads.com/frame/" |
+ }); |
+ assertNotNull(match4); |
+ assertEquals(Filter.Type.BLOCKING, match4.getType()); |
+ |
+ Filter match5 = filterEngine.matches( |
+ "http://ads.com/adbanner.gif", |
+ FilterEngine.ContentType.IMAGE, |
+ new String[] |
+ { |
+ "http://ads.com/frame/", |
+ "http://example.org/", |
+ "http://example.com/" |
+ }); |
+ assertNotNull(match5); |
+ assertEquals(Filter.Type.EXCEPTION, match5.getType()); |
+ } |
+ |
+ @Test |
+ public void testFirstRunFlag() |
+ { |
+ assertFalse(filterEngine.isFirstRun()); |
+ } |
+ |
+ @Test |
+ public void testSetRemoveFilterChangeCallback() |
+ { |
+ MockFilterChangeCallback mockFilterChangeCallback = new MockFilterChangeCallback(0); |
+ |
+ filterEngine.setFilterChangeCallback(mockFilterChangeCallback); |
+ filterEngine.getFilter("foo").addToList(); |
+ assertEquals(1, mockFilterChangeCallback.getTimesCalled()); |
+ |
+ filterEngine.removeFilterChangeCallback(); |
+ filterEngine.getFilter("foo").removeFromList(); |
+ assertEquals(1, mockFilterChangeCallback.getTimesCalled()); |
+ } |
+ |
+ @Test |
+ public void testDocumentWhitelisting() |
+ { |
+ filterEngine.getFilter("@@||example.org^$document").addToList(); |
+ filterEngine.getFilter("@@||example.com^$document,domain=example.de").addToList(); |
+ |
+ String[] emptyArray = new String[] |
+ { |
+ }; |
+ |
+ assertTrue(filterEngine.isDocumentWhitelisted("http://example.org", emptyArray)); |
+ assertFalse(filterEngine.isDocumentWhitelisted("http://example.co.uk", emptyArray)); |
+ assertFalse(filterEngine.isDocumentWhitelisted("http://example.com", emptyArray)); |
+ |
+ String[] documentUrls1 = new String[] |
+ { |
+ "http://example.de" |
+ }; |
+ assertTrue(filterEngine.isDocumentWhitelisted("http://example.com", documentUrls1)); |
+ assertFalse(filterEngine.isDocumentWhitelisted("http://example.co.uk", documentUrls1)); |
+ } |
+ |
+ @Test |
+ public void testElemhideWhitelisting() |
+ { |
+ filterEngine.getFilter("@@||example.org^$elemhide").addToList(); |
+ filterEngine.getFilter("@@||example.com^$elemhide,domain=example.de").addToList(); |
+ |
+ String[] emptyArray = new String[] |
+ { |
+ }; |
+ |
+ assertTrue(filterEngine.isElemhideWhitelisted("http://example.org", emptyArray)); |
+ assertFalse(filterEngine.isElemhideWhitelisted("http://example.co.uk", emptyArray)); |
+ assertFalse(filterEngine.isElemhideWhitelisted("http://example.com", emptyArray)); |
+ |
+ String[] documentUrls1 = new String[] |
+ { |
+ "http://example.de" |
+ }; |
+ assertTrue(filterEngine.isElemhideWhitelisted("http://example.com", documentUrls1)); |
+ assertFalse(filterEngine.isElemhideWhitelisted("http://example.co.uk", documentUrls1)); |
+ } |
+} |