From 012d80ce79439993c281cf6a73bcdb90e3b80b9e Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Sat, 26 Aug 2023 17:01:43 -0400 Subject: [PATCH] feat: add `ada_copy` c function Co-authored-by: Steve Klabnik --- include/ada_c.h | 1 + src/ada_c.cpp | 5 +++++ tests/ada_c.cpp | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/include/ada_c.h b/include/ada_c.h index 2d192a526..170686b56 100644 --- a/include/ada_c.h +++ b/include/ada_c.h @@ -51,6 +51,7 @@ bool ada_can_parse_with_base(const char* input, size_t input_length, void ada_free(ada_url result); void ada_free_owned_string(ada_owned_string owned); +ada_url ada_copy(ada_url input); bool ada_is_valid(ada_url result); diff --git a/src/ada_c.cpp b/src/ada_c.cpp index 5d00cd10b..62fe09411 100644 --- a/src/ada_c.cpp +++ b/src/ada_c.cpp @@ -88,6 +88,11 @@ void ada_free(ada_url result) noexcept { delete r; } +ada_url ada_copy(ada_url input) noexcept { + ada::result& r = get_instance(input); + return new ada::result(r); +} + bool ada_is_valid(ada_url result) noexcept { ada::result& r = get_instance(result); return r.has_value(); diff --git a/tests/ada_c.cpp b/tests/ada_c.cpp index 05b8f2ee3..3fa5a1c2d 100644 --- a/tests/ada_c.cpp +++ b/tests/ada_c.cpp @@ -138,6 +138,23 @@ TEST(ada_c, ada_url_components) { SUCCEED(); } +TEST(ada_c, ada_copy) { + std::string lemire_blog = "https://lemire.me"; + std::string anonrig_blog = "https://yagiz.co"; + ada_url first = ada_parse(lemire_blog.data(), lemire_blog.length()); + ada_url second = ada_copy(first); + + ASSERT_TRUE(ada_set_href(second, anonrig_blog.data(), anonrig_blog.size())); + + ASSERT_EQ(convert_string(ada_get_href(first)), "https://lemire.me/"); + ASSERT_EQ(convert_string(ada_get_href(second)), "https://yagiz.co/"); + + ada_free(first); + ada_free(second); + + SUCCEED(); +} + TEST(ada_c, ada_idna) { std::string_view ascii_input = "straße.de"; std::string_view unicode_input = "xn--strae-oqa.de";