Index: ios/web/navigation/navigation_manager_impl_unittest.mm |
diff --git a/ios/web/navigation/navigation_manager_impl_unittest.mm b/ios/web/navigation/navigation_manager_impl_unittest.mm |
index 011699ef33db300b9c939813e9cc4f7bd0c63340..c91c356ea8c4d846237b9a1e7efa02703c3726a5 100644 |
--- a/ios/web/navigation/navigation_manager_impl_unittest.mm |
+++ b/ios/web/navigation/navigation_manager_impl_unittest.mm |
@@ -459,11 +459,13 @@ TEST_F(NavigationManagerTest, OffsetsWithoutPendingIndex) { |
EXPECT_EQ(-999999998, navigation_manager()->GetIndexForOffset(-1000000000)); |
EXPECT_EQ(1000000004, navigation_manager()->GetIndexForOffset(1000000000)); |
- // Test with existing transient entry. |
+ // Test with existing transient entry in the end of the stack. |
+ [session_controller() goToEntryAtIndex:4]; |
+ [session_controller() setPendingEntryIndex:-1]; |
[session_controller() addTransientEntryWithURL:GURL("http://www.url.com")]; |
ASSERT_EQ(5, navigation_manager()->GetItemCount()); |
- ASSERT_EQ(1, navigation_manager()->GetCurrentItemIndex()); |
- ASSERT_EQ(4, navigation_manager()->GetPendingItemIndex()); |
+ ASSERT_EQ(4, navigation_manager()->GetCurrentItemIndex()); |
+ ASSERT_EQ(-1, navigation_manager()->GetPendingItemIndex()); |
EXPECT_TRUE(navigation_manager()->CanGoToOffset(-1)); |
EXPECT_EQ(4, navigation_manager()->GetIndexForOffset(-1)); |
EXPECT_TRUE(navigation_manager()->CanGoToOffset(-2)); |
@@ -485,4 +487,45 @@ TEST_F(NavigationManagerTest, OffsetsWithoutPendingIndex) { |
EXPECT_EQ(1000000004, navigation_manager()->GetIndexForOffset(1000000000)); |
} |
+// Tests offsets with pending transient entries (specifically gong back and |
+// forward from a pending navigation entry that is added to the middle of the |
+// navigation stack). |
+TEST_F(NavigationManagerTest, OffsetsWithPendingTransientEntry) { |
+ // Create a transient item in the middle of the navigation stack and go back |
+ // to it (pending index is 1, current index is 2). |
+ [session_controller() addPendingEntry:GURL("http://www.url.com/0") |
+ referrer:Referrer() |
+ transition:ui::PAGE_TRANSITION_LINK |
+ rendererInitiated:NO]; |
+ [session_controller() commitPendingEntry]; |
+ [session_controller() addPendingEntry:GURL("http://www.url.com/1") |
+ referrer:Referrer() |
+ transition:ui::PAGE_TRANSITION_LINK |
+ rendererInitiated:NO]; |
+ [session_controller() commitPendingEntry]; |
+ [session_controller() addPendingEntry:GURL("http://www.url.com/2") |
+ referrer:Referrer() |
+ transition:ui::PAGE_TRANSITION_LINK |
+ rendererInitiated:NO]; |
+ [session_controller() commitPendingEntry]; |
+ [session_controller() addTransientEntryWithURL:GURL("http://www.url.com/1")]; |
+ [session_controller() setPendingEntryIndex:1]; |
+ |
+ ASSERT_EQ(3, navigation_manager()->GetItemCount()); |
+ ASSERT_EQ(2, navigation_manager()->GetCurrentItemIndex()); |
+ ASSERT_EQ(1, navigation_manager()->GetPendingItemIndex()); |
+ EXPECT_EQ(2, navigation_manager()->GetIndexForOffset(1)); |
+ EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); |
+ |
+ // Now go forward to that middle transient item (pending index is 1, |
+ // current index is 0). |
+ [session_controller() goToEntryAtIndex:0]; |
+ [session_controller() setPendingEntryIndex:1]; |
+ ASSERT_EQ(3, navigation_manager()->GetItemCount()); |
+ ASSERT_EQ(0, navigation_manager()->GetCurrentItemIndex()); |
+ ASSERT_EQ(1, navigation_manager()->GetPendingItemIndex()); |
+ EXPECT_EQ(2, navigation_manager()->GetIndexForOffset(1)); |
+ EXPECT_EQ(0, navigation_manager()->GetIndexForOffset(-1)); |
+} |
+ |
} // namespace web |