Chromium Code Reviews| Index: ui/views/cocoa/bridged_native_widget_unittest.mm |
| diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| index 2b21d350de40caa8fde84275624992aa1ab950ac..8a17424c9eca037326c9b381f32dfe57a046e578 100644 |
| --- a/ui/views/cocoa/bridged_native_widget_unittest.mm |
| +++ b/ui/views/cocoa/bridged_native_widget_unittest.mm |
| @@ -206,7 +206,8 @@ namespace test { |
| // Provides the |parent| argument to construct a BridgedNativeWidget. |
| class MockNativeWidgetMac : public NativeWidgetMac { |
| public: |
| - MockNativeWidgetMac(Widget* delegate) : NativeWidgetMac(delegate) {} |
| + explicit MockNativeWidgetMac(internal::NativeWidgetDelegate* delegate) |
| + : NativeWidgetMac(delegate) {} |
| // Expose a reference, so that it can be reset() independently. |
| std::unique_ptr<BridgedNativeWidget>& bridge() { return bridge_; } |
| @@ -234,10 +235,14 @@ class MockNativeWidgetMac : public NativeWidgetMac { |
| // Helper test base to construct a BridgedNativeWidget with a valid parent. |
| class BridgedNativeWidgetTestBase : public ui::CocoaTest { |
| public: |
| + struct SkipInitialization {}; |
| + |
| BridgedNativeWidgetTestBase() |
| : widget_(new Widget), |
| - native_widget_mac_(new MockNativeWidgetMac(widget_.get())) { |
| - } |
| + native_widget_mac_(new MockNativeWidgetMac(widget_.get())) {} |
| + |
| + explicit BridgedNativeWidgetTestBase(SkipInitialization tag) |
| + : native_widget_mac_(nullptr) {} |
| std::unique_ptr<BridgedNativeWidget>& bridge() { |
| return native_widget_mac_->bridge(); |
| @@ -246,6 +251,10 @@ class BridgedNativeWidgetTestBase : public ui::CocoaTest { |
| // Overridden from testing::Test: |
| void SetUp() override { |
| ui::CocoaTest::SetUp(); |
| + |
| + // MaterialDesignController leaks state across tests. See |
| + // http://crbug.com/656871. |
| + ui::test::MaterialDesignControllerTestAPI::Uninitialize(); |
| ui::MaterialDesignController::Initialize(); |
| init_params_.native_widget = native_widget_mac_; |
| @@ -263,7 +272,8 @@ class BridgedNativeWidgetTestBase : public ui::CocoaTest { |
| init_params_.bounds = gfx::Rect(100, 100, 100, 100); |
| - native_widget_mac_->GetWidget()->Init(init_params_); |
| + if (native_widget_mac_) |
| + native_widget_mac_->GetWidget()->Init(init_params_); |
| } |
| void TearDown() override { |
| @@ -603,9 +613,9 @@ TEST_F(BridgedNativeWidgetTest, BridgedNativeWidgetTest_TestViewAddRemove) { |
| // installed. |
| EXPECT_EQ(1u, [[view trackingAreas] count]); |
| - // Destroying the C++ bridge should remove references to any C++ objects in |
| - // the ObjectiveC object, and remove it from the hierarchy. |
| - bridge().reset(); |
| + // Closing the window should tear down the C++ bridge, remove references to |
| + // any C++ objects in the ObjectiveC object, and remove it from the hierarchy. |
| + [test_window() close]; |
| EXPECT_FALSE([view hostedView]); |
| EXPECT_FALSE([view superview]); |
| EXPECT_FALSE([view window]); |
| @@ -645,7 +655,8 @@ TEST_F(BridgedNativeWidgetTest, GetInputMethodShouldNotReturnNull) { |
| // A simpler test harness for testing initialization flows. |
| class BridgedNativeWidgetInitTest : public BridgedNativeWidgetTestBase { |
| public: |
| - BridgedNativeWidgetInitTest() {} |
| + BridgedNativeWidgetInitTest() |
| + : BridgedNativeWidgetTestBase(SkipInitialization()) {} |
| // Prepares a new |window_| and |widget_| for a call to PerformInit(). |
| void CreateNewWidgetToInit(NSUInteger style_mask) { |
| @@ -674,9 +685,13 @@ class BridgedNativeWidgetInitTest : public BridgedNativeWidgetTestBase { |
| // Test that BridgedNativeWidget remains sane if Init() is never called. |
|
tapted
2016/10/18 05:09:09
This was actually a lie :) -- Init() was previousl
|
| TEST_F(BridgedNativeWidgetInitTest, InitNotCalled) { |
| + // Don't use a Widget* as the delegate. ~Widget() checks for Widget:: |
| + // |native_widget_destroyed_| being set to true. That can only happen with a |
| + // non-null WidgetDelegate, which is only set in Widget::Init(). |
| + native_widget_mac_ = new MockNativeWidgetMac(nullptr); |
| EXPECT_FALSE(bridge()->ns_view()); |
| EXPECT_FALSE(bridge()->ns_window()); |
| - bridge().reset(); |
| + delete native_widget_mac_; |
|
karandeepb
2016/10/18 10:00:29
nit: Create a local std::unique_ptr and assign its
tapted
2016/10/19 06:20:25
Done.
|
| } |
| // Tests the shadow type given in InitParams. |