app_list_view_unittest.cc revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
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"
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/test/aura_test_base.h"
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/window.h"
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/test/views_test_base.h"
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/views_delegate.h"
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace app_list {
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace test {
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace {
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)enum TestType {
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TEST_TYPE_START = 0,
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  NORMAL = TEST_TYPE_START,
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LANDSCAPE,
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPERIMENTAL,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TEST_TYPE_END,
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsViewAtOrigin(views::View* view) {
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return view->bounds().origin().IsOrigin();
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)size_t GetVisibleTileItemViews(const std::vector<TileItemView*>& tiles) {
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  size_t count = 0;
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  for (std::vector<TileItemView*>::const_iterator it = tiles.begin();
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       it != tiles.end();
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)       ++it) {
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if ((*it)->visible())
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      count++;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return count;
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Choose a set that is 3 regular app list pages and 2 landscape app list pages.
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kInitialItems = 34;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Allows the same tests to run with different contexts: either an Ash-style
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// root window or a desktop window tree host.
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestContext {
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListViewTestContext(int test_type, aura::Window* parent);
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ~AppListViewTestContext();
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Test displaying the app list and performs a standard set of checks on its
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // top level views. Then closes the window.
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RunDisplayTest();
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Hides and reshows the app list with a folder open, expecting the main grid
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // view to be shown.
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RunReshowWithOpenFolderTest();
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Tests displaying of the experimental app list and shows the start page.
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RunStartPageTest();
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Tests switching rapidly between multiple pages of the launcher.
856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void RunPageSwitchingAnimationTest();
866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Tests changing the App List profile.
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void RunProfileChangeTest();
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Tests displaying of the search results.
91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void RunSearchResultsTest();
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // A standard set of checks on a view, e.g., ensuring it is drawn and visible.
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static void CheckView(views::View* subview);
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Invoked when the Widget is closing, and the view it contains is about to
97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // be torn down. This only occurs in a run loop and will be used as a signal
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // to quit.
99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void NativeWidgetClosing() {
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    view_ = NULL;
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    run_loop_->Quit();
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Whether the experimental "landscape" app launcher UI is being tested.
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_landscape() const {
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return test_type_ == LANDSCAPE || test_type_ == EXPERIMENTAL;
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
1106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Switches the active launcher page in the contents view and lays out to
1116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // ensure all launcher pages are in the correct position.
1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void ShowContentsViewPageAndVerify(int index);
1136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Shows the app list and waits until a paint occurs.
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Show();
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Closes the app list. This sets |view_| to NULL.
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Close();
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Gets the PaginationModel owned by |view_|.
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PaginationModel* GetPaginationModel();
12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const TestType test_type_;
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<base::RunLoop> run_loop_;
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  app_list::AppListView* view_;  // Owned by native widget.
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  app_list::test::AppListTestViewDelegate* delegate_;  // Owned by |view_|;
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppListViewTestContext);
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Extend the regular AppListTestViewDelegate to communicate back to the test
132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// context. Note the test context doesn't simply inherit this, because the
133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// delegate is owned by the view.
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class UnitTestViewDelegate : public app_list::test::AppListTestViewDelegate {
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UnitTestViewDelegate(AppListViewTestContext* parent) : parent_(parent) {}
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Overridden from app_list::AppListViewDelegate:
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool ShouldCenterWindow() const OVERRIDE {
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return app_list::switches::IsCenteredAppListEnabled();
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Overridden from app_list::test::AppListTestViewDelegate:
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void ViewClosing() OVERRIDE { parent_->NativeWidgetClosing(); }
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListViewTestContext* parent_;
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UnitTestViewDelegate);
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AppListViewTestContext::AppListViewTestContext(int test_type,
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                               aura::Window* parent)
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : test_type_(static_cast<TestType>(test_type)) {
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (test_type_) {
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case NORMAL:
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case LANDSCAPE:
159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::CommandLine::ForCurrentProcess()->AppendSwitch(
160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          switches::kEnableCenteredAppList);
161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case EXPERIMENTAL:
163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      base::CommandLine::ForCurrentProcess()->AppendSwitch(
164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          switches::kEnableExperimentalAppList);
165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    default:
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      NOTREACHED();
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  delegate_ = new UnitTestViewDelegate(this);
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_ = new app_list::AppListView(delegate_);
173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Initialize centered around a point that ensures the window is wholly shown.
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_->InitAsBubbleAtFixedLocation(parent,
17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                     0,
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     gfx::Point(300, 300),
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     views::BubbleBorder::FLOAT,
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     false /* border_accepts_events */);
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AppListViewTestContext::~AppListViewTestContext() {
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The view observes the PaginationModel which is about to get destroyed, so
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // if the view is not already deleted by the time this destructor is called,
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // there will be problems.
186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_);
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::CheckView(views::View* subview) {
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ASSERT_TRUE(subview);
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(subview->parent());
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(subview->visible());
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(subview->IsDrawn());
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void AppListViewTestContext::ShowContentsViewPageAndVerify(int index) {
1986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  ContentsView* contents_view = view_->app_list_main_view()->contents_view();
1996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  contents_view->SetActivePage(index);
2006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  contents_view->Layout();
2016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  for (int i = 0; i < contents_view->NumLauncherPages(); ++i) {
2026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_EQ(i == index, IsViewAtOrigin(contents_view->GetPageView(i)));
2036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
2056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::Show() {
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_->GetWidget()->Show();
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  run_loop_.reset(new base::RunLoop);
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_->SetNextPaintCallback(run_loop_->QuitClosure());
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  run_loop_->Run();
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(view_->GetWidget()->IsVisible());
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::Close() {
216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_->GetWidget()->Close();
217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  run_loop_.reset(new base::RunLoop);
218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  run_loop_->Run();
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // |view_| should have been deleted and set to NULL via ViewClosing().
221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_);
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)PaginationModel* AppListViewTestContext::GetPaginationModel() {
22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return view_->GetAppsPaginationModel();
22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunDisplayTest() {
229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(-1, GetPaginationModel()->total_pages());
231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  delegate_->GetTestModel()->PopulateApps(kInitialItems);
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Show();
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (is_landscape())
23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(2, GetPaginationModel()->total_pages());
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  else
23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(3, GetPaginationModel()->total_pages());
23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(0, GetPaginationModel()->selected_page());
239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Checks on the main view.
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListMainView* main_view = view_->app_list_main_view();
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view->search_box_view()));
244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view()));
245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Close();
247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunReshowWithOpenFolderTest() {
250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(-1, GetPaginationModel()->total_pages());
252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListTestModel* model = delegate_->GetTestModel();
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  model->PopulateApps(kInitialItems);
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const std::string folder_id =
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      model->MergeItems(model->top_level_item_list()->item_at(0)->id(),
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        model->top_level_item_list()->item_at(1)->id());
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListFolderItem* folder_item = model->FindFolderItem(folder_id);
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_TRUE(folder_item);
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Show();
263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The main grid view should be showing initially.
265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListMainView* main_view = view_->app_list_main_view();
266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppsContainerView* container_view =
267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      main_view->contents_view()->apps_container_view();
268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(container_view->apps_grid_view()));
270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(container_view->app_list_folder_view()->visible());
271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppsGridViewTestApi test_api(container_view->apps_grid_view());
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  test_api.PressItemAt(0);
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // After pressing the folder item, the folder view should be showing.
276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(container_view->app_list_folder_view()));
278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(container_view->apps_grid_view()->visible());
279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  view_->GetWidget()->Hide();
281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
283cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Show();
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The main grid view should be showing after a reshow.
286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(container_view->apps_grid_view()));
288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(container_view->app_list_folder_view()->visible());
289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Close();
291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestContext::RunStartPageTest() {
294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(-1, GetPaginationModel()->total_pages());
296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListTestModel* model = delegate_->GetTestModel();
297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  model->PopulateApps(3);
298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Show();
300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListMainView* main_view = view_->app_list_main_view();
302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  StartPageView* start_page_view =
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      main_view->contents_view()->start_page_view();
304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Checks on the main view.
305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view()));
307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view));
309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ContentsView* contents_view = main_view->contents_view();
3116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage(
312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        ContentsView::NAMED_PAGE_START));
313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_FALSE(main_view->search_box_view()->visible());
314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(3u, GetVisibleTileItemViews(start_page_view->tile_views()));
315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
3166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ShowContentsViewPageAndVerify(
317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS));
318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_TRUE(main_view->search_box_view()->visible());
319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Check tiles hide and show on deletion and addition.
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    model->CreateAndAddItem("Test app");
322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(4u, GetVisibleTileItemViews(start_page_view->tile_views()));
323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    model->DeleteItem(model->GetItemName(0));
324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(3u, GetVisibleTileItemViews(start_page_view->tile_views()));
325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  } else {
326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(NULL, start_page_view);
327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Close();
330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
3326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void AppListViewTestContext::RunPageSwitchingAnimationTest() {
3336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
3346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    Show();
3356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    AppListMainView* main_view = view_->app_list_main_view();
3376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Checks on the main view.
3386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_NO_FATAL_FAILURE(CheckView(main_view));
3396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_NO_FATAL_FAILURE(CheckView(main_view->contents_view()));
3406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ContentsView* contents_view = main_view->contents_view();
3426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Pad the ContentsView with blank pages so we have at least 3 views.
3436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    while (contents_view->NumLauncherPages() < 3)
3446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      contents_view->AddBlankPageForTesting();
3456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->SetActivePage(0);
3476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->Layout();
3486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0)));
3496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1)));
3506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2)));
3516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Change pages. View should not have moved without Layout().
3536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->SetActivePage(1);
3546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0)));
3556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1)));
3566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2)));
3576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Change to a third page. This queues up the second animation behind the
3596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // first.
3606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->SetActivePage(2);
3616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(0)));
3626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1)));
3636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(2)));
3646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Call Layout(). Should jump to the third page.
3666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->Layout();
3676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(0)));
3686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(IsViewAtOrigin(contents_view->GetPageView(1)));
3696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->GetPageView(2)));
3706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
3716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  Close();
3736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
3746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
37546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void AppListViewTestContext::RunProfileChangeTest() {
37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
37746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(-1, GetPaginationModel()->total_pages());
37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  delegate_->GetTestModel()->PopulateApps(kInitialItems);
37946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
38046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  Show();
38146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
38246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (is_landscape())
38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(2, GetPaginationModel()->total_pages());
38446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  else
38546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(3, GetPaginationModel()->total_pages());
38646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
38746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Change the profile. The original model needs to be kept alive for
38846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // observers to unregister themselves.
38946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<AppListTestModel> original_test_model(
39046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      delegate_->ReleaseTestModel());
39146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  delegate_->set_next_profile_app_count(1);
39246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
39346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // The original ContentsView is destroyed here.
39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  view_->SetProfileByPath(base::FilePath());
39546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(1, GetPaginationModel()->total_pages());
39646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
39746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  StartPageView* start_page_view =
39846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      view_->app_list_main_view()->contents_view()->start_page_view();
399f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ContentsSwitcherView* contents_switcher_view =
400f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      view_->app_list_main_view()->contents_switcher_view();
40146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_NO_FATAL_FAILURE(CheckView(contents_switcher_view));
403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_EQ(view_->app_list_main_view()->contents_view(),
404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              contents_switcher_view->contents_view());
40546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view));
40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views()));
40746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  } else {
408f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_EQ(NULL, contents_switcher_view);
40946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(NULL, start_page_view);
41046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
41146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
41246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // New model updates should be processed by the start page view.
41346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  delegate_->GetTestModel()->CreateAndAddItem("Test App");
41446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (test_type_ == EXPERIMENTAL)
41546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(2u, GetVisibleTileItemViews(start_page_view->tile_views()));
41646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
41746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Old model updates should be ignored.
41846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  original_test_model->CreateAndAddItem("Test App 2");
41946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (test_type_ == EXPERIMENTAL)
42046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    EXPECT_EQ(2u, GetVisibleTileItemViews(start_page_view->tile_views()));
42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
42246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  Close();
42346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
42446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void AppListViewTestContext::RunSearchResultsTest() {
426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FALSE(view_->GetWidget()->IsVisible());
427f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(-1, GetPaginationModel()->total_pages());
428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AppListTestModel* model = delegate_->GetTestModel();
429f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  model->PopulateApps(3);
430f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
431f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Show();
432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AppListMainView* main_view = view_->app_list_main_view();
434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ContentsView* contents_view = main_view->contents_view();
4356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  ShowContentsViewPageAndVerify(
436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS));
437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(IsViewAtOrigin(contents_view->apps_container_view()));
438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(main_view->search_box_view()->visible());
439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
440f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Show the search results.
441f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  contents_view->ShowSearchResults(true);
442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  contents_view->Layout();
443f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(contents_view->IsShowingSearchResults());
444f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(main_view->search_box_view()->visible());
445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(
448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_START));
449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->start_page_view()));
450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  } else {
451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(contents_view->IsNamedPageActive(
452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        ContentsView::NAMED_PAGE_SEARCH_RESULTS));
453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->search_results_view()));
454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
456f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Hide the search results.
457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  contents_view->ShowSearchResults(false);
458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  contents_view->Layout();
459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_FALSE(contents_view->IsShowingSearchResults());
460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(
462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_START));
463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->start_page_view()));
464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_FALSE(main_view->search_box_view()->visible());
465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  } else {
466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(
467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_APPS));
468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->apps_container_view()));
469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_TRUE(main_view->search_box_view()->visible());
470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
4726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (test_type_ == EXPERIMENTAL) {
4736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Check that typing into the dummy search box triggers the search page.
4746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    base::string16 search_text = base::UTF8ToUTF16("test");
4756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    SearchBoxView* dummy_search_box =
4766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        contents_view->start_page_view()->dummy_search_box_view();
4776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(dummy_search_box->IsDrawn());
4786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    dummy_search_box->search_box()->InsertText(search_text);
4796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    contents_view->Layout();
4806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Check that the current search is using |search_text|.
4816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_EQ(search_text, delegate_->GetTestModel()->search_box()->text());
4826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(contents_view->IsShowingSearchResults());
4836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(dummy_search_box->IsDrawn());
4846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(main_view->search_box_view()->visible());
4856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_EQ(search_text, main_view->search_box_view()->search_box()->text());
4866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(
4876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        contents_view->IsNamedPageActive(ContentsView::NAMED_PAGE_START));
4886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->start_page_view()));
4896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
4906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Check that typing into the real search box triggers the search page.
4916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ShowContentsViewPageAndVerify(
4926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS));
4936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(IsViewAtOrigin(contents_view->apps_container_view()));
4946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
4956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    base::string16 new_search_text = base::UTF8ToUTF16("apple");
4966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    main_view->search_box_view()->search_box()->SetText(base::string16());
4976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    main_view->search_box_view()->search_box()->InsertText(new_search_text);
4986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Check that the current search is using |search_text|.
4996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_EQ(new_search_text, delegate_->GetTestModel()->search_box()->text());
5006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_EQ(new_search_text,
5016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)              main_view->search_box_view()->search_box()->text());
5026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(contents_view->IsShowingSearchResults());
5036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_FALSE(dummy_search_box->IsDrawn());
5046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(main_view->search_box_view()->visible());
5056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(dummy_search_box->search_box()->text().empty());
5066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
5076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    // Check that the dummy search box is clear when reshowing the start page.
5086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ShowContentsViewPageAndVerify(
5096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        contents_view->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS));
5106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage(
5116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        ContentsView::NAMED_PAGE_START));
5126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(dummy_search_box->IsDrawn());
5136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    EXPECT_TRUE(dummy_search_box->search_box()->text().empty());
5146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
5156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
516f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Close();
517f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
518f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
519cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestAura : public views::ViewsTestBase,
520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            public ::testing::WithParamInterface<int> {
521cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListViewTestAura() {}
523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~AppListViewTestAura() {}
524cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // testing::Test overrides:
526cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
527cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ViewsTestBase::SetUp();
528cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    test_context_.reset(new AppListViewTestContext(GetParam(), GetContext()));
529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    test_context_.reset();
533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ViewsTestBase::TearDown();
534cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
535cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
536cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected:
537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<AppListViewTestContext> test_context_;
538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppListViewTestAura);
541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class AppListViewTestDesktop : public views::ViewsTestBase,
544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                               public ::testing::WithParamInterface<int> {
545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  AppListViewTestDesktop() {}
547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~AppListViewTestDesktop() {}
548cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
549cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // testing::Test overrides:
550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
551cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    set_views_delegate(new AppListViewTestViewsDelegate(this));
552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ViewsTestBase::SetUp();
553cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    test_context_.reset(new AppListViewTestContext(GetParam(), NULL));
554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
557cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    test_context_.reset();
558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ViewsTestBase::TearDown();
559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected:
562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<AppListViewTestContext> test_context_;
563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
564cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
565cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  class AppListViewTestViewsDelegate : public views::TestViewsDelegate {
566cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   public:
567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    AppListViewTestViewsDelegate(AppListViewTestDesktop* parent)
568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        : parent_(parent) {}
569cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Overridden from views::ViewsDelegate:
571cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    virtual void OnBeforeWidgetInit(
572cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        views::Widget::InitParams* params,
573cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        views::internal::NativeWidgetDelegate* delegate) OVERRIDE;
574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
575cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   private:
576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    AppListViewTestDesktop* parent_;
577cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(AppListViewTestViewsDelegate);
579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  };
580cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
581cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppListViewTestDesktop);
582cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
583cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AppListViewTestDesktop::AppListViewTestViewsDelegate::OnBeforeWidgetInit(
585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::Widget::InitParams* params,
586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::internal::NativeWidgetDelegate* delegate) {
587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Mimic the logic in ChromeViewsDelegate::OnBeforeWidgetInit(). Except, for
588cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// ChromeOS, use the root window from the AuraTestHelper rather than depending
589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// on ash::Shell:GetPrimaryRootWindow(). Also assume non-ChromeOS is never the
590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Ash desktop, as that is covered by AppListViewTestAura.
591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS)
592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!params->parent && !params->context)
593cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    params->context = parent_->GetContext();
594cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#elif defined(USE_AURA)
595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (params->parent == NULL && params->context == NULL && !params->child)
596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    params->native_widget = new views::DesktopNativeWidgetAura(delegate);
597cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
599cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
600cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace
601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests showing the app list with basic test model in an ash-style root window.
603cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, Display) {
604cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunDisplayTest());
605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests showing the app list on the desktop. Note on ChromeOS, this will still
608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// use the regular root window.
609cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, Display) {
610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunDisplayTest());
611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
612cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
613cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests that the main grid view is shown after hiding and reshowing the app
614cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// list with a folder view open. This is a regression test for crbug.com/357058.
615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, ReshowWithOpenFolder) {
616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunReshowWithOpenFolderTest());
617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, ReshowWithOpenFolder) {
620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunReshowWithOpenFolderTest());
621cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
622cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Tests that the start page view operates correctly.
624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestAura, StartPageTest) {
625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunStartPageTest());
626cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
627cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
628cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(AppListViewTestDesktop, StartPageTest) {
629cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunStartPageTest());
6306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
6316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Tests that the start page view operates correctly.
6336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_P(AppListViewTestAura, PageSwitchingAnimationTest) {
6346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunPageSwitchingAnimationTest());
6356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
6366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
6376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_P(AppListViewTestDesktop, PageSwitchingAnimationTest) {
6386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunPageSwitchingAnimationTest());
639cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
640cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
64146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Tests that the profile changes operate correctly.
64246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_P(AppListViewTestAura, ProfileChangeTest) {
64346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunProfileChangeTest());
64446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
64546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
64646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_P(AppListViewTestDesktop, ProfileChangeTest) {
64746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunProfileChangeTest());
64846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
64946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
650f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Tests that the correct views are displayed for showing search results.
651f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AppListViewTestAura, SearchResultsTest) {
652f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunSearchResultsTest());
653f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
654f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
655f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(AppListViewTestDesktop, SearchResultsTest) {
656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_NO_FATAL_FAILURE(test_context_->RunSearchResultsTest());
657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(AppListViewTestAuraInstance,
660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        AppListViewTestAura,
661cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        ::testing::Range<int>(TEST_TYPE_START, TEST_TYPE_END));
662cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
663cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(AppListViewTestDesktopInstance,
664cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        AppListViewTestDesktop,
665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        ::testing::Range<int>(TEST_TYPE_START, TEST_TYPE_END));
666cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
667cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace test
668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace app_list
669