Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(423)

Unified Diff: ui/views/cocoa/bridged_native_widget_unittest.mm

Issue 2393843002: MacViews: Implement CloseNow() as just -[NSWindow close]. (Closed)
Patch Set: Respond to comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/cocoa/bridged_native_widget.mm ('k') | ui/views/widget/native_widget_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..6597aba446596f9db581720a3a0ec750d909ed4a 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,15 @@ class BridgedNativeWidgetInitTest : public BridgedNativeWidgetTestBase {
// Test that BridgedNativeWidget remains sane if Init() is never called.
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(). Then, since
+ // neither Widget nor NativeWidget take ownership, use a unique_ptr.
+ std::unique_ptr<MockNativeWidgetMac> native_widget(
+ new MockNativeWidgetMac(nullptr));
+ native_widget_mac_ = native_widget.get();
EXPECT_FALSE(bridge()->ns_view());
EXPECT_FALSE(bridge()->ns_window());
- bridge().reset();
}
// Tests the shadow type given in InitParams.
« no previous file with comments | « ui/views/cocoa/bridged_native_widget.mm ('k') | ui/views/widget/native_widget_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698