mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-09 19:16:02 +00:00
Meta: Add --wpt-base-url
option to the WPT importer
This allows files to be downloaded locally by first running: `./Meta/WPT.sh serve` then importing with `--wpt-base-url http://web-platform.test:8000`.
This commit is contained in:
parent
9b9acf0bd5
commit
d6f419af53
Notes:
github-actions[bot]
2025-07-15 16:11:30 +00:00
Author: https://github.com/tcl3
Commit: d6f419af53
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5337
Reviewed-by: https://github.com/gmta ✅
2 changed files with 25 additions and 11 deletions
15
Meta/WPT.sh
15
Meta/WPT.sh
|
@ -659,10 +659,19 @@ if [[ "$CMD" =~ ^(update|clean|run|serve|compare|import|list-tests)$ ]]; then
|
||||||
serve_wpt
|
serve_wpt
|
||||||
;;
|
;;
|
||||||
import)
|
import)
|
||||||
if [ "$1" = "--force" ]; then
|
while [[ "$1" =~ ^--(force|wpt-base-url)$ ]]; do
|
||||||
|
if [ "$1" = "--wpt-base-url" ]; then
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
echo "Missing argument for --wpt-base-url"
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
IMPORT_ARGS+=( "--wpt-base-url=$2" )
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
IMPORT_ARGS+=( "$1" )
|
||||||
|
fi
|
||||||
shift
|
shift
|
||||||
IMPORT_ARGS+=( "--force" )
|
done
|
||||||
fi
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -16,7 +16,6 @@ from urllib.parse import urlsplit
|
||||||
from urllib.parse import urlunsplit
|
from urllib.parse import urlunsplit
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
|
|
||||||
wpt_base_url = "https://wpt.live/"
|
|
||||||
download_exclude_list = {
|
download_exclude_list = {
|
||||||
# This relies on a dynamic path that cannot be rewitten by the importer.
|
# This relies on a dynamic path that cannot be rewitten by the importer.
|
||||||
"/resources/idlharness.js",
|
"/resources/idlharness.js",
|
||||||
|
@ -131,7 +130,9 @@ class TestTypeIdentifier(HTMLParser):
|
||||||
self.ref_test_link_found = True
|
self.ref_test_link_found = True
|
||||||
|
|
||||||
|
|
||||||
def map_to_path(sources: list[ResourceAndType], is_resource=True, resource_path=None) -> list[PathMapping]:
|
def map_to_path(
|
||||||
|
sources: list[ResourceAndType], wpt_base_url: str, is_resource=True, resource_path=None
|
||||||
|
) -> list[PathMapping]:
|
||||||
filepaths: list[PathMapping] = []
|
filepaths: list[PathMapping] = []
|
||||||
|
|
||||||
for source in sources:
|
for source in sources:
|
||||||
|
@ -211,11 +212,12 @@ def remove_repeated_url_slashes(url):
|
||||||
return "/" + "/".join(segment for segment in parsed.path.split("/") if segment)
|
return "/" + "/".join(segment for segment in parsed.path.split("/") if segment)
|
||||||
|
|
||||||
|
|
||||||
def download_files(filepaths, skip_existing):
|
def download_files(filepaths, wpt_base_url, skip_existing):
|
||||||
downloaded_files = []
|
downloaded_files = []
|
||||||
|
|
||||||
for file in filepaths:
|
for file in filepaths:
|
||||||
normalized_path = remove_repeated_url_slashes(file.source)
|
normalized_path = remove_repeated_url_slashes(file.source)
|
||||||
|
print(f"Source {normalized_path}, Destination {file.destination}")
|
||||||
if normalized_path in visited_paths:
|
if normalized_path in visited_paths:
|
||||||
continue
|
continue
|
||||||
if normalized_path in download_exclude_list:
|
if normalized_path in download_exclude_list:
|
||||||
|
@ -223,7 +225,7 @@ def download_files(filepaths, skip_existing):
|
||||||
visited_paths.add(normalized_path)
|
visited_paths.add(normalized_path)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
source = urljoin(file.source, "/".join(file.source.split("/")[3:]))
|
source = urljoin(wpt_base_url, normalized_path)
|
||||||
destination = Path(os.path.normpath(file.destination))
|
destination = Path(os.path.normpath(file.destination))
|
||||||
|
|
||||||
if skip_existing and destination.exists():
|
if skip_existing and destination.exists():
|
||||||
|
@ -271,11 +273,14 @@ def create_expectation_files(files, skip_existing):
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description="Import a WPT test into LibWeb")
|
parser = argparse.ArgumentParser(description="Import a WPT test into LibWeb")
|
||||||
parser.add_argument("--force", action="store_true", help="Force download of files even if they already exist")
|
parser.add_argument("--force", action="store_true", help="Force download of files even if they already exist")
|
||||||
|
parser.add_argument("--wpt-base-url", type=urlparse, default="https://wpt.live/")
|
||||||
parser.add_argument("url", type=str, help="The URL of the WPT test to import")
|
parser.add_argument("url", type=str, help="The URL of the WPT test to import")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
skip_existing = not args.force
|
skip_existing = not args.force
|
||||||
url_to_import = args.url
|
url_to_import = args.url
|
||||||
|
wpt_base_url = args.wpt_base_url.geturl()
|
||||||
|
print(f"Importing WPT test from: {wpt_base_url}")
|
||||||
resource_path = "/".join(Path(url_to_import).parts[2::])
|
resource_path = "/".join(Path(url_to_import).parts[2::])
|
||||||
|
|
||||||
with urlopen(url_to_import) as response:
|
with urlopen(url_to_import) as response:
|
||||||
|
@ -293,7 +298,7 @@ def main():
|
||||||
print(f"Identified {url_to_import} as type {test_type}, ref {raw_reference_path}")
|
print(f"Identified {url_to_import} as type {test_type}, ref {raw_reference_path}")
|
||||||
|
|
||||||
main_file = [ResourceAndType(resource_path, ResourceType.INPUT)]
|
main_file = [ResourceAndType(resource_path, ResourceType.INPUT)]
|
||||||
main_paths = map_to_path(main_file, False)
|
main_paths = map_to_path(main_file, wpt_base_url, False)
|
||||||
|
|
||||||
if test_type == TestType.REF and raw_reference_path is None:
|
if test_type == TestType.REF and raw_reference_path is None:
|
||||||
raise RuntimeError("Failed to file reference path in ref test")
|
raise RuntimeError("Failed to file reference path in ref test")
|
||||||
|
@ -316,7 +321,7 @@ def main():
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
files_to_modify = download_files(main_paths, skip_existing)
|
files_to_modify = download_files(main_paths, wpt_base_url, skip_existing)
|
||||||
create_expectation_files(main_paths, skip_existing)
|
create_expectation_files(main_paths, skip_existing)
|
||||||
|
|
||||||
input_parser = LinkedResourceFinder()
|
input_parser = LinkedResourceFinder()
|
||||||
|
@ -333,8 +338,8 @@ def main():
|
||||||
)
|
)
|
||||||
|
|
||||||
modify_sources(files_to_modify, additional_resources)
|
modify_sources(files_to_modify, additional_resources)
|
||||||
script_paths = map_to_path(additional_resources, True, resource_path)
|
script_paths = map_to_path(additional_resources, wpt_base_url, True, resource_path)
|
||||||
download_files(script_paths, skip_existing)
|
download_files(script_paths, wpt_base_url, skip_existing)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue