| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <Foundation/Foundation.h> | 5 #import <Foundation/Foundation.h> |
| 6 #import <PassKit/PassKit.h> | 6 #import <PassKit/PassKit.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/mac/scoped_nsautorelease_pool.h" | |
| 14 #include "base/mac/scoped_nsobject.h" | |
| 15 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 16 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 17 #include "base/strings/sys_string_conversions.h" | 15 #include "base/strings/sys_string_conversions.h" |
| 18 #include "components/bookmarks/test/bookmark_test_helpers.h" | 16 #include "components/bookmarks/test/bookmark_test_helpers.h" |
| 19 #include "components/prefs/testing_pref_service.h" | 17 #include "components/prefs/testing_pref_service.h" |
| 20 #include "components/search_engines/template_url_service.h" | 18 #include "components/search_engines/template_url_service.h" |
| 21 #include "components/sessions/core/tab_restore_service.h" | 19 #include "components/sessions/core/tab_restore_service.h" |
| 22 #include "components/toolbar/test_toolbar_model.h" | 20 #include "components/toolbar/test_toolbar_model.h" |
| 23 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" | 21 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" |
| 24 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" | 22 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 #include "net/url_request/url_request_test_util.h" | 58 #include "net/url_request/url_request_test_util.h" |
| 61 #include "testing/gmock/include/gmock/gmock.h" | 59 #include "testing/gmock/include/gmock/gmock.h" |
| 62 #include "testing/gtest/include/gtest/gtest.h" | 60 #include "testing/gtest/include/gtest/gtest.h" |
| 63 #include "testing/gtest_mac.h" | 61 #include "testing/gtest_mac.h" |
| 64 #import "third_party/ocmock/OCMock/OCMock.h" | 62 #import "third_party/ocmock/OCMock/OCMock.h" |
| 65 #include "third_party/ocmock/gtest_support.h" | 63 #include "third_party/ocmock/gtest_support.h" |
| 66 #include "ui/base/l10n/l10n_util.h" | 64 #include "ui/base/l10n/l10n_util.h" |
| 67 #include "ui/base/l10n/l10n_util_mac.h" | 65 #include "ui/base/l10n/l10n_util_mac.h" |
| 68 #include "ui/base/test/ios/ui_image_test_utils.h" | 66 #include "ui/base/test/ios/ui_image_test_utils.h" |
| 69 | 67 |
| 68 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 69 #error "This file requires ARC support." |
| 70 #endif |
| 71 |
| 70 using web::NavigationManagerImpl; | 72 using web::NavigationManagerImpl; |
| 71 using web::WebStateImpl; | 73 using web::WebStateImpl; |
| 72 | 74 |
| 73 // Private methods in BrowserViewController to test. | 75 // Private methods in BrowserViewController to test. |
| 74 @interface BrowserViewController ( | 76 @interface BrowserViewController ( |
| 75 Testing)<CRWNativeContentProvider, PassKitDialogProvider, ShareToDelegate> | 77 Testing)<CRWNativeContentProvider, PassKitDialogProvider, ShareToDelegate> |
| 76 - (void)pageLoadStarted:(NSNotification*)notification; | 78 - (void)pageLoadStarted:(NSNotification*)notification; |
| 77 - (void)pageLoadComplete:(NSNotification*)notification; | 79 - (void)pageLoadComplete:(NSNotification*)notification; |
| 78 - (void)tabSelected:(Tab*)tab; | 80 - (void)tabSelected:(Tab*)tab; |
| 79 - (void)tabDeselected:(NSNotification*)notification; | 81 - (void)tabDeselected:(NSNotification*)notification; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 ios::TemplateURLServiceFactory::GetInstance(), | 174 ios::TemplateURLServiceFactory::GetInstance(), |
| 173 ios::TemplateURLServiceFactory::GetDefaultFactory()); | 175 ios::TemplateURLServiceFactory::GetDefaultFactory()); |
| 174 chrome_browser_state_ = test_cbs_builder.Build(); | 176 chrome_browser_state_ = test_cbs_builder.Build(); |
| 175 chrome_browser_state_->CreateBookmarkModel(false); | 177 chrome_browser_state_->CreateBookmarkModel(false); |
| 176 bookmarks::BookmarkModel* bookmark_model = | 178 bookmarks::BookmarkModel* bookmark_model = |
| 177 ios::BookmarkModelFactory::GetForBrowserState( | 179 ios::BookmarkModelFactory::GetForBrowserState( |
| 178 chrome_browser_state_.get()); | 180 chrome_browser_state_.get()); |
| 179 bookmarks::test::WaitForBookmarkModelToLoad(bookmark_model); | 181 bookmarks::test::WaitForBookmarkModelToLoad(bookmark_model); |
| 180 | 182 |
| 181 // Set up mock TabModel, Tab, and CRWWebController. | 183 // Set up mock TabModel, Tab, and CRWWebController. |
| 182 base::scoped_nsobject<id> tabModel([[BVCTestTabModel alloc] init]); | 184 id tabModel = [[BVCTestTabModel alloc] init]; |
| 183 base::scoped_nsobject<id> currentTab([[BVCTestTabMock alloc] | 185 id currentTab = [[BVCTestTabMock alloc] |
| 184 initWithRepresentedObject:[OCMockObject niceMockForClass:[Tab class]]]); | 186 initWithRepresentedObject:[OCMockObject niceMockForClass:[Tab class]]]; |
| 185 id webControllerMock = | 187 id webControllerMock = |
| 186 [OCMockObject niceMockForClass:[CRWWebController class]]; | 188 [OCMockObject niceMockForClass:[CRWWebController class]]; |
| 187 | 189 |
| 188 // Stub methods for TabModel. | 190 // Stub methods for TabModel. |
| 189 NSUInteger tabCount = 1; | 191 NSUInteger tabCount = 1; |
| 190 [[[tabModel stub] andReturnValue:OCMOCK_VALUE(tabCount)] count]; | 192 [[[tabModel stub] andReturnValue:OCMOCK_VALUE(tabCount)] count]; |
| 191 BOOL enabled = YES; | 193 BOOL enabled = YES; |
| 192 [[[tabModel stub] andReturnValue:OCMOCK_VALUE(enabled)] webUsageEnabled]; | 194 [[[tabModel stub] andReturnValue:OCMOCK_VALUE(enabled)] webUsageEnabled]; |
| 193 [[[tabModel stub] andReturn:currentTab] currentTab]; | 195 [[[tabModel stub] andReturn:currentTab] currentTab]; |
| 194 [[[tabModel stub] andReturn:currentTab] tabAtIndex:0]; | 196 [[[tabModel stub] andReturn:currentTab] tabAtIndex:0]; |
| 195 [[tabModel stub] addObserver:[OCMArg any]]; | 197 [[tabModel stub] addObserver:[OCMArg any]]; |
| 196 [[tabModel stub] removeObserver:[OCMArg any]]; | 198 [[tabModel stub] removeObserver:[OCMArg any]]; |
| 197 [[tabModel stub] saveSessionImmediately:NO]; | 199 [[tabModel stub] saveSessionImmediately:NO]; |
| 198 [[tabModel stub] setCurrentTab:[OCMArg any]]; | 200 [[tabModel stub] setCurrentTab:[OCMArg any]]; |
| 199 [[tabModel stub] closeAllTabs]; | 201 [[tabModel stub] closeAllTabs]; |
| 200 | 202 |
| 201 // Stub methods for Tab. | 203 // Stub methods for Tab. |
| 202 UIView* dummyView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; | 204 UIView* dummyView = [[UIView alloc] initWithFrame:CGRectZero]; |
| 203 [[[currentTab stub] andReturn:dummyView] view]; | 205 [[[currentTab stub] andReturn:dummyView] view]; |
| 204 [[[currentTab stub] andReturn:webControllerMock] webController]; | 206 [[[currentTab stub] andReturn:webControllerMock] webController]; |
| 205 | 207 |
| 206 web::WebState::CreateParams params(chrome_browser_state_.get()); | 208 web::WebState::CreateParams params(chrome_browser_state_.get()); |
| 207 std::unique_ptr<web::WebState> webState = web::WebState::Create(params); | 209 std::unique_ptr<web::WebState> webState = web::WebState::Create(params); |
| 208 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release())); | 210 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release())); |
| 209 [currentTab setWebState:webStateImpl_.get()]; | 211 [currentTab setWebState:webStateImpl_.get()]; |
| 210 webStateImpl_->SetWebController(webControllerMock); | 212 webStateImpl_->SetWebController(webControllerMock); |
| 211 | 213 |
| 212 // Set up mock ShareController. | 214 // Set up mock ShareController. |
| 213 id shareController = | 215 id shareController = |
| 214 [OCMockObject niceMockForProtocol:@protocol(ShareProtocol)]; | 216 [OCMockObject niceMockForProtocol:@protocol(ShareProtocol)]; |
| 215 shareController_.reset([shareController retain]); | 217 shareController_ = shareController; |
| 216 | 218 |
| 217 id passKitController = | 219 id passKitController = |
| 218 [OCMockObject niceMockForClass:[PKAddPassesViewController class]]; | 220 [OCMockObject niceMockForClass:[PKAddPassesViewController class]]; |
| 219 passKitViewController_.reset([passKitController retain]); | 221 passKitViewController_ = passKitController; |
| 220 | 222 |
| 221 // Set up a fake toolbar model for the dependency factory to return. | 223 // Set up a fake toolbar model for the dependency factory to return. |
| 222 // It will be owned (and destroyed) by the BVC. | 224 // It will be owned (and destroyed) by the BVC. |
| 223 toolbarModelIOS_ = new TestToolbarModelIOS(); | 225 toolbarModelIOS_ = new TestToolbarModelIOS(); |
| 224 | 226 |
| 225 // Set up a stub dependency factory. | 227 // Set up a stub dependency factory. |
| 226 id factory = [OCMockObject | 228 id factory = [OCMockObject |
| 227 mockForClass:[BrowserViewControllerDependencyFactory class]]; | 229 mockForClass:[BrowserViewControllerDependencyFactory class]]; |
| 228 [[[factory stub] andReturn:nil] | 230 [[[factory stub] andReturn:nil] |
| 229 newTabStripControllerWithTabModel:[OCMArg any]]; | 231 newTabStripControllerWithTabModel:[OCMArg any]]; |
| 230 [[[factory stub] andReturn:nil] newPreloadController]; | 232 [[[factory stub] andReturn:nil] newPreloadController]; |
| 231 [[[factory stub] andReturnValue:OCMOCK_VALUE(toolbarModelIOS_)] | 233 [[[factory stub] andReturnValue:OCMOCK_VALUE(toolbarModelIOS_)] |
| 232 newToolbarModelIOSWithDelegate:static_cast<ToolbarModelDelegateIOS*>( | 234 newToolbarModelIOSWithDelegate:static_cast<ToolbarModelDelegateIOS*>( |
| 233 [OCMArg anyPointer])]; | 235 [OCMArg anyPointer])]; |
| 234 [[[factory stub] andReturn:nil] | 236 [[[factory stub] andReturn:nil] |
| 235 newWebToolbarControllerWithDelegate:[OCMArg any] | 237 newWebToolbarControllerWithDelegate:[OCMArg any] |
| 236 urlLoader:[OCMArg any] | 238 urlLoader:[OCMArg any] |
| 237 preloadProvider:[OCMArg any]]; | 239 preloadProvider:[OCMArg any]]; |
| 238 [[[factory stub] andReturn:shareController_.get()] shareControllerInstance]; | 240 [[[factory stub] andReturn:shareController_] shareControllerInstance]; |
| 239 [[[factory stub] andReturn:passKitViewController_.get()] | 241 [[[factory stub] andReturn:passKitViewController_] |
| 240 newPassKitViewControllerForPass:nil]; | 242 newPassKitViewControllerForPass:nil]; |
| 241 [[[factory stub] andReturn:nil] showPassKitErrorInfoBarForManager:nil]; | 243 [[[factory stub] andReturn:nil] showPassKitErrorInfoBarForManager:nil]; |
| 242 | 244 |
| 243 webController_.reset([webControllerMock retain]); | 245 webController_ = webControllerMock; |
| 244 tabModel_.reset([tabModel retain]); | 246 tabModel_ = tabModel; |
| 245 tab_.reset([currentTab retain]); | 247 tab_ = currentTab; |
| 246 dependencyFactory_.reset([factory retain]); | 248 dependencyFactory_ = factory; |
| 247 bvc_.reset([[BrowserViewController alloc] | 249 bvc_ = [[BrowserViewController alloc] |
| 248 initWithTabModel:tabModel_ | 250 initWithTabModel:tabModel_ |
| 249 browserState:chrome_browser_state_.get() | 251 browserState:chrome_browser_state_.get() |
| 250 dependencyFactory:factory]); | 252 dependencyFactory:factory]; |
| 251 | 253 |
| 252 // Load TemplateURLService. | 254 // Load TemplateURLService. |
| 253 TemplateURLService* template_url_service = | 255 TemplateURLService* template_url_service = |
| 254 ios::TemplateURLServiceFactory::GetForBrowserState( | 256 ios::TemplateURLServiceFactory::GetForBrowserState( |
| 255 chrome_browser_state_.get()); | 257 chrome_browser_state_.get()); |
| 256 template_url_service->Load(); | 258 template_url_service->Load(); |
| 257 | 259 |
| 258 // Force the view to load. | 260 // Force the view to load. |
| 259 UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectZero]; | 261 UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectZero]; |
| 260 [window addSubview:[bvc_ view]]; | 262 [window addSubview:[bvc_ view]]; |
| 261 window_.reset(window); | 263 window_ = window; |
| 262 } | 264 } |
| 263 | 265 |
| 264 void TearDown() override { | 266 void TearDown() override { |
| 265 [[bvc_ view] removeFromSuperview]; | 267 [[bvc_ view] removeFromSuperview]; |
| 266 BlockCleanupTest::TearDown(); | 268 BlockCleanupTest::TearDown(); |
| 267 } | 269 } |
| 268 | 270 |
| 269 base::scoped_nsobject<GenericChromeCommand> GetCommandWithTag(NSInteger tag) { | 271 GenericChromeCommand* GetCommandWithTag(NSInteger tag) { |
| 270 base::scoped_nsobject<GenericChromeCommand> command( | 272 return [[GenericChromeCommand alloc] initWithTag:tag]; |
| 271 [[GenericChromeCommand alloc] initWithTag:tag]); | |
| 272 return command; | |
| 273 } | 273 } |
| 274 | 274 |
| 275 MOCK_METHOD0(OnCompletionCalled, void()); | 275 MOCK_METHOD0(OnCompletionCalled, void()); |
| 276 | 276 |
| 277 web::TestWebThreadBundle thread_bundle_; | 277 web::TestWebThreadBundle thread_bundle_; |
| 278 IOSChromeScopedTestingLocalState local_state_; | 278 IOSChromeScopedTestingLocalState local_state_; |
| 279 std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; | 279 std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; |
| 280 std::unique_ptr<WebStateImpl> webStateImpl_; | 280 std::unique_ptr<WebStateImpl> webStateImpl_; |
| 281 base::scoped_nsobject<CRWWebController> webController_; | 281 CRWWebController* webController_; |
| 282 base::scoped_nsobject<Tab> tab_; | 282 Tab* tab_; |
| 283 base::scoped_nsobject<TabModel> tabModel_; | 283 TabModel* tabModel_; |
| 284 ToolbarModelIOS* toolbarModelIOS_; | 284 ToolbarModelIOS* toolbarModelIOS_; |
| 285 base::scoped_nsprotocol<id<ShareProtocol>> shareController_; | 285 id<ShareProtocol> shareController_; |
| 286 base::scoped_nsobject<PKAddPassesViewController> passKitViewController_; | 286 PKAddPassesViewController* passKitViewController_; |
| 287 base::scoped_nsobject<OCMockObject> dependencyFactory_; | 287 OCMockObject* dependencyFactory_; |
| 288 base::scoped_nsobject<BrowserViewController> bvc_; | 288 BrowserViewController* bvc_; |
| 289 base::scoped_nsobject<UIWindow> window_; | 289 UIWindow* window_; |
| 290 }; | 290 }; |
| 291 | 291 |
| 292 // TODO(crbug.com/228714): These tests pretty much only tested that BVC passed | 292 // TODO(crbug.com/228714): These tests pretty much only tested that BVC passed |
| 293 // notifications on to the toolbar, and that the toolbar worked correctly. The | 293 // notifications on to the toolbar, and that the toolbar worked correctly. The |
| 294 // former should be an integration test, and the latter should be a toolbar | 294 // former should be an integration test, and the latter should be a toolbar |
| 295 // test. Leaving DISABLED_ for now to remind us to move them to toolbar tests. | 295 // test. Leaving DISABLED_ for now to remind us to move them to toolbar tests. |
| 296 TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadStarted) { | 296 TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadStarted) { |
| 297 NSDictionary* userInfoWithThisTab = | 297 NSDictionary* userInfoWithThisTab = |
| 298 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; | 298 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; |
| 299 NSNotification* notification = [NSNotification | 299 NSNotification* notification = [NSNotification |
| 300 notificationWithName:kTabModelTabWillStartLoadingNotification | 300 notificationWithName:kTabModelTabWillStartLoadingNotification |
| 301 object:nil | 301 object:nil |
| 302 userInfo:userInfoWithThisTab]; | 302 userInfo:userInfoWithThisTab]; |
| 303 [bvc_ pageLoadStarted:notification]; | 303 [bvc_ pageLoadStarted:notification]; |
| 304 EXPECT_TRUE([bvc_ testing_isLoading]); | 304 EXPECT_TRUE([bvc_ testing_isLoading]); |
| 305 } | 305 } |
| 306 | 306 |
| 307 TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadComplete) { | 307 TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadComplete) { |
| 308 NSDictionary* userInfoWithThisTab = | 308 NSDictionary* userInfoWithThisTab = |
| 309 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; | 309 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; |
| 310 NSNotification* notification = [NSNotification | 310 NSNotification* notification = [NSNotification |
| 311 notificationWithName:kTabModelTabDidFinishLoadingNotification | 311 notificationWithName:kTabModelTabDidFinishLoadingNotification |
| 312 object:nil | 312 object:nil |
| 313 userInfo:userInfoWithThisTab]; | 313 userInfo:userInfoWithThisTab]; |
| 314 [bvc_ pageLoadComplete:notification]; | 314 [bvc_ pageLoadComplete:notification]; |
| 315 EXPECT_FALSE([bvc_ testing_isLoading]); | 315 EXPECT_FALSE([bvc_ testing_isLoading]); |
| 316 } | 316 } |
| 317 | 317 |
| 318 TEST_F(BrowserViewControllerTest, TestTabSelected) { | 318 TEST_F(BrowserViewControllerTest, TestTabSelected) { |
| 319 id tabMock = (id)tab_.get(); | 319 id tabMock = (id)tab_; |
| 320 [[tabMock expect] wasShown]; | 320 [[tabMock expect] wasShown]; |
| 321 [bvc_ tabSelected:tab_]; | 321 [bvc_ tabSelected:tab_]; |
| 322 EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea])); | 322 EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea])); |
| 323 EXPECT_OCMOCK_VERIFY(tabMock); | 323 EXPECT_OCMOCK_VERIFY(tabMock); |
| 324 } | 324 } |
| 325 | 325 |
| 326 TEST_F(BrowserViewControllerTest, TestTabSelectedIsNewTab) { | 326 TEST_F(BrowserViewControllerTest, TestTabSelectedIsNewTab) { |
| 327 base::scoped_nsobject<id> block([^{ | 327 id block = [^{ |
| 328 return GURL(kChromeUINewTabURL); | 328 return GURL(kChromeUINewTabURL); |
| 329 } copy]); | 329 } copy]; |
| 330 id tabMock = (id)tab_.get(); | 330 id tabMock = (id)tab_; |
| 331 [tabMock onSelector:@selector(url) callBlockExpectation:block]; | 331 [tabMock onSelector:@selector(url) callBlockExpectation:block]; |
| 332 [[tabMock expect] wasShown]; | 332 [[tabMock expect] wasShown]; |
| 333 [bvc_ tabSelected:tab_]; | 333 [bvc_ tabSelected:tab_]; |
| 334 EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea])); | 334 EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea])); |
| 335 EXPECT_OCMOCK_VERIFY(tabMock); | 335 EXPECT_OCMOCK_VERIFY(tabMock); |
| 336 } | 336 } |
| 337 | 337 |
| 338 TEST_F(BrowserViewControllerTest, TestTabDeselected) { | 338 TEST_F(BrowserViewControllerTest, TestTabDeselected) { |
| 339 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_.get()); | 339 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_); |
| 340 [[tabMock expect] wasHidden]; | 340 [[tabMock expect] wasHidden]; |
| 341 NSDictionary* userInfoWithThisTab = | 341 NSDictionary* userInfoWithThisTab = |
| 342 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; | 342 [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey]; |
| 343 NSNotification* notification = | 343 NSNotification* notification = |
| 344 [NSNotification notificationWithName:kTabModelTabDeselectedNotification | 344 [NSNotification notificationWithName:kTabModelTabDeselectedNotification |
| 345 object:nil | 345 object:nil |
| 346 userInfo:userInfoWithThisTab]; | 346 userInfo:userInfoWithThisTab]; |
| 347 [bvc_ tabDeselected:notification]; | 347 [bvc_ tabDeselected:notification]; |
| 348 EXPECT_OCMOCK_VERIFY(tabMock); | 348 EXPECT_OCMOCK_VERIFY(tabMock); |
| 349 } | 349 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 EXPECT_FALSE([[bvc_ typingShield] isHidden]); | 389 EXPECT_FALSE([[bvc_ typingShield] isHidden]); |
| 390 [bvc_ shieldWasTapped:nil]; | 390 [bvc_ shieldWasTapped:nil]; |
| 391 EXPECT_TRUE([[bvc_ typingShield] superview] == nil); | 391 EXPECT_TRUE([[bvc_ typingShield] superview] == nil); |
| 392 EXPECT_TRUE([[bvc_ typingShield] isHidden]); | 392 EXPECT_TRUE([[bvc_ typingShield] isHidden]); |
| 393 } | 393 } |
| 394 | 394 |
| 395 // Verifies that editing the omnimbox while the page is loading will stop the | 395 // Verifies that editing the omnimbox while the page is loading will stop the |
| 396 // load on a handset, but not stop the load on a tablet. | 396 // load on a handset, but not stop the load on a tablet. |
| 397 TEST_F(BrowserViewControllerTest, | 397 TEST_F(BrowserViewControllerTest, |
| 398 TestLocationBarBeganEdit_whenPageLoadIsInProgress) { | 398 TestLocationBarBeganEdit_whenPageLoadIsInProgress) { |
| 399 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_.get()); | 399 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_); |
| 400 | 400 |
| 401 // Have the TestToolbarModel indicate that a page load is in progress. | 401 // Have the TestToolbarModel indicate that a page load is in progress. |
| 402 static_cast<TestToolbarModelIOS*>(toolbarModelIOS_)->set_is_loading(true); | 402 static_cast<TestToolbarModelIOS*>(toolbarModelIOS_)->set_is_loading(true); |
| 403 | 403 |
| 404 // The tab should only stop loading on handsets. | 404 // The tab should only stop loading on handsets. |
| 405 if (!IsIPadIdiom()) | 405 if (!IsIPadIdiom()) |
| 406 [[static_cast<OCMockObject*>(webController_.get()) expect] stopLoading]; | 406 [[static_cast<OCMockObject*>(webController_) expect] stopLoading]; |
| 407 [bvc_ locationBarBeganEdit:nil]; | 407 [bvc_ locationBarBeganEdit:nil]; |
| 408 | 408 |
| 409 EXPECT_OCMOCK_VERIFY(static_cast<OCMockObject*>(webController_.get())); | 409 EXPECT_OCMOCK_VERIFY(static_cast<OCMockObject*>(webController_)); |
| 410 EXPECT_OCMOCK_VERIFY(tabMock); | 410 EXPECT_OCMOCK_VERIFY(tabMock); |
| 411 } | 411 } |
| 412 | 412 |
| 413 // Verifies that editing the omnibox when the page is not loading will not try | 413 // Verifies that editing the omnibox when the page is not loading will not try |
| 414 // to stop the load on a handset or a tablet. | 414 // to stop the load on a handset or a tablet. |
| 415 TEST_F(BrowserViewControllerTest, | 415 TEST_F(BrowserViewControllerTest, |
| 416 TestLocationBarBeganEdit_whenPageLoadIsComplete) { | 416 TestLocationBarBeganEdit_whenPageLoadIsComplete) { |
| 417 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_.get()); | 417 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_); |
| 418 | 418 |
| 419 // Have the TestToolbarModel indicate that the page load is complete. | 419 // Have the TestToolbarModel indicate that the page load is complete. |
| 420 static_cast<TestToolbarModelIOS*>(toolbarModelIOS_)->set_is_loading(false); | 420 static_cast<TestToolbarModelIOS*>(toolbarModelIOS_)->set_is_loading(false); |
| 421 | 421 |
| 422 // Don't set any expectation for stopLoading to be called on the mock tab. | 422 // Don't set any expectation for stopLoading to be called on the mock tab. |
| 423 [bvc_ locationBarBeganEdit:nil]; | 423 [bvc_ locationBarBeganEdit:nil]; |
| 424 | 424 |
| 425 EXPECT_OCMOCK_VERIFY(tabMock); | 425 EXPECT_OCMOCK_VERIFY(tabMock); |
| 426 } | 426 } |
| 427 | 427 |
| 428 // Verifies that BVC invokes -shareURL on ShareController with the correct | 428 // Verifies that BVC invokes -shareURL on ShareController with the correct |
| 429 // parameters in response to the IDC_SHARE_PAGE command. | 429 // parameters in response to the IDC_SHARE_PAGE command. |
| 430 TEST_F(BrowserViewControllerTest, TestSharePageCommandHandling) { | 430 TEST_F(BrowserViewControllerTest, TestSharePageCommandHandling) { |
| 431 GURL expectedUrl("http://www.testurl.net"); | 431 GURL expectedUrl("http://www.testurl.net"); |
| 432 NSString* expectedTitle = @"title"; | 432 NSString* expectedTitle = @"title"; |
| 433 static_cast<BVCTestTabMock*>(tab_.get()).lastCommittedURL = expectedUrl; | 433 static_cast<BVCTestTabMock*>(tab_).lastCommittedURL = expectedUrl; |
| 434 static_cast<BVCTestTabMock*>(tab_.get()).visibleURL = expectedUrl; | 434 static_cast<BVCTestTabMock*>(tab_).visibleURL = expectedUrl; |
| 435 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_.get()); | 435 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_); |
| 436 ios::ChromeBrowserState* ptr = chrome_browser_state_.get(); | 436 ios::ChromeBrowserState* ptr = chrome_browser_state_.get(); |
| 437 [[[tabMock stub] andReturnValue:OCMOCK_VALUE(ptr)] browserState]; | 437 [[[tabMock stub] andReturnValue:OCMOCK_VALUE(ptr)] browserState]; |
| 438 [[[tabMock stub] andReturn:expectedTitle] title]; | 438 [[[tabMock stub] andReturn:expectedTitle] title]; |
| 439 [[[tabMock stub] andReturn:expectedTitle] originalTitle]; | 439 [[[tabMock stub] andReturn:expectedTitle] originalTitle]; |
| 440 | 440 |
| 441 UIImage* tabSnapshot = ui::test::uiimage_utils::UIImageWithSizeAndSolidColor( | 441 UIImage* tabSnapshot = ui::test::uiimage_utils::UIImageWithSizeAndSolidColor( |
| 442 CGSizeMake(300, 400), [UIColor blueColor]); | 442 CGSizeMake(300, 400), [UIColor blueColor]); |
| 443 [[[tabMock stub] andReturn:tabSnapshot] generateSnapshotWithOverlay:NO | 443 [[[tabMock stub] andReturn:tabSnapshot] generateSnapshotWithOverlay:NO |
| 444 visibleFrameOnly:YES]; | 444 visibleFrameOnly:YES]; |
| 445 OCMockObject* shareControllerMock = | 445 OCMockObject* shareControllerMock = |
| 446 static_cast<OCMockObject*>(shareController_.get()); | 446 static_cast<OCMockObject*>(shareController_); |
| 447 // Passing non zero/nil |fromRect| and |inView| parameters to satisfy protocol | 447 // Passing non zero/nil |fromRect| and |inView| parameters to satisfy protocol |
| 448 // requirements. | 448 // requirements. |
| 449 BOOL (^shareDataChecker) | 449 BOOL (^shareDataChecker) |
| 450 (id value) = ^BOOL(id value) { | 450 (id value) = ^BOOL(id value) { |
| 451 if (![value isMemberOfClass:ShareToData.class]) | 451 if (![value isMemberOfClass:ShareToData.class]) |
| 452 return NO; | 452 return NO; |
| 453 ShareToData* shareToData = static_cast<ShareToData*>(value); | 453 ShareToData* shareToData = static_cast<ShareToData*>(value); |
| 454 CGSize size = CGSizeMake(40, 40); | 454 CGSize size = CGSizeMake(40, 40); |
| 455 BOOL thumbnailDataIsEqual = ui::test::uiimage_utils::UIImagesAreEqual( | 455 BOOL thumbnailDataIsEqual = ui::test::uiimage_utils::UIImagesAreEqual( |
| 456 shareToData.thumbnailGenerator(size), | 456 shareToData.thumbnailGenerator(size), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 472 [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)]; | 472 [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)]; |
| 473 EXPECT_OCMOCK_VERIFY(shareControllerMock); | 473 EXPECT_OCMOCK_VERIFY(shareControllerMock); |
| 474 } | 474 } |
| 475 | 475 |
| 476 // Verifies that BVC does not invoke -shareURL on ShareController in response | 476 // Verifies that BVC does not invoke -shareURL on ShareController in response |
| 477 // to the IDC_SHARE_PAGE command if tab is in the process of being closed. | 477 // to the IDC_SHARE_PAGE command if tab is in the process of being closed. |
| 478 TEST_F(BrowserViewControllerTest, TestSharePageWhenClosing) { | 478 TEST_F(BrowserViewControllerTest, TestSharePageWhenClosing) { |
| 479 GURL expectedUrl("http://www.testurl.net"); | 479 GURL expectedUrl("http://www.testurl.net"); |
| 480 NSString* expectedTitle = @"title"; | 480 NSString* expectedTitle = @"title"; |
| 481 // Sets WebState to nil because [tab close] clears the WebState. | 481 // Sets WebState to nil because [tab close] clears the WebState. |
| 482 static_cast<BVCTestTabMock*>(tab_.get()).webState = nil; | 482 static_cast<BVCTestTabMock*>(tab_).webState = nil; |
| 483 static_cast<BVCTestTabMock*>(tab_.get()).lastCommittedURL = expectedUrl; | 483 static_cast<BVCTestTabMock*>(tab_).lastCommittedURL = expectedUrl; |
| 484 static_cast<BVCTestTabMock*>(tab_.get()).visibleURL = expectedUrl; | 484 static_cast<BVCTestTabMock*>(tab_).visibleURL = expectedUrl; |
| 485 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_.get()); | 485 OCMockObject* tabMock = static_cast<OCMockObject*>(tab_); |
| 486 [[[tabMock stub] andReturn:expectedTitle] title]; | 486 [[[tabMock stub] andReturn:expectedTitle] title]; |
| 487 [[[tabMock stub] andReturn:expectedTitle] originalTitle]; | 487 [[[tabMock stub] andReturn:expectedTitle] originalTitle]; |
| 488 // Explicitly disallow the execution of the ShareController. | 488 // Explicitly disallow the execution of the ShareController. |
| 489 OCMockObject* shareControllerMock = | 489 OCMockObject* shareControllerMock = |
| 490 static_cast<OCMockObject*>(shareController_.get()); | 490 static_cast<OCMockObject*>(shareController_); |
| 491 [[shareControllerMock reject] | 491 [[shareControllerMock reject] |
| 492 shareWithData:[OCMArg any] | 492 shareWithData:[OCMArg any] |
| 493 controller:bvc_ | 493 controller:bvc_ |
| 494 browserState:chrome_browser_state_.get() | 494 browserState:chrome_browser_state_.get() |
| 495 shareToDelegate:bvc_ | 495 shareToDelegate:bvc_ |
| 496 fromRect:[bvc_ testing_shareButtonAnchorRect] | 496 fromRect:[bvc_ testing_shareButtonAnchorRect] |
| 497 inView:[OCMArg any]]; | 497 inView:[OCMArg any]]; |
| 498 [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)]; | 498 [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)]; |
| 499 EXPECT_OCMOCK_VERIFY(shareControllerMock); | 499 EXPECT_OCMOCK_VERIFY(shareControllerMock); |
| 500 } | 500 } |
| 501 | 501 |
| 502 // Verifies that BVC instantiates a bubble to show the given success message on | 502 // Verifies that BVC instantiates a bubble to show the given success message on |
| 503 // receiving a -shareDidComplete callback for a successful share. | 503 // receiving a -shareDidComplete callback for a successful share. |
| 504 TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithSuccess) { | 504 TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithSuccess) { |
| 505 NSString* completionMessage = @"Completion!"; | 505 NSString* completionMessage = @"Completion!"; |
| 506 [[dependencyFactory_ expect] showSnackbarWithMessage:completionMessage]; | 506 [[dependencyFactory_ expect] showSnackbarWithMessage:completionMessage]; |
| 507 | 507 |
| 508 [bvc_ shareDidComplete:ShareTo::SHARE_SUCCESS | 508 [bvc_ shareDidComplete:ShareTo::SHARE_SUCCESS |
| 509 completionMessage:completionMessage]; | 509 completionMessage:completionMessage]; |
| 510 EXPECT_OCMOCK_VERIFY(dependencyFactory_); | 510 EXPECT_OCMOCK_VERIFY(dependencyFactory_); |
| 511 } | 511 } |
| 512 | 512 |
| 513 // Verifies that BVC shows an alert with the proper error message on | 513 // Verifies that BVC shows an alert with the proper error message on |
| 514 // receiving a -shareDidComplete callback for a failed share. | 514 // receiving a -shareDidComplete callback for a failed share. |
| 515 TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithError) { | 515 TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithError) { |
| 516 [[dependencyFactory_ reject] showSnackbarWithMessage:OCMOCK_ANY]; | 516 [[dependencyFactory_ reject] showSnackbarWithMessage:OCMOCK_ANY]; |
| 517 base::scoped_nsobject<OCMockObject> mockCoordinator( | 517 OCMockObject* mockCoordinator = |
| 518 [[OCMockObject niceMockForClass:[AlertCoordinator class]] retain]); | 518 [OCMockObject niceMockForClass:[AlertCoordinator class]]; |
| 519 AlertCoordinator* alertCoordinator = | 519 AlertCoordinator* alertCoordinator = |
| 520 static_cast<AlertCoordinator*>(mockCoordinator.get()); | 520 static_cast<AlertCoordinator*>(mockCoordinator); |
| 521 NSString* errorTitle = | 521 NSString* errorTitle = |
| 522 l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT_TITLE); | 522 l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT_TITLE); |
| 523 NSString* errorMessage = l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT); | 523 NSString* errorMessage = l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT); |
| 524 [[[dependencyFactory_ expect] andReturn:alertCoordinator] | 524 [[[dependencyFactory_ expect] andReturn:alertCoordinator] |
| 525 alertCoordinatorWithTitle:errorTitle | 525 alertCoordinatorWithTitle:errorTitle |
| 526 message:errorMessage | 526 message:errorMessage |
| 527 viewController:OCMOCK_ANY]; | 527 viewController:OCMOCK_ANY]; |
| 528 [static_cast<AlertCoordinator*>([mockCoordinator expect]) start]; | 528 [static_cast<AlertCoordinator*>([mockCoordinator expect]) start]; |
| 529 | 529 |
| 530 [bvc_ shareDidComplete:ShareTo::SHARE_ERROR completionMessage:@"dummy"]; | 530 [bvc_ shareDidComplete:ShareTo::SHARE_ERROR completionMessage:@"dummy"]; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 NSData* badPassKitObject = [NSData | 565 NSData* badPassKitObject = [NSData |
| 566 dataWithContentsOfFile:base::SysUTF8ToNSString(bad_pass_path.value())]; | 566 dataWithContentsOfFile:base::SysUTF8ToNSString(bad_pass_path.value())]; |
| 567 EXPECT_TRUE(badPassKitObject); | 567 EXPECT_TRUE(badPassKitObject); |
| 568 [[dependencyFactory_ reject] newPassKitViewControllerForPass:OCMOCK_ANY]; | 568 [[dependencyFactory_ reject] newPassKitViewControllerForPass:OCMOCK_ANY]; |
| 569 [bvc_ presentPassKitDialog:badPassKitObject]; | 569 [bvc_ presentPassKitDialog:badPassKitObject]; |
| 570 EXPECT_OCMOCK_VERIFY(dependencyFactory_); | 570 EXPECT_OCMOCK_VERIFY(dependencyFactory_); |
| 571 } | 571 } |
| 572 | 572 |
| 573 TEST_F(BrowserViewControllerTest, TestClearPresentedState) { | 573 TEST_F(BrowserViewControllerTest, TestClearPresentedState) { |
| 574 OCMockObject* shareControllerMock = | 574 OCMockObject* shareControllerMock = |
| 575 static_cast<OCMockObject*>(shareController_.get()); | 575 static_cast<OCMockObject*>(shareController_); |
| 576 [[shareControllerMock expect] cancelShareAnimated:NO]; | 576 [[shareControllerMock expect] cancelShareAnimated:NO]; |
| 577 EXPECT_CALL(*this, OnCompletionCalled()); | 577 EXPECT_CALL(*this, OnCompletionCalled()); |
| 578 [bvc_ clearPresentedStateWithCompletion:^{ | 578 [bvc_ clearPresentedStateWithCompletion:^{ |
| 579 this->OnCompletionCalled(); | 579 this->OnCompletionCalled(); |
| 580 }]; | 580 }]; |
| 581 EXPECT_OCMOCK_VERIFY(shareControllerMock); | 581 EXPECT_OCMOCK_VERIFY(shareControllerMock); |
| 582 } | 582 } |
| 583 | 583 |
| 584 } // namespace | 584 } // namespace |
| OLD | NEW |