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

Unified Diff: ios/shared/chrome/browser/tabs/web_state_list_unittest.mm

Issue 2697193004: Add opener-opened relationship between WebState in WebStateList. (Closed)
Patch Set: Fix copy-n-paste error. Created 3 years, 10 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
« no previous file with comments | « ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper_unittest.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/shared/chrome/browser/tabs/web_state_list_unittest.mm
diff --git a/ios/shared/chrome/browser/tabs/web_state_list_unittest.mm b/ios/shared/chrome/browser/tabs/web_state_list_unittest.mm
index 1c0ed211d1910e4f790bee4090331cde12c92b90..2ed665fea82701deb6f1783e3548b1925759cd27 100644
--- a/ios/shared/chrome/browser/tabs/web_state_list_unittest.mm
+++ b/ios/shared/chrome/browser/tabs/web_state_list_unittest.mm
@@ -8,6 +8,7 @@
#include "base/memory/ptr_util.h"
#include "base/supports_user_data.h"
#import "ios/shared/chrome/browser/tabs/web_state_list_observer.h"
+#import "ios/web/public/test/fakes/test_navigation_manager.h"
#import "ios/web/public/test/fakes/test_web_state.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
@@ -97,6 +98,39 @@ class WebStateListTestObserver : public WebStateListObserver {
DISALLOW_COPY_AND_ASSIGN(WebStateListTestObserver);
};
+
+// A fake NavigationManager used to test opener-opened relationship in the
+// WebStateList.
+class FakeNavigationManer : public web::TestNavigationManager {
Eugene But (OOO till 7-30) 2017/04/10 21:30:59 Do you want to use existing fake from ios/web/publ
Eugene But (OOO till 7-30) 2017/04/10 21:48:05 Sorry, what I was trying to ask here is: "Do you w
+ public:
+ FakeNavigationManer() = default;
+
+ // web::NavigationManager implementation.
+ int GetCurrentItemIndex() const override { return current_item_index_; }
+
+ int GetLastCommittedItemIndex() const override { return current_item_index_; }
+
+ bool CanGoBack() const override { return current_item_index_ > 0; }
+
+ bool CanGoForward() const override { return current_item_index_ < INT_MAX; }
+
+ void GoBack() override {
+ DCHECK(CanGoBack());
+ --current_item_index_;
+ }
+
+ void GoForward() override {
+ DCHECK(CanGoForward());
+ ++current_item_index_;
+ }
+
+ void GoToIndex(int index) override { current_item_index_ = index; }
+
+ int current_item_index_ = 0;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeNavigationManer);
+};
+
} // namespace
class WebStateListTest : public PlatformTest {
@@ -117,6 +151,8 @@ class WebStateListTest : public PlatformTest {
web::WebState* CreateWebState(const char* url) {
auto test_web_state = base::MakeUnique<web::TestWebState>();
test_web_state->SetCurrentURL(GURL(url));
+ test_web_state->SetNavigationManager(
+ base::MakeUnique<FakeNavigationManer>());
return test_web_state.release();
}
@@ -128,7 +164,7 @@ TEST_F(WebStateListTest, IsEmpty) {
EXPECT_EQ(0, web_state_list_.count());
EXPECT_TRUE(web_state_list_.empty());
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
EXPECT_TRUE(observer_.web_state_inserted_called());
EXPECT_EQ(1, web_state_list_.count());
@@ -136,7 +172,7 @@ TEST_F(WebStateListTest, IsEmpty) {
}
TEST_F(WebStateListTest, InsertUrlSingle) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
EXPECT_TRUE(observer_.web_state_inserted_called());
EXPECT_EQ(1, web_state_list_.count());
@@ -144,9 +180,9 @@ TEST_F(WebStateListTest, InsertUrlSingle) {
}
TEST_F(WebStateListTest, InsertUrlMultiple) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(0, CreateWebState(kURL1));
- web_state_list_.InsertWebState(1, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(0, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL2), nullptr);
EXPECT_TRUE(observer_.web_state_inserted_called());
EXPECT_EQ(3, web_state_list_.count());
@@ -156,9 +192,9 @@ TEST_F(WebStateListTest, InsertUrlMultiple) {
}
TEST_F(WebStateListTest, MoveWebStateAtRightByOne) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -177,9 +213,9 @@ TEST_F(WebStateListTest, MoveWebStateAtRightByOne) {
}
TEST_F(WebStateListTest, MoveWebStateAtRightByMoreThanOne) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -198,9 +234,9 @@ TEST_F(WebStateListTest, MoveWebStateAtRightByMoreThanOne) {
}
TEST_F(WebStateListTest, MoveWebStateAtLeftByOne) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -219,9 +255,9 @@ TEST_F(WebStateListTest, MoveWebStateAtLeftByOne) {
}
TEST_F(WebStateListTest, MoveWebStateAtLeftByMoreThanOne) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -240,9 +276,9 @@ TEST_F(WebStateListTest, MoveWebStateAtLeftByMoreThanOne) {
}
TEST_F(WebStateListTest, MoveWebStateAtSameIndex) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -261,8 +297,8 @@ TEST_F(WebStateListTest, MoveWebStateAtSameIndex) {
}
TEST_F(WebStateListTest, ReplaceWebStateAt) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
// Sanity check before replacing WebState.
EXPECT_EQ(2, web_state_list_.count());
@@ -271,7 +307,7 @@ TEST_F(WebStateListTest, ReplaceWebStateAt) {
observer_.ResetStatistics();
std::unique_ptr<web::WebState> old_web_state(
- web_state_list_.ReplaceWebStateAt(1, CreateWebState(kURL2)));
+ web_state_list_.ReplaceWebStateAt(1, CreateWebState(kURL2), nullptr));
EXPECT_TRUE(observer_.web_state_replaced_called());
EXPECT_EQ(2, web_state_list_.count());
@@ -281,9 +317,9 @@ TEST_F(WebStateListTest, ReplaceWebStateAt) {
}
TEST_F(WebStateListTest, DetachWebStateAtIndexBegining) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -301,9 +337,9 @@ TEST_F(WebStateListTest, DetachWebStateAtIndexBegining) {
}
TEST_F(WebStateListTest, DetachWebStateAtIndexMiddle) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -321,9 +357,9 @@ TEST_F(WebStateListTest, DetachWebStateAtIndexMiddle) {
}
TEST_F(WebStateListTest, DetachWebStateAtIndexLast) {
- web_state_list_.InsertWebState(0, CreateWebState(kURL0));
- web_state_list_.InsertWebState(1, CreateWebState(kURL1));
- web_state_list_.InsertWebState(2, CreateWebState(kURL2));
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
// Sanity check before closing WebState.
EXPECT_EQ(3, web_state_list_.count());
@@ -349,7 +385,7 @@ TEST_F(WebStateListTest, OwnershipBorrowed) {
auto web_state_list =
base::MakeUnique<WebStateList>(WebStateList::WebStateBorrowed);
- web_state_list->InsertWebState(0, test_web_state.get());
+ web_state_list->InsertWebState(0, test_web_state.get(), nullptr);
EXPECT_FALSE(web_state_was_killed);
web_state_list.reset();
@@ -365,9 +401,133 @@ TEST_F(WebStateListTest, OwnershipOwned) {
auto web_state_list =
base::MakeUnique<WebStateList>(WebStateList::WebStateOwned);
- web_state_list->InsertWebState(0, test_web_state.release());
+ web_state_list->InsertWebState(0, test_web_state.release(), nullptr);
EXPECT_FALSE(web_state_was_killed);
web_state_list.reset();
EXPECT_TRUE(web_state_was_killed);
}
+
+TEST_F(WebStateListTest, OpenersEmptyList) {
+ EXPECT_TRUE(web_state_list_.empty());
+
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(
+ nullptr, WebStateList::kInvalidIndex, false));
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(
+ nullptr, WebStateList::kInvalidIndex, false));
+
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(
+ nullptr, WebStateList::kInvalidIndex, true));
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(
+ nullptr, WebStateList::kInvalidIndex, true));
+}
+
+TEST_F(WebStateListTest, OpenersNothingOpened) {
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
+
+ for (int index = 0; index < web_state_list_.count(); ++index) {
+ web::WebState* opener = web_state_list_.GetWebStateAt(index);
+ EXPECT_EQ(
+ WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, index, false));
+ EXPECT_EQ(
+ WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, index, false));
+
+ EXPECT_EQ(
+ WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, index, true));
+ EXPECT_EQ(
+ WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, index, true));
+ }
+}
+
+TEST_F(WebStateListTest, OpenersChildsAfterOpener) {
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web::WebState* opener = web_state_list_.GetWebStateAt(0);
+
+ web_state_list_.InsertWebState(1, CreateWebState(kURL1), opener);
+ web_state_list_.InsertWebState(2, CreateWebState(kURL2), opener);
+
+ const int start_index = web_state_list_.GetIndexOfWebState(opener);
+ EXPECT_EQ(1,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ false));
+ EXPECT_EQ(2,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ false));
+
+ EXPECT_EQ(1,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ true));
+ EXPECT_EQ(2,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ true));
+
+ // Simulate a navigation on the opener, results should not change if not
+ // using groups, but should now be kInvalidIndex otherwise.
+ opener->GetNavigationManager()->GoForward();
+
+ EXPECT_EQ(1,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ false));
+ EXPECT_EQ(2,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ false));
+
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ true));
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ true));
+
+ // Add a new WebState with the same opener. It should be considered the next
+ // WebState if groups are considered and the last independently on whether
+ // groups are used or not.
+ web_state_list_.InsertWebState(3, CreateWebState(kURL2), opener);
+
+ EXPECT_EQ(1,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ false));
+ EXPECT_EQ(3,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ false));
+
+ EXPECT_EQ(3,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ true));
+ EXPECT_EQ(3,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ true));
+}
+
+TEST_F(WebStateListTest, OpenersChildsBeforeOpener) {
+ web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
+ web::WebState* opener = web_state_list_.GetWebStateAt(0);
+
+ web_state_list_.InsertWebState(0, CreateWebState(kURL1), opener);
+ web_state_list_.InsertWebState(1, CreateWebState(kURL2), opener);
+
+ const int start_index = web_state_list_.GetIndexOfWebState(opener);
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ false));
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ false));
+
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
+ true));
+ EXPECT_EQ(WebStateList::kInvalidIndex,
+ web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
+ true));
+}
« no previous file with comments | « ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper_unittest.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698