зеркало из https://github.com/openwpm/OpenWPM.git
45 строки
1.6 KiB
Python
45 строки
1.6 KiB
Python
import re
|
|
from pathlib import Path
|
|
from typing import List, Optional, Tuple
|
|
|
|
from openwpm.config import BrowserParams, ManagerParams
|
|
from openwpm.utilities import db_utils
|
|
|
|
from .openwpmtest import OpenWPMTest
|
|
|
|
|
|
class OpenWPMJSTest(OpenWPMTest):
|
|
def get_config(
|
|
self, data_dir: Optional[Path]
|
|
) -> Tuple[ManagerParams, List[BrowserParams]]:
|
|
manager_params, browser_params = self.get_test_config(data_dir)
|
|
browser_params[0].js_instrument = True
|
|
manager_params.testing = True
|
|
return manager_params, browser_params
|
|
|
|
def _check_calls(
|
|
self,
|
|
db,
|
|
symbol_prefix,
|
|
doc_url,
|
|
top_url,
|
|
expected_method_calls,
|
|
expected_gets_and_sets,
|
|
):
|
|
"""Helper to check method calls and accesses in each frame"""
|
|
rows = db_utils.get_javascript_entries(db, all_columns=True)
|
|
observed_gets_and_sets = set()
|
|
observed_calls = set()
|
|
for row in rows:
|
|
if not row["symbol"].startswith(symbol_prefix):
|
|
continue
|
|
symbol = re.sub(symbol_prefix, "", row["symbol"])
|
|
assert row["document_url"] == doc_url
|
|
assert row["top_level_url"] == top_url
|
|
if row["operation"] == "get" or row["operation"] == "set":
|
|
observed_gets_and_sets.add((symbol, row["operation"], row["value"]))
|
|
else:
|
|
observed_calls.add((symbol, row["operation"], row["arguments"]))
|
|
assert observed_calls == expected_method_calls
|
|
assert observed_gets_and_sets == expected_gets_and_sets
|