78777898c1667f0b2295d12b4352c5f8b5d43d5d
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / media_picker / desktop_media_picker_controller_unittest.mm
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 #import "chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.h"
6
7 #include "base/bind.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "base/run_loop.h"
10 #include "chrome/browser/media/desktop_media_list_observer.h"
11 #include "chrome/browser/media/fake_desktop_media_list.h"
12 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "testing/gtest_mac.h"
15
16 @interface DesktopMediaPickerController (ExposedForTesting)
17 - (IKImageBrowserView*)sourceBrowser;
18 - (NSButton*)okButton;
19 - (NSArray*)items;
20 @end
21
22 @implementation DesktopMediaPickerController (ExposedForTesting)
23 - (IKImageBrowserView*)sourceBrowser {
24   return sourceBrowser_;
25 }
26
27 - (NSButton*)okButton {
28   return okButton_;
29 }
30
31 - (NSButton*)cancelButton {
32   return cancelButton_;
33 }
34
35 - (NSArray*)items {
36   return items_;
37 }
38 @end
39
40 class DesktopMediaPickerControllerTest : public CocoaTest {
41  public:
42   DesktopMediaPickerControllerTest()
43       : callback_called_(false), media_list_(NULL) {
44   }
45
46   virtual void SetUp() OVERRIDE {
47     CocoaTest::SetUp();
48
49     media_list_ = new FakeDesktopMediaList();
50
51     DesktopMediaPicker::DoneCallback callback =
52         base::Bind(&DesktopMediaPickerControllerTest::OnResult,
53                    base::Unretained(this));
54
55     controller_.reset(
56         [[DesktopMediaPickerController alloc]
57             initWithMediaList:scoped_ptr<DesktopMediaList>(media_list_)
58                        parent:nil
59                      callback:callback
60                       appName:base::ASCIIToUTF16("Screenshare Test")]);
61   }
62
63   virtual void TearDown() OVERRIDE {
64     controller_.reset();
65     CocoaTest::TearDown();
66   }
67
68   bool WaitForCallback() {
69     if (!callback_called_) {
70       base::RunLoop().RunUntilIdle();
71     }
72     return callback_called_;
73   }
74
75  protected:
76   void OnResult(content::DesktopMediaID source) {
77     EXPECT_FALSE(callback_called_);
78     callback_called_ = true;
79     source_reported_ = source;
80   }
81
82   content::TestBrowserThreadBundle thread_bundle_;
83   bool callback_called_;
84   content::DesktopMediaID source_reported_;
85   FakeDesktopMediaList* media_list_;
86   base::scoped_nsobject<DesktopMediaPickerController> controller_;
87 };
88
89 TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
90   [controller_ showWindow:nil];
91
92   media_list_->AddSource(0);
93   media_list_->AddSource(1);
94   media_list_->SetSourceThumbnail(1);
95
96   NSArray* items = [controller_ items];
97   EXPECT_EQ(2U, [items count]);
98   EXPECT_NSEQ(@"0", [[items objectAtIndex:0] imageTitle]);
99   EXPECT_EQ(nil, [[items objectAtIndex:0] imageRepresentation]);
100   EXPECT_NSEQ(@"1", [[items objectAtIndex:1] imageTitle]);
101   EXPECT_TRUE([[items objectAtIndex:1] imageRepresentation] != nil);
102 }
103
104 TEST_F(DesktopMediaPickerControllerTest, ClickOK) {
105   [controller_ showWindow:nil];
106
107   media_list_->AddSource(0);
108   media_list_->SetSourceThumbnail(0);
109   media_list_->AddSource(1);
110   media_list_->SetSourceThumbnail(1);
111
112   EXPECT_EQ(2U, [[controller_ items] count]);
113   EXPECT_FALSE([[controller_ okButton] isEnabled]);
114
115   NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1];
116   [[controller_ sourceBrowser] setSelectionIndexes:indexSet
117                               byExtendingSelection:NO];
118   EXPECT_TRUE([[controller_ okButton] isEnabled]);
119
120   [[controller_ okButton] performClick:nil];
121   EXPECT_TRUE(WaitForCallback());
122   EXPECT_EQ(media_list_->GetSource(1).id, source_reported_);
123 }
124
125 TEST_F(DesktopMediaPickerControllerTest, ClickCancel) {
126   [controller_ showWindow:nil];
127
128   media_list_->AddSource(0);
129   media_list_->SetSourceThumbnail(0);
130   media_list_->AddSource(1);
131   media_list_->SetSourceThumbnail(1);
132
133   [[controller_ cancelButton] performClick:nil];
134   EXPECT_TRUE(WaitForCallback());
135   EXPECT_EQ(content::DesktopMediaID(), source_reported_);
136 }
137
138 TEST_F(DesktopMediaPickerControllerTest, CloseWindow) {
139   [controller_ showWindow:nil];
140
141   media_list_->AddSource(0);
142   media_list_->SetSourceThumbnail(0);
143   media_list_->AddSource(1);
144   media_list_->SetSourceThumbnail(1);
145
146   [controller_ close];
147   EXPECT_TRUE(WaitForCallback());
148   EXPECT_EQ(content::DesktopMediaID(), source_reported_);
149 }
150
151 TEST_F(DesktopMediaPickerControllerTest, UpdateThumbnail) {
152   [controller_ showWindow:nil];
153
154   media_list_->AddSource(0);
155   media_list_->SetSourceThumbnail(0);
156   media_list_->AddSource(1);
157   media_list_->SetSourceThumbnail(1);
158
159   NSArray* items = [controller_ items];
160   EXPECT_EQ(2U, [items count]);
161   NSUInteger version = [[items objectAtIndex:0] imageVersion];
162
163   media_list_->SetSourceThumbnail(0);
164   EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]);
165 }
166
167 TEST_F(DesktopMediaPickerControllerTest, UpdateName) {
168   [controller_ showWindow:nil];
169
170   media_list_->AddSource(0);
171   media_list_->SetSourceThumbnail(0);
172   media_list_->AddSource(1);
173   media_list_->SetSourceThumbnail(1);
174
175   NSArray* items = [controller_ items];
176   EXPECT_EQ(2U, [items count]);
177   NSUInteger version = [[items objectAtIndex:0] imageVersion];
178
179   media_list_->SetSourceThumbnail(0);
180   EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]);
181 }
182
183 TEST_F(DesktopMediaPickerControllerTest, RemoveSource) {
184   [controller_ showWindow:nil];
185
186   media_list_->AddSource(0);
187   media_list_->AddSource(1);
188   media_list_->AddSource(2);
189   media_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
190
191   NSArray* items = [controller_ items];
192   EXPECT_EQ(3U, [items count]);
193   EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
194 }