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

Side by Side Diff: ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm

Issue 2675243003: [ObjC ARC] Converts ios/chrome/browser/ui/authentication:unit_tests to ARC. (Closed)
Patch Set: Created 3 years, 10 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ios/chrome/browser/ui/authentication/authentication_flow.h" 5 #import "ios/chrome/browser/ui/authentication/authentication_flow.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #import "base/mac/scoped_block.h" 9 #import "base/mac/scoped_block.h"
10 #import "base/mac/scoped_nsobject.h"
11 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
12 #include "base/test/ios/wait_util.h" 11 #include "base/test/ios/wait_util.h"
13 #include "components/pref_registry/pref_registry_syncable.h" 12 #include "components/pref_registry/pref_registry_syncable.h"
14 #include "components/sync_preferences/pref_service_mock_factory.h" 13 #include "components/sync_preferences/pref_service_mock_factory.h"
15 #include "components/sync_preferences/pref_service_syncable.h" 14 #include "components/sync_preferences/pref_service_syncable.h"
16 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" 15 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
17 #include "ios/chrome/browser/prefs/browser_prefs.h" 16 #include "ios/chrome/browser/prefs/browser_prefs.h"
18 #include "ios/chrome/browser/signin/authentication_service_factory.h" 17 #include "ios/chrome/browser/signin/authentication_service_factory.h"
19 #import "ios/chrome/browser/signin/authentication_service_fake.h" 18 #import "ios/chrome/browser/signin/authentication_service_fake.h"
20 #import "ios/chrome/browser/ui/authentication/authentication_flow_performer.h" 19 #import "ios/chrome/browser/ui/authentication/authentication_flow_performer.h"
21 #include "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service .h" 20 #include "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service .h"
22 #include "ios/web/public/test/test_web_thread_bundle.h" 21 #include "ios/web/public/test/test_web_thread_bundle.h"
23 #import "testing/gtest_mac.h" 22 #import "testing/gtest_mac.h"
24 #import "testing/platform_test.h" 23 #import "testing/platform_test.h"
25 #import "third_party/ocmock/gtest_support.h" 24 #import "third_party/ocmock/gtest_support.h"
26 #import "third_party/ocmock/ocmock_extensions.h" 25 #import "third_party/ocmock/ocmock_extensions.h"
27 #include "ui/base/l10n/l10n_util.h" 26 #include "ui/base/l10n/l10n_util.h"
28 27
28 #if !defined(__has_feature) || !__has_feature(objc_arc)
29 #error "This file requires ARC support."
30 #endif
31
29 namespace { 32 namespace {
30 33
31 class AuthenticationFlowTest : public PlatformTest { 34 class AuthenticationFlowTest : public PlatformTest {
32 protected: 35 protected:
33 void SetUp() override { 36 void SetUp() override {
34 PlatformTest::SetUp(); 37 PlatformTest::SetUp();
35 38
36 TestChromeBrowserState::Builder builder; 39 TestChromeBrowserState::Builder builder;
37 builder.AddTestingFactory( 40 builder.AddTestingFactory(
38 AuthenticationServiceFactory::GetInstance(), 41 AuthenticationServiceFactory::GetInstance(),
39 AuthenticationServiceFake::CreateAuthenticationService); 42 AuthenticationServiceFake::CreateAuthenticationService);
40 builder.SetPrefService(CreatePrefService()); 43 builder.SetPrefService(CreatePrefService());
41 browser_state_ = builder.Build(); 44 browser_state_ = builder.Build();
42 ios::FakeChromeIdentityService* identityService = 45 ios::FakeChromeIdentityService* identityService =
43 ios::FakeChromeIdentityService::GetInstanceFromChromeProvider(); 46 ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
44 identityService->AddIdentities(@[ @"identity1", @"identity2" ]); 47 identityService->AddIdentities(@[ @"identity1", @"identity2" ]);
45 identity1_ = 48 identity1_ =
46 [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:0]; 49 [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:0];
47 identity2_ = 50 identity2_ =
48 [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:1]; 51 [identityService->GetAllIdentitiesSortedForDisplay() objectAtIndex:1];
49 sign_in_completion_.reset( 52 sign_in_completion_ = ^(BOOL success) {
50 ^(BOOL success) { 53 finished_ = true;
51 finished_ = true; 54 signed_in_success_ = success;
52 signed_in_success_ = success; 55 };
53 },
54 base::scoped_policy::RETAIN);
55 finished_ = false; 56 finished_ = false;
56 signed_in_success_ = false; 57 signed_in_success_ = false;
57 } 58 }
58 59
59 std::unique_ptr<sync_preferences::PrefServiceSyncable> CreatePrefService() { 60 std::unique_ptr<sync_preferences::PrefServiceSyncable> CreatePrefService() {
60 sync_preferences::PrefServiceMockFactory factory; 61 sync_preferences::PrefServiceMockFactory factory;
61 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( 62 scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
62 new user_prefs::PrefRegistrySyncable); 63 new user_prefs::PrefRegistrySyncable);
63 std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs = 64 std::unique_ptr<sync_preferences::PrefServiceSyncable> prefs =
64 factory.CreateSyncable(registry.get()); 65 factory.CreateSyncable(registry.get());
65 RegisterBrowserStatePrefs(registry.get()); 66 RegisterBrowserStatePrefs(registry.get());
66 return prefs; 67 return prefs;
67 } 68 }
68 69
69 AuthenticationFlowPerformer* GetAuthenticationFlowPerformer() { 70 AuthenticationFlowPerformer* GetAuthenticationFlowPerformer() {
70 return static_cast<AuthenticationFlowPerformer*>(performer_.get()); 71 return static_cast<AuthenticationFlowPerformer*>(performer_);
71 } 72 }
72 73
73 // Creates a new AuthenticationFlow with default values for fields that are 74 // Creates a new AuthenticationFlow with default values for fields that are
74 // not directly useful. 75 // not directly useful.
75 void CreateAuthenticationFlow(ShouldClearData shouldClearData, 76 void CreateAuthenticationFlow(ShouldClearData shouldClearData,
76 PostSignInAction postSignInAction) { 77 PostSignInAction postSignInAction) {
77 ChromeIdentity* identity = identity1_; 78 ChromeIdentity* identity = identity1_;
78 view_controller_.reset( 79 view_controller_ = [OCMockObject niceMockForClass:[UIViewController class]];
79 [[OCMockObject niceMockForClass:[UIViewController class]] retain]); 80 authentication_flow_ =
80 authentication_flow_.reset([[AuthenticationFlow alloc] 81 [[AuthenticationFlow alloc] initWithBrowserState:browser_state_.get()
81 initWithBrowserState:browser_state_.get() 82 identity:identity
82 identity:identity 83 shouldClearData:shouldClearData
83 shouldClearData:shouldClearData 84 postSignInAction:postSignInAction
84 postSignInAction:postSignInAction 85 presentingViewController:view_controller_];
85 presentingViewController:view_controller_]); 86 performer_ =
86 performer_.reset([[OCMockObject 87 [OCMockObject mockForClass:[AuthenticationFlowPerformer class]];
87 mockForClass:[AuthenticationFlowPerformer class]] retain]);
88 [authentication_flow_ 88 [authentication_flow_
89 setPerformerForTesting:GetAuthenticationFlowPerformer()]; 89 setPerformerForTesting:GetAuthenticationFlowPerformer()];
90 } 90 }
91 91
92 // Checks if the AuthenticationFlow operation has completed, and whether it 92 // Checks if the AuthenticationFlow operation has completed, and whether it
93 // was successful. 93 // was successful.
94 void CheckSignInCompletion(bool expectedSignedIn) { 94 void CheckSignInCompletion(bool expectedSignedIn) {
95 base::test::ios::WaitUntilCondition(^bool { 95 base::test::ios::WaitUntilCondition(^bool {
96 return finished_; 96 return finished_;
97 }); 97 });
98 EXPECT_EQ(true, finished_); 98 EXPECT_EQ(true, finished_);
99 EXPECT_EQ(expectedSignedIn, signed_in_success_); 99 EXPECT_EQ(expectedSignedIn, signed_in_success_);
100 [performer_ verify]; 100 [performer_ verify];
101 } 101 }
102 102
103 web::TestWebThreadBundle thread_bundle_; 103 web::TestWebThreadBundle thread_bundle_;
104 base::scoped_nsobject<AuthenticationFlow> authentication_flow_; 104 AuthenticationFlow* authentication_flow_;
105 std::unique_ptr<TestChromeBrowserState> browser_state_; 105 std::unique_ptr<TestChromeBrowserState> browser_state_;
106 ChromeIdentity* identity1_; 106 ChromeIdentity* identity1_;
107 ChromeIdentity* identity2_; 107 ChromeIdentity* identity2_;
108 base::scoped_nsobject<OCMockObject> performer_; 108 OCMockObject* performer_;
109 base::mac::ScopedBlock<signin_ui::CompletionCallback> sign_in_completion_; 109 signin_ui::CompletionCallback sign_in_completion_;
110 base::scoped_nsobject<UIViewController> view_controller_; 110 UIViewController* view_controller_;
111 111
112 // State of the flow 112 // State of the flow
113 bool finished_; 113 bool finished_;
114 bool signed_in_success_; 114 bool signed_in_success_;
115 }; 115 };
116 116
117 // Tests a Sign In of a normal account on the same profile, merging user data 117 // Tests a Sign In of a normal account on the same profile, merging user data
118 // and showing the sync settings. 118 // and showing the sync settings.
119 TEST_F(AuthenticationFlowTest, TestSignInSimple) { 119 TEST_F(AuthenticationFlowTest, TestSignInSimple) {
120 CreateAuthenticationFlow(SHOULD_CLEAR_DATA_MERGE_DATA, 120 CreateAuthenticationFlow(SHOULD_CLEAR_DATA_MERGE_DATA,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 CreateAuthenticationFlow(SHOULD_CLEAR_DATA_MERGE_DATA, 246 CreateAuthenticationFlow(SHOULD_CLEAR_DATA_MERGE_DATA,
247 POST_SIGNIN_ACTION_START_SYNC); 247 POST_SIGNIN_ACTION_START_SYNC);
248 248
249 NSError* error = [NSError errorWithDomain:@"foo" code:0 userInfo:nil]; 249 NSError* error = [NSError errorWithDomain:@"foo" code:0 userInfo:nil];
250 [[[performer_ expect] andDo:^(NSInvocation*) { 250 [[[performer_ expect] andDo:^(NSInvocation*) {
251 [authentication_flow_ didFailFetchManagedStatus:error]; 251 [authentication_flow_ didFailFetchManagedStatus:error];
252 }] fetchManagedStatus:browser_state_.get() 252 }] fetchManagedStatus:browser_state_.get()
253 forIdentity:identity1_]; 253 forIdentity:identity1_];
254 254
255 [[[performer_ expect] andDo:^(NSInvocation* invocation) { 255 [[[performer_ expect] andDo:^(NSInvocation* invocation) {
256 ProceduralBlock completionBlock; 256 __unsafe_unretained ProceduralBlock completionBlock;
257 [invocation getArgument:&completionBlock atIndex:3]; 257 [invocation getArgument:&completionBlock atIndex:3];
258 completionBlock(); 258 completionBlock();
259 }] showAuthenticationError:[OCMArg any] 259 }] showAuthenticationError:[OCMArg any]
260 withCompletion:[OCMArg any] 260 withCompletion:[OCMArg any]
261 viewController:view_controller_]; 261 viewController:view_controller_];
262 262
263 [authentication_flow_ startSignInWithCompletion:sign_in_completion_]; 263 [authentication_flow_ startSignInWithCompletion:sign_in_completion_];
264 264
265 CheckSignInCompletion(false); 265 CheckSignInCompletion(false);
266 } 266 }
(...skipping 27 matching lines...) Expand all
294 toBrowserState:browser_state_.get()]; 294 toBrowserState:browser_state_.get()];
295 295
296 [[performer_ expect] commitSyncForBrowserState:browser_state_.get()]; 296 [[performer_ expect] commitSyncForBrowserState:browser_state_.get()];
297 297
298 [authentication_flow_ startSignInWithCompletion:sign_in_completion_]; 298 [authentication_flow_ startSignInWithCompletion:sign_in_completion_];
299 299
300 CheckSignInCompletion(true); 300 CheckSignInCompletion(true);
301 } 301 }
302 302
303 } // namespace 303 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698