Home | History | Annotate | Download | only in keyboard_overlay
      1 // Copyright (c) 2013 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 "ash/keyboard_overlay/keyboard_overlay_delegate.h"
      6 
      7 #include "ash/shelf/shelf_types.h"
      8 #include "ash/shell.h"
      9 #include "ash/test/ash_test_base.h"
     10 #include "base/strings/utf_string_conversions.h"
     11 #include "ui/aura/window.h"
     12 #include "ui/gfx/display.h"
     13 #include "ui/gfx/screen.h"
     14 #include "ui/views/widget/widget.h"
     15 
     16 namespace ash {
     17 
     18 class KeyboardOverlayDelegateTest
     19     : public test::AshTestBase,
     20       public testing::WithParamInterface<ShelfAlignment> {
     21  public:
     22   KeyboardOverlayDelegateTest() : shelf_alignment_(GetParam()) {}
     23   virtual ~KeyboardOverlayDelegateTest() {}
     24   ShelfAlignment shelf_alignment() const { return shelf_alignment_; }
     25 
     26  private:
     27   ShelfAlignment shelf_alignment_;
     28 
     29   DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayDelegateTest);
     30 };
     31 
     32 // Verifies we can show and close the widget for the overlay dialog.
     33 TEST_P(KeyboardOverlayDelegateTest, ShowAndClose) {
     34   if (!SupportsMultipleDisplays())
     35     return;
     36 
     37   UpdateDisplay("500x400,300x200");
     38   ash::Shell* shell = ash::Shell::GetInstance();
     39   shell->SetShelfAlignment(shelf_alignment(), shell->GetPrimaryRootWindow());
     40   KeyboardOverlayDelegate delegate(base::ASCIIToUTF16("Title"),
     41                                    GURL("chrome://keyboardoverlay/"));
     42   // Showing the dialog creates a widget.
     43   views::Widget* widget = delegate.Show(NULL);
     44   EXPECT_TRUE(widget);
     45 
     46   // The widget is on the primary root window.
     47   EXPECT_EQ(Shell::GetPrimaryRootWindow(),
     48             widget->GetNativeWindow()->GetRootWindow());
     49 
     50   // The widget is horizontally centered at the bottom of the work area.
     51   gfx::Rect work_area = Shell::GetScreen()->GetPrimaryDisplay().work_area();
     52   gfx::Rect bounds = widget->GetRestoredBounds();
     53   EXPECT_EQ(work_area.CenterPoint().x(), bounds.CenterPoint().x());
     54   EXPECT_EQ(work_area.bottom(), bounds.bottom());
     55 
     56   // Clean up.
     57   widget->CloseNow();
     58 }
     59 
     60 // Tests run three times - for all possible values of shelf alignment
     61 INSTANTIATE_TEST_CASE_P(ShelfAlignmentAny,
     62                         KeyboardOverlayDelegateTest,
     63                         testing::Values(SHELF_ALIGNMENT_BOTTOM,
     64                                         SHELF_ALIGNMENT_LEFT,
     65                                         SHELF_ALIGNMENT_RIGHT,
     66                                         SHELF_ALIGNMENT_TOP));
     67 
     68 }  // namespace ash
     69