From 071619b48132cb02304b1ab8a1f64a25e580b309 Mon Sep 17 00:00:00 2001 From: Dominic Elm Date: Tue, 5 Sep 2023 20:12:14 +0200 Subject: [PATCH 1/2] feat: add ada_get_schema_type --- include/ada_c.h | 1 + src/ada_c.cpp | 8 ++++++++ tests/ada_c.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/include/ada_c.h b/include/ada_c.h index 0d01e57c4..a8abd1e4a 100644 --- a/include/ada_c.h +++ b/include/ada_c.h @@ -69,6 +69,7 @@ ada_string ada_get_pathname(ada_url result); ada_string ada_get_search(ada_url result); ada_string ada_get_protocol(ada_url result); uint8_t ada_get_host_type(ada_url result); +uint8_t ada_get_schema_type(ada_url result); // url_aggregator setters // if ada_is_valid(result)) is false, the setters have no effect diff --git a/src/ada_c.cpp b/src/ada_c.cpp index 8e7f46dda..111a2e8d8 100644 --- a/src/ada_c.cpp +++ b/src/ada_c.cpp @@ -218,6 +218,14 @@ uint8_t ada_get_host_type(ada_url result) noexcept { return r->host_type; } +uint8_t ada_get_schema_type(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return 0; + } + return r->type; +} + bool ada_set_href(ada_url result, const char* input, size_t length) noexcept { ada::result& r = get_instance(result); if (!r) { diff --git a/tests/ada_c.cpp b/tests/ada_c.cpp index f0537aadc..2f66e82a8 100644 --- a/tests/ada_c.cpp +++ b/tests/ada_c.cpp @@ -209,3 +209,46 @@ TEST(ada_c, ada_clear_search) { ada_free(out); SUCCEED(); } + +TEST(ada_c, ada_get_schema_type) { + std::string_view input; + ada_url out; + + input = "http://www.google.com"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 0); + + input = "notspecial://www.google.com"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 1); + + input = "https://www.google.com"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 2); + + input = "ws://www.google.com/ws"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 3); + + input = "ftp://www.google.com/file.txt"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 4); + + input = "wss://www.google.com/wss"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 5); + + input = "file:///foo/bar"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 6); + + ada_free(out); + SUCCEED(); +} From 59a8aee06735356b8106fb88d4d44460c5e431c6 Mon Sep 17 00:00:00 2001 From: Dominic Elm Date: Tue, 5 Sep 2023 20:28:20 +0200 Subject: [PATCH 2/2] fixup: code review --- tests/ada_c.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/ada_c.cpp b/tests/ada_c.cpp index 2f66e82a8..b1f6a77db 100644 --- a/tests/ada_c.cpp +++ b/tests/ada_c.cpp @@ -220,31 +220,37 @@ TEST(ada_c, ada_get_schema_type) { ASSERT_EQ(ada_get_schema_type(out), 0); input = "notspecial://www.google.com"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 1); input = "https://www.google.com"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 2); input = "ws://www.google.com/ws"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 3); input = "ftp://www.google.com/file.txt"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 4); input = "wss://www.google.com/wss"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 5); input = "file:///foo/bar"; + ada_free(out); out = ada_parse(input.data(), input.size()); ASSERT_TRUE(ada_is_valid(out)); ASSERT_EQ(ada_get_schema_type(out), 6);