mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 04:09:13 +00:00
LibWebView+Tests+UI: Migrate headless-browser to test-web
Now that headless mode is built into the main Ladybird executable, the headless-browser's only purpose is to run tests. So let's move it to the testing directory and rename it to test-web (a la test-js / test-wasm).
This commit is contained in:
parent
c011dc766f
commit
9a5b31ccd1
Notes:
github-actions[bot]
2025-06-10 16:05:57 +00:00
Author: https://github.com/trflynn89
Commit: 9a5b31ccd1
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5026
21 changed files with 166 additions and 189 deletions
|
@ -1,113 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2024-2025, Tim Flynn <trflynn89@ladybird.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/Environment.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibWebView/Utilities.h>
|
||||
#include <UI/Headless/Application.h>
|
||||
#include <UI/Headless/Fixture.h>
|
||||
|
||||
namespace Ladybird {
|
||||
|
||||
Application::Application(Badge<WebView::Application>, Main::Arguments&)
|
||||
: resources_folder(WebView::s_ladybird_resource_root)
|
||||
, test_concurrency(Core::System::hardware_concurrency())
|
||||
, python_executable_path("python3")
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
Application::~Application()
|
||||
{
|
||||
for (auto& fixture : Fixture::all())
|
||||
fixture->teardown();
|
||||
}
|
||||
|
||||
void Application::create_platform_arguments(Core::ArgsParser& args_parser)
|
||||
{
|
||||
args_parser.add_option(test_concurrency, "Maximum number of tests to run at once", "test-concurrency", 'j', "jobs");
|
||||
args_parser.add_option(python_executable_path, "Path to python3", "python-executable", 'P', "path");
|
||||
args_parser.add_option(test_globs, "Only run tests matching the given glob", "filter", 'f', "glob");
|
||||
args_parser.add_option(test_dry_run, "List the tests that would be run, without running them", "dry-run");
|
||||
args_parser.add_option(dump_failed_ref_tests, "Dump screenshots of failing ref tests", "dump-failed-ref-tests", 'D');
|
||||
args_parser.add_option(dump_gc_graph, "Dump GC graph", "dump-gc-graph", 'G');
|
||||
args_parser.add_option(resources_folder, "Path of the base resources folder (defaults to /res)", "resources", 'r', "resources-root-path");
|
||||
args_parser.add_option(rebaseline, "Rebaseline any executed layout or text tests", "rebaseline");
|
||||
args_parser.add_option(per_test_timeout_in_seconds, "Per-test timeout (default: 30)", "per-test-timeout", 't', "seconds");
|
||||
|
||||
args_parser.add_option(Core::ArgsParser::Option {
|
||||
.argument_mode = Core::ArgsParser::OptionArgumentMode::Optional,
|
||||
.help_string = "Run tests. If a path is provided, tests are loaded from that path. Otherwise, LADYBIRD_SOURCE_DIR must be set.",
|
||||
.long_name = "run-tests",
|
||||
.short_name = 'R',
|
||||
.value_name = "test-root-path",
|
||||
.accept_value = [&](StringView value) -> ErrorOr<bool> {
|
||||
if (!value.is_empty()) {
|
||||
test_root_path = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (auto ladybird_source_dir = Core::Environment::get("LADYBIRD_SOURCE_DIR"sv); ladybird_source_dir.has_value()) {
|
||||
test_root_path = LexicalPath::join(*ladybird_source_dir, "Tests"sv, "LibWeb"sv).string();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
});
|
||||
|
||||
args_parser.add_option(Core::ArgsParser::Option {
|
||||
.argument_mode = Core::ArgsParser::OptionArgumentMode::Optional,
|
||||
.help_string = "Log extra information about test results (use multiple times for more information)",
|
||||
.long_name = "verbose",
|
||||
.short_name = 'v',
|
||||
.accept_value = [&](StringView value) -> ErrorOr<bool> {
|
||||
if (value.is_empty() && verbosity < NumericLimits<u8>::max()) {
|
||||
++verbosity;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
void Application::create_platform_options(WebView::BrowserOptions& browser_options, WebView::WebContentOptions& web_content_options)
|
||||
{
|
||||
browser_options.headless_mode = WebView::HeadlessMode::Test;
|
||||
web_content_options.is_layout_test_mode = WebView::IsLayoutTestMode::Yes;
|
||||
|
||||
// Allow window.open() to succeed for tests.
|
||||
browser_options.allow_popups = WebView::AllowPopups::Yes;
|
||||
|
||||
// Ensure consistent font rendering between operating systems.
|
||||
web_content_options.force_fontconfig = WebView::ForceFontconfig::Yes;
|
||||
|
||||
// Ensure tests are resilient to minor changes to the viewport scrollbar.
|
||||
web_content_options.paint_viewport_scrollbars = WebView::PaintViewportScrollbars::No;
|
||||
|
||||
if (dump_gc_graph) {
|
||||
// Force all tests to run in serial if we are interested in the GC graph.
|
||||
test_concurrency = 1;
|
||||
}
|
||||
}
|
||||
|
||||
ErrorOr<void> Application::launch_test_fixtures()
|
||||
{
|
||||
Fixture::initialize_fixtures();
|
||||
|
||||
// FIXME: Add option to only run specific fixtures from command line by name
|
||||
// And an option to not run any fixtures at all
|
||||
for (auto const& fixture : Fixture::all()) {
|
||||
if (auto result = fixture->setup(web_content_options()); result.is_error())
|
||||
return result;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue