mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 02:17:35 +00:00
AK: Improve the parsing of data urls
Improve the parsing of data urls in URLParser to bring it more up-to- spec. At the moment, we cannot parse the components of the MIME type since it is represented as a string, but the spec requires it to be parsed as a "MIME type record".
This commit is contained in:
parent
f5c3225286
commit
4e8e1b7b3a
2 changed files with 55 additions and 11 deletions
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021, the SerenityOS developers.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -215,9 +216,22 @@ TEST_CASE(data_url)
|
|||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/html");
|
||||
EXPECT_EQ(url.data_payload(), "test");
|
||||
EXPECT(!url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html,test");
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_default_mime_type)
|
||||
{
|
||||
URL url("data:,test");
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/plain");
|
||||
EXPECT_EQ(url.data_payload(), "test");
|
||||
EXPECT(!url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/plain,test");
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_encoded)
|
||||
{
|
||||
URL url("data:text/html,Hello%20friends%2C%0X%X0");
|
||||
|
@ -226,6 +240,7 @@ TEST_CASE(data_url_encoded)
|
|||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/html");
|
||||
EXPECT_EQ(url.data_payload(), "Hello friends,%0X%X0");
|
||||
EXPECT(!url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html,Hello friends,%0X%X0");
|
||||
}
|
||||
|
||||
|
@ -237,9 +252,34 @@ TEST_CASE(data_url_base64_encoded)
|
|||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/html");
|
||||
EXPECT_EQ(url.data_payload(), "test");
|
||||
EXPECT(url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html;base64,test");
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded_default_mime_type)
|
||||
{
|
||||
URL url("data:;base64,test");
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/plain");
|
||||
EXPECT_EQ(url.data_payload(), "test");
|
||||
EXPECT(url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/plain;base64,test");
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded_with_whitespace)
|
||||
{
|
||||
URL url("data: text/html ; bAsE64 , test with whitespace ");
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().is_null());
|
||||
EXPECT_EQ(url.data_mime_type(), "text/html");
|
||||
EXPECT_EQ(url.data_payload(), " test with whitespace ");
|
||||
EXPECT(url.data_payload_is_base64());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html;base64, test with whitespace ");
|
||||
}
|
||||
|
||||
TEST_CASE(trailing_slash_with_complete_url)
|
||||
{
|
||||
EXPECT_EQ(URL("http://a/b/").complete_url("c/").serialize(), "http://a/b/c/");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue