@@ -15,7 +15,26 @@
#include <iostream>
#include <optional>
#include <regex>
#include <utility>
#include <variant>
#include <vector>
namespace {
struct ParseResult {
std::optional<url::Url> url;
std::vector<url::UrlParser::ValidationError> errors;
};
ParseResult parse_url(std::string input, std::optional<url::Url> base = std::nullopt) {
std::vector<url::UrlParser::ValidationError> errors;
url::UrlParser p;
p.set_on_error([&errors](url::UrlParser::ValidationError e) { errors.push_back(e); });
std::optional<url::Url> url = p.parse(std::move(input), std::move(base));
return {std::move(url), std::move(errors)};
}
} // namespace
int main() {
url::Url const base{"https",
@@ -671,6 +690,12 @@ int main() {
etest::expect_eq(url->serialize_path(), "/usr/bin/emacs");
});
etest::test("URL parsing: non-relative url w/o scheme", [] {
auto [url, errors] = parse_url("//example.com");
etest::expect_eq(url, std::nullopt);
etest::expect_eq(errors, std::vector{url::UrlParser::ValidationError::MissingSchemeNonRelativeUrl});
});
etest::test("Web Platform Tests", [] {
url::UrlParser p;