// Copyright 2019 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/chrome/browser/main/browser_impl.h"

#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
#import "ios/chrome/browser/main/fake_browser_observer.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/web_state_list/fake_web_state_list_delegate.h"
#include "ios/chrome/browser/web_state_list/web_state_list.h"
#include "ios/web/public/test/web_task_environment.h"
#include "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()
      : web_state_list_(
            std::make_unique<WebStateList>(&web_state_list_delegate_)) {
    TestChromeBrowserState::Builder test_cbs_builder;
    chrome_browser_state_ = test_cbs_builder.Build();
  }

  web::WebTaskEnvironment task_environment_;
  std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;

  FakeWebStateListDelegate web_state_list_delegate_;
  // Unique ptr to the web_state_list_ to transfer into new Browser instances.
  std::unique_ptr<WebStateList> web_state_list_;
};

// Tests that the accessors return the expected values.
TEST_F(BrowserImplTest, TestAccessors) {
  WebStateList* web_state_list_weak_reference = web_state_list_.get();
  BrowserImpl browser(chrome_browser_state_.get(), std::move(web_state_list_));

  EXPECT_EQ(chrome_browser_state_.get(), browser.GetBrowserState());
  EXPECT_EQ(web_state_list_weak_reference, browser.GetWebStateList());
}

// Tests that the BrowserDestroyed() callback is sent when a browser is deleted.
TEST_F(BrowserImplTest, BrowserDestroyed) {
  std::unique_ptr<Browser> browser =
      std::make_unique<BrowserImpl>(chrome_browser_state_.get());
  FakeBrowserObserver observer(browser.get());
  // Simulate shut down order from BrowserViewWrangler, where the TabModel's
  // |-browserStateDestroyed| is expected to be executed before the
  // TabModelList's destructor.
  // TODO(crbug.com/783777): Remove when TabModel is no longer used.
  [browser->GetTabModel() disconnect];
  browser = nullptr;
  EXPECT_TRUE(observer.browser_destroyed());
}
