blob: 055bc850b01f172b2f141d5866424277ea2a401e [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/main/browser_impl.h"
#import "ios/chrome/browser/shared/model/browser/test/fake_browser_observer.h"
#import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h"
#import "ios/chrome/browser/shared/model/web_state_list/test/fake_web_state_list_delegate.h"
#import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
#import "ios/web/public/test/web_task_environment.h"
#import "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
class BrowserImplTest : public PlatformTest {
protected:
BrowserImplTest() {
TestChromeBrowserState::Builder test_cbs_builder;
chrome_browser_state_ = test_cbs_builder.Build();
}
web::WebTaskEnvironment task_environment_;
std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
};
// Tests that the accessors return the expected values.
TEST_F(BrowserImplTest, TestAccessors) {
BrowserImpl browser(chrome_browser_state_.get());
EXPECT_EQ(chrome_browser_state_.get(), browser.GetBrowserState());
EXPECT_TRUE(browser.GetWebStateList());
EXPECT_TRUE(browser.GetCommandDispatcher());
EXPECT_FALSE(browser.IsInactive());
EXPECT_EQ(browser.GetActiveBrowser(), &browser);
EXPECT_EQ(browser.GetInactiveBrowser(), nullptr);
// Check that the inactive and the regular Browsers are correctly referencing
// each other after creating the inactive Browser.
Browser* inactive_browser = browser.CreateInactiveBrowser();
EXPECT_TRUE(inactive_browser->IsInactive());
EXPECT_EQ(inactive_browser->GetActiveBrowser(), &browser);
EXPECT_EQ(inactive_browser->GetInactiveBrowser(), inactive_browser);
EXPECT_FALSE(browser.IsInactive());
EXPECT_EQ(browser.GetActiveBrowser(), &browser);
EXPECT_EQ(browser.GetInactiveBrowser(), inactive_browser);
// Check that destroying the inactive browser resets the reference to the
// inactive Browser.
browser.DestroyInactiveBrowser();
EXPECT_FALSE(browser.IsInactive());
EXPECT_EQ(browser.GetActiveBrowser(), &browser);
EXPECT_EQ(browser.GetInactiveBrowser(), nullptr);
}
// Tests that the BrowserDestroyed() callback is sent when a browser is deleted.
TEST_F(BrowserImplTest, BrowserDestroyed) {
std::unique_ptr<FakeBrowserObserver> observer;
{
BrowserImpl browser(chrome_browser_state_.get());
observer = std::make_unique<FakeBrowserObserver>(&browser);
}
ASSERT_TRUE(observer);
EXPECT_TRUE(observer->browser_destroyed());
}
// Tests that the BrowserDestroyed() callback is sent when destroying the
// inactive Browser.
TEST_F(BrowserImplTest, InactiveBrowserDestroyed) {
BrowserImpl browser(chrome_browser_state_.get());
Browser* inactive_browser = browser.CreateInactiveBrowser();
std::unique_ptr<FakeBrowserObserver> observer =
std::make_unique<FakeBrowserObserver>(inactive_browser);
browser.DestroyInactiveBrowser();
ASSERT_TRUE(observer);
EXPECT_TRUE(observer->browser_destroyed());
}