/src/mozilla-central/netwerk/test/gtest/TestMozURL.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | #include "gtest/gtest.h" |
2 | | #include "gtest/MozGTestBench.h" // For MOZ_GTEST_BENCH |
3 | | |
4 | | #include "nsCOMPtr.h" |
5 | | #include "mozilla/net/MozURL.h" |
6 | | |
7 | | using namespace mozilla::net; |
8 | | |
9 | | TEST(TestMozURL, Getters) |
10 | 0 | { |
11 | 0 | nsAutoCString href("http://user:pass@example.com/path?query#ref"); |
12 | 0 | RefPtr<MozURL> url; |
13 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
14 | 0 |
|
15 | 0 | ASSERT_TRUE(url->Scheme().EqualsLiteral("http")); |
16 | 0 |
|
17 | 0 | ASSERT_TRUE(url->Spec() == href); |
18 | 0 |
|
19 | 0 | ASSERT_TRUE(url->Username().EqualsLiteral("user")); |
20 | 0 |
|
21 | 0 | ASSERT_TRUE(url->Password().EqualsLiteral("pass")); |
22 | 0 |
|
23 | 0 | ASSERT_TRUE(url->Host().EqualsLiteral("example.com")); |
24 | 0 |
|
25 | 0 | ASSERT_TRUE(url->FilePath().EqualsLiteral("/path")); |
26 | 0 |
|
27 | 0 | ASSERT_TRUE(url->Query().EqualsLiteral("query")); |
28 | 0 |
|
29 | 0 | ASSERT_TRUE(url->Ref().EqualsLiteral("ref")); |
30 | 0 |
|
31 | 0 | url = nullptr; |
32 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), NS_LITERAL_CSTRING("")), |
33 | 0 | NS_ERROR_MALFORMED_URI); |
34 | 0 | ASSERT_EQ(url, nullptr); |
35 | 0 | } |
36 | | |
37 | | TEST(TestMozURL, MutatorChain) |
38 | 0 | { |
39 | 0 | nsAutoCString href("http://user:pass@example.com/path?query#ref"); |
40 | 0 | RefPtr<MozURL> url; |
41 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
42 | 0 | nsAutoCString out; |
43 | 0 |
|
44 | 0 | RefPtr<MozURL> url2; |
45 | 0 | ASSERT_EQ(url->Mutate().SetScheme(NS_LITERAL_CSTRING("https")) |
46 | 0 | .SetUsername(NS_LITERAL_CSTRING("newuser")) |
47 | 0 | .SetPassword(NS_LITERAL_CSTRING("newpass")) |
48 | 0 | .SetHostname(NS_LITERAL_CSTRING("test")) |
49 | 0 | .SetFilePath(NS_LITERAL_CSTRING("new/file/path")) |
50 | 0 | .SetQuery(NS_LITERAL_CSTRING("bla")) |
51 | 0 | .SetRef(NS_LITERAL_CSTRING("huh")) |
52 | 0 | .Finalize(getter_AddRefs(url2)), NS_OK); |
53 | 0 |
|
54 | 0 | ASSERT_TRUE(url2->Spec().EqualsLiteral("https://newuser:newpass@test/new/file/path?bla#huh")); |
55 | 0 | } |
56 | | |
57 | | TEST(TestMozURL, MutatorFinalizeTwice) |
58 | 0 | { |
59 | 0 | nsAutoCString href("http://user:pass@example.com/path?query#ref"); |
60 | 0 | RefPtr<MozURL> url; |
61 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
62 | 0 | nsAutoCString out; |
63 | 0 |
|
64 | 0 | RefPtr<MozURL> url2; |
65 | 0 | MozURL::Mutator mut = url->Mutate(); |
66 | 0 | mut.SetScheme(NS_LITERAL_CSTRING("https")); // Change the scheme to https |
67 | 0 | ASSERT_EQ(mut.Finalize(getter_AddRefs(url2)), NS_OK); |
68 | 0 | ASSERT_TRUE(url2->Spec().EqualsLiteral("https://user:pass@example.com/path?query#ref")); |
69 | 0 |
|
70 | 0 | // Test that a second call to Finalize will result in an error code |
71 | 0 | url2 = nullptr; |
72 | 0 | ASSERT_EQ(mut.Finalize(getter_AddRefs(url2)), NS_ERROR_NOT_AVAILABLE); |
73 | 0 | ASSERT_EQ(url2, nullptr); |
74 | 0 | } |
75 | | |
76 | | TEST(TestMozURL, MutatorErrorStatus) |
77 | 0 | { |
78 | 0 | nsAutoCString href("http://user:pass@example.com/path?query#ref"); |
79 | 0 | RefPtr<MozURL> url; |
80 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
81 | 0 | nsAutoCString out; |
82 | 0 |
|
83 | 0 | // Test that trying to set the scheme to a bad value will get you an error |
84 | 0 | MozURL::Mutator mut = url->Mutate(); |
85 | 0 | mut.SetScheme(NS_LITERAL_CSTRING("!@#$%^&*(")); |
86 | 0 | ASSERT_EQ(mut.GetStatus(), NS_ERROR_MALFORMED_URI); |
87 | 0 |
|
88 | 0 | // Test that the mutator will not work after one faulty operation |
89 | 0 | mut.SetScheme(NS_LITERAL_CSTRING("test")); |
90 | 0 | ASSERT_EQ(mut.GetStatus(), NS_ERROR_MALFORMED_URI); |
91 | 0 | } |
92 | | |
93 | | TEST(TestMozURL, InitWithBase) |
94 | 0 | { |
95 | 0 | nsAutoCString href("https://example.net/a/b.html"); |
96 | 0 | RefPtr<MozURL> url; |
97 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
98 | 0 |
|
99 | 0 | ASSERT_TRUE(url->Spec().EqualsLiteral("https://example.net/a/b.html")); |
100 | 0 |
|
101 | 0 | RefPtr<MozURL> url2; |
102 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url2), NS_LITERAL_CSTRING("c.png"), |
103 | 0 | url), NS_OK); |
104 | 0 |
|
105 | 0 | ASSERT_TRUE(url2->Spec().EqualsLiteral("https://example.net/a/c.png")); |
106 | 0 | } |
107 | | |
108 | | TEST(TestMozURL, Path) |
109 | 0 | { |
110 | 0 | nsAutoCString href("about:blank"); |
111 | 0 | RefPtr<MozURL> url; |
112 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
113 | 0 |
|
114 | 0 | ASSERT_TRUE(url->Spec().EqualsLiteral("about:blank")); |
115 | 0 |
|
116 | 0 | ASSERT_TRUE(url->Scheme().EqualsLiteral("about")); |
117 | 0 |
|
118 | 0 | ASSERT_TRUE(url->FilePath().EqualsLiteral("blank")); |
119 | 0 | } |
120 | | |
121 | | TEST(TestMozURL, HostPort) |
122 | 0 | { |
123 | 0 | nsAutoCString href("https://user:pass@example.net:1234/path?query#ref"); |
124 | 0 | RefPtr<MozURL> url; |
125 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
126 | 0 |
|
127 | 0 | ASSERT_TRUE(url->HostPort().EqualsLiteral("example.net:1234")); |
128 | 0 |
|
129 | 0 | RefPtr<MozURL> url2; |
130 | 0 | url->Mutate().SetHostPort(NS_LITERAL_CSTRING("test:321")) |
131 | 0 | .Finalize(getter_AddRefs(url2)); |
132 | 0 |
|
133 | 0 | ASSERT_TRUE(url2->HostPort().EqualsLiteral("test:321")); |
134 | 0 | ASSERT_TRUE(url2->Spec().EqualsLiteral("https://user:pass@test:321/path?query#ref")); |
135 | 0 |
|
136 | 0 | href.Assign("https://user:pass@example.net:443/path?query#ref"); |
137 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
138 | 0 | ASSERT_TRUE(url->HostPort().EqualsLiteral("example.net")); |
139 | 0 | ASSERT_EQ(url->Port(), -1); |
140 | 0 | } |
141 | | |
142 | | TEST(TestMozURL, Origin) |
143 | 0 | { |
144 | 0 | nsAutoCString href("https://user:pass@example.net:1234/path?query#ref"); |
145 | 0 | RefPtr<MozURL> url; |
146 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); |
147 | 0 |
|
148 | 0 | nsAutoCString out; |
149 | 0 | url->Origin(out); |
150 | 0 | ASSERT_TRUE(out.EqualsLiteral("https://example.net:1234")); |
151 | 0 |
|
152 | 0 | RefPtr<MozURL> url2; |
153 | 0 | ASSERT_EQ(MozURL::Init(getter_AddRefs(url2), |
154 | 0 | NS_LITERAL_CSTRING("file:///tmp/foo")), NS_OK); |
155 | 0 | url2->Origin(out); |
156 | 0 | ASSERT_TRUE(out.EqualsLiteral("null")); |
157 | 0 | } |