1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/views/widget/native_widget_win.h"
6
7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/base/win/scoped_ole_initializer.h"
12
13 namespace views {
14 namespace {
15
16 class NativeWidgetWinTest : public testing::Test {
17 public:
NativeWidgetWinTest()18 NativeWidgetWinTest() {}
~NativeWidgetWinTest()19 ~NativeWidgetWinTest() {}
20
TearDown()21 virtual void TearDown() {
22 // Flush the message loop because we have pending release tasks
23 // and these tasks if un-executed would upset Valgrind.
24 RunPendingMessages();
25 }
26
27 // Create a simple widget win. The caller is responsible for taking ownership
28 // of the returned value.
29 NativeWidgetWin* CreateNativeWidgetWin();
30
RunPendingMessages()31 void RunPendingMessages() {
32 message_loop_.RunUntilIdle();
33 }
34
35 private:
36 base::MessageLoopForUI message_loop_;
37 ui::ScopedOleInitializer ole_initializer_;
38
39 DISALLOW_COPY_AND_ASSIGN(NativeWidgetWinTest);
40 };
41
CreateNativeWidgetWin()42 NativeWidgetWin* NativeWidgetWinTest::CreateNativeWidgetWin() {
43 scoped_ptr<Widget> widget(new Widget);
44 Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
45 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
46 params.bounds = gfx::Rect(50, 50, 650, 650);
47 widget->Init(params);
48 return static_cast<NativeWidgetWin*>(widget.release()->native_widget());
49 }
50
TEST_F(NativeWidgetWinTest,ZoomWindow)51 TEST_F(NativeWidgetWinTest, ZoomWindow) {
52 scoped_ptr<NativeWidgetWin> window(CreateNativeWidgetWin());
53 ShowWindow(window->GetNativeView(), SW_HIDE);
54 EXPECT_FALSE(window->IsActive());
55 ShowWindow(window->GetNativeView(), SW_MAXIMIZE);
56 EXPECT_TRUE(IsZoomed(window->GetNativeView()));
57 window->CloseNow();
58 }
59
TEST_F(NativeWidgetWinTest,SetBoundsForZoomedWindow)60 TEST_F(NativeWidgetWinTest, SetBoundsForZoomedWindow) {
61 scoped_ptr<NativeWidgetWin> window(CreateNativeWidgetWin());
62 ShowWindow(window->GetNativeView(), SW_MAXIMIZE);
63 EXPECT_TRUE(IsZoomed(window->GetNativeView()));
64
65 // Create another window, so that it will be active.
66 scoped_ptr<NativeWidgetWin> window2(CreateNativeWidgetWin());
67 ShowWindow(window2->GetNativeView(), SW_MAXIMIZE);
68 EXPECT_TRUE(window2->IsActive());
69 EXPECT_FALSE(window->IsActive());
70
71 // Verify that setting the bounds of a zoomed window will unzoom it and not
72 // cause it to be activated.
73 window->SetBounds(gfx::Rect(50, 50, 650, 650));
74 EXPECT_FALSE(IsZoomed(window->GetNativeView()));
75 EXPECT_FALSE(window->IsActive());
76
77 // Cleanup.
78 window->CloseNow();
79 window2->CloseNow();
80 }
81
82 } // namespace
83 } // namespace views
84