1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 19:47:34 +00:00

AK: Add a basic URL class to help us handle URL's

We're gonna need these as we start to write more networking programs.
This commit is contained in:
Andreas Kling 2019-08-10 17:27:56 +02:00
parent aaccf6ee4e
commit ed43770b2f
5 changed files with 223 additions and 1 deletions

View file

@ -1,4 +1,4 @@
PROGRAMS = TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr TestNonnullRefPtr TestRefPtr TestFixedArray TestFileSystemPath
PROGRAMS = TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr TestNonnullRefPtr TestRefPtr TestFixedArray TestFileSystemPath TestURL
CXXFLAGS = -std=c++17 -Wall -Wextra -ggdb3 -O2 -I../ -I../../
@ -13,6 +13,7 @@ SHARED_TEST_OBJS = \
../JsonValue.o \
../JsonParser.o \
../FileSystemPath.o \
../URL.o \
.cpp.o:
@echo "HOST_CXX $<"; $(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ -c $<
@ -58,6 +59,9 @@ TestOptional: TestOptional.o $(SHARED_TEST_OBJS)
TestFileSystemPath: TestFileSystemPath.o $(SHARED_TEST_OBJS)
$(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestFileSystemPath.o $(SHARED_TEST_OBJS)
TestURL: TestURL.o $(SHARED_TEST_OBJS)
$(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestURL.o $(SHARED_TEST_OBJS)
clean:
rm -f $(SHARED_TEST_OBJS)

49
AK/Tests/TestURL.cpp Normal file
View file

@ -0,0 +1,49 @@
#include <AK/TestSuite.h>
#include <AK/URL.h>
TEST_CASE(construct)
{
EXPECT_EQ(URL().is_valid(), false);
}
TEST_CASE(basic)
{
{
URL url("http://www.serenityos.org/index.html");
EXPECT_EQ(url.is_valid(), true);
EXPECT_EQ(url.protocol(), "http");
EXPECT_EQ(url.port(), 80);
EXPECT_EQ(url.path(), "/index.html");
}
{
URL url("https://localhost:1234/~anon/test/page.html");
EXPECT_EQ(url.is_valid(), true);
EXPECT_EQ(url.protocol(), "https");
EXPECT_EQ(url.port(), 1234);
EXPECT_EQ(url.path(), "/~anon/test/page.html");
}
}
TEST_CASE(some_bad_urls)
{
EXPECT_EQ(URL("http:serenityos.org").is_valid(), false);
EXPECT_EQ(URL("http:/serenityos.org").is_valid(), false);
EXPECT_EQ(URL("http//serenityos.org").is_valid(), false);
EXPECT_EQ(URL("http:///serenityos.org").is_valid(), false);
EXPECT_EQ(URL("serenityos.org").is_valid(), false);
EXPECT_EQ(URL("://serenityos.org").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:80:80/").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:80:80").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:abc").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:abc:80").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:abc:80/").is_valid(), false);
EXPECT_EQ(URL("http://serenityos.org:/abc/").is_valid(), false);
}
TEST_CASE(serialization)
{
EXPECT_EQ(URL("http://www.serenityos.org/").to_string(), "http://www.serenityos.org:80/");
}
TEST_MAIN(URL)