1 package http
2
3 import (
4 "fmt"
5 "testing"
6 )
7
8 func TestJoinPath(t *testing.T) {
9 cases := []struct {
10 A, B string
11 Expect string
12 }{
13 0: {
14 A: "", B: "/bar",
15 Expect: "/bar",
16 },
17 1: {
18 A: "/", B: "/bar",
19 Expect: "/bar",
20 },
21 2: {
22 A: "/foo/", B: "/bar",
23 Expect: "/foo/bar",
24 },
25 3: {
26 A: "foo/", B: "/bar",
27 Expect: "/foo/bar",
28 },
29 4: {
30 A: "/foo/", B: "bar",
31 Expect: "/foo/bar",
32 },
33 5: {
34 A: "foo", B: "/bar",
35 Expect: "/foo/bar",
36 },
37 6: {
38 A: "", B: "",
39 Expect: "/",
40 },
41 7: {
42 A: "foo", B: "",
43 Expect: "/foo",
44 },
45 8: {
46 A: "foo/", B: "",
47 Expect: "/foo/",
48 },
49 9: {
50 A: "foo//", B: "//bar",
51 Expect: "/foo///bar",
52 },
53 }
54
55 for i, c := range cases {
56 t.Run(fmt.Sprintf("%d:%s,%s:%s", i, c.A, c.B, c.Expect), func(t *testing.T) {
57 actual := JoinPath(c.A, c.B)
58 if e, a := c.Expect, actual; e != a {
59 t.Errorf("expect %v path, got %v", e, a)
60 }
61 })
62 }
63 }
64
65 func TestJoinRawQuery(t *testing.T) {
66 cases := []struct {
67 A, B string
68 Expect string
69 }{
70 0: {
71 A: "", B: "bar",
72 Expect: "bar",
73 },
74 1: {
75 A: "foo", B: "bar",
76 Expect: "foo&bar",
77 },
78 2: {
79 A: "foo&", B: "bar",
80 Expect: "foo&bar",
81 },
82 3: {
83 A: "foo", B: "",
84 Expect: "foo",
85 },
86 4: {
87 A: "", B: "&bar",
88 Expect: "bar",
89 },
90 5: {
91 A: "foo&", B: "&bar",
92 Expect: "foo&bar",
93 },
94 6: {
95 A: "", B: "",
96 Expect: "",
97 },
98 7: {
99 A: "foo&baz", B: "bar",
100 Expect: "foo&baz&bar",
101 },
102 8: {
103 A: "foo", B: "baz&bar",
104 Expect: "foo&baz&bar",
105 },
106 9: {
107 A: "&foo&", B: "&baz&bar&",
108 Expect: "foo&baz&bar",
109 },
110 10: {
111 A: "&foo&&&", B: "&&&baz&&&bar&",
112 Expect: "foo&baz&&&bar",
113 },
114 }
115
116 for i, c := range cases {
117 t.Run(fmt.Sprintf("%d:%s,%s:%s", i, c.A, c.B, c.Expect), func(t *testing.T) {
118 actual := JoinRawQuery(c.A, c.B)
119 if e, a := c.Expect, actual; e != a {
120 t.Errorf("expect %v query, got %v", e, a)
121 }
122 })
123 }
124 }
125
View as plain text