Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / extensions / media_galleries_dialog_views_unittest.cc
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.
4
5 #include "base/strings/string_number_conversions.h"
6 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h"
8 #include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h"
9 #include "chrome/browser/ui/views/extensions/media_gallery_checkbox_view.h"
10 #include "components/storage_monitor/storage_info.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/views/controls/button/checkbox.h"
13
14 using ::testing::_;
15 using ::testing::AnyNumber;
16 using ::testing::Mock;
17 using ::testing::NiceMock;
18 using ::testing::Return;
19 using ::testing::ReturnPointee;
20
21 namespace {
22
23 MediaGalleryPrefInfo MakePrefInfoForTesting(MediaGalleryPrefId id) {
24   MediaGalleryPrefInfo gallery;
25   gallery.pref_id = id;
26   gallery.device_id = storage_monitor::StorageInfo::MakeDeviceId(
27       storage_monitor::StorageInfo::FIXED_MASS_STORAGE,
28       base::Int64ToString(id));
29   gallery.display_name = base::ASCIIToUTF16("Display Name");
30   return gallery;
31 }
32
33 }  // namespace
34
35 class MediaGalleriesDialogTest : public testing::Test {
36  public:
37   MediaGalleriesDialogTest() {}
38   virtual ~MediaGalleriesDialogTest() {}
39   virtual void SetUp() override {
40     std::vector<base::string16> headers;
41     headers.push_back(base::string16());
42     headers.push_back(base::ASCIIToUTF16("header2"));
43     ON_CALL(controller_, GetSectionHeaders()).
44         WillByDefault(Return(headers));
45     EXPECT_CALL(controller_, GetSectionEntries(_)).
46         Times(AnyNumber());
47   }
48
49   virtual void TearDown() override {
50     Mock::VerifyAndClearExpectations(&controller_);
51   }
52
53   NiceMock<MediaGalleriesDialogControllerMock>* controller() {
54     return &controller_;
55   }
56
57  private:
58   // TODO(gbillock): Get rid of this mock; make something specialized.
59   NiceMock<MediaGalleriesDialogControllerMock> controller_;
60
61   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest);
62 };
63
64 // Tests that checkboxes are initialized according to the contents of
65 // permissions in the registry.
66 TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) {
67   MediaGalleriesDialogController::Entries attached_permissions;
68   attached_permissions.push_back(
69       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true));
70   attached_permissions.push_back(
71       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(2), false));
72   EXPECT_CALL(*controller(), GetSectionEntries(0)).
73       WillRepeatedly(Return(attached_permissions));
74
75   MediaGalleriesDialogViews dialog(controller());
76   EXPECT_EQ(2U, dialog.checkbox_map_.size());
77
78   MediaGalleryCheckboxView* checkbox_view1 = dialog.checkbox_map_[1];
79   EXPECT_TRUE(checkbox_view1->checkbox()->checked());
80
81   MediaGalleryCheckboxView* checkbox_view2 = dialog.checkbox_map_[2];
82   EXPECT_FALSE(checkbox_view2->checkbox()->checked());
83 }
84
85 // Tests that toggling checkboxes updates the controller.
86 TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) {
87   MediaGalleriesDialogController::Entries attached_permissions;
88   attached_permissions.push_back(
89       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true));
90   EXPECT_CALL(*controller(), GetSectionEntries(0)).
91       WillRepeatedly(Return(attached_permissions));
92
93   MediaGalleriesDialogViews dialog(controller());
94   EXPECT_EQ(1U, dialog.checkbox_map_.size());
95   views::Checkbox* checkbox = dialog.checkbox_map_[1]->checkbox();
96   EXPECT_TRUE(checkbox->checked());
97
98   ui::KeyEvent dummy_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
99   EXPECT_CALL(*controller(), DidToggleEntry(1, false));
100   checkbox->SetChecked(false);
101   dialog.ButtonPressed(checkbox, dummy_event);
102
103   EXPECT_CALL(*controller(), DidToggleEntry(1, true));
104   checkbox->SetChecked(true);
105   dialog.ButtonPressed(checkbox, dummy_event);
106 }
107
108 // Tests that UpdateGallery will add a new checkbox, but only if it refers to
109 // a gallery that the dialog hasn't seen before.
110 TEST_F(MediaGalleriesDialogTest, UpdateAdds) {
111   MediaGalleriesDialogViews dialog(controller());
112
113   MediaGalleriesDialogController::Entries attached_permissions;
114   EXPECT_CALL(*controller(), GetSectionEntries(0)).
115       WillRepeatedly(ReturnPointee(&attached_permissions));
116
117   EXPECT_TRUE(dialog.checkbox_map_.empty());
118
119   MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
120   attached_permissions.push_back(
121       MediaGalleriesDialogController::Entry(gallery1, true));
122   dialog.UpdateGalleries();
123   EXPECT_EQ(1U, dialog.checkbox_map_.size());
124
125   MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
126   attached_permissions.push_back(
127       MediaGalleriesDialogController::Entry(gallery2, true));
128   dialog.UpdateGalleries();
129   EXPECT_EQ(2U, dialog.checkbox_map_.size());
130
131   attached_permissions.push_back(
132       MediaGalleriesDialogController::Entry(gallery2, false));
133   dialog.UpdateGalleries();
134   EXPECT_EQ(2U, dialog.checkbox_map_.size());
135 }
136
137 TEST_F(MediaGalleriesDialogTest, ForgetDeletes) {
138   MediaGalleriesDialogViews dialog(controller());
139
140   MediaGalleriesDialogController::Entries attached_permissions;
141   EXPECT_CALL(*controller(), GetSectionEntries(0)).
142       WillRepeatedly(ReturnPointee(&attached_permissions));
143
144   EXPECT_TRUE(dialog.checkbox_map_.empty());
145
146   MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
147   attached_permissions.push_back(
148       MediaGalleriesDialogController::Entry(gallery1, true));
149   dialog.UpdateGalleries();
150   EXPECT_EQ(1U, dialog.checkbox_map_.size());
151
152   MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
153   attached_permissions.push_back(
154       MediaGalleriesDialogController::Entry(gallery2, true));
155   dialog.UpdateGalleries();
156   EXPECT_EQ(2U, dialog.checkbox_map_.size());
157
158   attached_permissions.pop_back();
159   dialog.UpdateGalleries();
160   EXPECT_EQ(1U, dialog.checkbox_map_.size());
161 }