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

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

Issue 2482983003: Reland: [ios] Refactored back-forward navigation in CRWSessionController. (Closed)
Patch Set: Fix Created 4 years, 1 month 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 b418e00abc4b14c294ec905607e14d14d0af9950..8f57fbc577bf0b46fc9e988181ece22b32567dce 100644
--- a/ios/web/navigation/crw_session_controller_unittest.mm
+++ b/ios/web/navigation/crw_session_controller_unittest.mm
@@ -374,6 +374,7 @@ TEST_F(CRWSessionControllerTest, GoBackWithSingleCommitedEntry) {
[session_controller_ currentEntry]);
}
+// Tests going back from the second and last entry to the first one.
TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
[session_controller_
addPendingEntry:GURL("http://www.url.com")
@@ -390,7 +391,7 @@ TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
[session_controller_ goBack];
- EXPECT_EQ(2U, [[session_controller_ entries] count]);
+ ASSERT_EQ(2U, [[session_controller_ entries] count]);
EXPECT_EQ(
GURL("http://www.url.com/"),
[session_controller_ URLForSessionAtIndex:0U]);
@@ -400,8 +401,11 @@ TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:0U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
+ [session_controller_ previousEntry]);
}
+// Tests going back twice from the second and last entry to the first one.
TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) {
[session_controller_
addPendingEntry:GURL("http://www.url.com")
@@ -429,6 +433,8 @@ TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:0U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
+ [session_controller_ previousEntry]);
}
TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) {
@@ -476,6 +482,8 @@ TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:1U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:2U],
+ [session_controller_ previousEntry]);
}
TEST_F(CRWSessionControllerTest, GoBackAndRemove) {
@@ -530,6 +538,8 @@ TEST_F(CRWSessionControllerTest, GoForwardWithSingleCommitedEntry) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:0U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:0U],
+ [session_controller_ currentEntry]);
}
TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) {
@@ -558,6 +568,8 @@ TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:1U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
+ [session_controller_ currentEntry]);
}
TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) {
@@ -587,6 +599,8 @@ TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:1U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:0U],
+ [session_controller_ previousEntry]);
}
TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) {
@@ -635,10 +649,114 @@ TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) {
EXPECT_EQ(
[[session_controller_ entries] objectAtIndex:2U],
[session_controller_ currentEntry]);
+ EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
+ [session_controller_ previousEntry]);
+}
+
+// Tests going delta, including out of range cases.
+TEST_F(CRWSessionControllerTest, GoDelta) {
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
+ referrer:MakeReferrer("http://www.example.com/a")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
+ referrer:MakeReferrer("http://www.example.com/r")
+ transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
+ referrer:MakeReferrer("http://www.example.com/b")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
+ referrer:MakeReferrer("http://www.example.com/c")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
+ referrer:MakeReferrer("http://www.example.com/r")
+ transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
+ NSArray* entries = [session_controller_ entries];
+ ASSERT_EQ(5U, entries.count);
+
+ // Try going forward, which should not be possible.
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
+ [session_controller_ goDelta:1];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
+
+ // Try going back 3 entries, which should not be possible as there are only 2
+ // non-redirect entries.
+ EXPECT_FALSE([session_controller_ canGoDelta:-3]);
+ [session_controller_ goDelta:-3];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
+ [session_controller_ goToEntry:entries[4]];
+
+ // Go back 2 entries.
+ EXPECT_TRUE([session_controller_ canGoDelta:-2]);
+ [session_controller_ goDelta:-2];
+ ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
+
+ // Try going back 1 entry which should not be possible, because back entry had
+ // redirect response.
+ EXPECT_FALSE([session_controller_ canGoDelta:-1]);
+ [session_controller_ goDelta:-1];
+ ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
+
+ // Try going forward 3 entries which should not be possible, because there are
+ // only 2 non-redirect entries in forward entries.
+ EXPECT_FALSE([session_controller_ canGoDelta:3]);
+ [session_controller_ goDelta:3];
+ ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
+ [session_controller_ goToEntry:entries[1]];
+
+ // Go forward 2 entries.
+ EXPECT_TRUE([session_controller_ canGoDelta:2]);
+ [session_controller_ goDelta:2];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(1, [session_controller_ previousNavigationIndex]);
+
+ // Now add a transient entry and go back 2 entries.
+ [session_controller_ addTransientEntryWithURL:GURL("http://www.example.com")];
+ EXPECT_TRUE([session_controller_ canGoDelta:-2]);
+ [session_controller_ goDelta:-2];
+ ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
+
+ // Try going back 2 entries which should not be possible, because there is
+ // only one non-redirect back entry.
+ EXPECT_FALSE([session_controller_ canGoDelta:-2]);
+ [session_controller_ goDelta:-2];
+ ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
+ [session_controller_ goToEntry:entries[2]];
+
+ // Go back 1 entry.
+ EXPECT_TRUE([session_controller_ canGoDelta:-1]);
+ [session_controller_ goDelta:-1];
+ ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(2, [session_controller_ previousNavigationIndex]);
+
+ // Go forward 1 entry.
+ EXPECT_TRUE([session_controller_ canGoDelta:1]);
+ [session_controller_ goDelta:1];
+ ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(1, [session_controller_ previousNavigationIndex]);
}
TEST_F(CRWSessionControllerTest, CanGoBackWithoutCommitedEntry) {
EXPECT_FALSE([session_controller_ canGoBack]);
+ EXPECT_FALSE([session_controller_ canGoDelta:-1]);
}
// Tests that |canGoBack| returns NO if there is a transient entry, but no
@@ -671,6 +789,7 @@ TEST_F(CRWSessionControllerTest, CanGoBackWithSingleCommitedEntry) {
[session_controller_ commitPendingEntry];
EXPECT_FALSE([session_controller_ canGoBack]);
+ EXPECT_FALSE([session_controller_ canGoDelta:-1]);
}
TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) {
@@ -694,22 +813,51 @@ TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) {
[session_controller_ commitPendingEntry];
EXPECT_TRUE([session_controller_ canGoBack]);
+ EXPECT_TRUE([session_controller_ canGoDelta:-1]);
[session_controller_ goBack];
EXPECT_TRUE([session_controller_ canGoBack]);
+ EXPECT_TRUE([session_controller_ canGoDelta:-1]);
[session_controller_ goBack];
EXPECT_FALSE([session_controller_ canGoBack]);
+ EXPECT_FALSE([session_controller_ canGoDelta:-1]);
[session_controller_ goBack];
EXPECT_FALSE([session_controller_ canGoBack]);
+ EXPECT_FALSE([session_controller_ canGoDelta:-1]);
[session_controller_ goForward];
EXPECT_TRUE([session_controller_ canGoBack]);
+ EXPECT_TRUE([session_controller_ canGoDelta:-1]);
+}
+
+// Tests that going forward is not possible if there is a pending entry.
+TEST_F(CRWSessionControllerTest, CanGoForwardWithPendingEntry) {
+ [session_controller_ addPendingEntry:GURL("http://www.url.com")
+ referrer:MakeReferrer("http://www.referer.com")
+ transition:ui::PAGE_TRANSITION_TYPED
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.url1.com")
+ referrer:MakeReferrer("http://www.referer.com")
+ transition:ui::PAGE_TRANSITION_TYPED
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ goBack];
+ [session_controller_ addPendingEntry:GURL("http://www.url2.com")
+ referrer:MakeReferrer("http://www.referer.com")
+ transition:ui::PAGE_TRANSITION_TYPED
+ rendererInitiated:NO];
+
+ // Pending entry should not allow going forward.
+ EXPECT_FALSE([session_controller_ canGoForward]);
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
}
TEST_F(CRWSessionControllerTest, CanGoForwardWithoutCommitedEntry) {
EXPECT_FALSE([session_controller_ canGoForward]);
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
}
TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) {
@@ -721,6 +869,7 @@ TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) {
[session_controller_ commitPendingEntry];
EXPECT_FALSE([session_controller_ canGoForward]);
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
}
TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) {
@@ -744,18 +893,23 @@ TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) {
[session_controller_ commitPendingEntry];
EXPECT_FALSE([session_controller_ canGoForward]);
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
[session_controller_ goBack];
EXPECT_TRUE([session_controller_ canGoForward]);
+ EXPECT_TRUE([session_controller_ canGoDelta:1]);
[session_controller_ goBack];
EXPECT_TRUE([session_controller_ canGoForward]);
+ EXPECT_TRUE([session_controller_ canGoDelta:1]);
[session_controller_ goForward];
EXPECT_TRUE([session_controller_ canGoForward]);
+ EXPECT_TRUE([session_controller_ canGoDelta:1]);
[session_controller_ goForward];
EXPECT_FALSE([session_controller_ canGoForward]);
+ EXPECT_FALSE([session_controller_ canGoDelta:1]);
}
// Helper to create a NavigationItem. Caller is responsible for freeing
@@ -1054,4 +1208,73 @@ TEST_F(CRWSessionControllerTest, GoToEntry) {
EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
}
+// Tests -[CRWSessionController indexOfEntryForDelta:] API for positive,
+// negative and zero delta. Tested session controller will have redirect entries
+// to make sure they are appropriately skipped.
+TEST_F(CRWSessionControllerTest, IndexOfEntryForDelta) {
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
+ referrer:MakeReferrer("http://www.example.com/a")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
+ referrer:MakeReferrer("http://www.example.com/r")
+ transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
+ referrer:MakeReferrer("http://www.example.com/b")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
+ referrer:MakeReferrer("http://www.example.com/c")
+ transition:ui::PAGE_TRANSITION_LINK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
+ referrer:MakeReferrer("http://www.example.com/r")
+ transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
+ rendererInitiated:NO];
+ [session_controller_ commitPendingEntry];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ ASSERT_EQ(5U, [[session_controller_ entries] count]);
+
+ // Go to entry at index 1 and test API from that state.
+ NSArray* entries = [session_controller_ entries];
+ [session_controller_ goToEntry:entries[1]];
+ ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
+ EXPECT_EQ(-1, [session_controller_ indexOfEntryForDelta:-1]);
+ EXPECT_EQ(-2, [session_controller_ indexOfEntryForDelta:-2]);
+ EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:1]);
+ EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:2]);
+ EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:3]);
+
+ // Go to entry at index 2 and test API from that state.
+ [session_controller_ goToEntry:entries[2]];
+ ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
+ EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-1]);
+ EXPECT_EQ(-1, [session_controller_ indexOfEntryForDelta:-2]);
+ EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:1]);
+ EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:2]);
+
+ // Go to entry at index 4 and test API from that state.
+ [session_controller_ goToEntry:entries[4]];
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:-1]);
+ EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-2]);
+ EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:1]);
+ EXPECT_EQ(6, [session_controller_ indexOfEntryForDelta:2]);
+
+ // Now try with existing transient entry.
+ [session_controller_ addTransientEntryWithURL:GURL("http://www.example.com")];
+ ASSERT_EQ(5U, [[session_controller_ entries] count]);
+ ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
+ EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:-1]);
+ EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:-2]);
+ EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-3]);
+ EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:1]);
+ EXPECT_EQ(6, [session_controller_ indexOfEntryForDelta:2]);
+}
+
} // anonymous namespace
« ios/web/navigation/crw_session_controller.mm ('K') | « ios/web/navigation/crw_session_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698