Index: ios/web/navigation/navigation_item_impl_unittest.mm |
diff --git a/ios/web/navigation/navigation_item_impl_unittest.mm b/ios/web/navigation/navigation_item_impl_unittest.mm |
index a326b5c9098f7e3fda03383092ffae94ec9d60d9..0189ea04c3a9be95a75a02c36ce1d1bcdb151e65 100644 |
--- a/ios/web/navigation/navigation_item_impl_unittest.mm |
+++ b/ios/web/navigation/navigation_item_impl_unittest.mm |
@@ -5,6 +5,7 @@ |
#include "base/logging.h" |
#include "base/mac/scoped_nsobject.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/strings/sys_string_conversions.h" |
#include "ios/web/navigation/navigation_item_impl.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/gtest_mac.h" |
@@ -13,10 +14,23 @@ |
namespace web { |
namespace { |
+static NSString* const kHTTPHeaderKey1 = @"key1"; |
+static NSString* const kHTTPHeaderKey2 = @"key2"; |
+static NSString* const kHTTPHeaderValue1 = @"value1"; |
+static NSString* const kHTTPHeaderValue2 = @"value2"; |
+ |
class NavigationItemTest : public PlatformTest { |
protected: |
- void SetUp() override { item_.reset(new NavigationItemImpl()); } |
+ void SetUp() override { |
+ item_.reset(new web::NavigationItemImpl()); |
+ item_->SetURL(GURL("http://init.test")); |
+ item_->SetTransitionType(ui::PAGE_TRANSITION_AUTO_BOOKMARK); |
+ item_->SetTimestamp(base::Time::Now()); |
+ item_->AddHttpRequestHeaders(@{kHTTPHeaderKey1 : kHTTPHeaderValue1}); |
+ item_->SetPostData([@"Test data" dataUsingEncoding:NSUTF8StringEncoding]); |
+ } |
+ // The NavigationItemImpl instance being tested. |
scoped_ptr<NavigationItemImpl> item_; |
}; |
@@ -27,5 +41,71 @@ TEST_F(NavigationItemTest, Dummy) { |
EXPECT_TRUE(item_->GetURL().is_valid()); |
} |
+// Tests that copied NavigationItemImpls create copies of data members that are |
+// objects. |
+TEST_F(NavigationItemTest, Copy) { |
+ // Create objects to be copied. |
+ NSString* postData0 = @"postData0"; |
+ NSMutableData* mutablePostData = |
+ [[postData0 dataUsingEncoding:NSUTF8StringEncoding] mutableCopy]; |
+ item_->SetPostData(mutablePostData); |
+ NSString* state0 = @"state0"; |
+ NSMutableString* mutableState = [state0 mutableCopy]; |
+ item_->SetSerializedStateObject(mutableState); |
+ |
+ // Create copy. |
+ web::NavigationItemImpl copy(*item_.get()); |
+ |
+ // Modify the objects. |
+ NSString* postData1 = @"postData1"; |
+ [mutablePostData setData:[postData1 dataUsingEncoding:NSUTF8StringEncoding]]; |
+ NSString* state1 = @"state1"; |
+ [mutableState setString:state1]; |
+ |
+ // Check that changes occurred in |item_|, but not in |copy|. |
+ EXPECT_NSEQ([postData1 dataUsingEncoding:NSUTF8StringEncoding], |
+ item_->GetPostData()); |
+ EXPECT_NSEQ(state1, item_->GetSerializedStateObject()); |
+ EXPECT_NSEQ([postData0 dataUsingEncoding:NSUTF8StringEncoding], |
+ copy.GetPostData()); |
+ EXPECT_NSEQ(state0, copy.GetSerializedStateObject()); |
+} |
+ |
+// Tests whether |NavigationItem::AddHttpRequestHeaders()| adds the passed |
+// headers to the item's request http headers. |
+TEST_F(NavigationItemTest, AddHttpRequestHeaders) { |
+ EXPECT_NSEQ(@{kHTTPHeaderKey1 : kHTTPHeaderValue1}, |
+ item_->GetHttpRequestHeaders()); |
+ |
+ item_->AddHttpRequestHeaders(@{kHTTPHeaderKey1 : kHTTPHeaderValue2}); |
+ EXPECT_NSEQ(@{kHTTPHeaderKey1 : kHTTPHeaderValue2}, |
+ item_->GetHttpRequestHeaders()); |
+ |
+ item_->AddHttpRequestHeaders(@{kHTTPHeaderKey2 : kHTTPHeaderValue1}); |
+ NSDictionary* expected = @{ |
+ kHTTPHeaderKey1 : kHTTPHeaderValue2, |
+ kHTTPHeaderKey2 : kHTTPHeaderValue1 |
+ }; |
+ EXPECT_NSEQ(expected, item_->GetHttpRequestHeaders()); |
+} |
+ |
+// Tests whether |NavigationItem::AddHttpRequestHeaders()| removes the header |
+// value associated with the passed key from the item's request http headers. |
+TEST_F(NavigationItemTest, RemoveHttpRequestHeaderForKey) { |
+ NSDictionary* httpHeaders = @{ |
+ kHTTPHeaderKey1 : kHTTPHeaderValue1, |
+ kHTTPHeaderKey2 : kHTTPHeaderValue2 |
+ }; |
+ item_->AddHttpRequestHeaders(httpHeaders); |
+ EXPECT_NSEQ(httpHeaders, item_->GetHttpRequestHeaders()); |
+ |
+ item_->RemoveHttpRequestHeaderForKey(kHTTPHeaderKey1); |
+ EXPECT_NSEQ(@{kHTTPHeaderKey2 : kHTTPHeaderValue2}, |
+ item_->GetHttpRequestHeaders()); |
+ |
+ item_->RemoveHttpRequestHeaderForKey(kHTTPHeaderKey2); |
+ EXPECT_FALSE(item_->GetHttpRequestHeaders()); |
+} |
+ |
} // namespace |
} // namespace web |