python-adblock

Updated Brave adblock library for Python
Log | Files | Refs | README

test_engine.py (2183B)


      1 import adblock
      2 import pytest
      3 
      4 SMALL_FILTER_LIST = """
      5 ||wikipedia.org^
      6 ||old.reddit.com^
      7 ||lobste.rs^
      8 """
      9 
     10 
     11 def empty_engine():
     12     return adblock.Engine(adblock.FilterSet())
     13 
     14 
     15 def test_engine_creation_and_blocking():
     16     filter_set = adblock.FilterSet(debug=True)
     17     filter_set.add_filter_list(SMALL_FILTER_LIST)
     18     engine = adblock.Engine(filter_set=filter_set)
     19 
     20     blocker_result_wikipedia = engine.check_network_urls(
     21         url="https://wikipedia.org/img.png",
     22         source_url="https://google.com/",
     23         request_type="image",
     24     )
     25     assert isinstance(blocker_result_wikipedia, adblock.BlockerResult)
     26     assert blocker_result_wikipedia.matched
     27 
     28     blocker_result_facebook = engine.check_network_urls(
     29         "https://facebook.com/directory/img.png",
     30         "https://old.reddit.com/r/all",
     31         "image",
     32     )
     33     assert isinstance(blocker_result_facebook, adblock.BlockerResult)
     34     assert not blocker_result_facebook.matched
     35 
     36 
     37 def test_serde_file(tmpdir):
     38     path = str(tmpdir / "cache.dat")
     39 
     40     engine0 = empty_engine()
     41     with pytest.raises(FileNotFoundError):
     42         # We haven't created the cache.dat file, so we should get an exception
     43         # when attempting to deserialize.
     44         engine0.deserialize_from_file(path)
     45 
     46     engine1 = empty_engine()
     47     serialization_result = engine1.serialize_to_file(path)
     48     assert serialization_result is None
     49 
     50     engine2 = empty_engine()
     51     deserialization_result = engine2.deserialize_from_file(path)
     52     assert deserialization_result is None
     53 
     54 
     55 def test_deserialize_corrupt(tmpdir):
     56     path = str(tmpdir / "corrupt_cache.dat")
     57     with open(path, "w", encoding="utf-8") as f:
     58         f.write("abc")
     59 
     60     engine = empty_engine()
     61     with pytest.raises(adblock.DeserializationError):
     62         engine.deserialize_from_file(path)
     63     with pytest.raises(adblock.DeserializationError):
     64         engine.deserialize(b"abc")
     65 
     66 
     67 def test_serde():
     68     engine = empty_engine()
     69     serialization_result = engine.serialize()
     70     assert isinstance(serialization_result, bytes)
     71 
     72     engine2 = empty_engine()
     73     deserialization_result = engine2.deserialize(serialization_result)
     74     assert deserialization_result is None