12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/keyboard_overlay/keyboard_overlay_delegate.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/shelf/shelf_types.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/ash_test_base.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/display.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/screen.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class KeyboardOverlayDelegateTest 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : public test::AshTestBase, 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public testing::WithParamInterface<ShelfAlignment> { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) KeyboardOverlayDelegateTest() : shelf_alignment_(GetParam()) {} 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~KeyboardOverlayDelegateTest() {} 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ShelfAlignment shelf_alignment() const { return shelf_alignment_; } 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ShelfAlignment shelf_alignment_; 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayDelegateTest); 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies we can show and close the widget for the overlay dialog. 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_P(KeyboardOverlayDelegateTest, ShowAndClose) { 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateDisplay("500x400,300x200"); 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::Shell* shell = ash::Shell::GetInstance(); 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) shell->SetShelfAlignment(shelf_alignment(), shell->GetPrimaryRootWindow()); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) KeyboardOverlayDelegate delegate(base::ASCIIToUTF16("Title"), 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL("chrome://keyboardoverlay/")); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Showing the dialog creates a widget. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget = delegate.Show(NULL); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(widget); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The widget is on the primary root window. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Shell::GetPrimaryRootWindow(), 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->GetNativeWindow()->GetRootWindow()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The widget is horizontally centered at the bottom of the work area. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect work_area = Shell::GetScreen()->GetPrimaryDisplay().work_area(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect bounds = widget->GetRestoredBounds(); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(work_area.CenterPoint().x(), bounds.CenterPoint().x()); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(work_area.bottom(), bounds.bottom()); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clean up. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->CloseNow(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Tests run three times - for all possible values of shelf alignment 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(ShelfAlignmentAny, 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) KeyboardOverlayDelegateTest, 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) testing::Values(SHELF_ALIGNMENT_BOTTOM, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SHELF_ALIGNMENT_LEFT, 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SHELF_ALIGNMENT_RIGHT, 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SHELF_ALIGNMENT_TOP)); 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 69