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

Unified Diff: ios/chrome/browser/ui/browser_view_controller_unittest.mm

Issue 2588713002: Upstream Chrome on iOS source code [4/11]. (Closed)
Patch Set: Created 4 years 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: ios/chrome/browser/ui/browser_view_controller_unittest.mm
diff --git a/ios/chrome/browser/ui/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view_controller_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..d31d8ee75a3f4bd1ea02fdc9ffc5338ac783c37e
--- /dev/null
+++ b/ios/chrome/browser/ui/browser_view_controller_unittest.mm
@@ -0,0 +1,534 @@
+// Copyright 2012 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 <Foundation/Foundation.h>
+#import <PassKit/PassKit.h>
+
+#include <memory>
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/mac/scoped_nsautorelease_pool.h"
+#include "base/mac/scoped_nsobject.h"
+#include "base/memory/ptr_util.h"
+#include "base/path_service.h"
+#include "base/strings/sys_string_conversions.h"
+#include "components/bookmarks/test/bookmark_test_helpers.h"
+#include "components/prefs/testing_pref_service.h"
+#include "components/search_engines/template_url_service.h"
+#include "components/sessions/core/tab_restore_service.h"
+#include "components/toolbar/test_toolbar_model.h"
+#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
+#import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#include "ios/chrome/browser/chrome_paths.h"
+#include "ios/chrome/browser/chrome_switches.h"
+#include "ios/chrome/browser/chrome_url_constants.h"
+#import "ios/chrome/browser/find_in_page/find_in_page_controller.h"
+#import "ios/chrome/browser/find_in_page/find_in_page_model.h"
+#include "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
+#import "ios/chrome/browser/tabs/tab.h"
+#import "ios/chrome/browser/tabs/tab_model.h"
+#import "ios/chrome/browser/ui/activity_services/share_protocol.h"
+#import "ios/chrome/browser/ui/activity_services/share_to_data.h"
+#import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
+#import "ios/chrome/browser/ui/browser_view_controller.h"
+#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h"
+#import "ios/chrome/browser/ui/browser_view_controller_testing.h"
+#import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
+#import "ios/chrome/browser/ui/page_not_available_controller.h"
+#include "ios/chrome/browser/ui/toolbar/test_toolbar_model_ios.h"
+#import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
+#include "ios/chrome/browser/ui/ui_util.h"
+#import "ios/chrome/browser/web/error_page_content.h"
+#import "ios/chrome/browser/web/passkit_dialog_provider.h"
+#include "ios/chrome/grit/ios_strings.h"
+#include "ios/chrome/test/block_cleanup_test.h"
+#include "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
+#include "ios/chrome/test/testing_application_context.h"
+#import "ios/testing/ocmock_complex_type_helper.h"
+#import "ios/web/navigation/crw_session_controller.h"
+#include "ios/web/public/referrer.h"
+#include "ios/web/public/test/test_web_thread_bundle.h"
+#import "ios/web/public/web_state/ui/crw_native_content_provider.h"
+#import "ios/web/web_state/ui/crw_web_controller.h"
+#import "ios/web/web_state/web_state_impl.h"
+#import "net/base/mac/url_conversions.h"
+#include "net/url_request/url_request_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest_mac.h"
+#import "third_party/ocmock/OCMock/OCMock.h"
+#include "third_party/ocmock/gtest_support.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+using web::NavigationManagerImpl;
+using web::WebStateImpl;
+
+// Private methods in BrowserViewController to test.
+@interface BrowserViewController (
+ Testing)<CRWNativeContentProvider, PassKitDialogProvider, ShareToDelegate>
+- (void)pageLoadStarted:(NSNotification*)notification;
+- (void)pageLoadComplete:(NSNotification*)notification;
+- (void)tabSelected:(Tab*)tab;
+- (void)tabDeselected:(NSNotification*)notification;
+- (void)tabCountChanged:(NSNotification*)notification;
+- (IBAction)chromeExecuteCommand:(id)sender;
+@end
+
+@interface BVCTestTabMock : OCMockComplexTypeHelper {
+ GURL url_;
+ WebStateImpl* webState_;
+}
+
+@property(nonatomic, assign) const GURL& url;
+@property(nonatomic, assign) WebStateImpl* webState;
+
+- (NavigationManagerImpl*)navigationManager;
+
+@end
+
+@implementation BVCTestTabMock
+- (const GURL&)url {
+ return url_;
+}
+- (void)setUrl:(const GURL&)url {
+ url_ = url;
+}
+- (WebStateImpl*)webState {
+ return webState_;
+}
+- (void)setWebState:(WebStateImpl*)webState {
+ webState_ = webState;
+}
+- (NavigationManagerImpl*)navigationManager {
+ return &(webState_->GetNavigationManagerImpl());
+}
+@end
+
+#pragma mark -
+
+namespace {
+class BrowserViewControllerTest : public BlockCleanupTest {
+ public:
+ BrowserViewControllerTest() {}
+
+ protected:
+ void SetUp() override {
+ BlockCleanupTest::SetUp();
+ // Disable Contextual Search on the command line.
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableContextualSearch)) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableContextualSearch);
+ }
+
+ // Set up a TestChromeBrowserState instance.
+ TestChromeBrowserState::Builder test_cbs_builder;
+ test_cbs_builder.AddTestingFactory(
+ IOSChromeTabRestoreServiceFactory::GetInstance(),
+ IOSChromeTabRestoreServiceFactory::GetDefaultFactory());
+ test_cbs_builder.AddTestingFactory(
+ ios::TemplateURLServiceFactory::GetInstance(),
+ ios::TemplateURLServiceFactory::GetDefaultFactory());
+ chrome_browser_state_ = test_cbs_builder.Build();
+ chrome_browser_state_->CreateBookmarkModel(false);
+ bookmarks::BookmarkModel* bookmark_model =
+ ios::BookmarkModelFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+ bookmarks::test::WaitForBookmarkModelToLoad(bookmark_model);
+
+ // Set up mock TabModel, Tab, CRWWebController and FindInPageController.
+ id tabModel = [OCMockObject mockForClass:[TabModel class]];
+ base::scoped_nsobject<id> currentTab([[BVCTestTabMock alloc]
+ initWithRepresentedObject:[OCMockObject niceMockForClass:[Tab class]]]);
+ id webControllerMock =
+ [OCMockObject niceMockForClass:[CRWWebController class]];
+ id findInPageControllerMock =
+ [OCMockObject niceMockForClass:[FindInPageController class]];
+
+ // Stub methods for TabModel.
+ NSUInteger tabCount = 1;
+ [[[tabModel stub] andReturnValue:OCMOCK_VALUE(tabCount)] count];
+ BOOL enabled = YES;
+ [[[tabModel stub] andReturnValue:OCMOCK_VALUE(enabled)] webUsageEnabled];
+ [[[tabModel stub] andReturn:currentTab] currentTab];
+ [[[tabModel stub] andReturn:currentTab] tabAtIndex:0];
+ GURL URL("http://www.google.com");
+ [[[tabModel stub] andReturn:currentTab] addTabWithURL:URL
+ referrer:web::Referrer()
+ windowName:[OCMArg any]];
+ [[tabModel stub] addObserver:[OCMArg any]];
+ [[tabModel stub] removeObserver:[OCMArg any]];
+ [[tabModel stub] saveSessionImmediately:NO];
+ [[tabModel stub] setCurrentTab:[OCMArg any]];
+ [[tabModel stub] closeAllTabs];
+
+ // Stub methods for Tab.
+ UIView* dummyView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
+ [[[currentTab stub] andReturn:dummyView] view];
+ [[[currentTab stub] andReturn:webControllerMock] webController];
+ [[[currentTab stub] andReturn:findInPageControllerMock]
+ findInPageController];
+
+ id sessionControllerMock =
+ [OCMockObject niceMockForClass:[CRWSessionController class]];
+ webStateImpl_.reset(new WebStateImpl(chrome_browser_state_.get()));
+ [currentTab setWebState:webStateImpl_.get()];
+ webStateImpl_->SetWebController(webControllerMock);
+ webStateImpl_->GetNavigationManagerImpl().SetSessionController(
+ sessionControllerMock);
+
+ // Set up mock ShareController.
+ id shareController =
+ [OCMockObject niceMockForProtocol:@protocol(ShareProtocol)];
+ shareController_.reset([shareController retain]);
+
+ id passKitController =
+ [OCMockObject niceMockForClass:[PKAddPassesViewController class]];
+ passKitViewController_.reset([passKitController retain]);
+
+ // Set up a fake toolbar model for the dependency factory to return.
+ // It will be owned (and destroyed) by the BVC.
+ toolbarModelIOS_ = new TestToolbarModelIOS();
+
+ // Set up a stub dependency factory.
+ id factory = [OCMockObject
+ mockForClass:[BrowserViewControllerDependencyFactory class]];
+ [[[factory stub] andReturn:nil]
+ newTabStripControllerWithTabModel:[OCMArg any]];
+ [[[factory stub] andReturn:nil] newPreloadController];
+ [[[factory stub] andReturnValue:OCMOCK_VALUE(toolbarModelIOS_)]
+ newToolbarModelIOSWithDelegate:(ToolbarModelDelegateIOS*)
+ [OCMArg anyPointer]];
+ [[[factory stub] andReturn:nil]
+ newWebToolbarControllerWithDelegate:[OCMArg any]
+ urlLoader:[OCMArg any]
+ preloadProvider:[OCMArg any]];
+ [[[factory stub] andReturn:shareController_.get()] shareControllerInstance];
+ [[[factory stub] andReturn:passKitViewController_.get()]
+ newPassKitViewControllerForPass:nil];
+ [[[factory stub] andReturn:nil] showPassKitErrorInfoBarForManager:nil];
+
+ webController_.reset([webControllerMock retain]);
+ findInPageController_.reset([findInPageControllerMock retain]);
+ tabModel_.reset([tabModel retain]);
+ tab_.reset([currentTab retain]);
+ dependencyFactory_.reset([factory retain]);
+ bvc_.reset([[BrowserViewController alloc]
+ initWithTabModel:tabModel_
+ browserState:chrome_browser_state_.get()
+ dependencyFactory:factory]);
+
+ // Load TemplateURLService.
+ TemplateURLService* template_url_service =
+ ios::TemplateURLServiceFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+ template_url_service->Load();
+
+ // Force the view to load.
+ UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectZero];
+ [window addSubview:[bvc_ view]];
+ window_.reset(window);
+ }
+
+ void TearDown() override {
+ [[bvc_ view] removeFromSuperview];
+ BlockCleanupTest::TearDown();
+ }
+
+ base::scoped_nsobject<GenericChromeCommand> GetCommandWithTag(NSInteger tag) {
+ base::scoped_nsobject<GenericChromeCommand> command(
+ [[GenericChromeCommand alloc] initWithTag:tag]);
+ return command;
+ }
+
+ MOCK_METHOD0(OnCompletionCalled, void());
+
+ web::TestWebThreadBundle thread_bundle_;
+ IOSChromeScopedTestingLocalState local_state_;
+ std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
+ std::unique_ptr<WebStateImpl> webStateImpl_;
+ base::scoped_nsobject<CRWWebController> webController_;
+ base::scoped_nsobject<Tab> tab_;
+ base::scoped_nsobject<TabModel> tabModel_;
+ ToolbarModelIOS* toolbarModelIOS_;
+ base::scoped_nsprotocol<id<ShareProtocol>> shareController_;
+ base::scoped_nsobject<FindInPageController> findInPageController_;
+ base::scoped_nsobject<PKAddPassesViewController> passKitViewController_;
+ base::scoped_nsobject<OCMockObject> dependencyFactory_;
+ base::scoped_nsobject<BrowserViewController> bvc_;
+ base::scoped_nsobject<UIWindow> window_;
+};
+
+// TODO(crbug.com/228714): These tests pretty much only tested that BVC passed
+// notifications on to the toolbar, and that the toolbar worked correctly. The
+// former should be an integration test, and the latter should be a toolbar
+// test. Leaving DISABLED_ for now to remind us to move them to toolbar tests.
+TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadStarted) {
+ NSDictionary* userInfoWithThisTab =
+ [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey];
+ NSNotification* notification = [NSNotification
+ notificationWithName:kTabModelTabWillStartLoadingNotification
+ object:nil
+ userInfo:userInfoWithThisTab];
+ [bvc_ pageLoadStarted:notification];
+ EXPECT_TRUE([bvc_ testing_isLoading]);
+}
+
+TEST_F(BrowserViewControllerTest, DISABLED_TestPageLoadComplete) {
+ NSDictionary* userInfoWithThisTab =
+ [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey];
+ NSNotification* notification = [NSNotification
+ notificationWithName:kTabModelTabDidFinishLoadingNotification
+ object:nil
+ userInfo:userInfoWithThisTab];
+ [bvc_ pageLoadComplete:notification];
+ EXPECT_FALSE([bvc_ testing_isLoading]);
+}
+
+TEST_F(BrowserViewControllerTest, TestTabSelected) {
+ id tabMock = (id)tab_.get();
+ [[tabMock expect] wasShown];
+ [bvc_ tabSelected:tab_];
+ EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea]));
+ EXPECT_OCMOCK_VERIFY(tabMock);
+}
+
+TEST_F(BrowserViewControllerTest, TestTabSelectedIsNewTab) {
+ base::scoped_nsobject<id> block([^{
+ return GURL(kChromeUINewTabURL);
+ } copy]);
+ id tabMock = (id)tab_.get();
+ [tabMock onSelector:@selector(url) callBlockExpectation:block];
+ [[tabMock expect] wasShown];
+ [bvc_ tabSelected:tab_];
+ EXPECT_EQ([[tab_ view] superview], static_cast<UIView*>([bvc_ contentArea]));
+ EXPECT_OCMOCK_VERIFY(tabMock);
+}
+
+TEST_F(BrowserViewControllerTest, TestTabDeselected) {
+ OCMockObject* tabMock = (OCMockObject*)tab_.get();
+ [[tabMock expect] wasHidden];
+ NSDictionary* userInfoWithThisTab =
+ [NSDictionary dictionaryWithObject:tab_ forKey:kTabModelTabKey];
+ NSNotification* notification =
+ [NSNotification notificationWithName:kTabModelTabDeselectedNotification
+ object:nil
+ userInfo:userInfoWithThisTab];
+ [bvc_ tabDeselected:notification];
+ EXPECT_OCMOCK_VERIFY(tabMock);
+}
+
+TEST_F(BrowserViewControllerTest, TestNativeContentController) {
+ id<CRWNativeContent> controller =
+ [bvc_ controllerForURL:GURL(kChromeUINewTabURL)];
+ EXPECT_TRUE(controller != nil);
+ EXPECT_TRUE([controller isMemberOfClass:[NewTabPageController class]]);
+
+ controller = [bvc_ controllerForURL:GURL(kChromeUISettingsURL)];
+ EXPECT_TRUE(controller != nil);
+ EXPECT_TRUE([controller isMemberOfClass:[PageNotAvailableController class]]);
+}
+
+TEST_F(BrowserViewControllerTest, TestErrorController) {
+ const GURL badUrl("http://floofywhizbangzzz.com");
+ NSString* badURLString = base::SysUTF8ToNSString(badUrl.spec());
+ NSDictionary* userInfoDic = [NSDictionary
+ dictionaryWithObjectsAndKeys:badURLString,
+ NSURLErrorFailingURLStringErrorKey,
+ [NSError
+ errorWithDomain:base::SysUTF8ToNSString(
+ net::kErrorDomain)
+ code:-104
+ userInfo:nil],
+ NSUnderlyingErrorKey, nil];
+ NSError* testError =
+ [NSError errorWithDomain:@"testdomain" code:-1 userInfo:userInfoDic];
+ id<CRWNativeContent> controller =
+ [bvc_ controllerForURL:badUrl withError:testError isPost:NO];
+ EXPECT_TRUE(controller != nil);
+ EXPECT_TRUE([controller isMemberOfClass:[ErrorPageContent class]]);
+}
+
+// TODO(altse): Needs a testing |Profile| that implements AutocompleteClassifier
+// before enabling again.
+TEST_F(BrowserViewControllerTest, DISABLED_TestShieldWasTapped) {
+ [bvc_ testing_focusOmnibox];
+ EXPECT_TRUE([[bvc_ typingShield] superview] != nil);
+ EXPECT_FALSE([[bvc_ typingShield] isHidden]);
+ [bvc_ shieldWasTapped:nil];
+ EXPECT_TRUE([[bvc_ typingShield] superview] == nil);
+ EXPECT_TRUE([[bvc_ typingShield] isHidden]);
+}
+
+// Verifies that editing the omnimbox while the page is loading will stop the
+// load on a handset, but not stop the load on a tablet.
+TEST_F(BrowserViewControllerTest,
+ TestLocationBarBeganEdit_whenPageLoadIsInProgress) {
+ OCMockObject* tabMock = (OCMockObject*)tab_.get();
+
+ // Have the TestToolbarModel indicate that a page load is in progress.
+ ((TestToolbarModelIOS*)toolbarModelIOS_)->set_is_loading(true);
+
+ // The tab should only stop loading on handsets.
+ if (!IsIPadIdiom())
+ [[tabMock expect] stopLoading];
+ [bvc_ locationBarBeganEdit:nil];
+
+ EXPECT_OCMOCK_VERIFY(tabMock);
+}
+
+// Verifies that editing the omnibox when the page is not loading will not try
+// to stop the load on a handset or a tablet.
+TEST_F(BrowserViewControllerTest,
+ TestLocationBarBeganEdit_whenPageLoadIsComplete) {
+ OCMockObject* tabMock = (OCMockObject*)tab_.get();
+
+ // Have the TestToolbarModel indicate that the page load is complete.
+ ((TestToolbarModelIOS*)toolbarModelIOS_)->set_is_loading(false);
+
+ // Don't set any expectation for stopLoading to be called on the mock tab.
+ [bvc_ locationBarBeganEdit:nil];
+
+ EXPECT_OCMOCK_VERIFY(tabMock);
+}
+
+// Verifies that BVC invokes -shareURL on ShareController with the correct
+// parameters in response to the IDC_SHARE_PAGE command.
+TEST_F(BrowserViewControllerTest, TestSharePageCommandHandling) {
+ GURL expectedUrl("http://www.testurl.net");
+ NSString* expectedTitle = @"title";
+ [(BVCTestTabMock*)tab_.get() setUrl:expectedUrl];
+ OCMockObject* tabMock = (OCMockObject*)tab_.get();
+ [[[tabMock stub] andReturn:expectedTitle] title];
+ [[[tabMock stub] andReturn:expectedTitle] originalTitle];
+ base::scoped_nsobject<ShareToData> expectedShareData([[ShareToData alloc]
+ initWithURL:expectedUrl
+ title:expectedTitle
+ isOriginalTitle:YES
+ isPagePrintable:YES]);
+ OCMockObject* shareControllerMock = (OCMockObject*)shareController_.get();
+ // Passing non zero/nil |fromRect| and |inView| parameters to satisfy protocol
+ // requirements.
+ [[shareControllerMock expect]
+ shareWithData:expectedShareData
+ controller:bvc_
+ browserState:chrome_browser_state_.get()
+ shareToDelegate:bvc_
+ fromRect:[bvc_ testing_shareButtonAnchorRect]
+ inView:[OCMArg any]];
+ [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)];
+ EXPECT_OCMOCK_VERIFY(shareControllerMock);
+}
+
+// Verifies that BVC does not invoke -shareURL on ShareController in response
+// to the IDC_SHARE_PAGE command if tab is in the process of being closed.
+TEST_F(BrowserViewControllerTest, TestSharePageWhenClosing) {
+ GURL expectedUrl("http://www.testurl.net");
+ NSString* expectedTitle = @"title";
+ // Sets WebState to nil because [tab close] clears the WebState.
+ [(BVCTestTabMock*)tab_.get() setWebState:nil];
+ [(BVCTestTabMock*)tab_.get() setUrl:expectedUrl];
+ OCMockObject* tabMock = (OCMockObject*)tab_.get();
+ [[[tabMock stub] andReturn:expectedTitle] title];
+ [[[tabMock stub] andReturn:expectedTitle] originalTitle];
+ // Explicitly disallow the execution of the ShareController.
+ OCMockObject* shareControllerMock = (OCMockObject*)shareController_.get();
+ [[shareControllerMock reject]
+ shareWithData:[OCMArg any]
+ controller:bvc_
+ browserState:chrome_browser_state_.get()
+ shareToDelegate:bvc_
+ fromRect:[bvc_ testing_shareButtonAnchorRect]
+ inView:[OCMArg any]];
+ [bvc_ chromeExecuteCommand:GetCommandWithTag(IDC_SHARE_PAGE)];
+ EXPECT_OCMOCK_VERIFY(shareControllerMock);
+}
+
+// Verifies that BVC instantiates a bubble to show the given success message on
+// receiving a -shareDidComplete callback for a successful share.
+TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithSuccess) {
+ NSString* successMessage = @"Success";
+ [[dependencyFactory_ expect] showSnackbarWithMessage:successMessage];
+
+ [bvc_ shareDidComplete:ShareTo::SHARE_SUCCESS successMessage:successMessage];
+ EXPECT_OCMOCK_VERIFY(dependencyFactory_);
+}
+
+// Verifies that BVC shows an alert with the proper error message on
+// receiving a -shareDidComplete callback for a failed share.
+TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithError) {
+ [[dependencyFactory_ reject] showSnackbarWithMessage:OCMOCK_ANY];
+ base::scoped_nsobject<OCMockObject> mockCoordinator(
+ [[OCMockObject niceMockForClass:[AlertCoordinator class]] retain]);
+ AlertCoordinator* alertCoordinator =
+ static_cast<AlertCoordinator*>(mockCoordinator.get());
+ NSString* errorTitle =
+ l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT_TITLE);
+ NSString* errorMessage = l10n_util::GetNSString(IDS_IOS_SHARE_TO_ERROR_ALERT);
+ [[[dependencyFactory_ expect] andReturn:alertCoordinator]
+ alertCoordinatorWithTitle:errorTitle
+ message:errorMessage
+ viewController:OCMOCK_ANY];
+ [((AlertCoordinator*)[mockCoordinator expect])start];
+
+ [bvc_ shareDidComplete:ShareTo::SHARE_ERROR successMessage:@"dummy"];
+ EXPECT_OCMOCK_VERIFY(dependencyFactory_);
+ EXPECT_OCMOCK_VERIFY(mockCoordinator);
+}
+
+// Verifies that BVC does not show a success bubble or error alert on receiving
+// a -shareDidComplete callback for a cancelled share.
+TEST_F(BrowserViewControllerTest, TestShareDidCompleteWithCancellation) {
+ [[dependencyFactory_ reject] showSnackbarWithMessage:OCMOCK_ANY];
+ [[dependencyFactory_ reject] alertCoordinatorWithTitle:OCMOCK_ANY
+ message:OCMOCK_ANY
+ viewController:OCMOCK_ANY];
+
+ [bvc_ shareDidComplete:ShareTo::SHARE_CANCEL successMessage:@"dummy"];
+ EXPECT_OCMOCK_VERIFY(dependencyFactory_);
+}
+
+TEST_F(BrowserViewControllerTest, TestPassKitDialogDisplayed) {
+ // Create a good Pass and make sure the controller is displayed.
+ base::FilePath pass_path;
+ ASSERT_TRUE(PathService::Get(ios::DIR_TEST_DATA, &pass_path));
+ pass_path = pass_path.Append(FILE_PATH_LITERAL("testpass.pkpass"));
+ NSData* passKitObject = [NSData
+ dataWithContentsOfFile:base::SysUTF8ToNSString(pass_path.value())];
+ EXPECT_TRUE(passKitObject);
+ [[dependencyFactory_ expect] newPassKitViewControllerForPass:OCMOCK_ANY];
+ [bvc_ presentPassKitDialog:passKitObject];
+ EXPECT_OCMOCK_VERIFY(dependencyFactory_);
+}
+
+TEST_F(BrowserViewControllerTest, TestPassKitErrorInfoBarDisplayed) {
+ // Create a bad Pass and make sure the controller is not displayed.
+ base::FilePath bad_pass_path;
+ ASSERT_TRUE(PathService::Get(ios::DIR_TEST_DATA, &bad_pass_path));
+ bad_pass_path = bad_pass_path.Append(FILE_PATH_LITERAL("testbadpass.pkpass"));
+ NSData* badPassKitObject = [NSData
+ dataWithContentsOfFile:base::SysUTF8ToNSString(bad_pass_path.value())];
+ EXPECT_TRUE(badPassKitObject);
+ [[dependencyFactory_ reject] newPassKitViewControllerForPass:OCMOCK_ANY];
+ [bvc_ presentPassKitDialog:badPassKitObject];
+ EXPECT_OCMOCK_VERIFY(dependencyFactory_);
+}
+
+TEST_F(BrowserViewControllerTest, TestClearPresentedState) {
+ OCMockObject* shareControllerMock = (OCMockObject*)shareController_.get();
+ [[shareControllerMock expect] cancelShareAnimated:NO];
+ EXPECT_CALL(*this, OnCompletionCalled());
+ [bvc_ clearPresentedStateWithCompletion:^{
+ this->OnCompletionCalled();
+ }];
+ EXPECT_OCMOCK_VERIFY(shareControllerMock);
+}
+
+} // namespace
« no previous file with comments | « ios/chrome/browser/ui/browser_view_controller_testing.mm ('k') | ios/chrome/browser/ui/chrome_web_view_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698