From 90ab5bc2a486f1b859ef3023755546bd2bf58f9e Mon Sep 17 00:00:00 2001 From: nico159 Date: Sat, 18 May 2013 22:20:10 +0200 Subject: [PATCH 1/4] Fix swap and equals methods of http::request --- http/src/network/protocol/http/request/request.hpp | 5 ++--- http/src/network/protocol/http/request/request.ipp | 9 +++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/http/src/network/protocol/http/request/request.hpp b/http/src/network/protocol/http/request/request.hpp index 6e0ed0aeb..6f7f492dd 100644 --- a/http/src/network/protocol/http/request/request.hpp +++ b/http/src/network/protocol/http/request/request.hpp @@ -30,9 +30,8 @@ struct request : request_base { request(request const&); request& operator=(request); - // Then we lift the swap and equals implementation. - using request_base::swap; - using request_base::equals; + virtual void swap(request& other); + virtual bool equals(request const& other) const; // From message_base... // Mutators diff --git a/http/src/network/protocol/http/request/request.ipp b/http/src/network/protocol/http/request/request.ipp index f9cf74c6c..4d6de0c1c 100644 --- a/http/src/network/protocol/http/request/request.ipp +++ b/http/src/network/protocol/http/request/request.ipp @@ -161,6 +161,15 @@ request& request::operator=(request rhs) { return *this; } +void request::swap(request& other ) { + std::swap(pimpl_, other.pimpl_); + request_storage_base::swap(other); +} + +bool request::equals(request const& other) const { + return pimpl_->equals(*other.pimpl_) && request_storage_base::equals(other); +} + // From message_base... // Mutators void request::set_destination(std::string const& destination) { From dddc187d5dd252f7b1dae24aec79cffc17aebe51 Mon Sep 17 00:00:00 2001 From: nico159 Date: Sat, 18 May 2013 22:29:39 +0200 Subject: [PATCH 2/4] Add unit test for http::request::swap --- http/test/request_test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/http/test/request_test.cpp b/http/test/request_test.cpp index 40cdf6077..280fef86b 100644 --- a/http/test/request_test.cpp +++ b/http/test/request_test.cpp @@ -19,6 +19,21 @@ TEST(message_test, request_construction) { http::request other(request); } +TEST(message_test, request_swap) { + network::uri tmp_uri; + network::uri request_uri("http://www.google.com/"); + network::uri other_uri("http://www.google.it/"); + http::request request(request_uri); + http::request other(other_uri); + + request.swap(other); + + request.get_uri(tmp_uri); + ASSERT_EQ(tmp_uri, other_uri); + other.get_uri(tmp_uri); + ASSERT_EQ(tmp_uri, request_uri); +} + TEST(message_test, request_value_semantics) { // First let's default construct a request. http::request original; From d43fddfd1f595dc7393b7786356d7d79e98d8c45 Mon Sep 17 00:00:00 2001 From: nico159 Date: Mon, 20 May 2013 18:23:53 +0200 Subject: [PATCH 3/4] Fix request_base_test Don't use incorretly the string's substring constructor --- http/test/request_base_test.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/http/test/request_base_test.cpp b/http/test/request_base_test.cpp index 4af6125bf..fced4c39d 100644 --- a/http/test/request_base_test.cpp +++ b/http/test/request_base_test.cpp @@ -42,8 +42,8 @@ TEST(request_test, request_storage_flow) { ASSERT_EQ(bytes_read, sizeof(data)); std::string flattened; simple.flatten(flattened); - ASSERT_EQ(flattened, std::string(output, sizeof(data))); - ASSERT_EQ(std::string(data, sizeof(data)), std::string(output, sizeof(data))); + ASSERT_EQ(flattened, output); + ASSERT_EQ(std::string(data, sizeof(data)), output); simple.clear(); } @@ -58,9 +58,8 @@ TEST(request_test, request_storage_copy) { ASSERT_EQ(bytes_read, sizeof(quick_brown)); std::string flattened; copy.flatten(flattened); - ASSERT_EQ(flattened, std::string(output, sizeof(quick_brown))); - ASSERT_EQ(std::string(quick_brown, sizeof(quick_brown)), - std::string(output, sizeof(quick_brown))); + ASSERT_EQ(flattened, output); + ASSERT_EQ(std::string(quick_brown, sizeof(quick_brown)), output); copy.clear(); flattened.clear(); original.flatten(flattened); From b22777505c321ea59103e41510203956a9986258 Mon Sep 17 00:00:00 2001 From: nico159 Date: Wed, 22 May 2013 17:58:34 +0200 Subject: [PATCH 4/4] Fix request::swap coding style --- http/src/network/protocol/http/request/request.ipp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/http/src/network/protocol/http/request/request.ipp b/http/src/network/protocol/http/request/request.ipp index 4d6de0c1c..6abc1ecfc 100644 --- a/http/src/network/protocol/http/request/request.ipp +++ b/http/src/network/protocol/http/request/request.ipp @@ -162,7 +162,8 @@ request& request::operator=(request rhs) { } void request::swap(request& other ) { - std::swap(pimpl_, other.pimpl_); + using std::swap; + swap(pimpl_, other.pimpl_); request_storage_base::swap(other); }