Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Unified Diff: ios/web/navigation/crw_session_controller_unittest.mm

Issue 2745873002: Created NavigationManager::CopyStateFromAndPrune(). (Closed)
Patch Set: Added no-op tests, addressed Eugene's comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/web/navigation/crw_session_controller_unittest.mm
diff --git a/ios/web/navigation/crw_session_controller_unittest.mm b/ios/web/navigation/crw_session_controller_unittest.mm
index 7c7d017788ad1598d5cdca3fba267d1c5bf536d0..087aa4b0cb56e4dd90b07002b702cbaf8c292a1d 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -473,7 +473,7 @@ void SetUp() override {
}
// Tests inserting session controller state.
-TEST_F(CRWSessionControllerTest, InsertState) {
+TEST_F(CRWSessionControllerTest, CopyState) {
// Add 1 committed and 1 pending item to target controller.
[session_controller_
addPendingItem:GURL("http://www.url.com/2")
@@ -504,8 +504,9 @@ void SetUp() override {
initiationType:web::NavigationInitiationType::USER_INITIATED];
// Insert and verify the state of target session controller.
+ EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]);
[session_controller_
- insertStateFromSessionController:other_session_controller.get()];
+ copyStateFromSessionControllerAndPrune:other_session_controller.get()];
EXPECT_EQ(2U, [session_controller_ items].size());
EXPECT_EQ(1, [session_controller_ currentNavigationIndex]);
@@ -521,7 +522,7 @@ void SetUp() override {
}
// Tests inserting session controller state from empty session controller.
-TEST_F(CRWSessionControllerTest, InsertStateFromEmptySessionController) {
+TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) {
// Add 2 committed items to target controller.
[session_controller_
addPendingItem:GURL("http://www.url.com/0")
@@ -542,8 +543,9 @@ void SetUp() override {
openedByDOM:NO]);
// Insert and verify the state of target session controller.
+ EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]);
[session_controller_
- insertStateFromSessionController:other_session_controller.get()];
+ copyStateFromSessionControllerAndPrune:other_session_controller.get()];
EXPECT_EQ(2U, [session_controller_ items].size());
EXPECT_EQ(1, [session_controller_ currentNavigationIndex]);
EXPECT_EQ(0, [session_controller_ previousNavigationIndex]);
@@ -555,10 +557,12 @@ void SetUp() override {
[session_controller_ URLForItemAtIndex:1]);
}
-// Tests inserting session controller state to empty session controller.
-TEST_F(CRWSessionControllerTest, InsertStateToEmptySessionController) {
- // Create source session controller with 2 committed items and one
- // pending item.
+// Tests that |-copyStateFromSessionControllerAndPrune:| is a no-op when the
+// receiver has no last committed item.
+TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) {
+ EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]);
+
+ // Create source session controller with 1 committed item.
base::scoped_nsobject<CRWSessionController> other_session_controller(
[[CRWSessionController alloc] initWithBrowserState:&browser_state_
openedByDOM:NO]);
@@ -573,46 +577,86 @@ void SetUp() override {
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
+
+ // Attempt to copy |other_session_controller|'s state and verify that
+ // |session_controller_| is unchanged.
+ [session_controller_
+ copyStateFromSessionControllerAndPrune:other_session_controller];
+ EXPECT_TRUE([session_controller_ items].empty());
+ EXPECT_EQ(-1, [session_controller_ currentNavigationIndex]);
+ EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]);
+ EXPECT_FALSE([session_controller_ currentItem]);
+ EXPECT_FALSE([session_controller_ pendingItem]);
+ EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
+}
+
+// Tests that |-copyStateFromSessionControllerAndPrune:| is a no-op during a
+// pending history navigation.
+TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) {
+ // Add 1 committed and 1 pending item to target controller.
+ [session_controller_
+ addPendingItem:GURL("http://www.url.com/1")
+ referrer:web::Referrer()
+ transition:ui::PAGE_TRANSITION_TYPED
+ initiationType:web::NavigationInitiationType::USER_INITIATED];
+ [session_controller_ commitPendingItem];
+ [session_controller_
+ addPendingItem:GURL("http://www.url.com/2")
+ referrer:web::Referrer()
+ transition:ui::PAGE_TRANSITION_TYPED
+ initiationType:web::NavigationInitiationType::USER_INITIATED];
+ [session_controller_ commitPendingItem];
+
+ // Create source session controller with 1 committed item.
+ base::scoped_nsobject<CRWSessionController> other_session_controller(
+ [[CRWSessionController alloc] initWithBrowserState:&browser_state_
+ openedByDOM:NO]);
+ [other_session_controller
+ addPendingItem:GURL("http://www.url.com/0")
+ referrer:web::Referrer()
+ transition:ui::PAGE_TRANSITION_TYPED
+ initiationType:web::NavigationInitiationType::USER_INITIATED];
[other_session_controller commitPendingItem];
[other_session_controller
- addPendingItem:GURL("http://www.url.com/2")
+ addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
- // Insert and verify the state of target session controller.
- [session_controller_
- insertStateFromSessionController:other_session_controller.get()];
+ // Set the pending item index to the first item.
+ [session_controller_ setPendingItemIndex:0];
+ EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]);
+ // Attempt to copy |other_session_controller|'s state and verify that
+ // |session_controller_| is unchanged.
+ [session_controller_
+ copyStateFromSessionControllerAndPrune:other_session_controller];
EXPECT_EQ(2U, [session_controller_ items].size());
EXPECT_EQ(1, [session_controller_ currentNavigationIndex]);
- EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]);
- EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
- EXPECT_FALSE([session_controller_ pendingItem]);
- EXPECT_EQ(GURL("http://www.url.com/0"),
- [session_controller_ URLForItemAtIndex:0]);
- EXPECT_EQ(GURL("http://www.url.com/1"),
- [session_controller_ URLForItemAtIndex:1]);
+ EXPECT_EQ(0, [session_controller_ previousNavigationIndex]);
+ EXPECT_EQ(0, [session_controller_ pendingItemIndex]);
+ EXPECT_TRUE([session_controller_ pendingItem]);
+ EXPECT_EQ([session_controller_ previousItem],
+ [session_controller_ pendingItem]);
}
-// Tests inserting session controller state. Verifies that pending item index
-// remains valid.
-TEST_F(CRWSessionControllerTest,
- InsertStateWithPendingItemIndexInTargetController) {
- // Add 2 committed items and make the first item pending.
+// Tests that |-copyStateFromSessionControllerAndPrune:| is a when a transient
+// NavigationItem exists.
+TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) {
+ // Add 1 committed and 1 pending item to target controller.
[session_controller_
- addPendingItem:GURL("http://www.url.com/2")
+ addPendingItem:GURL("http://www.url.com/1")
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
[session_controller_ commitPendingItem];
+ GURL second_url = GURL("http://www.url.com/2");
[session_controller_
- addPendingItem:GURL("http://www.url.com/3")
+ addPendingItem:second_url
referrer:web::Referrer()
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
- [session_controller_ commitPendingItem];
- [session_controller_ setPendingItemIndex:0];
+ [session_controller_ addTransientItemWithURL:second_url];
// Create source session controller with 1 committed item.
base::scoped_nsobject<CRWSessionController> other_session_controller(
@@ -624,21 +668,25 @@ void SetUp() override {
transition:ui::PAGE_TRANSITION_TYPED
initiationType:web::NavigationInitiationType::USER_INITIATED];
[other_session_controller commitPendingItem];
+ [other_session_controller
+ addPendingItem:GURL("http://www.url.com/1")
+ referrer:web::Referrer()
+ transition:ui::PAGE_TRANSITION_TYPED
+ initiationType:web::NavigationInitiationType::USER_INITIATED];
- // Insert and verify the state of target session controller.
+ // Attempt to copy |other_session_controller|'s state and verify that
+ // |session_controller_| is unchanged.
+ EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]);
[session_controller_
- insertStateFromSessionController:other_session_controller.get()];
-
- EXPECT_EQ(3U, [session_controller_ items].size());
- EXPECT_EQ(2, [session_controller_ currentNavigationIndex]);
+ copyStateFromSessionControllerAndPrune:other_session_controller];
+ EXPECT_EQ(1U, [session_controller_ items].size());
+ EXPECT_EQ(0, [session_controller_ currentNavigationIndex]);
EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]);
- EXPECT_EQ(1, [session_controller_ pendingItemIndex]);
- EXPECT_EQ(GURL("http://www.url.com/0"),
- [session_controller_ URLForItemAtIndex:0]);
- EXPECT_EQ(GURL("http://www.url.com/2"),
- [session_controller_ URLForItemAtIndex:1]);
- EXPECT_EQ(GURL("http://www.url.com/2"),
- [session_controller_ pendingItem]->GetURL());
+ EXPECT_EQ(-1, [session_controller_ pendingItemIndex]);
+ EXPECT_TRUE([session_controller_ pendingItem]);
+ EXPECT_TRUE([session_controller_ transientItem]);
+ EXPECT_EQ([session_controller_ transientItem],
+ [session_controller_ currentItem]);
}
// Tests state of an empty session controller.

Powered by Google App Engine
This is Rietveld 408576698