1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/app_list_view.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/command_line.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/run_loop.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string_util.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/app_list_switches.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/pagination_model.h" 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/app_list/search_box_model.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/test/app_list_test_model.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/test/app_list_test_view_delegate.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/app_list_folder_view.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/app_list_main_view.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/apps_container_view.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/apps_grid_view.h" 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/app_list/views/contents_switcher_view.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/contents_view.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/search_box_view.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/app_list/views/search_result_list_view.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/start_page_view.h" 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/test/apps_grid_view_test_api.h" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/app_list/views/tile_item_view.h" 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h" 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/test/views_test_base.h" 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/views_delegate.h" 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace app_list { 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace test { 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)enum TestType { 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TEST_TYPE_START = 0, 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NORMAL = TEST_TYPE_START, 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LANDSCAPE, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPERIMENTAL, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TEST_TYPE_END, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsViewAtOrigin(views::View* view) { 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return view->bounds().origin().IsOrigin(); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)size_t GetVisibleTileItemViews(const std::vector<TileItemView*>& tiles) { 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t count = 0; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (std::vector<TileItemView*>::const_iterator it = tiles.begin(); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) it != tiles.end(); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ++it) { 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if ((*it)->visible()) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) count++; 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return count; 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Choose a set that is 3 regular app list pages and 2 landscape app list pages. 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kInitialItems = 34; 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class TestTileSearchResult : public SearchResult { 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TestTileSearchResult() { set_display_type(DISPLAY_TILE); } 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~TestTileSearchResult() {} 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestTileSearchResult); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Allows the same tests to run with different contexts: either an Ash-style 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// root window or a desktop window tree host. 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestContext { 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AppListViewTestContext(int test_type, gfx::NativeView parent); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ~AppListViewTestContext(); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Test displaying the app list and performs a standard set of checks on its 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // top level views. Then closes the window. 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RunDisplayTest(); 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Hides and reshows the app list with a folder open, expecting the main grid 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // view to be shown. 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RunReshowWithOpenFolderTest(); 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Tests displaying of the experimental app list and shows the start page. 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RunStartPageTest(); 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Tests switching rapidly between multiple pages of the launcher. 926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void RunPageSwitchingAnimationTest(); 936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Tests changing the App List profile. 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void RunProfileChangeTest(); 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Tests displaying of the search results. 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void RunSearchResultsTest(); 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // A standard set of checks on a view, e.g., ensuring it is drawn and visible. 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static void CheckView(views::View* subview); 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Invoked when the Widget is closing, and the view it contains is about to 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // be torn down. This only occurs in a run loop and will be used as a signal 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // to quit. 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void NativeWidgetClosing() { 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_ = NULL; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop_->Quit(); 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Whether the experimental "landscape" app launcher UI is being tested. 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_landscape() const { 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return test_type_ == LANDSCAPE || test_type_ == EXPERIMENTAL; 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 1176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Switches the active launcher page in the contents view and lays out to 1186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // ensure all launcher pages are in the correct position. 1196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void ShowContentsViewPageAndVerify(int index); 1206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Shows the app list and waits until a paint occurs. 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Show(); 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Closes the app list. This sets |view_| to NULL. 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Close(); 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Gets the PaginationModel owned by |view_|. 12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PaginationModel* GetPaginationModel(); 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const TestType test_type_; 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<base::RunLoop> run_loop_; 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) app_list::AppListView* view_; // Owned by native widget. 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<app_list::test::AppListTestViewDelegate> delegate_; 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListViewTestContext); 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Extend the regular AppListTestViewDelegate to communicate back to the test 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// context. Note the test context doesn't simply inherit this, because the 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// delegate is owned by the view. 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class UnitTestViewDelegate : public app_list::test::AppListTestViewDelegate { 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UnitTestViewDelegate(AppListViewTestContext* parent) : parent_(parent) {} 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from app_list::AppListViewDelegate: 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool ShouldCenterWindow() const OVERRIDE { 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return app_list::switches::IsCenteredAppListEnabled(); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from app_list::test::AppListTestViewDelegate: 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void ViewClosing() OVERRIDE { parent_->NativeWidgetClosing(); } 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestContext* parent_; 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UnitTestViewDelegate); 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AppListViewTestContext::AppListViewTestContext(int test_type, 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::NativeView parent) 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : test_type_(static_cast<TestType>(test_type)) { 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (test_type_) { 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case NORMAL: 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case LANDSCAPE: 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::CommandLine::ForCurrentProcess()->AppendSwitch( 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableCenteredAppList); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case EXPERIMENTAL: 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::CommandLine::ForCurrentProcess()->AppendSwitch( 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableExperimentalAppList); 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NOTREACHED(); 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_.reset(new UnitTestViewDelegate(this)); 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci view_ = new app_list::AppListView(delegate_.get()); 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Initialize centered around a point that ensures the window is wholly shown. 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_->InitAsBubbleAtFixedLocation(parent, 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0, 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Point(300, 300), 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::BubbleBorder::FLOAT, 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false /* border_accepts_events */); 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AppListViewTestContext::~AppListViewTestContext() { 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The view observes the PaginationModel which is about to get destroyed, so 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // if the view is not already deleted by the time this destructor is called, 192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // there will be problems. 193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_); 194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::CheckView(views::View* subview) { 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(subview); 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(subview->parent()); 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(subview->visible()); 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(subview->IsDrawn()); 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void AppListViewTestContext::ShowContentsViewPageAndVerify(int index) { 2056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ContentsView* contents_view = view_->app_list_main_view()->contents_view(); 2066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->SetActivePage(index); 2076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->Layout(); 2086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (int i = 0; i < contents_view->NumLauncherPages(); ++i) { 2096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(i == index, IsViewAtOrigin(contents_view->GetPageView(i))); 2106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 2116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 2126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::Show() { 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_->GetWidget()->Show(); 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop_.reset(new base::RunLoop); 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_->SetNextPaintCallback(run_loop_->QuitClosure()); 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop_->Run(); 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(view_->GetWidget()->IsVisible()); 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::Close() { 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_->GetWidget()->Close(); 224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop_.reset(new base::RunLoop); 225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop_->Run(); 226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |view_| should have been deleted and set to NULL via ViewClosing(). 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_); 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)PaginationModel* AppListViewTestContext::GetPaginationModel() { 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return view_->GetAppsPaginationModel(); 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunDisplayTest() { 236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(-1, GetPaginationModel()->total_pages()); 238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delegate_->GetTestModel()->PopulateApps(kInitialItems); 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Explicitly enforce the exact dimensions of the app list. Feel free to 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // change these if you need to (they are just here to prevent against 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // accidental changes to the window size). 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switch (test_type_) { 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case NORMAL: 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("400x500", view_->bounds().size().ToString()); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case LANDSCAPE: 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // NOTE: Height should not exceed 402, because otherwise there might not 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // be enough space to accomodate the virtual keyboard. (LANDSCAPE mode is 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // enabled by default when the virtual keyboard is enabled.) 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("576x402", view_->bounds().size().ToString()); 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case EXPERIMENTAL: 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("768x560", view_->bounds().size().ToString()); 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default: 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci break; 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (is_landscape()) 26446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, GetPaginationModel()->total_pages()); 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 26646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(3, GetPaginationModel()->total_pages()); 26746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, GetPaginationModel()->selected_page()); 268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Checks on the main view. 270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListMainView* main_view = view_->app_list_main_view(); 271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view())); 273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(main_view->contents_view()->IsNamedPageActive( 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_type_ == EXPERIMENTAL ? ContentsView::NAMED_PAGE_START 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : ContentsView::NAMED_PAGE_APPS)); 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Close(); 279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunReshowWithOpenFolderTest() { 282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 28346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(-1, GetPaginationModel()->total_pages()); 284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListTestModel* model = delegate_->GetTestModel(); 286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) model->PopulateApps(kInitialItems); 287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string folder_id = 288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) model->MergeItems(model->top_level_item_list()->item_at(0)->id(), 289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) model->top_level_item_list()->item_at(1)->id()); 290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListFolderItem* folder_item = model->FindFolderItem(folder_id); 292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(folder_item); 293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(); 295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The main grid view should be showing initially. 297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListMainView* main_view = view_->app_list_main_view(); 298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppsContainerView* container_view = 299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) main_view->contents_view()->apps_container_view(); 300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(container_view->apps_grid_view())); 302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(container_view->app_list_folder_view()->visible()); 303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppsGridViewTestApi test_api(container_view->apps_grid_view()); 305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_api.PressItemAt(0); 306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // After pressing the folder item, the folder view should be showing. 308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(container_view->app_list_folder_view())); 310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(container_view->apps_grid_view()->visible()); 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_->GetWidget()->Hide(); 313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(); 316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The main grid view should be showing after a reshow. 318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(container_view->apps_grid_view())); 320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(container_view->app_list_folder_view()->visible()); 321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Close(); 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunStartPageTest() { 326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 32746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(-1, GetPaginationModel()->total_pages()); 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListTestModel* model = delegate_->GetTestModel(); 329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) model->PopulateApps(3); 330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(); 332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListMainView* main_view = view_->app_list_main_view(); 334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StartPageView* start_page_view = 335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) main_view->contents_view()->start_page_view(); 336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Checks on the main view. 337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view())); 339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view)); 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Show the start page view. 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsView* contents_view = main_view->contents_view(); 3446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage( 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsView::NAMED_PAGE_START)); 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(main_view->search_box_view()->visible()); 347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size view_size(view_->GetPreferredSize()); 3496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify( 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS)); 351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(main_view->search_box_view()->visible()); 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Hiding and showing the search box should not affect the app list's 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // preferred size. This is a regression test for http://crbug.com/386912. 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(view_size.ToString(), view_->GetPreferredSize().ToString()); 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Check tiles hide and show on deletion and addition. 3586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) model->results()->Add(new TestTileSearchResult()); 3596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) start_page_view->UpdateForTesting(); 3606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); 36103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) model->results()->DeleteAll(); 3626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) start_page_view->UpdateForTesting(); 3636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0u, GetVisibleTileItemViews(start_page_view->tile_views())); 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(NULL, start_page_view); 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Close(); 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void AppListViewTestContext::RunPageSwitchingAnimationTest() { 3726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 3736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Show(); 3746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) AppListMainView* main_view = view_->app_list_main_view(); 3766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Checks on the main view. 3776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view)); 3786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view())); 3796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ContentsView* contents_view = main_view->contents_view(); 3816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Pad the ContentsView with blank pages so we have at least 3 views. 3826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) while (contents_view->NumLauncherPages() < 3) 3836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->AddBlankPageForTesting(); 3846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->SetActivePage(0); 3866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->Layout(); 3876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0))); 3886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1))); 3896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2))); 3906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Change pages. View should not have moved without Layout(). 3926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->SetActivePage(1); 3936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0))); 3946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1))); 3956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2))); 3966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Change to a third page. This queues up the second animation behind the 3986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // first. 3996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->SetActivePage(2); 4006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0))); 4016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1))); 4026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2))); 4036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Call Layout(). Should jump to the third page. 4056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->Layout(); 4066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(0))); 4076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1))); 4086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(2))); 4096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 4106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) Close(); 4126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 4136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 41446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void AppListViewTestContext::RunProfileChangeTest() { 41546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 41646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(-1, GetPaginationModel()->total_pages()); 41746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->GetTestModel()->PopulateApps(kInitialItems); 41846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 41946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Show(); 42046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (is_landscape()) 42246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, GetPaginationModel()->total_pages()); 42346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) else 42446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(3, GetPaginationModel()->total_pages()); 42546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 42646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Change the profile. The original model needs to be kept alive for 42746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // observers to unregister themselves. 42846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<AppListTestModel> original_test_model( 42946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->ReleaseTestModel()); 43046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) delegate_->set_next_profile_app_count(1); 43146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 43246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The original ContentsView is destroyed here. 43346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) view_->SetProfileByPath(base::FilePath()); 43446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, GetPaginationModel()->total_pages()); 43546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 43646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StartPageView* start_page_view = 43746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) view_->app_list_main_view()->contents_view()->start_page_view(); 438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsSwitcherView* contents_switcher_view = 439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_->app_list_main_view()->contents_switcher_view(); 44046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 441f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(contents_switcher_view)); 442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(view_->app_list_main_view()->contents_view(), 443f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_switcher_view->contents_view()); 44446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view)); 44546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(NULL, contents_switcher_view); 44746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(NULL, start_page_view); 44846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 44946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 45046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // New model updates should be processed by the start page view. 4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) delegate_->GetTestModel()->results()->Add(new TestTileSearchResult()); 4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) start_page_view->UpdateForTesting(); 4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); 4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 45646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 45746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Old model updates should be ignored. 4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) original_test_model->results()->Add(new TestTileSearchResult()); 4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) original_test_model->results()->Add(new TestTileSearchResult()); 4606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) start_page_view->UpdateForTesting(); 4626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); 4636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 46446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 46546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Close(); 46646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 46746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void AppListViewTestContext::RunSearchResultsTest() { 469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(view_->GetWidget()->IsVisible()); 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(-1, GetPaginationModel()->total_pages()); 471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppListTestModel* model = delegate_->GetTestModel(); 472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) model->PopulateApps(3); 473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Show(); 475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppListMainView* main_view = view_->app_list_main_view(); 477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsView* contents_view = main_view->contents_view(); 4786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify( 479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS)); 480f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(main_view->search_box_view()->visible()); 481f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 482f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Show the search results. 483f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->ShowSearchResults(true); 484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->Layout(); 485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(contents_view->IsShowingSearchResults()); 486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(main_view->search_box_view()->visible()); 487f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 488f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE( 490f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_START)); 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->start_page_view())); 492f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(contents_view->IsNamedPageActive( 494f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentsView::NAMED_PAGE_SEARCH_RESULTS)); 495f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->search_results_view())); 496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 497f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 498f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Hide the search results. 499f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->ShowSearchResults(false); 500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) contents_view->Layout(); 501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(contents_view->IsShowingSearchResults()); 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Check that we return to the page that we were on before the search. 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_APPS)); 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(IsViewAtOrigin(contents_view->apps_container_view())); 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(main_view->search_box_view()->visible()); 507f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (test_type_ == EXPERIMENTAL) { 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage( 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentsView::NAMED_PAGE_START)); 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check that typing into the dummy search box triggers the search page. 5136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::string16 search_text = base::UTF8ToUTF16("test"); 5146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SearchBoxView* dummy_search_box = 5156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->start_page_view()->dummy_search_box_view(); 5166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(dummy_search_box->IsDrawn()); 5176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) dummy_search_box->search_box()->InsertText(search_text); 5186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->Layout(); 5196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check that the current search is using |search_text|. 5206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(search_text, delegate_->GetTestModel()->search_box()->text()); 5216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(contents_view->IsShowingSearchResults()); 5226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(dummy_search_box->IsDrawn()); 5236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(main_view->search_box_view()->visible()); 5246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(search_text, main_view->search_box_view()->search_box()->text()); 5256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE( 5266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_START)); 5276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->start_page_view())); 5286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check that typing into the real search box triggers the search page. 5306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify( 5316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS)); 5326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(IsViewAtOrigin(contents_view->apps_container_view())); 5336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::string16 new_search_text = base::UTF8ToUTF16("apple"); 5356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) main_view->search_box_view()->search_box()->SetText(base::string16()); 5366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) main_view->search_box_view()->search_box()->InsertText(new_search_text); 5376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check that the current search is using |search_text|. 5386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(new_search_text, delegate_->GetTestModel()->search_box()->text()); 5396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(new_search_text, 5406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) main_view->search_box_view()->search_box()->text()); 5416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(contents_view->IsShowingSearchResults()); 5426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(dummy_search_box->IsDrawn()); 5436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(main_view->search_box_view()->visible()); 5446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(dummy_search_box->search_box()->text().empty()); 5456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 5466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Check that the dummy search box is clear when reshowing the start page. 5476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify( 5486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS)); 5496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage( 5506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ContentsView::NAMED_PAGE_START)); 5516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(dummy_search_box->IsDrawn()); 5526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(dummy_search_box->search_box()->text().empty()); 5536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 5546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Close(); 556f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 557f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestAura : public views::ViewsTestBase, 559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public ::testing::WithParamInterface<int> { 560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestAura() {} 562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~AppListViewTestAura() {} 563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // testing::Test overrides: 565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 566cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::ViewsTestBase::SetUp(); 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // On Ash (only) the app list is placed into an aura::Window "container", 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // which is also used to determine the context. In tests, use the ash root 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // window as the parent. This only works on aura where the root window is a 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // NativeView as well as a NativeWindow. 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::NativeView container = NULL; 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(USE_AURA) 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) container = GetContext(); 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_context_.reset(new AppListViewTestContext(GetParam(), container)); 578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 580cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void TearDown() OVERRIDE { 581cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_context_.reset(); 582cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::ViewsTestBase::TearDown(); 583cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<AppListViewTestContext> test_context_; 587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListViewTestAura); 590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestDesktop : public views::ViewsTestBase, 593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public ::testing::WithParamInterface<int> { 594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestDesktop() {} 596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~AppListViewTestDesktop() {} 597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // testing::Test overrides: 599cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUp() OVERRIDE { 600cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) set_views_delegate(new AppListViewTestViewsDelegate(this)); 601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::ViewsTestBase::SetUp(); 602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_context_.reset(new AppListViewTestContext(GetParam(), NULL)); 603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 604cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void TearDown() OVERRIDE { 606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) test_context_.reset(); 607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::ViewsTestBase::TearDown(); 608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 609cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<AppListViewTestContext> test_context_; 612cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 613cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 614cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) class AppListViewTestViewsDelegate : public views::TestViewsDelegate { 615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestViewsDelegate(AppListViewTestDesktop* parent) 617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : parent_(parent) {} 618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from views::ViewsDelegate: 620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnBeforeWidgetInit( 621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget::InitParams* params, 622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::internal::NativeWidgetDelegate* delegate) OVERRIDE; 623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestDesktop* parent_; 626cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 627cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListViewTestViewsDelegate); 628cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 629cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppListViewTestDesktop); 631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 633cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestDesktop::AppListViewTestViewsDelegate::OnBeforeWidgetInit( 634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget::InitParams* params, 635cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::internal::NativeWidgetDelegate* delegate) { 636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Mimic the logic in ChromeViewsDelegate::OnBeforeWidgetInit(). Except, for 637cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ChromeOS, use the root window from the AuraTestHelper rather than depending 638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// on ash::Shell:GetPrimaryRootWindow(). Also assume non-ChromeOS is never the 639cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Ash desktop, as that is covered by AppListViewTestAura. 640cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS) 641cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!params->parent && !params->context) 642cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) params->context = parent_->GetContext(); 643cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#elif defined(USE_AURA) 644cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (params->parent == NULL && params->context == NULL && !params->child) 645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) params->native_widget = new views::DesktopNativeWidgetAura(delegate); 646cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 647cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 648cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 649cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 650cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 651cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests showing the app list with basic test model in an ash-style root window. 652cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, Display) { 653cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunDisplayTest()); 654cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 655cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests showing the app list on the desktop. Note on ChromeOS, this will still 657cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// use the regular root window. 658cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, Display) { 659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunDisplayTest()); 660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 661cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 662cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests that the main grid view is shown after hiding and reshowing the app 663cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// list with a folder view open. This is a regression test for crbug.com/357058. 664cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, ReshowWithOpenFolder) { 665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunReshowWithOpenFolderTest()); 666cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 667cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, ReshowWithOpenFolder) { 669cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunReshowWithOpenFolderTest()); 670cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests that the start page view operates correctly. 673cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, StartPageTest) { 674cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunStartPageTest()); 675cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 676cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, StartPageTest) { 678cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunStartPageTest()); 6796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 6806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 6816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Tests that the start page view operates correctly. 6826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_P(AppListViewTestAura, PageSwitchingAnimationTest) { 6836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunPageSwitchingAnimationTest()); 6846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 6856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 6866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_P(AppListViewTestDesktop, PageSwitchingAnimationTest) { 6876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunPageSwitchingAnimationTest()); 688cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 689cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 69046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Tests that the profile changes operate correctly. 69146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_P(AppListViewTestAura, ProfileChangeTest) { 69246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunProfileChangeTest()); 69346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 69446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 69546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_P(AppListViewTestDesktop, ProfileChangeTest) { 69646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunProfileChangeTest()); 69746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 69846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Tests that the correct views are displayed for showing search results. 700f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AppListViewTestAura, SearchResultsTest) { 701f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunSearchResultsTest()); 702f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AppListViewTestDesktop, SearchResultsTest) { 705f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(test_context_->RunSearchResultsTest()); 706f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 707f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(AppListViewTestAuraInstance, 709cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestAura, 710cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ::testing::Range<int>(TEST_TYPE_START, TEST_TYPE_END)); 711cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 712cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(AppListViewTestDesktopInstance, 713cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AppListViewTestDesktop, 714cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ::testing::Range<int>(TEST_TYPE_START, TEST_TYPE_END)); 715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 716cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace test 717cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace app_list 718