Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0261a8e authored by Brian Isganitis's avatar Brian Isganitis
Browse files

Extract RoboApplication object caching to Launcher3 interface.

Multivalent tests in Launcher3 can use the interface to override
MainThreadInitializedObject instances.

Test: n/a
Flag: TEST_ONLY
Bug: 230027385
Change-Id: I9c7c4fd004ca573a003fb11cd0a19a400e95afe4
parent ad2f15c5
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher3

import com.android.launcher3.util.MainThreadInitializedObject
import com.android.launcher3.util.MainThreadInitializedObject.SandboxApplication
import com.android.launcher3.util.SafeCloseable

/**
 * Initializes [MainThreadInitializedObject] instances for Robolectric tests.
 *
 * Unlike instrumentation tests, Robolectric creates a new application instance for each test, which
 * could cause the various static objects defined in [MainThreadInitializedObject] to leak. Thus, a
 * [SandboxApplication] for Robolectric tests can implement this interface to limit the lifecycle of
 * these objects to a single test.
 */
interface RoboObjectInitializer {

    /** Overrides an object with [type] to [value]. */
    fun <T : SafeCloseable> initializeObject(type: MainThreadInitializedObject<T>, value: T)
}