mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
Add support for WPT test variants, which allow a single test file to be run multiple times with different URL query parameters. Tests declare variants using `<meta name="variant" content="?param=value">` tags. When test-web encounters a test with variants, it expands that test into multiple runs, each with its own expectation file using the naming convention `testname@variant.txt` (e.g., `test@run_type=uri.txt`). Implementation details: - WebContent observes variant meta tags and communicates them to the test runner via a new `did_receive_test_variant_metadata` IPC call - test-web dynamically expands tests with variants during execution, waking idle views after each test completion to pick up new work - Use index-based test tracking to avoid dangling references when the test vector grows during variant expansion - Introduce TestRunContext to group test run state, and store a static pointer to it for signal handler access This enables proper testing of WPT tests that use variants, such as the html5lib parsing tests (which test uri, write, and write_single modes) and the editing/bold tests (which split across multiple ranges).
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2024-2025, Tim Flynn <trflynn89@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "TestWeb.h"
|
|
|
|
#include <AK/Badge.h>
|
|
#include <AK/RefPtr.h>
|
|
#include <LibCore/Forward.h>
|
|
#include <LibCore/Promise.h>
|
|
#include <LibGfx/Forward.h>
|
|
#include <LibWeb/PixelUnits.h>
|
|
#include <LibWebView/HeadlessWebView.h>
|
|
|
|
namespace TestWeb {
|
|
|
|
class TestWebView final : public WebView::HeadlessWebView {
|
|
public:
|
|
static NonnullOwnPtr<TestWebView> create(Core::AnonymousBuffer theme, Web::DevicePixelSize window_size);
|
|
|
|
void clear_content_filters();
|
|
pid_t web_content_pid() const;
|
|
|
|
NonnullRefPtr<Core::Promise<RefPtr<Gfx::Bitmap const>>> take_screenshot();
|
|
|
|
TestPromise& test_promise() { return *m_test_promise; }
|
|
void reset_test_promise() { m_test_promise = TestPromise::construct(); }
|
|
void on_test_complete(TestCompletion);
|
|
|
|
private:
|
|
TestWebView(Core::AnonymousBuffer theme, Web::DevicePixelSize viewport_size);
|
|
|
|
virtual void did_receive_screenshot(Badge<WebView::WebContentClient>, Gfx::ShareableBitmap const& screenshot) override;
|
|
|
|
RefPtr<Core::Promise<RefPtr<Gfx::Bitmap const>>> m_pending_screenshot;
|
|
|
|
NonnullRefPtr<TestPromise> m_test_promise;
|
|
};
|
|
|
|
}
|