TestWebViewURL.cpp 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibTest/TestCase.h>
  7. #include <LibWebView/URL.h>
  8. static void compare_url_parts(StringView url, WebView::URLParts const& expected)
  9. {
  10. auto result = WebView::break_url_into_parts(url);
  11. VERIFY(result.has_value());
  12. EXPECT_EQ(result->scheme_and_subdomain, expected.scheme_and_subdomain);
  13. EXPECT_EQ(result->effective_tld_plus_one, expected.effective_tld_plus_one);
  14. EXPECT_EQ(result->remainder, expected.remainder);
  15. }
  16. TEST_CASE(invalid_url)
  17. {
  18. EXPECT(!WebView::break_url_into_parts(""sv).has_value());
  19. EXPECT(!WebView::break_url_into_parts(":"sv).has_value());
  20. EXPECT(!WebView::break_url_into_parts(":/"sv).has_value());
  21. EXPECT(!WebView::break_url_into_parts("://"sv).has_value());
  22. EXPECT(!WebView::break_url_into_parts("f"sv).has_value());
  23. EXPECT(!WebView::break_url_into_parts("fi"sv).has_value());
  24. EXPECT(!WebView::break_url_into_parts("fil"sv).has_value());
  25. EXPECT(!WebView::break_url_into_parts("file"sv).has_value());
  26. EXPECT(!WebView::break_url_into_parts("file:"sv).has_value());
  27. EXPECT(!WebView::break_url_into_parts("file:/"sv).has_value());
  28. EXPECT(!WebView::break_url_into_parts("h"sv).has_value());
  29. EXPECT(!WebView::break_url_into_parts("ht"sv).has_value());
  30. EXPECT(!WebView::break_url_into_parts("htt"sv).has_value());
  31. EXPECT(!WebView::break_url_into_parts("http"sv).has_value());
  32. EXPECT(!WebView::break_url_into_parts("http:"sv).has_value());
  33. EXPECT(!WebView::break_url_into_parts("http:/"sv).has_value());
  34. EXPECT(!WebView::break_url_into_parts("http://"sv).has_value());
  35. EXPECT(!WebView::break_url_into_parts("https"sv).has_value());
  36. EXPECT(!WebView::break_url_into_parts("https:"sv).has_value());
  37. EXPECT(!WebView::break_url_into_parts("https:/"sv).has_value());
  38. EXPECT(!WebView::break_url_into_parts("https://"sv).has_value());
  39. }
  40. TEST_CASE(file_url)
  41. {
  42. compare_url_parts("file://"sv, { "file://"sv, ""sv, {} });
  43. compare_url_parts("file://a"sv, { "file://"sv, "a"sv, {} });
  44. compare_url_parts("file:///a"sv, { "file://"sv, "/a"sv, {} });
  45. compare_url_parts("file:///abc"sv, { "file://"sv, "/abc"sv, {} });
  46. }
  47. TEST_CASE(http_url)
  48. {
  49. compare_url_parts("http://a"sv, { "http://"sv, "a"sv, {} });
  50. compare_url_parts("http://abc"sv, { "http://"sv, "abc"sv, {} });
  51. compare_url_parts("http://com"sv, { "http://"sv, "com"sv, {} });
  52. compare_url_parts("http://abc."sv, { "http://"sv, "abc."sv, {} });
  53. compare_url_parts("http://abc.c"sv, { "http://"sv, "abc.c"sv, {} });
  54. compare_url_parts("http://abc.com"sv, { "http://"sv, "abc.com"sv, {} });
  55. compare_url_parts("http://abc.com."sv, { "http://"sv, "abc.com."sv, {} });
  56. compare_url_parts("http://abc.com."sv, { "http://"sv, "abc.com."sv, {} });
  57. compare_url_parts("http://abc.com.org"sv, { "http://abc."sv, "com.org"sv, {} });
  58. compare_url_parts("http://abc.com.org.gov"sv, { "http://abc.com."sv, "org.gov"sv, {} });
  59. compare_url_parts("http://abc/path"sv, { "http://"sv, "abc"sv, "/path"sv });
  60. compare_url_parts("http://abc#anchor"sv, { "http://"sv, "abc"sv, "#anchor"sv });
  61. compare_url_parts("http://abc?query"sv, { "http://"sv, "abc"sv, "?query"sv });
  62. compare_url_parts("http://abc.def.com"sv, { "http://abc."sv, "def.com"sv, {} });
  63. compare_url_parts("http://abc.def.com/path"sv, { "http://abc."sv, "def.com"sv, "/path"sv });
  64. compare_url_parts("http://abc.def.com#anchor"sv, { "http://abc."sv, "def.com"sv, "#anchor"sv });
  65. compare_url_parts("http://abc.def.com?query"sv, { "http://abc."sv, "def.com"sv, "?query"sv });
  66. }