| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a786270f700803b1e8b7da895dec4de410eb4e05
|
| --- /dev/null
|
| +++ b/ios/shared/chrome/browser/tabs/web_state_list_unittest.mm
|
| @@ -0,0 +1,496 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "ios/shared/chrome/browser/tabs/web_state_list.h"
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/supports_user_data.h"
|
| +#import "ios/shared/chrome/browser/tabs/fake_web_state_list_delegate.h"
|
| +#import "ios/shared/chrome/browser/tabs/web_state_list_observer.h"
|
| +#import "ios/shared/chrome/browser/tabs/web_state_opener.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"
|
| +
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| +namespace {
|
| +const char kURL0[] = "https://chromium.org/0";
|
| +const char kURL1[] = "https://chromium.org/1";
|
| +const char kURL2[] = "https://chromium.org/2";
|
| +
|
| +// WebStateList observer that records which events have been called by the
|
| +// WebStateList.
|
| +class WebStateListTestObserver : public WebStateListObserver {
|
| + public:
|
| + WebStateListTestObserver() = default;
|
| +
|
| + // Reset statistics whether events have been called.
|
| + void ResetStatistics() {
|
| + web_state_inserted_called_ = false;
|
| + web_state_moved_called_ = false;
|
| + web_state_replaced_called_ = false;
|
| + web_state_detached_called_ = false;
|
| + }
|
| +
|
| + // Returns whether WebStateInsertedAt was invoked.
|
| + bool web_state_inserted_called() const { return web_state_inserted_called_; }
|
| +
|
| + // Returns whether WebStateMoved was invoked.
|
| + bool web_state_moved_called() const { return web_state_moved_called_; }
|
| +
|
| + // Returns whether WebStateReplacedAt was invoked.
|
| + bool web_state_replaced_called() const { return web_state_replaced_called_; }
|
| +
|
| + // Returns whether WebStateDetachedAt was invoked.
|
| + bool web_state_detached_called() const { return web_state_detached_called_; }
|
| +
|
| + // WebStateListObserver implementation.
|
| + void WebStateInsertedAt(WebStateList* web_state_list,
|
| + web::WebState* web_state,
|
| + int index) override {
|
| + web_state_inserted_called_ = true;
|
| + }
|
| +
|
| + void WebStateMoved(WebStateList* web_state_list,
|
| + web::WebState* web_state,
|
| + int from_index,
|
| + int to_index) override {
|
| + web_state_moved_called_ = true;
|
| + }
|
| +
|
| + void WebStateReplacedAt(WebStateList* web_state_list,
|
| + web::WebState* old_web_state,
|
| + web::WebState* new_web_state,
|
| + int index) override {
|
| + web_state_replaced_called_ = true;
|
| + }
|
| +
|
| + void WebStateDetachedAt(WebStateList* web_state_list,
|
| + web::WebState* web_state,
|
| + int index) override {
|
| + web_state_detached_called_ = true;
|
| + }
|
| +
|
| + private:
|
| + bool web_state_inserted_called_ = false;
|
| + bool web_state_moved_called_ = false;
|
| + bool web_state_replaced_called_ = false;
|
| + bool web_state_detached_called_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WebStateListTestObserver);
|
| +};
|
| +
|
| +// A fake NavigationManager used to test opener-opened relationship in the
|
| +// WebStateList.
|
| +class FakeNavigationManager : public web::TestNavigationManager {
|
| + public:
|
| + FakeNavigationManager() = default;
|
| +
|
| + // web::NavigationManager implementation.
|
| + int GetLastCommittedItemIndex() const override {
|
| + return last_committed_item_index;
|
| + }
|
| +
|
| + bool CanGoBack() const override { return last_committed_item_index > 0; }
|
| +
|
| + bool CanGoForward() const override {
|
| + return last_committed_item_index < INT_MAX;
|
| + }
|
| +
|
| + void GoBack() override {
|
| + DCHECK(CanGoBack());
|
| + --last_committed_item_index;
|
| + }
|
| +
|
| + void GoForward() override {
|
| + DCHECK(CanGoForward());
|
| + ++last_committed_item_index;
|
| + }
|
| +
|
| + void GoToIndex(int index) override { last_committed_item_index = index; }
|
| +
|
| + int last_committed_item_index = 0;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FakeNavigationManager);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class WebStateListTest : public PlatformTest {
|
| + public:
|
| + WebStateListTest() : web_state_list_(&web_state_list_delegate_) {
|
| + web_state_list_.AddObserver(&observer_);
|
| + }
|
| +
|
| + ~WebStateListTest() override { web_state_list_.RemoveObserver(&observer_); }
|
| +
|
| + protected:
|
| + FakeWebStateListDelegate web_state_list_delegate_;
|
| + WebStateList web_state_list_;
|
| + WebStateListTestObserver observer_;
|
| +
|
| + std::unique_ptr<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<FakeNavigationManager>());
|
| + // TODO(crbug.com/703565): remove std::move() once Xcode 9.0+ is required.
|
| + return std::move(test_web_state);
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(WebStateListTest);
|
| +};
|
| +
|
| +TEST_F(WebStateListTest, IsEmpty) {
|
| + EXPECT_EQ(0, web_state_list_.count());
|
| + EXPECT_TRUE(web_state_list_.empty());
|
| +
|
| + web_state_list_.InsertWebState(0, CreateWebState(kURL0));
|
| +
|
| + EXPECT_TRUE(observer_.web_state_inserted_called());
|
| + EXPECT_EQ(1, web_state_list_.count());
|
| + EXPECT_FALSE(web_state_list_.empty());
|
| +}
|
| +
|
| +TEST_F(WebStateListTest, InsertUrlSingle) {
|
| + web_state_list_.InsertWebState(0, CreateWebState(kURL0));
|
| +
|
| + EXPECT_TRUE(observer_.web_state_inserted_called());
|
| + EXPECT_EQ(1, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + EXPECT_TRUE(observer_.web_state_inserted_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.MoveWebStateAt(0, 1);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_moved_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.MoveWebStateAt(0, 2);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_moved_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.MoveWebStateAt(2, 1);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_moved_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.MoveWebStateAt(2, 0);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_moved_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.MoveWebStateAt(2, 2);
|
| +
|
| + EXPECT_FALSE(observer_.web_state_moved_called());
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +TEST_F(WebStateListTest, ReplaceWebStateAt) {
|
| + web_state_list_.InsertWebState(0, CreateWebState(kURL0));
|
| + web_state_list_.InsertWebState(1, CreateWebState(kURL1));
|
| +
|
| + // Sanity check before replacing WebState.
|
| + EXPECT_EQ(2, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + std::unique_ptr<web::WebState> old_web_state(
|
| + web_state_list_.ReplaceWebStateAt(1, CreateWebState(kURL2)));
|
| +
|
| + EXPECT_TRUE(observer_.web_state_replaced_called());
|
| + EXPECT_EQ(2, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, old_web_state->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.DetachWebStateAt(0);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_detached_called());
|
| + EXPECT_EQ(2, web_state_list_.count());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.DetachWebStateAt(1);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_detached_called());
|
| + EXPECT_EQ(2, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| +
|
| + // Sanity check before closing WebState.
|
| + EXPECT_EQ(3, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
|
| +
|
| + observer_.ResetStatistics();
|
| + web_state_list_.DetachWebStateAt(2);
|
| +
|
| + EXPECT_TRUE(observer_.web_state_detached_called());
|
| + EXPECT_EQ(2, web_state_list_.count());
|
| + EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
|
| + EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
|
| +}
|
| +
|
| +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));
|
| + web_state_list_.InsertWebState(1, CreateWebState(kURL1));
|
| + web_state_list_.InsertWebState(2, CreateWebState(kURL2));
|
| +
|
| + 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));
|
| + web::WebState* opener = web_state_list_.GetWebStateAt(0);
|
| +
|
| + web_state_list_.InsertWebState(1, CreateWebState(kURL1));
|
| + web_state_list_.SetOpenerOfWebStateAt(1, WebStateOpener(opener));
|
| +
|
| + web_state_list_.InsertWebState(2, CreateWebState(kURL2));
|
| + web_state_list_.SetOpenerOfWebStateAt(2, WebStateOpener(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));
|
| + web_state_list_.SetOpenerOfWebStateAt(3, WebStateOpener(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));
|
| + web::WebState* opener = web_state_list_.GetWebStateAt(0);
|
| +
|
| + web_state_list_.InsertWebState(0, CreateWebState(kURL1));
|
| + web_state_list_.SetOpenerOfWebStateAt(0, WebStateOpener(opener));
|
| +
|
| + web_state_list_.InsertWebState(1, CreateWebState(kURL2));
|
| + web_state_list_.SetOpenerOfWebStateAt(1, WebStateOpener(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));
|
| +}
|
|
|