Skip to content

Commit e0c3d47

Browse files
committed
test: update robolectric and use Looper
1 parent 8284b48 commit e0c3d47

9 files changed

+49
-35
lines changed

auth/src/test/java/com/firebase/ui/auth/ui/email/EmailActivityTest.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.firebase.ui.auth.ui.email;
1616

1717
import android.content.Intent;
18+
import android.os.Looper;
1819
import android.widget.Button;
1920

2021
import com.firebase.ui.auth.AuthUI;
@@ -36,6 +37,7 @@
3637
import org.robolectric.Robolectric;
3738
import org.robolectric.RobolectricTestRunner;
3839
import org.robolectric.Shadows;
40+
import org.robolectric.annotation.LooperMode;
3941
import org.robolectric.shadows.ShadowActivity;
4042

4143
import java.util.Collections;
@@ -44,8 +46,10 @@
4446

4547
import static com.google.common.truth.Truth.assertThat;
4648
import static org.junit.Assert.assertEquals;
49+
import static org.robolectric.Shadows.shadowOf;
4750

4851
@RunWith(RobolectricTestRunner.class)
52+
@LooperMode(LooperMode.Mode.PAUSED)
4953
public class EmailActivityTest {
5054

5155
private static final String EMAIL = "email";
@@ -109,6 +113,8 @@ public void testOnClickResendEmail_expectSendEmailLinkFlowStarted() {
109113

110114
emailActivity.onClickResendEmail(EMAIL);
111115

116+
shadowOf(Looper.getMainLooper()).idle();
117+
112118
EmailLinkFragment fragment = (EmailLinkFragment) emailActivity
113119
.getSupportFragmentManager().findFragmentByTag(EmailLinkFragment.TAG);
114120
assertThat(fragment).isNotNull();
@@ -117,13 +123,13 @@ public void testOnClickResendEmail_expectSendEmailLinkFlowStarted() {
117123

118124
@Test
119125
public void testSignUpButton_validatesFields() {
120-
121126
EmailActivity emailActivity = createActivity(EmailAuthProvider.PROVIDER_ID);
122127

123128
// Trigger RegisterEmailFragment (bypass check email)
124129
emailActivity.onNewUser(
125130
new User.Builder(EmailAuthProvider.PROVIDER_ID, TestConstants.EMAIL).build());
126131

132+
shadowOf(Looper.getMainLooper()).idle();
127133
Button button = emailActivity.findViewById(R.id.button_create);
128134
button.performClick();
129135

@@ -164,7 +170,7 @@ public void testSetDefaultEmail_expectWelcomeBackPasswordPrompt() {
164170
emailActivity.onExistingEmailUser(new User.Builder(EmailAuthProvider.PROVIDER_ID, TestConstants.EMAIL).build());
165171

166172
ShadowActivity.IntentForResult nextIntent =
167-
Shadows.shadowOf(emailActivity).getNextStartedActivityForResult();
173+
shadowOf(emailActivity).getNextStartedActivityForResult();
168174
assertEquals(WelcomeBackPasswordPrompt.class.getName(),
169175
nextIntent.intent.getComponent().getClassName());
170176

@@ -176,6 +182,7 @@ public void testSetDefaultEmail_expectRegisterEmailFragment() {
176182

177183
emailActivity.onNewUser(new User.Builder(EmailAuthProvider.PROVIDER_ID, TestConstants.EMAIL).build());
178184

185+
shadowOf(Looper.getMainLooper()).idle();
179186
RegisterEmailFragment registerEmailFragment = (RegisterEmailFragment) emailActivity
180187
.getSupportFragmentManager().findFragmentByTag(RegisterEmailFragment.TAG);
181188
assertThat(registerEmailFragment).isNotNull();

auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneNumberUtilsTest.java

-32
Original file line numberDiff line numberDiff line change
@@ -83,38 +83,6 @@ public void testGetCountryCode() {
8383
assertEquals(null, getCountryCode(new Locale("", "DJJZ").getCountry()));
8484
}
8585

86-
@Test
87-
@Config(sdk = 16)
88-
public void testFormatNumberToE164_belowApi21() {
89-
String validPhoneNumber = "+919994947354";
90-
CountryInfo indiaCountryInfo = new CountryInfo(new Locale("", "IN"), 91);
91-
// no leading plus
92-
assertEquals(validPhoneNumber, format("9994947354", indiaCountryInfo));
93-
// fully formatted
94-
assertEquals(validPhoneNumber, format("+919994947354", indiaCountryInfo));
95-
// parantheses and hyphens
96-
assertEquals(validPhoneNumber, format("(99949) 47-354", indiaCountryInfo));
97-
98-
// The following cases would fail for lower api versions.
99-
// Leaving tests in place to formally identify cases
100-
101-
// no leading +
102-
// assertEquals(validPhoneNumber, format("919994947354", indiaCountryInfo));
103-
104-
// with hyphens
105-
// assertEquals(validPhoneNumber, format("+91-(999)-(49)-(47354)",
106-
// indiaCountryInfo));
107-
108-
// with spaces leading plus
109-
// assertEquals(validPhoneNumber, format("+91 99949 47354", indiaCountryInfo));
110-
111-
// space formatting
112-
// assertEquals(validPhoneNumber, format("91 99949 47354", indiaCountryInfo));
113-
114-
// invalid phone number
115-
// assertNull(format("999474735", indiaCountryInfo));
116-
}
117-
11886
@Test
11987
public void testGetCurrentCountryInfo_fromSim() {
12088
Context context = mock(Context.class);

auth/src/test/java/com/firebase/ui/auth/viewmodel/EmailLinkSignInHandlerTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.firebase.ui.auth.viewmodel;
22

33
import android.app.Application;
4+
import android.os.Looper;
45

56
import com.firebase.ui.auth.AuthUI;
67
import com.firebase.ui.auth.ErrorCodes;
@@ -41,6 +42,7 @@
4142
import org.mockito.Mock;
4243
import org.mockito.MockitoAnnotations;
4344
import org.robolectric.RobolectricTestRunner;
45+
import org.robolectric.annotation.LooperMode;
4446

4547
import java.util.ArrayList;
4648
import java.util.Collections;
@@ -55,11 +57,13 @@
5557
import static org.mockito.Mockito.inOrder;
5658
import static org.mockito.Mockito.verify;
5759
import static org.mockito.Mockito.when;
60+
import static org.robolectric.Shadows.shadowOf;
5861

5962
/**
6063
* Unit tests for {@link EmailLinkSignInHandler}.
6164
*/
6265
@RunWith(RobolectricTestRunner.class)
66+
@LooperMode(LooperMode.Mode.PAUSED)
6367
public class EmailLinkSignInHandlerTest {
6468

6569
private static final String EMAIL_LINK =
@@ -421,6 +425,7 @@ public void testStartSignIn_linkingFlow_expectSuccessfulLink() {
421425
assertThat(mPersistenceManager.retrieveSessionRecord(ApplicationProvider.getApplicationContext()))
422426
.isNull();
423427

428+
shadowOf(Looper.getMainLooper()).idle();
424429
// Validate IdpResponse
425430
ArgumentCaptor<Resource<IdpResponse>> captor =
426431
ArgumentCaptor.forClass(Resource.class);
@@ -467,6 +472,8 @@ public void testStartSignIn_linkingFlow_expectUserCollisionException() {
467472

468473
mHandler.startSignIn();
469474

475+
shadowOf(Looper.getMainLooper()).idle();
476+
470477
ArgumentCaptor<Resource<IdpResponse>> captor =
471478
ArgumentCaptor.forClass(Resource.class);
472479

auth/src/test/java/com/firebase/ui/auth/viewmodel/GenericIdpSignInHandlerTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Activity;
44
import android.app.Application;
5+
import android.os.Looper;
56

67
import androidx.lifecycle.Observer;
78
import androidx.test.core.app.ApplicationProvider;
@@ -40,6 +41,7 @@
4041
import org.mockito.Mock;
4142
import org.mockito.MockitoAnnotations;
4243
import org.robolectric.RobolectricTestRunner;
44+
import org.robolectric.annotation.LooperMode;
4345

4446
import java.util.Arrays;
4547
import java.util.HashMap;
@@ -57,11 +59,13 @@
5759
import static org.mockito.Mockito.spy;
5860
import static org.mockito.Mockito.verify;
5961
import static org.mockito.Mockito.when;
62+
import static org.robolectric.Shadows.shadowOf;
6063

6164
/**
6265
* Unit tests for {@link EmailLinkSignInHandler}.
6366
*/
6467
@RunWith(RobolectricTestRunner.class)
68+
@LooperMode(LooperMode.Mode.PAUSED)
6569
public class GenericIdpSignInHandlerTest {
6670

6771
private static final String MICROSOFT_PROVIDER = "microsoft.com";
@@ -269,6 +273,7 @@ public void testStartSignIn_anonymousUpgradeFlowWithConflict_expectRecoverableEr
269273

270274
mockOAuthProvider(MICROSOFT_PROVIDER);
271275
mHandler.startSignIn(mMockAuth, mMockActivity, MICROSOFT_PROVIDER);
276+
shadowOf(Looper.getMainLooper()).idle();
272277

273278
ArgumentCaptor<OAuthProvider> providerCaptor = ArgumentCaptor.forClass(OAuthProvider.class);
274279
verify(mMockAuth.getCurrentUser())
@@ -315,6 +320,7 @@ public void testStartSignIn_anonymousUpgradeFlowWithConflict_expectRecoverableLi
315320

316321
mockOAuthProvider(MICROSOFT_PROVIDER);
317322
mHandler.startSignIn(mMockAuth, mMockActivity, MICROSOFT_PROVIDER);
323+
shadowOf(Looper.getMainLooper()).idle();
318324

319325
ArgumentCaptor<OAuthProvider> providerCaptor = ArgumentCaptor.forClass(OAuthProvider.class);
320326
verify(mMockAuth.getCurrentUser())

auth/src/test/java/com/firebase/ui/auth/viewmodel/LinkingSocialProviderResponseHandlerTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.firebase.ui.auth.viewmodel;
22

33
import android.app.Application;
4+
import android.os.Looper;
45

56
import com.firebase.ui.auth.FirebaseAuthAnonymousUpgradeException;
67
import com.firebase.ui.auth.IdpResponse;
@@ -32,6 +33,7 @@
3233
import org.mockito.Mock;
3334
import org.mockito.MockitoAnnotations;
3435
import org.robolectric.RobolectricTestRunner;
36+
import org.robolectric.annotation.LooperMode;
3537

3638
import java.util.Collections;
3739

@@ -44,6 +46,7 @@
4446
import static org.mockito.Mockito.inOrder;
4547
import static org.mockito.Mockito.verify;
4648
import static org.mockito.Mockito.when;
49+
import static org.robolectric.Shadows.shadowOf;
4750

4851
/**
4952
* Unit tests for {@link LinkingSocialProviderResponseHandler}.
@@ -55,6 +58,7 @@
5558
* is anonymous, a triple linking case occurs.
5659
*/
5760
@RunWith(RobolectricTestRunner.class)
61+
@LooperMode(LooperMode.Mode.PAUSED)
5862
public class LinkingSocialProviderResponseHandlerTest {
5963

6064
private static final String MICROSOFT_PROVIDER = "microsoft.com";
@@ -94,6 +98,7 @@ public void testSignIn_withSameIdp_expectSuccess() {
9498
.thenReturn(AutoCompleteTask.forSuccess(FakeAuthResult.INSTANCE));
9599

96100
mHandler.startSignIn(response);
101+
shadowOf(Looper.getMainLooper()).idle();
97102

98103
verify(mMockAuth).signInWithCredential(any(GoogleAuthCredential.class));
99104

@@ -173,6 +178,7 @@ public void testSignIn_withDifferentIdp_expectSuccess() {
173178
null));
174179

175180
mHandler.startSignIn(response);
181+
shadowOf(Looper.getMainLooper()).idle();
176182

177183
verify(mMockAuth).signInWithCredential(any(GoogleAuthCredential.class));
178184
verify(FakeAuthResult.INSTANCE.getUser()).linkWithCredential(facebookAuthCredential);

auth/src/test/java/com/firebase/ui/auth/viewmodel/SocialProviderResponseHandlerTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Activity;
44
import android.app.Application;
5+
import android.os.Looper;
56

67
import com.firebase.ui.auth.AuthUI;
78
import com.firebase.ui.auth.ErrorCodes;
@@ -38,6 +39,7 @@
3839
import org.mockito.Mock;
3940
import org.mockito.MockitoAnnotations;
4041
import org.robolectric.RobolectricTestRunner;
42+
import org.robolectric.annotation.LooperMode;
4143

4244
import java.util.Arrays;
4345
import java.util.Collections;
@@ -51,11 +53,13 @@
5153
import static org.mockito.Mockito.inOrder;
5254
import static org.mockito.Mockito.verify;
5355
import static org.mockito.Mockito.when;
56+
import static org.robolectric.Shadows.shadowOf;
5457

5558
/**
5659
* Unit tests for {@link CredentialManagerHandler}.
5760
*/
5861
@RunWith(RobolectricTestRunner.class)
62+
@LooperMode(LooperMode.Mode.PAUSED)
5963
public class SocialProviderResponseHandlerTest {
6064
@Mock FirebaseAuth mMockAuth;
6165
@Mock FirebaseUser mUser;
@@ -87,6 +91,7 @@ public void testSignInIdp_success() {
8791
.build();
8892

8993
mHandler.startSignIn(response);
94+
shadowOf(Looper.getMainLooper()).idle();
9095

9196
verify(mMockAuth).signInWithCredential(any(AuthCredential.class));
9297

@@ -132,6 +137,7 @@ public void testSignInIdp_disabled() {
132137
.setToken(TestConstants.TOKEN)
133138
.build();
134139
mHandler.startSignIn(response);
140+
shadowOf(Looper.getMainLooper()).idle();
135141

136142
verify(mResultObserver).onChanged(
137143
argThat(ResourceMatchers.isFailureWithCode(ErrorCodes.ERROR_USER_DISABLED)));
@@ -155,6 +161,7 @@ public void testSignInIdp_resolution() {
155161
.build();
156162

157163
mHandler.startSignIn(response);
164+
shadowOf(Looper.getMainLooper()).idle();
158165

159166
verify(mMockAuth).signInWithCredential(any(AuthCredential.class));
160167
verify(mMockAuth).fetchSignInMethodsForEmail(any(String.class));
@@ -192,6 +199,7 @@ public void testSignInIdp_anonymousUserUpgradeEnabledAndNewUser_expectSuccess()
192199
.build();
193200

194201
mHandler.startSignIn(response);
202+
shadowOf(Looper.getMainLooper()).idle();
195203

196204
verify(mMockAuth.getCurrentUser()).linkWithCredential(any(AuthCredential.class));
197205

@@ -225,6 +233,7 @@ public void testSignInIdp_anonymousUserUpgradeEnabledAndExistingUserWithSameIdp_
225233
.build();
226234

227235
mHandler.startSignIn(response);
236+
shadowOf(Looper.getMainLooper()).idle();
228237

229238
verify(mMockAuth.getCurrentUser()).linkWithCredential(any(AuthCredential.class));
230239

@@ -264,6 +273,7 @@ public void testSignInIdp_anonymousUserUpgradeEnabledAndExistingIdpUserWithDiffe
264273
.build();
265274

266275
mHandler.startSignIn(response);
276+
shadowOf(Looper.getMainLooper()).idle();
267277

268278
verify(mMockAuth.getCurrentUser()).linkWithCredential(any(AuthCredential.class));
269279

@@ -308,6 +318,7 @@ public void testSignInIdp_anonymousUserUpgradeEnabledAndExistingPasswordUserWith
308318
.build();
309319

310320
mHandler.startSignIn(response);
321+
shadowOf(Looper.getMainLooper()).idle();
311322

312323
verify(mMockAuth.getCurrentUser()).linkWithCredential(any(AuthCredential.class));
313324

auth/src/test/java/com/firebase/ui/auth/viewmodel/WelcomeBackPasswordHandlerTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.firebase.ui.auth.viewmodel;
22

33
import android.app.Application;
4+
import android.os.Looper;
45

56
import com.firebase.ui.auth.FirebaseAuthAnonymousUpgradeException;
67
import com.firebase.ui.auth.IdpResponse;
@@ -33,6 +34,7 @@
3334
import org.mockito.Mock;
3435
import org.mockito.MockitoAnnotations;
3536
import org.robolectric.RobolectricTestRunner;
37+
import org.robolectric.annotation.LooperMode;
3638

3739
import java.util.Collections;
3840

@@ -44,11 +46,13 @@
4446
import static org.mockito.Mockito.inOrder;
4547
import static org.mockito.Mockito.verify;
4648
import static org.mockito.Mockito.when;
49+
import static org.robolectric.Shadows.shadowOf;
4750

4851
/**
4952
* Unit tests for {@link WelcomeBackPasswordHandler}.
5053
*/
5154
@RunWith(RobolectricTestRunner.class)
55+
@LooperMode(LooperMode.Mode.PAUSED)
5256
public class WelcomeBackPasswordHandlerTest {
5357

5458
@Mock FirebaseAuth mMockAuth;
@@ -103,6 +107,7 @@ public void testSignIn_linksIdpCredential() {
103107

104108
// Kick off the sign in flow
105109
mHandler.startSignIn(TestConstants.EMAIL, TestConstants.PASSWORD, response, credential);
110+
shadowOf(Looper.getMainLooper()).idle();
106111

107112
// Verify that we get a loading event
108113
verify(mResponseObserver).onChanged(argThat(ResourceMatchers.isLoading()));
@@ -128,6 +133,7 @@ public void testSignIn_propagatesFailure() {
128133

129134
// Kick off the sign in flow
130135
mHandler.startSignIn(TestConstants.EMAIL, TestConstants.PASSWORD, null, null);
136+
shadowOf(Looper.getMainLooper()).idle();
131137

132138
// Verify that we get a loading event
133139
verify(mResponseObserver).onChanged(argThat(ResourceMatchers.isLoading()));

buildSrc/src/main/kotlin/Config.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ object Config {
7777
const val junitExt = "androidx.test.ext:junit:1.1.5"
7878
const val truth = "com.google.truth:truth:0.42"
7979
const val mockito = "org.mockito:mockito-android:2.21.0"
80-
const val robolectric = "org.robolectric:robolectric:4.9"
80+
const val robolectric = "org.robolectric:robolectric:4.13"
8181

8282
const val core = "androidx.test:core:1.5.0"
8383
const val archCoreTesting = "androidx.arch.core:core-testing:2.1.0"

gradle.properties

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ org.gradle.caching=true
44

55
android.useAndroidX=true
66
android.enableJetifier=true
7+
# Temporary added to ignore list as suggested in https://issuetracker.google.com/issues/346686142
8+
# TODO: remove this once we disable Jetifier completely
9+
android.jetifier.ignorelist=bcprov-jdk18on-1.78.1.jar
710
# Kotlin code style for this project: "official" or "obsolete":
811
kotlin.code.style=official
912
# Enables namespacing of each library's R class so that its R class includes only the

0 commit comments

Comments
 (0)