Browse Source

Allow any order of query strings in net.join_url tests.

Jeroen van Rijn 1 year ago
parent
commit
aa5716d3f9
1 changed files with 98 additions and 24 deletions
  1. 98 24
      tests/core/net/test_core_net.odin

+ 98 - 24
tests/core/net/test_core_net.odin

@@ -516,25 +516,61 @@ client_sends_server_data :: proc(t: ^testing.T) {
 URL_Test :: struct {
 URL_Test :: struct {
 	scheme, host, path: string,
 	scheme, host, path: string,
 	queries: map[string]string,
 	queries: map[string]string,
-	url: string,
+	url: []string,
 }
 }
 
 
 @test
 @test
 split_url_test :: proc(t: ^testing.T) {
 split_url_test :: proc(t: ^testing.T) {
 	test_cases := []URL_Test{
 	test_cases := []URL_Test{
-		{ "http", "example.com", "/", {}, "http://example.com" },
-		{ "https", "odin-lang.org", "/", {}, "https://odin-lang.org" },
-		{ "https", "odin-lang.org", "/docs/", {}, "https://odin-lang.org/docs/" },
-		{ "https", "odin-lang.org", "/docs/overview", {}, "https://odin-lang.org/docs/overview" },
-		{ "http", "example.com", "/", {"a" = "b"}, "http://example.com?a=b" },
-		{ "http", "example.com", "/", {"a" = ""}, "http://example.com?a" },
-		{ "http", "example.com", "/", {"a" = "b", "c" = "d"}, "http://example.com?a=b&c=d" },
-		{ "http", "example.com", "/", {"a" = "", "c" = "d"}, "http://example.com?a&c=d" },
-		{ "http", "example.com", "/example", {"a" = "", "b" = ""}, "http://example.com/example?a&b" },
+		{
+			"http", "example.com", "/",
+			{},
+			{"http://example.com"},
+		},
+		{
+			"https", "odin-lang.org", "/",
+			{},
+			{"https://odin-lang.org"},
+		},
+		{
+			"https", "odin-lang.org", "/docs/",
+			{},
+			{"https://odin-lang.org/docs/"},
+		},
+		{
+			"https", "odin-lang.org", "/docs/overview",
+			{},
+			{"https://odin-lang.org/docs/overview"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "b"},
+			{"http://example.com?a=b"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = ""},
+			{"http://example.com?a"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "b", "c" = "d"},
+			{"http://example.com?a=b&c=d"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "", "c" = "d"},
+			{"http://example.com?a&c=d"},
+		},
+		{
+			"http", "example.com", "/example",
+			{"a" = "", "b" = ""},
+			{"http://example.com/example?a&b"},
+		},
 	}
 	}
 
 
 	for test in test_cases {
 	for test in test_cases {
-		scheme, host, path, queries := net.split_url(test.url)
+		scheme, host, path, queries := net.split_url(test.url[0])
 		defer {
 		defer {
 			delete(queries)
 			delete(queries)
 			delete(test.queries)
 			delete(test.queries)
@@ -560,15 +596,51 @@ split_url_test :: proc(t: ^testing.T) {
 @test
 @test
 join_url_test :: proc(t: ^testing.T) {
 join_url_test :: proc(t: ^testing.T) {
 	test_cases := []URL_Test{
 	test_cases := []URL_Test{
-		{ "http", "example.com", "", {}, "http://example.com" },
-		{ "https", "odin-lang.org", "", {}, "https://odin-lang.org" },
-		{ "https", "odin-lang.org", "docs/", {}, "https://odin-lang.org/docs/" },
-		{ "https", "odin-lang.org", "/docs/overview", {}, "https://odin-lang.org/docs/overview" },
-		{ "http", "example.com", "", {"a" = "b"}, "http://example.com?a=b" },
-		{ "http", "example.com", "", {"a" = ""}, "http://example.com?a" },
-		{ "http", "example.com", "", {"a" = "b", "c" = "d"}, "http://example.com?a=b&c=d" },
-		{ "http", "example.com", "", {"a" = "", "c" = "d"}, "http://example.com?a&c=d" },
-		{ "http", "example.com", "example", {"a" = "", "b" = ""}, "http://example.com/example?a&b" },
+		{
+			"http", "example.com", "/",
+			{},
+			{"http://example.com/"},
+		},
+		{
+			"https", "odin-lang.org", "/",
+			{},
+			{"https://odin-lang.org/"},
+		},
+		{
+			"https", "odin-lang.org", "/docs/",
+			{},
+			{"https://odin-lang.org/docs/"},
+		},
+		{
+			"https", "odin-lang.org", "/docs/overview",
+			{},
+			{"https://odin-lang.org/docs/overview"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "b"},
+			{"http://example.com/?a=b"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = ""},
+			{"http://example.com/?a"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "b", "c" = "d"},
+			{"http://example.com/?a=b&c=d", "http://example.com/?c=d&a=b"},
+		},
+		{
+			"http", "example.com", "/",
+			{"a" = "", "c" = "d"},
+			{"http://example.com/?a&c=d", "http://example.com/?c=d&a"},
+		},
+		{
+			"http", "example.com", "/example",
+			{"a" = "", "b" = ""},
+			{"http://example.com/example?a&b", "http://example.com/example?b&a"},
+		},
 	}
 	}
 
 
 	for test in test_cases {
 	for test in test_cases {
@@ -577,9 +649,11 @@ join_url_test :: proc(t: ^testing.T) {
 			delete(url)
 			delete(url)
 			delete(test.queries)
 			delete(test.queries)
 		}
 		}
-
-		okay := url == test.url
-		msg := fmt.tprintf("Expected `net.join_url` to return %s, got %s", test.url, url)
-		expect(t, okay, msg)
+		pass := false
+		for test_url in test.url {
+			pass |= url == test_url
+		}
+		msg := fmt.tprintf("Expected `net.join_url` to return one of %s, got %s", test.url, url)
+		expect(t, pass, msg)
 	}
 	}
 }
 }