Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1913)

Unified Diff: chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm

Issue 23944003: Implement Desktop Media Picker (Mac version) for Desktop Capture API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed comments. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
diff --git a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..ba570fa56a9d388fb5b3ab2c1110c9187775f4ca
--- /dev/null
+++ b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
@@ -0,0 +1,243 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller.h"
+
+#include "base/bind.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/run_loop.h"
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gtest_mac.h"
+#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
+#include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
+
+@interface DesktopMediaPickerController(ExposedForTesting)
Robert Sesek 2013/09/04 20:23:19 nit: space before (
dcaiafa 2013/09/04 21:39:35 Done.
+- (IKImageBrowserView*) sourceBrowser;
Robert Sesek 2013/09/04 20:23:19 nit: no space after )
dcaiafa 2013/09/04 21:39:35 Done.
+- (NSButton*) okButton;
+- (NSArray*) items;
+@end
+
+@implementation DesktopMediaPickerController(ExposedForTesting)
Robert Sesek 2013/09/04 20:23:19 nit: space before (
dcaiafa 2013/09/04 21:39:35 Done.
+- (IKImageBrowserView*) sourceBrowser {
+ return sourceBrowser_;
+}
+
+- (NSButton*) okButton {
+ return okButton_;
+}
+
+- (NSButton*) cancelButton {
+ return cancelButton_;
+}
+
+- (NSArray*) items {
+ return items_;
+}
+@end
+
+class FakeDesktopMediaPickerModel : public DesktopMediaPickerModel {
+ public:
+ FakeDesktopMediaPickerModel()
+ : DesktopMediaPickerModel(scoped_ptr<webrtc::ScreenCapturer>(),
+ scoped_ptr<webrtc::WindowCapturer>()),
+ observer_(NULL) {
+ }
+
+ virtual void StartUpdating(Observer* observer) OVERRIDE {
+ observer_ = observer;
+
+ SkBitmap bitmap;
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, 150, 150);
+ bitmap.allocPixels();
+ bitmap.eraseRGB(0, 255, 0);
+ thumbnail_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
+ }
+
+ Observer* observer() {
+ return observer_;
+ }
+
+ void AddSource(int id) {
+ Source source(
+ content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, id),
+ base::Int64ToString16(id));
+
+ sources_.push_back(source);
+ observer_->OnSourceAdded(sources_.size() - 1);
+ }
+
+ void RemoveSource(int index) {
+ sources_.erase(sources_.begin() + index);
+ observer_->OnSourceRemoved(sources_.size() - 1);
+ }
+
+ void SetSourceThumbnail(int index) {
+ sources_[index].thumbnail = thumbnail_;
+ observer_->OnSourceThumbnailChanged(index);
+ }
+
+ void SetSourceName(int index, string16 name) {
+ sources_[index].name = name;
+ observer_->OnSourceNameChanged(index);
+ }
+
+ private:
+ Observer* observer_;
+ gfx::ImageSkia thumbnail_;
+};
+
+class DesktopMediaPickerControllerTest : public CocoaTest {
+ public:
+ DesktopMediaPickerControllerTest() : callback_called_(false), model_(NULL) {
+ }
+
+ virtual void SetUp() {
Robert Sesek 2013/09/04 20:23:19 OVERRIDE
dcaiafa 2013/09/04 21:39:35 Done.
+ CocoaTest::SetUp();
+
+ model_ = new FakeDesktopMediaPickerModel();
+
+ DesktopMediaPicker::DoneCallback callback =
+ base::Bind(&DesktopMediaPickerControllerTest::OnResult,
+ base::Unretained(this));
+
+ controller_.reset(
+ [[DesktopMediaPickerController alloc]
+ initWithModel:scoped_ptr<DesktopMediaPickerModel>(model_)
+ callback:callback
+ appName:ASCIIToUTF16("Screenshare Test")]);
+ }
+
+ virtual void TearDown() {
Robert Sesek 2013/09/04 20:23:19 OVERRIDE
dcaiafa 2013/09/04 21:39:35 Done.
+ controller_.reset();
+ CocoaTest::TearDown();
+ }
+
+ bool WaitForCallback() {
+ if (!callback_called_) {
Robert Sesek 2013/09/04 20:23:19 Is it possible for the loop to be idle with the ca
dcaiafa 2013/09/04 21:39:35 The callback is always posted on the local message
+ base::RunLoop run_loop;
+ run_loop.RunUntilIdle();
Robert Sesek 2013/09/04 20:23:19 You can fold this into a one-liner: base::RunLoop
dcaiafa 2013/09/04 21:39:35 Done.
+ }
+ return callback_called_;
+ }
+
+ protected:
+ void OnResult(content::DesktopMediaID source) {
+ callback_called_ = true;
+ source_reported_ = source;
+ }
+
+ content::TestBrowserThreadBundle thread_bundle_;
+ bool callback_called_;
+ content::DesktopMediaID source_reported_;
+ FakeDesktopMediaPickerModel* model_;
+ base::scoped_nsobject<DesktopMediaPickerController> controller_;
+};
+
+TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ NSArray* items = [controller_ items];
+ EXPECT_EQ(2U, [items count]);
+ EXPECT_NSEQ(@"0", [[items objectAtIndex:0] imageTitle]);
+ EXPECT_EQ(nil, [[items objectAtIndex:0] imageRepresentation]);
+ EXPECT_NSEQ(@"1", [[items objectAtIndex:1] imageTitle]);
+ EXPECT_TRUE([[items objectAtIndex:1] imageRepresentation] != nil);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, ClickOK) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->SetSourceThumbnail(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ EXPECT_EQ(2U, [[controller_ items] count]);
+ EXPECT_FALSE([[controller_ okButton] isEnabled]);
+
+ NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1];
+ [[controller_ sourceBrowser] setSelectionIndexes:indexSet
+ byExtendingSelection:NO];
+ EXPECT_TRUE([[controller_ okButton] isEnabled]);
+
+ [[controller_ okButton] performClick:nil];
+ EXPECT_TRUE(WaitForCallback());
+ EXPECT_EQ(model_->source(1).id, source_reported_);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, ClickCancel) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->SetSourceThumbnail(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ [[controller_ cancelButton] performClick:nil];
+ EXPECT_TRUE(WaitForCallback());
+ EXPECT_EQ(content::DesktopMediaID(), source_reported_);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, CloseWindow) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->SetSourceThumbnail(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ [controller_ close];
+ EXPECT_TRUE(WaitForCallback());
+ EXPECT_EQ(content::DesktopMediaID(), source_reported_);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, UpdateThumbnail) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->SetSourceThumbnail(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ NSArray* items = [controller_ items];
+ EXPECT_EQ(2U, [items count]);
+ NSUInteger version = [[items objectAtIndex:0] imageVersion];
+
+ model_->SetSourceThumbnail(0);
+ EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, UpdateName) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->SetSourceThumbnail(0);
+ model_->AddSource(1);
+ model_->SetSourceThumbnail(1);
+
+ NSArray* items = [controller_ items];
+ EXPECT_EQ(2U, [items count]);
+ NSUInteger version = [[items objectAtIndex:0] imageVersion];
+
+ model_->SetSourceThumbnail(0);
+ EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, RemoveSource) {
+ [controller_ showWindow:nil];
+
+ model_->AddSource(0);
+ model_->AddSource(1);
+ model_->AddSource(2);
+ model_->SetSourceName(1, ASCIIToUTF16("foo"));
+
+ NSArray* items = [controller_ items];
+ EXPECT_EQ(3U, [items count]);
+ EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
+}

Powered by Google App Engine
This is Rietveld 408576698