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

Side by Side Diff: chrome/browser/ui/cocoa/download/download_item_controller_unittest.mm

Issue 533883002: [Mac] Re-layout download shelf when danger state of item changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add tests Created 6 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 unified diff | Download patch
OLDNEW
(Empty)
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 #import <Cocoa/Cocoa.h>
6
7 #import "base/mac/scoped_nsobject.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/run_loop.h"
10 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
11 #import "chrome/browser/ui/cocoa/download/download_item_controller.h"
12 #import "chrome/browser/ui/cocoa/download/download_shelf_controller.h"
13 #include "content/public/test/mock_download_item.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "testing/platform_test.h"
16 #import "third_party/ocmock/OCMock/OCMock.h"
17 #import "third_party/ocmock/gtest_support.h"
18
19 using ::testing::Return;
20 using ::testing::ReturnRefOfCopy;
21
22 @interface DownloadItemController (DownloadItemControllerTest) {
Nico 2014/09/16 22:48:14 do you need {} here?
asanka 2014/09/18 01:48:52 Removed.
23 }
24 - (void)verifyProgressViewIsVisible:(bool)visible;
25 - (void)verifyDangerousDownloadPromptIsVisible:(bool)visible;
26 @end
27
28 @implementation DownloadItemController (DownloadItemControllerTest)
29 - (void)verifyProgressViewIsVisible:(bool)visible {
30 EXPECT_EQ(visible, ![progressView_ isHidden]);
31 }
32
33 - (void)verifyDangerousDownloadPromptIsVisible:(bool)visible {
34 EXPECT_EQ(visible, ![dangerousDownloadView_ isHidden]);
35 }
36 @end
37
38 @interface DownloadItemControllerWithInitCallback : DownloadItemController {
39 @private
40 base::Closure initCallback_;
41 }
42 - (id)initWithDownload:(content::DownloadItem*)downloadItem
43 shelf:(DownloadShelfController*)shelf
44 initCallback:(const base::Closure&)callback;
45 - (void)awakeFromNib;
46 @end
47
48 @implementation DownloadItemControllerWithInitCallback
49
50 - (id)initWithDownload:(content::DownloadItem*)downloadItem
51 shelf:(DownloadShelfController*)shelf
52 initCallback:(const base::Closure&)callback {
53 initCallback_ = callback;
54 return [super initWithDownload:downloadItem shelf:shelf navigator:NULL];
Nico 2014/09/16 22:48:14 the usual pattern is if ((self = [super initWit
asanka 2014/09/18 01:48:52 Ah. Right. Fixed.
55 }
56
57 - (void)awakeFromNib {
58 [super awakeFromNib];
59 initCallback_.Run();
60 }
61 @end
62
63 namespace {
64
65 class DownloadItemControllerTest : public CocoaProfileTest {
66 public:
67 virtual void SetUp() OVERRIDE {
68 CocoaProfileTest::SetUp();
69 ASSERT_TRUE(browser());
70
71 id shelf_controller =
72 [OCMockObject mockForClass:[DownloadShelfController class]];
73 shelf_.reset([shelf_controller retain]);
74
75 download_item_.reset(new ::testing::NiceMock<content::MockDownloadItem>);
76 ON_CALL(*download_item_, GetState())
77 .WillByDefault(Return(content::DownloadItem::IN_PROGRESS));
78 ON_CALL(*download_item_, GetFileNameToReportUser())
79 .WillByDefault(Return(base::FilePath()));
80 ON_CALL(*download_item_, GetDangerType())
81 .WillByDefault(Return(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS));
82 ON_CALL(*download_item_, GetTargetFilePath())
83 .WillByDefault(ReturnRefOfCopy(base::FilePath()));
84 ON_CALL(*download_item_, GetLastReason())
85 .WillByDefault(Return(content::DOWNLOAD_INTERRUPT_REASON_NONE));
86 ON_CALL(*download_item_, GetURL()).WillByDefault(ReturnRefOfCopy(GURL()));
87 ON_CALL(*download_item_, GetReferrerUrl())
88 .WillByDefault(ReturnRefOfCopy(GURL()));
89 ON_CALL(*download_item_, GetTargetDisposition()).WillByDefault(
90 Return(content::DownloadItem::TARGET_DISPOSITION_OVERWRITE));
91 }
92
93 virtual void TearDown() OVERRIDE {
94 download_item_.reset();
95 [(id)shelf_ verify];
96 CocoaProfileTest::TearDown();
97 }
98
99 DownloadItemController* CreateItemController() {
100 [[(id)shelf_ expect] remove:[OCMArg any]];
101 base::RunLoop run_loop;
102 DownloadItemController* item =
103 [[[DownloadItemControllerWithInitCallback alloc]
104 initWithDownload:download_item_.get()
105 shelf:shelf_.get()
106 initCallback:run_loop.QuitClosure()] retain];
Nico 2014/09/16 22:48:14 This looks wrong: alloc returns a refcount of 1, t
asanka 2014/09/18 01:48:52 D'oh! Done.
107 [[test_window() contentView] addSubview:[item view]];
108 run_loop.Run();
109 return item;
110 }
111
112 protected:
113 scoped_ptr<content::MockDownloadItem> download_item_;
114 base::scoped_nsobject<DownloadShelfController> shelf_;
115 };
116
117 TEST_F(DownloadItemControllerTest, NormalDownload) {
118 base::scoped_nsobject<DownloadItemController> item(CreateItemController());
119
120 [item verifyProgressViewIsVisible:true];
121 [item verifyDangerousDownloadPromptIsVisible:false];
122 }
123
124 TEST_F(DownloadItemControllerTest, DangerousDownload) {
125 [[(id)shelf_ expect] layoutItems];
126 ON_CALL(*download_item_, GetDangerType())
127 .WillByDefault(Return(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE));
128 ON_CALL(*download_item_, IsDangerous()).WillByDefault(Return(true));
129 base::scoped_nsobject<DownloadItemController> item(CreateItemController());
130
131 [item verifyProgressViewIsVisible:false];
132 [item verifyDangerousDownloadPromptIsVisible:true];
133 }
134
135 TEST_F(DownloadItemControllerTest, NormalDownloadBecomesDangerous) {
136 base::scoped_nsobject<DownloadItemController> item(CreateItemController());
137
138 [item verifyProgressViewIsVisible:true];
139 [item verifyDangerousDownloadPromptIsVisible:false];
140
141 // The download is now marked as dangerous.
142 [[(id)shelf_ expect] layoutItems];
143 ON_CALL(*download_item_, GetDangerType())
144 .WillByDefault(Return(content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE));
145 ON_CALL(*download_item_, IsDangerous()).WillByDefault(Return(true));
146 download_item_->NotifyObserversDownloadUpdated();
147
148 [item verifyProgressViewIsVisible:false];
149 [item verifyDangerousDownloadPromptIsVisible:true];
150
151 // And then marked as safe again.
152 [[(id)shelf_ expect] layoutItems];
153 ON_CALL(*download_item_, GetDangerType())
154 .WillByDefault(Return(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS));
155 ON_CALL(*download_item_, IsDangerous()).WillByDefault(Return(false));
156 download_item_->NotifyObserversDownloadUpdated();
157
158 [item verifyProgressViewIsVisible:true];
159 [item verifyDangerousDownloadPromptIsVisible:false];
160 }
161
162 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/download/download_item_controller.mm ('k') | chrome/browser/ui/cocoa/download/download_item_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698