Chromium Code Reviews| Index: mandoline/ui/browser/browser_apptest.cc |
| diff --git a/mandoline/ui/browser/browser_apptest.cc b/mandoline/ui/browser/browser_apptest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..113658c265ea53d1cae049db8f4341566488a6e9 |
| --- /dev/null |
| +++ b/mandoline/ui/browser/browser_apptest.cc |
| @@ -0,0 +1,79 @@ |
| +// Copyright 2015 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. |
| + |
| +#include "mandoline/ui/browser/browser.h" |
| + |
| +#include "mandoline/ui/browser/browser_delegate.h" |
| +#include "mojo/application/public/cpp/application_connection.h" |
| +#include "mojo/application/public/cpp/application_delegate.h" |
| +#include "mojo/application/public/cpp/application_impl.h" |
| +#include "mojo/application/public/cpp/application_test_base.h" |
| + |
| +namespace mandoline { |
| + |
| +class BrowserTest : public mojo::test::ApplicationTestBase, |
| + public mojo::ApplicationDelegate, |
| + public BrowserDelegate { |
| + public: |
| + BrowserTest() : app_(nullptr), last_closed_connection_(nullptr) {} |
| + |
| + // Creates a new Browser object. |
| + Browser* CreateBrowser() { |
| + if (!app_) |
| + return nullptr; |
| + Browser* browser = new Browser(app_, this); |
| + browsers_.insert(browser); |
| + return browser; |
| + } |
| + |
| + // Returns the last ApplicationConnection closed. |
| + mojo::ApplicationConnection* last_closed_connection() { |
| + return last_closed_connection_; |
| + } |
| + |
| + // Overridden from ApplicationDelegate: |
| + void Initialize(mojo::ApplicationImpl* app) override { |
| + app_ = app; |
| + } |
| + |
| + void OnWillCloseConnection(mojo::ApplicationConnection* connection) override { |
| + // WARNING: DO NOT FOLLOW THIS POINTER. IT WILL BE DESTROYED. |
| + last_closed_connection_ = connection; |
| + } |
| + |
| + // ApplicationTestBase: |
| + ApplicationDelegate* GetApplicationDelegate() override { return this; } |
| + |
| + // Overridden from BrowserDelegate: |
| + void BrowserClosed(Browser* browser) override { |
| + scoped_ptr<Browser> browser_owner(browser); |
| + DCHECK_GT(browsers_.count(browser), 0u); |
| + browsers_.erase(browser); |
| + } |
| + |
| + bool InitUIIfNecessary(Browser* browser, mojo::View* root_view) override { |
| + return true; |
| + } |
| + |
| + private: |
| + mojo::ApplicationImpl* app_; |
| + mojo::ApplicationConnection* last_closed_connection_; |
|
sky
2015/06/30 16:41:46
Can the type of last_closed_connection_ be a void*
Fady Samuel
2015/06/30 17:31:19
Done.
|
| + std::set<Browser*> browsers_; |
| + |
| + MOJO_DISALLOW_COPY_AND_ASSIGN(BrowserTest); |
| +}; |
| + |
| +// This test verifies that closing a Browser closes the associated application |
| +// connection with the view manager. |
| +TEST_F(BrowserTest, ClosingBrowserClosesAppConnection) { |
| + Browser* browser = CreateBrowser(); |
| + ASSERT_NE(nullptr, browser); |
| + mojo::ApplicationConnection* view_manager_connection = |
| + browser->view_manager_init_.connection(); |
| + ASSERT_NE(nullptr, view_manager_connection); |
| + BrowserClosed(browser); |
| + EXPECT_EQ(last_closed_connection(), view_manager_connection); |
| +} |
| + |
| +} // namespace mandoline |