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