1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/app_list/views/app_list_view.h"
7 #include "base/command_line.h"
8 #include "base/run_loop.h"
9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/app_list/app_list_switches.h"
13 #include "ui/app_list/pagination_model.h"
14 #include "ui/app_list/search_box_model.h"
15 #include "ui/app_list/test/app_list_test_model.h"
16 #include "ui/app_list/test/app_list_test_view_delegate.h"
17 #include "ui/app_list/views/app_list_folder_view.h"
18 #include "ui/app_list/views/app_list_main_view.h"
19 #include "ui/app_list/views/apps_container_view.h"
20 #include "ui/app_list/views/apps_grid_view.h"
21 #include "ui/app_list/views/contents_switcher_view.h"
22 #include "ui/app_list/views/contents_view.h"
23 #include "ui/app_list/views/search_box_view.h"
24 #include "ui/app_list/views/search_result_list_view.h"
25 #include "ui/app_list/views/start_page_view.h"
26 #include "ui/app_list/views/test/apps_grid_view_test_api.h"
27 #include "ui/app_list/views/tile_item_view.h"
28 #include "ui/views/controls/textfield/textfield.h"
29 #include "ui/views/test/views_test_base.h"
30 #include "ui/views/views_delegate.h"
31 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
40 NORMAL
= TEST_TYPE_START
,
46 bool IsViewAtOrigin(views::View
* view
) {
47 return view
->bounds().origin().IsOrigin();
50 size_t GetVisibleTileItemViews(const std::vector
<TileItemView
*>& tiles
) {
52 for (std::vector
<TileItemView
*>::const_iterator it
= tiles
.begin();
61 // Choose a set that is 3 regular app list pages and 2 landscape app list pages.
62 const int kInitialItems
= 34;
64 class TestTileSearchResult
: public SearchResult
{
66 TestTileSearchResult() { set_display_type(DISPLAY_TILE
); }
67 virtual ~TestTileSearchResult() {}
70 DISALLOW_COPY_AND_ASSIGN(TestTileSearchResult
);
73 // Allows the same tests to run with different contexts: either an Ash-style
74 // root window or a desktop window tree host.
75 class AppListViewTestContext
{
77 AppListViewTestContext(int test_type
, gfx::NativeView parent
);
78 ~AppListViewTestContext();
80 // Test displaying the app list and performs a standard set of checks on its
81 // top level views. Then closes the window.
82 void RunDisplayTest();
84 // Hides and reshows the app list with a folder open, expecting the main grid
86 void RunReshowWithOpenFolderTest();
88 // Tests displaying of the experimental app list and shows the start page.
89 void RunStartPageTest();
91 // Tests switching rapidly between multiple pages of the launcher.
92 void RunPageSwitchingAnimationTest();
94 // Tests changing the App List profile.
95 void RunProfileChangeTest();
97 // Tests displaying of the search results.
98 void RunSearchResultsTest();
100 // A standard set of checks on a view, e.g., ensuring it is drawn and visible.
101 static void CheckView(views::View
* subview
);
103 // Invoked when the Widget is closing, and the view it contains is about to
104 // be torn down. This only occurs in a run loop and will be used as a signal
106 void NativeWidgetClosing() {
111 // Whether the experimental "landscape" app launcher UI is being tested.
112 bool is_landscape() const {
113 return test_type_
== LANDSCAPE
|| test_type_
== EXPERIMENTAL
;
117 // Switches the active launcher page in the contents view and lays out to
118 // ensure all launcher pages are in the correct position.
119 void ShowContentsViewPageAndVerify(int index
);
121 // Shows the app list and waits until a paint occurs.
124 // Closes the app list. This sets |view_| to NULL.
127 // Gets the PaginationModel owned by |view_|.
128 PaginationModel
* GetPaginationModel();
130 const TestType test_type_
;
131 scoped_ptr
<base::RunLoop
> run_loop_
;
132 app_list::AppListView
* view_
; // Owned by native widget.
133 scoped_ptr
<app_list::test::AppListTestViewDelegate
> delegate_
;
135 DISALLOW_COPY_AND_ASSIGN(AppListViewTestContext
);
138 // Extend the regular AppListTestViewDelegate to communicate back to the test
139 // context. Note the test context doesn't simply inherit this, because the
140 // delegate is owned by the view.
141 class UnitTestViewDelegate
: public app_list::test::AppListTestViewDelegate
{
143 UnitTestViewDelegate(AppListViewTestContext
* parent
) : parent_(parent
) {}
145 // Overridden from app_list::AppListViewDelegate:
146 virtual bool ShouldCenterWindow() const OVERRIDE
{
147 return app_list::switches::IsCenteredAppListEnabled();
150 // Overridden from app_list::test::AppListTestViewDelegate:
151 virtual void ViewClosing() OVERRIDE
{ parent_
->NativeWidgetClosing(); }
154 AppListViewTestContext
* parent_
;
156 DISALLOW_COPY_AND_ASSIGN(UnitTestViewDelegate
);
159 AppListViewTestContext::AppListViewTestContext(int test_type
,
160 gfx::NativeView parent
)
161 : test_type_(static_cast<TestType
>(test_type
)) {
162 switch (test_type_
) {
166 base::CommandLine::ForCurrentProcess()->AppendSwitch(
167 switches::kEnableCenteredAppList
);
170 base::CommandLine::ForCurrentProcess()->AppendSwitch(
171 switches::kEnableExperimentalAppList
);
178 delegate_
.reset(new UnitTestViewDelegate(this));
179 view_
= new app_list::AppListView(delegate_
.get());
181 // Initialize centered around a point that ensures the window is wholly shown.
182 view_
->InitAsBubbleAtFixedLocation(parent
,
184 gfx::Point(300, 300),
185 views::BubbleBorder::FLOAT
,
186 false /* border_accepts_events */);
189 AppListViewTestContext::~AppListViewTestContext() {
190 // The view observes the PaginationModel which is about to get destroyed, so
191 // if the view is not already deleted by the time this destructor is called,
192 // there will be problems.
197 void AppListViewTestContext::CheckView(views::View
* subview
) {
198 ASSERT_TRUE(subview
);
199 EXPECT_TRUE(subview
->parent());
200 EXPECT_TRUE(subview
->visible());
201 EXPECT_TRUE(subview
->IsDrawn());
204 void AppListViewTestContext::ShowContentsViewPageAndVerify(int index
) {
205 ContentsView
* contents_view
= view_
->app_list_main_view()->contents_view();
206 contents_view
->SetActivePage(index
);
207 contents_view
->Layout();
208 for (int i
= 0; i
< contents_view
->NumLauncherPages(); ++i
) {
209 EXPECT_EQ(i
== index
, IsViewAtOrigin(contents_view
->GetPageView(i
)));
213 void AppListViewTestContext::Show() {
214 view_
->GetWidget()->Show();
215 run_loop_
.reset(new base::RunLoop
);
216 view_
->SetNextPaintCallback(run_loop_
->QuitClosure());
219 EXPECT_TRUE(view_
->GetWidget()->IsVisible());
222 void AppListViewTestContext::Close() {
223 view_
->GetWidget()->Close();
224 run_loop_
.reset(new base::RunLoop
);
227 // |view_| should have been deleted and set to NULL via ViewClosing().
231 PaginationModel
* AppListViewTestContext::GetPaginationModel() {
232 return view_
->GetAppsPaginationModel();
235 void AppListViewTestContext::RunDisplayTest() {
236 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
237 EXPECT_EQ(-1, GetPaginationModel()->total_pages());
238 delegate_
->GetTestModel()->PopulateApps(kInitialItems
);
242 // Explicitly enforce the exact dimensions of the app list. Feel free to
243 // change these if you need to (they are just here to prevent against
244 // accidental changes to the window size).
245 switch (test_type_
) {
247 EXPECT_EQ("400x500", view_
->bounds().size().ToString());
250 // NOTE: Height should not exceed 402, because otherwise there might not
251 // be enough space to accomodate the virtual keyboard. (LANDSCAPE mode is
252 // enabled by default when the virtual keyboard is enabled.)
253 EXPECT_EQ("576x402", view_
->bounds().size().ToString());
256 EXPECT_EQ("768x560", view_
->bounds().size().ToString());
264 EXPECT_EQ(2, GetPaginationModel()->total_pages());
266 EXPECT_EQ(3, GetPaginationModel()->total_pages());
267 EXPECT_EQ(0, GetPaginationModel()->selected_page());
269 // Checks on the main view.
270 AppListMainView
* main_view
= view_
->app_list_main_view();
271 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
272 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
->contents_view()));
274 EXPECT_TRUE(main_view
->contents_view()->IsNamedPageActive(
275 test_type_
== EXPERIMENTAL
? ContentsView::NAMED_PAGE_START
276 : ContentsView::NAMED_PAGE_APPS
));
281 void AppListViewTestContext::RunReshowWithOpenFolderTest() {
282 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
283 EXPECT_EQ(-1, GetPaginationModel()->total_pages());
285 AppListTestModel
* model
= delegate_
->GetTestModel();
286 model
->PopulateApps(kInitialItems
);
287 const std::string folder_id
=
288 model
->MergeItems(model
->top_level_item_list()->item_at(0)->id(),
289 model
->top_level_item_list()->item_at(1)->id());
291 AppListFolderItem
* folder_item
= model
->FindFolderItem(folder_id
);
292 EXPECT_TRUE(folder_item
);
296 // The main grid view should be showing initially.
297 AppListMainView
* main_view
= view_
->app_list_main_view();
298 AppsContainerView
* container_view
=
299 main_view
->contents_view()->apps_container_view();
300 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
301 EXPECT_NO_FATAL_FAILURE(CheckView(container_view
->apps_grid_view()));
302 EXPECT_FALSE(container_view
->app_list_folder_view()->visible());
304 AppsGridViewTestApi
test_api(container_view
->apps_grid_view());
305 test_api
.PressItemAt(0);
307 // After pressing the folder item, the folder view should be showing.
308 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
309 EXPECT_NO_FATAL_FAILURE(CheckView(container_view
->app_list_folder_view()));
310 EXPECT_FALSE(container_view
->apps_grid_view()->visible());
312 view_
->GetWidget()->Hide();
313 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
317 // The main grid view should be showing after a reshow.
318 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
319 EXPECT_NO_FATAL_FAILURE(CheckView(container_view
->apps_grid_view()));
320 EXPECT_FALSE(container_view
->app_list_folder_view()->visible());
325 void AppListViewTestContext::RunStartPageTest() {
326 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
327 EXPECT_EQ(-1, GetPaginationModel()->total_pages());
328 AppListTestModel
* model
= delegate_
->GetTestModel();
329 model
->PopulateApps(3);
333 AppListMainView
* main_view
= view_
->app_list_main_view();
334 StartPageView
* start_page_view
=
335 main_view
->contents_view()->start_page_view();
336 // Checks on the main view.
337 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
338 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
->contents_view()));
339 if (test_type_
== EXPERIMENTAL
) {
340 EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view
));
342 // Show the start page view.
343 ContentsView
* contents_view
= main_view
->contents_view();
344 ShowContentsViewPageAndVerify(contents_view
->GetPageIndexForNamedPage(
345 ContentsView::NAMED_PAGE_START
));
346 EXPECT_FALSE(main_view
->search_box_view()->visible());
348 gfx::Size
view_size(view_
->GetPreferredSize());
349 ShowContentsViewPageAndVerify(
350 contents_view
->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS
));
351 EXPECT_TRUE(main_view
->search_box_view()->visible());
353 // Hiding and showing the search box should not affect the app list's
354 // preferred size. This is a regression test for http://crbug.com/386912.
355 EXPECT_EQ(view_size
.ToString(), view_
->GetPreferredSize().ToString());
357 // Check tiles hide and show on deletion and addition.
358 model
->results()->Add(new TestTileSearchResult());
359 start_page_view
->UpdateForTesting();
360 EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view
->tile_views()));
361 model
->results()->DeleteAll();
362 start_page_view
->UpdateForTesting();
363 EXPECT_EQ(0u, GetVisibleTileItemViews(start_page_view
->tile_views()));
365 EXPECT_EQ(NULL
, start_page_view
);
371 void AppListViewTestContext::RunPageSwitchingAnimationTest() {
372 if (test_type_
== EXPERIMENTAL
) {
375 AppListMainView
* main_view
= view_
->app_list_main_view();
376 // Checks on the main view.
377 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
));
378 EXPECT_NO_FATAL_FAILURE(CheckView(main_view
->contents_view()));
380 ContentsView
* contents_view
= main_view
->contents_view();
381 // Pad the ContentsView with blank pages so we have at least 3 views.
382 while (contents_view
->NumLauncherPages() < 3)
383 contents_view
->AddBlankPageForTesting();
385 contents_view
->SetActivePage(0);
386 contents_view
->Layout();
387 EXPECT_TRUE(IsViewAtOrigin(contents_view
->GetPageView(0)));
388 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(1)));
389 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(2)));
391 // Change pages. View should not have moved without Layout().
392 contents_view
->SetActivePage(1);
393 EXPECT_TRUE(IsViewAtOrigin(contents_view
->GetPageView(0)));
394 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(1)));
395 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(2)));
397 // Change to a third page. This queues up the second animation behind the
399 contents_view
->SetActivePage(2);
400 EXPECT_TRUE(IsViewAtOrigin(contents_view
->GetPageView(0)));
401 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(1)));
402 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(2)));
404 // Call Layout(). Should jump to the third page.
405 contents_view
->Layout();
406 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(0)));
407 EXPECT_FALSE(IsViewAtOrigin(contents_view
->GetPageView(1)));
408 EXPECT_TRUE(IsViewAtOrigin(contents_view
->GetPageView(2)));
414 void AppListViewTestContext::RunProfileChangeTest() {
415 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
416 EXPECT_EQ(-1, GetPaginationModel()->total_pages());
417 delegate_
->GetTestModel()->PopulateApps(kInitialItems
);
422 EXPECT_EQ(2, GetPaginationModel()->total_pages());
424 EXPECT_EQ(3, GetPaginationModel()->total_pages());
426 // Change the profile. The original model needs to be kept alive for
427 // observers to unregister themselves.
428 scoped_ptr
<AppListTestModel
> original_test_model(
429 delegate_
->ReleaseTestModel());
430 delegate_
->set_next_profile_app_count(1);
432 // The original ContentsView is destroyed here.
433 view_
->SetProfileByPath(base::FilePath());
434 EXPECT_EQ(1, GetPaginationModel()->total_pages());
436 StartPageView
* start_page_view
=
437 view_
->app_list_main_view()->contents_view()->start_page_view();
438 ContentsSwitcherView
* contents_switcher_view
=
439 view_
->app_list_main_view()->contents_switcher_view();
440 if (test_type_
== EXPERIMENTAL
) {
441 EXPECT_NO_FATAL_FAILURE(CheckView(contents_switcher_view
));
442 EXPECT_EQ(view_
->app_list_main_view()->contents_view(),
443 contents_switcher_view
->contents_view());
444 EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view
));
446 EXPECT_EQ(NULL
, contents_switcher_view
);
447 EXPECT_EQ(NULL
, start_page_view
);
450 // New model updates should be processed by the start page view.
451 delegate_
->GetTestModel()->results()->Add(new TestTileSearchResult());
452 if (test_type_
== EXPERIMENTAL
) {
453 start_page_view
->UpdateForTesting();
454 EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view
->tile_views()));
457 // Old model updates should be ignored.
458 original_test_model
->results()->Add(new TestTileSearchResult());
459 original_test_model
->results()->Add(new TestTileSearchResult());
460 if (test_type_
== EXPERIMENTAL
) {
461 start_page_view
->UpdateForTesting();
462 EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view
->tile_views()));
468 void AppListViewTestContext::RunSearchResultsTest() {
469 EXPECT_FALSE(view_
->GetWidget()->IsVisible());
470 EXPECT_EQ(-1, GetPaginationModel()->total_pages());
471 AppListTestModel
* model
= delegate_
->GetTestModel();
472 model
->PopulateApps(3);
476 AppListMainView
* main_view
= view_
->app_list_main_view();
477 ContentsView
* contents_view
= main_view
->contents_view();
478 ShowContentsViewPageAndVerify(
479 contents_view
->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS
));
480 EXPECT_TRUE(main_view
->search_box_view()->visible());
482 // Show the search results.
483 contents_view
->ShowSearchResults(true);
484 contents_view
->Layout();
485 EXPECT_TRUE(contents_view
->IsShowingSearchResults());
486 EXPECT_TRUE(main_view
->search_box_view()->visible());
488 if (test_type_
== EXPERIMENTAL
) {
490 contents_view
->IsNamedPageActive(ContentsView::NAMED_PAGE_START
));
491 EXPECT_TRUE(IsViewAtOrigin(contents_view
->start_page_view()));
493 EXPECT_TRUE(contents_view
->IsNamedPageActive(
494 ContentsView::NAMED_PAGE_SEARCH_RESULTS
));
495 EXPECT_TRUE(IsViewAtOrigin(contents_view
->search_results_view()));
498 // Hide the search results.
499 contents_view
->ShowSearchResults(false);
500 contents_view
->Layout();
501 EXPECT_FALSE(contents_view
->IsShowingSearchResults());
503 // Check that we return to the page that we were on before the search.
504 EXPECT_TRUE(contents_view
->IsNamedPageActive(ContentsView::NAMED_PAGE_APPS
));
505 EXPECT_TRUE(IsViewAtOrigin(contents_view
->apps_container_view()));
506 EXPECT_TRUE(main_view
->search_box_view()->visible());
508 if (test_type_
== EXPERIMENTAL
) {
509 ShowContentsViewPageAndVerify(contents_view
->GetPageIndexForNamedPage(
510 ContentsView::NAMED_PAGE_START
));
512 // Check that typing into the dummy search box triggers the search page.
513 base::string16 search_text
= base::UTF8ToUTF16("test");
514 SearchBoxView
* dummy_search_box
=
515 contents_view
->start_page_view()->dummy_search_box_view();
516 EXPECT_TRUE(dummy_search_box
->IsDrawn());
517 dummy_search_box
->search_box()->InsertText(search_text
);
518 contents_view
->Layout();
519 // Check that the current search is using |search_text|.
520 EXPECT_EQ(search_text
, delegate_
->GetTestModel()->search_box()->text());
521 EXPECT_TRUE(contents_view
->IsShowingSearchResults());
522 EXPECT_FALSE(dummy_search_box
->IsDrawn());
523 EXPECT_TRUE(main_view
->search_box_view()->visible());
524 EXPECT_EQ(search_text
, main_view
->search_box_view()->search_box()->text());
526 contents_view
->IsNamedPageActive(ContentsView::NAMED_PAGE_START
));
527 EXPECT_TRUE(IsViewAtOrigin(contents_view
->start_page_view()));
529 // Check that typing into the real search box triggers the search page.
530 ShowContentsViewPageAndVerify(
531 contents_view
->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS
));
532 EXPECT_TRUE(IsViewAtOrigin(contents_view
->apps_container_view()));
534 base::string16 new_search_text
= base::UTF8ToUTF16("apple");
535 main_view
->search_box_view()->search_box()->SetText(base::string16());
536 main_view
->search_box_view()->search_box()->InsertText(new_search_text
);
537 // Check that the current search is using |search_text|.
538 EXPECT_EQ(new_search_text
, delegate_
->GetTestModel()->search_box()->text());
539 EXPECT_EQ(new_search_text
,
540 main_view
->search_box_view()->search_box()->text());
541 EXPECT_TRUE(contents_view
->IsShowingSearchResults());
542 EXPECT_FALSE(dummy_search_box
->IsDrawn());
543 EXPECT_TRUE(main_view
->search_box_view()->visible());
544 EXPECT_TRUE(dummy_search_box
->search_box()->text().empty());
546 // Check that the dummy search box is clear when reshowing the start page.
547 ShowContentsViewPageAndVerify(
548 contents_view
->GetPageIndexForNamedPage(ContentsView::NAMED_PAGE_APPS
));
549 ShowContentsViewPageAndVerify(contents_view
->GetPageIndexForNamedPage(
550 ContentsView::NAMED_PAGE_START
));
551 EXPECT_TRUE(dummy_search_box
->IsDrawn());
552 EXPECT_TRUE(dummy_search_box
->search_box()->text().empty());
558 class AppListViewTestAura
: public views::ViewsTestBase
,
559 public ::testing::WithParamInterface
<int> {
561 AppListViewTestAura() {}
562 virtual ~AppListViewTestAura() {}
564 // testing::Test overrides:
565 virtual void SetUp() OVERRIDE
{
566 views::ViewsTestBase::SetUp();
568 // On Ash (only) the app list is placed into an aura::Window "container",
569 // which is also used to determine the context. In tests, use the ash root
570 // window as the parent. This only works on aura where the root window is a
571 // NativeView as well as a NativeWindow.
572 gfx::NativeView container
= NULL
;
573 #if defined(USE_AURA)
574 container
= GetContext();
577 test_context_
.reset(new AppListViewTestContext(GetParam(), container
));
580 virtual void TearDown() OVERRIDE
{
581 test_context_
.reset();
582 views::ViewsTestBase::TearDown();
586 scoped_ptr
<AppListViewTestContext
> test_context_
;
589 DISALLOW_COPY_AND_ASSIGN(AppListViewTestAura
);
592 class AppListViewTestDesktop
: public views::ViewsTestBase
,
593 public ::testing::WithParamInterface
<int> {
595 AppListViewTestDesktop() {}
596 virtual ~AppListViewTestDesktop() {}
598 // testing::Test overrides:
599 virtual void SetUp() OVERRIDE
{
600 set_views_delegate(new AppListViewTestViewsDelegate(this));
601 views::ViewsTestBase::SetUp();
602 test_context_
.reset(new AppListViewTestContext(GetParam(), NULL
));
605 virtual void TearDown() OVERRIDE
{
606 test_context_
.reset();
607 views::ViewsTestBase::TearDown();
611 scoped_ptr
<AppListViewTestContext
> test_context_
;
614 class AppListViewTestViewsDelegate
: public views::TestViewsDelegate
{
616 AppListViewTestViewsDelegate(AppListViewTestDesktop
* parent
)
619 // Overridden from views::ViewsDelegate:
620 virtual void OnBeforeWidgetInit(
621 views::Widget::InitParams
* params
,
622 views::internal::NativeWidgetDelegate
* delegate
) OVERRIDE
;
625 AppListViewTestDesktop
* parent_
;
627 DISALLOW_COPY_AND_ASSIGN(AppListViewTestViewsDelegate
);
630 DISALLOW_COPY_AND_ASSIGN(AppListViewTestDesktop
);
633 void AppListViewTestDesktop::AppListViewTestViewsDelegate::OnBeforeWidgetInit(
634 views::Widget::InitParams
* params
,
635 views::internal::NativeWidgetDelegate
* delegate
) {
636 // Mimic the logic in ChromeViewsDelegate::OnBeforeWidgetInit(). Except, for
637 // ChromeOS, use the root window from the AuraTestHelper rather than depending
638 // on ash::Shell:GetPrimaryRootWindow(). Also assume non-ChromeOS is never the
639 // Ash desktop, as that is covered by AppListViewTestAura.
640 #if defined(OS_CHROMEOS)
641 if (!params
->parent
&& !params
->context
)
642 params
->context
= parent_
->GetContext();
643 #elif defined(USE_AURA)
644 if (params
->parent
== NULL
&& params
->context
== NULL
&& !params
->child
)
645 params
->native_widget
= new views::DesktopNativeWidgetAura(delegate
);
651 // Tests showing the app list with basic test model in an ash-style root window.
652 TEST_P(AppListViewTestAura
, Display
) {
653 EXPECT_NO_FATAL_FAILURE(test_context_
->RunDisplayTest());
656 // Tests showing the app list on the desktop. Note on ChromeOS, this will still
657 // use the regular root window.
658 TEST_P(AppListViewTestDesktop
, Display
) {
659 EXPECT_NO_FATAL_FAILURE(test_context_
->RunDisplayTest());
662 // Tests that the main grid view is shown after hiding and reshowing the app
663 // list with a folder view open. This is a regression test for crbug.com/357058.
664 TEST_P(AppListViewTestAura
, ReshowWithOpenFolder
) {
665 EXPECT_NO_FATAL_FAILURE(test_context_
->RunReshowWithOpenFolderTest());
668 TEST_P(AppListViewTestDesktop
, ReshowWithOpenFolder
) {
669 EXPECT_NO_FATAL_FAILURE(test_context_
->RunReshowWithOpenFolderTest());
672 // Tests that the start page view operates correctly.
673 TEST_P(AppListViewTestAura
, StartPageTest
) {
674 EXPECT_NO_FATAL_FAILURE(test_context_
->RunStartPageTest());
677 TEST_P(AppListViewTestDesktop
, StartPageTest
) {
678 EXPECT_NO_FATAL_FAILURE(test_context_
->RunStartPageTest());
681 // Tests that the start page view operates correctly.
682 TEST_P(AppListViewTestAura
, PageSwitchingAnimationTest
) {
683 EXPECT_NO_FATAL_FAILURE(test_context_
->RunPageSwitchingAnimationTest());
686 TEST_P(AppListViewTestDesktop
, PageSwitchingAnimationTest
) {
687 EXPECT_NO_FATAL_FAILURE(test_context_
->RunPageSwitchingAnimationTest());
690 // Tests that the profile changes operate correctly.
691 TEST_P(AppListViewTestAura
, ProfileChangeTest
) {
692 EXPECT_NO_FATAL_FAILURE(test_context_
->RunProfileChangeTest());
695 TEST_P(AppListViewTestDesktop
, ProfileChangeTest
) {
696 EXPECT_NO_FATAL_FAILURE(test_context_
->RunProfileChangeTest());
699 // Tests that the correct views are displayed for showing search results.
700 TEST_P(AppListViewTestAura
, SearchResultsTest
) {
701 EXPECT_NO_FATAL_FAILURE(test_context_
->RunSearchResultsTest());
704 TEST_P(AppListViewTestDesktop
, SearchResultsTest
) {
705 EXPECT_NO_FATAL_FAILURE(test_context_
->RunSearchResultsTest());
708 INSTANTIATE_TEST_CASE_P(AppListViewTestAuraInstance
,
710 ::testing::Range
<int>(TEST_TYPE_START
, TEST_TYPE_END
));
712 INSTANTIATE_TEST_CASE_P(AppListViewTestDesktopInstance
,
713 AppListViewTestDesktop
,
714 ::testing::Range
<int>(TEST_TYPE_START
, TEST_TYPE_END
));
717 } // namespace app_list