Coverage Report

Created: 2018-09-25 14:53

/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
}