Skip to content

Commit

Permalink
update test
Browse files Browse the repository at this point in the history
  • Loading branch information
maRci002 committed Jan 30, 2024
1 parent d9033d8 commit 92730fe
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -681,9 +681,14 @@ public void unregisterOnBackInvokedCallback() {
}
}

final OnBackInvokedCallback onBackInvokedCallback =
private final OnBackInvokedCallback onBackInvokedCallback =
Build.VERSION.SDK_INT < 33 ? null : createOnBackInvokedCallback();

@VisibleForTesting
protected OnBackInvokedCallback getOnBackInvokedCallback() {
return onBackInvokedCallback;
}

@NonNull
@TargetApi(33)
@RequiresApi(33)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import android.window.OnBackInvokedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
Expand Down Expand Up @@ -126,7 +127,7 @@ public void itUnregistersOnBackInvokedCallbackOnRelease() {
}

@Test
@Config(maxSdk = Build.VERSION_CODES.S_V2)
@Config(sdk = Build.VERSION_CODES.S_V2)
public void onBackInvokedCallbackIsNullForSdk32OrLower() {
Intent intent = FlutterActivity.createDefaultIntent(ctx);
ActivityController<FlutterActivity> activityController =
Expand All @@ -137,58 +138,63 @@ public void onBackInvokedCallbackIsNullForSdk32OrLower() {

assertNull(
"onBackInvokedCallback should be null for SDK 32 or lower",
flutterActivity.onBackInvokedCallback);
flutterActivity.getOnBackInvokedCallback());
}

@Test
@Config(sdk = Build.VERSION_CODES.TIRAMISU)
@TargetApi(Build.VERSION_CODES.TIRAMISU)
public void onBackInvokedCallbackCallsOnBackPressedForSdk33() {
Intent intent = FlutterActivityWithReportFullyDrawn.createDefaultIntent(ctx);
ActivityController<FlutterActivityWithReportFullyDrawn> activityController =
Robolectric.buildActivity(FlutterActivityWithReportFullyDrawn.class, intent);
FlutterActivityWithReportFullyDrawn activity = spy(activityController.get());
Intent intent = FlutterActivityWithMockBackInvokedHandling.createDefaultIntent(ctx);
ActivityController<FlutterActivityWithMockBackInvokedHandling> activityController =
Robolectric.buildActivity(FlutterActivityWithMockBackInvokedHandling.class, intent);
FlutterActivityWithMockBackInvokedHandling activity = activityController.get();

activity.onCreate(null);

assertNotNull(
"onBackInvokedCallback should not be null for SDK 33", activity.onBackInvokedCallback);

OnBackInvokedCallback callback = activity.onBackInvokedCallback;
OnBackInvokedCallback callback = activity.getOnBackInvokedCallback();
assertNotNull("onBackInvokedCallback should not be null for SDK 33", callback);

callback.onBackInvoked();
verify(activity, times(1)).onBackPressed();
assertEquals("Expected onBackPressed to be called 1 times", 1, activity.onBackPressedCounter);
}

@Test
@Config(sdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
@TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
public void itHandlesOnBackAnimationCallbackAsExpectedForSdk34OrHigher() {
Intent intent = FlutterActivityWithReportFullyDrawn.createDefaultIntent(ctx);
ActivityController<FlutterActivityWithReportFullyDrawn> activityController =
Robolectric.buildActivity(FlutterActivityWithReportFullyDrawn.class, intent);
FlutterActivityWithReportFullyDrawn activity = spy(activityController.get());
Intent intent = FlutterActivityWithMockBackInvokedHandling.createDefaultIntent(ctx);
ActivityController<FlutterActivityWithMockBackInvokedHandling> activityController =
Robolectric.buildActivity(FlutterActivityWithMockBackInvokedHandling.class, intent);
FlutterActivityWithMockBackInvokedHandling activity = activityController.get();

activity.onCreate(null);

assertTrue(
"onBackInvokedCallback should be an instance of OnBackAnimationCallback for SDK 34 or higher",
activity.onBackInvokedCallback instanceof OnBackAnimationCallback);
activity.getOnBackInvokedCallback() instanceof OnBackAnimationCallback);

OnBackAnimationCallback callback = (OnBackAnimationCallback) activity.onBackInvokedCallback;
OnBackAnimationCallback callback =
(OnBackAnimationCallback) activity.getOnBackInvokedCallback();

BackEvent mockBackEvent = mock(BackEvent.class);
callback.onBackStarted(mockBackEvent);
verify(activity, times(1)).startBackGesture(mockBackEvent);
assertEquals(
"Expected startBackGesture to be called 1 times", 1, activity.startBackGestureCounter);

callback.onBackProgressed(mockBackEvent);
verify(activity, times(1)).updateBackGestureProgress(mockBackEvent);
assertEquals(
"Expected updateBackGestureProgress to be called 1 times",
1,
activity.updateBackGestureProgressCounter);

callback.onBackInvoked();
verify(activity, times(1)).commitBackGesture();
assertEquals(
"Expected commitBackGesture to be called 1 times", 1, activity.commitBackGestureCounter);

callback.onBackCancelled();
verify(activity, times(1)).cancelBackGesture();
assertEquals(
"Expected cancelBackGesture to be called 1 times", 1, activity.cancelBackGestureCounter);
}

@Test
Expand Down Expand Up @@ -638,11 +644,45 @@ public void resetFullyDrawn() {
}

private class FlutterActivityWithMockBackInvokedHandling extends FlutterActivity {

int onBackPressedCounter = 0;
int startBackGestureCounter = 0;
int updateBackGestureProgressCounter = 0;
int commitBackGestureCounter = 0;
int cancelBackGestureCounter = 0;

@Override
public void registerOnBackInvokedCallback() {}
public void onBackPressed() {
onBackPressedCounter++;
}

@TargetApi(34)
@RequiresApi(34)
@Override
public void startBackGesture(@NonNull BackEvent backEvent) {
startBackGestureCounter++;
}

@TargetApi(34)
@RequiresApi(34)
@Override
public void unregisterOnBackInvokedCallback() {}
public void updateBackGestureProgress(@NonNull BackEvent backEvent) {
updateBackGestureProgressCounter++;
}

@TargetApi(34)
@RequiresApi(34)
@Override
public void commitBackGesture() {
commitBackGestureCounter++;
}

@TargetApi(34)
@RequiresApi(34)
@Override
public void cancelBackGesture() {
cancelBackGestureCounter++;
}
}

private static final class FakeFlutterPlugin
Expand Down

0 comments on commit 92730fe

Please sign in to comment.