1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ui/app_list/views/app_list_main_view.h" 6 7#include "testing/gtest/include/gtest/gtest.h" 8#include "ui/app_list/pagination_model.h" 9#include "ui/app_list/test/app_list_test_model.h" 10#include "ui/app_list/test/app_list_test_view_delegate.h" 11#include "ui/app_list/views/apps_container_view.h" 12#include "ui/app_list/views/apps_grid_view.h" 13#include "ui/app_list/views/contents_view.h" 14#include "ui/views/test/views_test_base.h" 15#include "ui/views/view_model.h" 16#include "ui/views/widget/widget.h" 17 18namespace app_list { 19namespace test { 20 21namespace { 22 23const int kInitialItems = 2; 24 25class AppListMainViewTest : public views::ViewsTestBase { 26 public: 27 AppListMainViewTest() 28 : widget_(NULL), 29 main_view_(NULL) {} 30 31 virtual ~AppListMainViewTest() {} 32 33 // testing::Test overrides: 34 virtual void SetUp() OVERRIDE { 35 views::ViewsTestBase::SetUp(); 36 delegate_.reset(new AppListTestViewDelegate); 37 delegate_->GetTestModel()->PopulateApps(kInitialItems); 38 39 main_view_ = 40 new AppListMainView(delegate_.get(), &pagination_model_, GetContext()); 41 main_view_->SetPaintToLayer(true); 42 43 widget_ = new views::Widget; 44 views::Widget::InitParams params = 45 CreateParams(views::Widget::InitParams::TYPE_POPUP); 46 params.bounds.set_size(main_view_->GetPreferredSize()); 47 widget_->Init(params); 48 49 widget_->SetContentsView(main_view_); 50 } 51 52 virtual void TearDown() OVERRIDE { 53 widget_->Close(); 54 views::ViewsTestBase::TearDown(); 55 delegate_.reset(); 56 } 57 58 const views::ViewModel* ViewModel() { 59 return main_view_->contents_view()->apps_container_view()->apps_grid_view() 60 ->view_model_for_test(); 61 } 62 63 protected: 64 views::Widget* widget_; // Owned by native window. 65 AppListMainView* main_view_; // Owned by |widget_|. 66 PaginationModel pagination_model_; 67 scoped_ptr<AppListTestViewDelegate> delegate_; 68 69 private: 70 DISALLOW_COPY_AND_ASSIGN(AppListMainViewTest); 71}; 72 73} // namespace 74 75// Tests changing the AppListModel when switching profiles. 76TEST_F(AppListMainViewTest, ModelChanged) { 77 EXPECT_EQ(kInitialItems, ViewModel()->view_size()); 78 79 // The model is owned by a profile keyed service, which is never destroyed 80 // until after profile switching. 81 scoped_ptr<AppListModel> old_model(delegate_->ReleaseTestModel()); 82 83 const int kReplacementItems = 5; 84 delegate_->ReplaceTestModel(kReplacementItems); 85 main_view_->ModelChanged(); 86 EXPECT_EQ(kReplacementItems, ViewModel()->view_size()); 87} 88 89} // namespace test 90} // namespace app_list 91