Menu

[r224]: / trunk / libs / network / test / url_test.cpp  Maximize  Restore  History

Download this file

213 lines (184 with data), 6.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
// Copyright 2009 Dean Michael Berris.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt of copy at
// http://www.boost.org/LICENSE_1_0.txt)
#define BOOST_TEST_MODULE URL Test
#include <boost/test/unit_test.hpp>
#include <boost/network/uri.hpp>
#include <algorithm>
namespace test_suite {
template <
class Uri
>
void constructor_test(Uri instance,
const typename Uri::string_type &protocol_,
const typename Uri::string_type &rest_) {
BOOST_CHECK(protocol(instance) == protocol_);
BOOST_CHECK(rest(instance) == rest_);
BOOST_CHECK(valid(instance));
}
template <
class Uri
>
void copy_constructor_test(Uri instance) {
Uri copy = instance;
BOOST_CHECK(protocol(instance) == protocol(copy));
BOOST_CHECK(rest(instance) == rest(copy));
}
template <
class Uri
>
void assignment_test(Uri instance) {
Uri copy;
copy = instance;
BOOST_CHECK(protocol(instance) == protocol(copy));
BOOST_CHECK(rest(instance) == rest(copy));
}
template <
class Uri
>
void http_full_uri_test(Uri instance,
const typename Uri::string_type &protocol_,
const typename Uri::string_type &rest_,
const typename Uri::string_type &user_info_,
const typename Uri::string_type &host_,
boost::uint32_t port_,
const typename Uri::string_type &path_,
const typename Uri::string_type &query_,
const typename Uri::string_type &fragment_) {
using namespace boost::network::uri;
BOOST_CHECK(protocol(instance) == protocol_);
BOOST_CHECK(rest(instance) == rest_);
BOOST_CHECK(user_info(instance) == user_info_);
BOOST_CHECK(host(instance) == host_);
BOOST_CHECK(port(instance) == port_);
BOOST_CHECK(path(instance) == path_);
BOOST_CHECK(query(instance) == query_);
BOOST_CHECK(fragment(instance) == fragment_);
BOOST_CHECK(valid(instance));
}
template <
class Uri
>
void http_simple_uri_test(Uri instance,
const typename Uri::string_type &protocol_,
const typename Uri::string_type &rest_,
const typename Uri::string_type &user_info_,
const typename Uri::string_type &host_,
boost::uint32_t port_,
const typename Uri::string_type &path_,
const typename Uri::string_type &query_,
const typename Uri::string_type &fragment_) {
BOOST_CHECK(protocol(instance) == protocol_);
BOOST_CHECK(rest(instance) == rest_);
BOOST_CHECK(user_info(instance) == user_info_);
BOOST_CHECK(host(instance) == host_);
BOOST_CHECK(port(instance) == port_);
BOOST_CHECK(path(instance) == path_);
BOOST_CHECK(query(instance) == query_);
BOOST_CHECK(fragment(instance) == fragment_);
BOOST_CHECK(valid(instance));
}
template <
class Uri
>
void https_simple_uri_test(Uri instance,
const typename Uri::string_type &protocol_,
boost::uint32_t port_) {
using namespace boost::network::uri;
BOOST_CHECK(protocol(instance) == protocol_);
BOOST_CHECK(port(instance) == port_);
}
template <
class Uri
>
void http_with_port_test(Uri instance,
const typename Uri::string_type &host_,
boost::uint32_t port_) {
using namespace boost::network::uri;
BOOST_CHECK(host(instance) == host_);
BOOST_CHECK(port(instance) == port_);
BOOST_CHECK(valid(instance));
}
template <
class Uri
>
void uri_with_spaces_should_fail(Uri instance) {
using namespace boost::network::uri;
// I don't know if it's a good idea to test that host and port are
// set if the URI is invalid.
// BOOST_CHECK_EQUAL(host(instance), std::string("www.boost.org"));
// BOOST_CHECK_EQUAL(port(instance), 80u);
BOOST_CHECK(!valid(instance));
}
template <
class Uri
>
void http_with_invalid_host_should_fail(Uri instance) {
using namespace boost::network::uri;
BOOST_CHECK(!valid(instance));
}
template <
class Uri
>
void http_with_invalid_scheme_should_fail(Uri instance) {
using namespace boost::network::uri;
BOOST_CHECK(!valid(instance));
}
} // namespace test_suite
BOOST_AUTO_TEST_CASE(constructor_test) {
test_suite::constructor_test(
boost::network::uri::uri("http://www.boost.org/"),
"http", "//www.boost.org/");
test_suite::constructor_test(
boost::network::uri::wuri(L"http://www.boost.org/"),
L"http", L"//www.boost.org/");
}
BOOST_AUTO_TEST_CASE(copy_constructor_test) {
test_suite::copy_constructor_test(
boost::network::uri::uri("http://www.boost.org/"));
test_suite::copy_constructor_test(
boost::network::uri::wuri(L"http://www.boost.org/"));
}
BOOST_AUTO_TEST_CASE(assignment_test) {
test_suite::assignment_test(
boost::network::uri::uri("http://www.boost.org/"));
test_suite::assignment_test(
boost::network::uri::wuri(L"http://www.boost.org/"));
}
BOOST_AUTO_TEST_CASE(http_full_uri_test) {
test_suite::http_full_uri_test(
boost::network::uri::http::uri(
"http://user:password@www.boost.org/path?query#fragment"),
"http", "//user:password@www.boost.org/path?query#fragment",
"user:password", "www.boost.org", 80u, "/path", "query", "fragment");
}
BOOST_AUTO_TEST_CASE(http_simple_uri_test) {
test_suite::http_simple_uri_test(
boost::network::uri::http::uri("http://www.boost.org/"),
"http", "//www.boost.org/", "", "www.boost.org", 80u, "/", "", "");
}
BOOST_AUTO_TEST_CASE(https_simple_uri_test) {
test_suite::https_simple_uri_test(
boost::network::uri::http::uri("https://www.boost.org/"),
"https", 443u);
}
BOOST_AUTO_TEST_CASE(http_with_port_test) {
test_suite::http_with_port_test(
boost::network::uri::http::uri("http://www.boost.org:80/"),
"www.boost.org", 80u);
}
BOOST_AUTO_TEST_CASE(uri_with_spaces_should_fail) {
test_suite::uri_with_spaces_should_fail(
boost::network::uri::uri("http://www.boost.org /"));
test_suite::uri_with_spaces_should_fail(
boost::network::uri::wuri(L"http://www.boost.org /"));
}
BOOST_AUTO_TEST_CASE(http_with_invalid_host_should_fail) {
test_suite::http_with_invalid_host_should_fail(
boost::network::uri::http::uri("http://www-.boost.org/"));
}
BOOST_AUTO_TEST_CASE(http_with_invalid_scheme_should_fail) {
boost::network::uri::http::uri uri("ftp://ftp.boost.org/");
BOOST_CHECK(!valid(uri));
}