diff --git a/engine/engine.h b/engine/engine.h index bc6b414ca..cc96590a6 100644 --- a/engine/engine.h +++ b/engine/engine.h @@ -41,6 +41,12 @@ class Engine { css::StyleSheet const &stylesheet() const { return stylesheet_; } layout::LayoutBox const *layout() const { return layout_.has_value() ? &*layout_ : nullptr; } + struct [[nodiscard]] LoadResult { + protocol::Response response; + uri::Uri uri_after_redirects; + }; + LoadResult load(uri::Uri); + private: std::function on_navigation_failure_{[](protocol::Error) { }}; @@ -61,12 +67,6 @@ class Engine { std::optional layout_{}; void on_navigation_success(); - - struct [[nodiscard]] LoadResult { - protocol::Response response; - uri::Uri uri_after_redirects; - }; - LoadResult load(uri::Uri); }; } // namespace engine diff --git a/engine/engine_test.cpp b/engine/engine_test.cpp index a1f497681..67eed56fc 100644 --- a/engine/engine_test.cpp +++ b/engine/engine_test.cpp @@ -418,5 +418,23 @@ int main() { expect(contains(e.stylesheet().rules, {.selectors{"p"}, .declarations{{css::PropertyId::Color, "green"}}})); }); + etest::test("load", [] { + std::map responses; + responses["hax://example.com"s] = Response{ + .err = Error::Ok, + .status_line = {.status_code = 301}, + .headers = {{"Location", "hax://example.com/redirected"}}, + }; + responses["hax://example.com/redirected"s] = Response{ + .err = Error::Ok, + .status_line = {.status_code = 200}, + .body{"hello!"}, + }; + engine::Engine e{std::make_unique(responses)}; + auto res = e.load(uri::Uri::parse("hax://example.com")); + expect_eq(res.uri_after_redirects, uri::Uri::parse("hax://example.com/redirected")); + expect_eq(res.response, responses.at("hax://example.com/redirected")); + }); + return etest::run_all_tests(); }