Stop shadowing ApplicationStatus in MultiInstanceManagerApi31UnitTest.
Bug: 406581076 Change-Id: I4cfd117ca99184f881946d08b34e26100b37a692 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6397502 Commit-Queue: Sky Malice <skym@chromium.org> Reviewed-by: Aishwarya Rajesh <aishwaryarj@google.com> Cr-Commit-Position: refs/heads/main@{#1439388}
This commit is contained in:
parent
692efd1c0f
commit
730a98cfbc
@ -31,7 +31,6 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
|
||||
@ -48,12 +47,9 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
|
||||
import org.chromium.base.ActivityState;
|
||||
import org.chromium.base.ApplicationStatus;
|
||||
import org.chromium.base.ApplicationStatus.ActivityStateListener;
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.base.supplier.ObservableSupplier;
|
||||
import org.chromium.base.supplier.OneshotSupplier;
|
||||
@ -67,7 +63,6 @@ import org.chromium.chrome.browser.app.tabmodel.TabModelOrchestrator;
|
||||
import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
|
||||
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
||||
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
|
||||
import org.chromium.chrome.browser.multiwindow.MultiInstanceManagerApi31UnitTest.ShadowApplicationStatus;
|
||||
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
||||
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
||||
import org.chromium.chrome.browser.profiles.Profile;
|
||||
@ -108,38 +103,8 @@ import java.util.Set;
|
||||
|
||||
/** Unit tests for {@link MultiInstanceManagerApi31}. */
|
||||
@RunWith(BaseRobolectricTestRunner.class)
|
||||
@Config(
|
||||
manifest = Config.NONE,
|
||||
shadows = {ShadowApplicationStatus.class})
|
||||
@Config(manifest = Config.NONE)
|
||||
public class MultiInstanceManagerApi31UnitTest {
|
||||
/** Shadows {@link ApplicationStatus} class for testing. */
|
||||
@Implements(ApplicationStatus.class)
|
||||
public static class ShadowApplicationStatus {
|
||||
private static final SparseArray<Activity> sRunningActivities = new SparseArray<>();
|
||||
|
||||
public static void addRunningActivity(int instanceId, Activity activity) {
|
||||
sRunningActivities.put(instanceId, activity);
|
||||
}
|
||||
|
||||
public static void deleteRunningActivity(int instanceId) {
|
||||
sRunningActivities.delete(instanceId);
|
||||
}
|
||||
|
||||
public static void removeRunningActivity(Activity activity) {
|
||||
int index = sRunningActivities.indexOfValue(activity);
|
||||
if (index >= 0) sRunningActivities.removeAt(index);
|
||||
}
|
||||
|
||||
@Implementation
|
||||
public static List<Activity> getRunningActivities() {
|
||||
List<Activity> result = new ArrayList<>();
|
||||
for (int i = 0; i < sRunningActivities.size(); ++i) {
|
||||
result.add(sRunningActivities.valueAt(i));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static final int INVALID_INSTANCE_ID = MultiInstanceManagerApi31.INVALID_INSTANCE_ID;
|
||||
private static final int INSTANCE_ID_1 = 1;
|
||||
private static final int INSTANCE_ID_2 = 2;
|
||||
@ -257,8 +222,8 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
|
||||
private void createInstance(int instanceId, Activity activity) {
|
||||
MultiInstanceManagerApi31.writeUrl(instanceId, "https://id-" + instanceId + ".com");
|
||||
ShadowApplicationStatus.addRunningActivity(instanceId, activity);
|
||||
updateTasks(instanceId, activity);
|
||||
ApplicationStatus.onStateChangeForTesting(activity, ActivityState.CREATED);
|
||||
updateTasksWithoutDestroyingActivity(instanceId, activity);
|
||||
addInstanceInfo(instanceId, activity.getTaskId());
|
||||
}
|
||||
|
||||
@ -266,11 +231,6 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
mAdjacentInstance = activity;
|
||||
}
|
||||
|
||||
// Called when activity instance is destroyed but its task remains alive.
|
||||
private void closeInstanceOnly(int instanceId) {
|
||||
ShadowApplicationStatus.deleteRunningActivity(instanceId);
|
||||
}
|
||||
|
||||
private void addInstanceInfo(int instanceId, int taskId) {
|
||||
if (mTestBuildInstancesList) {
|
||||
int numberOfInstances = mTestInstanceInfos.size();
|
||||
@ -291,15 +251,6 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTasks(int instanceId, Activity activity) {
|
||||
if (instanceId == INVALID_INSTANCE_ID) {
|
||||
mAppTaskIds.remove(activity.getTaskId());
|
||||
ShadowApplicationStatus.removeRunningActivity(activity);
|
||||
} else {
|
||||
mAppTaskIds.add(activity.getTaskId());
|
||||
}
|
||||
}
|
||||
|
||||
private void updateTasksWithoutDestroyingActivity(int instanceId, Activity activity) {
|
||||
if (instanceId == INVALID_INSTANCE_ID) {
|
||||
mAppTaskIds.remove(activity.getTaskId());
|
||||
@ -424,7 +375,6 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
mMenuOrKeyboardActionController,
|
||||
mDesktopWindowStateManagerSupplier));
|
||||
ApplicationStatus.setCachingEnabled(true);
|
||||
ApplicationStatus.onStateChangeForTesting(mCurrentActivity, ActivityState.CREATED);
|
||||
ChromeSharedPreferences.getInstance()
|
||||
.removeKeysWithPrefix(ChromePreferenceKeys.MULTI_INSTANCE_TASK_MAP);
|
||||
|
||||
@ -699,6 +649,7 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
when(mTab3.getOriginalUrl()).thenReturn(URL3);
|
||||
when(mTab3.getTitle()).thenReturn(TITLE3);
|
||||
|
||||
ApplicationStatus.onStateChangeForTesting(mCurrentActivity, ActivityState.CREATED);
|
||||
MultiInstanceManagerApi31 multiInstanceManager =
|
||||
new MultiInstanceManagerApi31(
|
||||
mCurrentActivity,
|
||||
@ -783,6 +734,7 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
Answer normalActiveTab = invocation -> mNormalTabCount > 0 ? 0 : TabModel.INVALID_TAB_INDEX;
|
||||
when(mNormalTabModel.index()).then(normalActiveTab);
|
||||
|
||||
ApplicationStatus.onStateChangeForTesting(mCurrentActivity, ActivityState.CREATED);
|
||||
MultiInstanceManagerApi31 multiInstanceManager =
|
||||
new MultiInstanceManagerApi31(
|
||||
mCurrentActivity,
|
||||
@ -867,6 +819,7 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
when(mTab2.getOriginalUrl()).thenReturn(URL2);
|
||||
when(mTab2.getTitle()).thenReturn(TITLE2);
|
||||
|
||||
ApplicationStatus.onStateChangeForTesting(mCurrentActivity, ActivityState.CREATED);
|
||||
MultiInstanceManagerApi31 multiInstanceManager =
|
||||
new MultiInstanceManagerApi31(
|
||||
mCurrentActivity,
|
||||
@ -1081,7 +1034,8 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
// Simulate a task is removed by swiping it away. Both the task and the associated activity
|
||||
// get destroyed. Task map gets updated. The persistent state file remains intact.
|
||||
private void removeTaskOnRecentsScreen(Activity activityForTask) {
|
||||
mMultiInstanceManager.updateTasks(INVALID_INSTANCE_ID, activityForTask);
|
||||
mMultiInstanceManager.updateTasksWithoutDestroyingActivity(
|
||||
INVALID_INSTANCE_ID, activityForTask);
|
||||
destroyActivity(activityForTask);
|
||||
}
|
||||
|
||||
@ -1091,15 +1045,12 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
}
|
||||
|
||||
// Simulate only an activity gets destroyed, leaving everything intact.
|
||||
private void closeInstanceOnly(Activity activity, int instanceId) {
|
||||
mMultiInstanceManager.closeInstanceOnly(instanceId);
|
||||
private void closeInstanceOnly(Activity activity, int ignored) {
|
||||
destroyActivity(activity);
|
||||
}
|
||||
|
||||
private void destroyActivity(Activity activity) {
|
||||
ActivityStateListener stateListener =
|
||||
(ActivityStateListener) TabWindowManagerSingleton.getInstance();
|
||||
stateListener.onActivityStateChange(activity, ActivityState.DESTROYED);
|
||||
ApplicationStatus.onStateChangeForTesting(activity, ActivityState.DESTROYED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1457,7 +1408,6 @@ public class MultiInstanceManagerApi31UnitTest {
|
||||
if (!isActivityAlive) {
|
||||
// Force destruction of |mTabbedActivityTask63|.
|
||||
destroyActivity(mTabbedActivityTask63);
|
||||
ShadowApplicationStatus.removeRunningActivity(mTabbedActivityTask63);
|
||||
}
|
||||
|
||||
// Try to restore the instance in task |taskId63|, from |mTabbedActivityTask62|.
|
||||
|
Loading…
x
Reference in New Issue
Block a user