desktop_media_picker_controller_unittest.mm revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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 40class 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 callback:callback 59 appName:ASCIIToUTF16("Screenshare Test")]); 60 } 61 62 virtual void TearDown() OVERRIDE { 63 controller_.reset(); 64 CocoaTest::TearDown(); 65 } 66 67 bool WaitForCallback() { 68 if (!callback_called_) { 69 base::RunLoop().RunUntilIdle(); 70 } 71 return callback_called_; 72 } 73 74 protected: 75 void OnResult(content::DesktopMediaID source) { 76 EXPECT_FALSE(callback_called_); 77 callback_called_ = true; 78 source_reported_ = source; 79 } 80 81 content::TestBrowserThreadBundle thread_bundle_; 82 bool callback_called_; 83 content::DesktopMediaID source_reported_; 84 FakeDesktopMediaList* media_list_; 85 base::scoped_nsobject<DesktopMediaPickerController> controller_; 86}; 87 88TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) { 89 [controller_ showWindow:nil]; 90 91 media_list_->AddSource(0); 92 media_list_->AddSource(1); 93 media_list_->SetSourceThumbnail(1); 94 95 NSArray* items = [controller_ items]; 96 EXPECT_EQ(2U, [items count]); 97 EXPECT_NSEQ(@"0", [[items objectAtIndex:0] imageTitle]); 98 EXPECT_EQ(nil, [[items objectAtIndex:0] imageRepresentation]); 99 EXPECT_NSEQ(@"1", [[items objectAtIndex:1] imageTitle]); 100 EXPECT_TRUE([[items objectAtIndex:1] imageRepresentation] != nil); 101} 102 103TEST_F(DesktopMediaPickerControllerTest, ClickOK) { 104 [controller_ showWindow:nil]; 105 106 media_list_->AddSource(0); 107 media_list_->SetSourceThumbnail(0); 108 media_list_->AddSource(1); 109 media_list_->SetSourceThumbnail(1); 110 111 EXPECT_EQ(2U, [[controller_ items] count]); 112 EXPECT_FALSE([[controller_ okButton] isEnabled]); 113 114 NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1]; 115 [[controller_ sourceBrowser] setSelectionIndexes:indexSet 116 byExtendingSelection:NO]; 117 EXPECT_TRUE([[controller_ okButton] isEnabled]); 118 119 [[controller_ okButton] performClick:nil]; 120 EXPECT_TRUE(WaitForCallback()); 121 EXPECT_EQ(media_list_->GetSource(1).id, source_reported_); 122} 123 124TEST_F(DesktopMediaPickerControllerTest, ClickCancel) { 125 [controller_ showWindow:nil]; 126 127 media_list_->AddSource(0); 128 media_list_->SetSourceThumbnail(0); 129 media_list_->AddSource(1); 130 media_list_->SetSourceThumbnail(1); 131 132 [[controller_ cancelButton] performClick:nil]; 133 EXPECT_TRUE(WaitForCallback()); 134 EXPECT_EQ(content::DesktopMediaID(), source_reported_); 135} 136 137TEST_F(DesktopMediaPickerControllerTest, CloseWindow) { 138 [controller_ showWindow:nil]; 139 140 media_list_->AddSource(0); 141 media_list_->SetSourceThumbnail(0); 142 media_list_->AddSource(1); 143 media_list_->SetSourceThumbnail(1); 144 145 [controller_ close]; 146 EXPECT_TRUE(WaitForCallback()); 147 EXPECT_EQ(content::DesktopMediaID(), source_reported_); 148} 149 150TEST_F(DesktopMediaPickerControllerTest, UpdateThumbnail) { 151 [controller_ showWindow:nil]; 152 153 media_list_->AddSource(0); 154 media_list_->SetSourceThumbnail(0); 155 media_list_->AddSource(1); 156 media_list_->SetSourceThumbnail(1); 157 158 NSArray* items = [controller_ items]; 159 EXPECT_EQ(2U, [items count]); 160 NSUInteger version = [[items objectAtIndex:0] imageVersion]; 161 162 media_list_->SetSourceThumbnail(0); 163 EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]); 164} 165 166TEST_F(DesktopMediaPickerControllerTest, UpdateName) { 167 [controller_ showWindow:nil]; 168 169 media_list_->AddSource(0); 170 media_list_->SetSourceThumbnail(0); 171 media_list_->AddSource(1); 172 media_list_->SetSourceThumbnail(1); 173 174 NSArray* items = [controller_ items]; 175 EXPECT_EQ(2U, [items count]); 176 NSUInteger version = [[items objectAtIndex:0] imageVersion]; 177 178 media_list_->SetSourceThumbnail(0); 179 EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]); 180} 181 182TEST_F(DesktopMediaPickerControllerTest, RemoveSource) { 183 [controller_ showWindow:nil]; 184 185 media_list_->AddSource(0); 186 media_list_->AddSource(1); 187 media_list_->AddSource(2); 188 media_list_->SetSourceName(1, ASCIIToUTF16("foo")); 189 190 NSArray* items = [controller_ items]; 191 EXPECT_EQ(3U, [items count]); 192 EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]); 193} 194