[SB Refactor] Move InstantTaskExecutorRule to its own file so it can be
used by other tests. Any tests that are exercising the `view.repeatWhenAttached` method need to use this rule; otherwise, we'll get `IllegalStateException: should be called from the main thread.` error. Moving the rule to its own file lets us better import it for other tests. Test: atest RepeatWhenAttachedTest Bug: 238425913 Change-Id: Icab6b63b419a3898a8be35f16c06a8a3d09db4e2
This commit is contained in:
committed by
Caitlin Shkuratov
parent
db2c8323ef
commit
180c089d6d
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.systemui.lifecycle
|
||||
|
||||
import androidx.arch.core.executor.ArchTaskExecutor
|
||||
import androidx.arch.core.executor.TaskExecutor
|
||||
import org.junit.rules.TestWatcher
|
||||
import org.junit.runner.Description
|
||||
|
||||
/**
|
||||
* Test rule that makes ArchTaskExecutor main thread assertions pass. There is one such assert
|
||||
* in LifecycleRegistry.
|
||||
*/
|
||||
class InstantTaskExecutorRule : TestWatcher() {
|
||||
// TODO(b/240620122): This is a copy of
|
||||
// androidx/arch/core/executor/testing/InstantTaskExecutorRule which should be replaced
|
||||
// with a dependency on the real library once b/ is cleared.
|
||||
override fun starting(description: Description) {
|
||||
super.starting(description)
|
||||
ArchTaskExecutor.getInstance()
|
||||
.setDelegate(
|
||||
object : TaskExecutor() {
|
||||
override fun executeOnDiskIO(runnable: Runnable) {
|
||||
runnable.run()
|
||||
}
|
||||
|
||||
override fun postToMainThread(runnable: Runnable) {
|
||||
runnable.run()
|
||||
}
|
||||
|
||||
override fun isMainThread(): Boolean {
|
||||
return true
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun finished(description: Description) {
|
||||
super.finished(description)
|
||||
ArchTaskExecutor.getInstance().setDelegate(null)
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,6 @@ package com.android.systemui.lifecycle
|
||||
import android.testing.TestableLooper.RunWithLooper
|
||||
import android.view.View
|
||||
import android.view.ViewTreeObserver
|
||||
import androidx.arch.core.executor.ArchTaskExecutor
|
||||
import androidx.arch.core.executor.TaskExecutor
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.test.filters.SmallTest
|
||||
@@ -35,8 +33,6 @@ import kotlinx.coroutines.test.runBlockingTest
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TestWatcher
|
||||
import org.junit.runner.Description
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.JUnit4
|
||||
import org.mockito.Mock
|
||||
@@ -282,38 +278,4 @@ class RepeatWhenAttachedTest : SysuiTestCase() {
|
||||
_invocations.add(Invocation(lifecycleOwner))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test rule that makes ArchTaskExecutor main thread assertions pass. There is one such assert
|
||||
* in LifecycleRegistry.
|
||||
*/
|
||||
class InstantTaskExecutorRule : TestWatcher() {
|
||||
// TODO(b/240620122): This is a copy of
|
||||
// androidx/arch/core/executor/testing/InstantTaskExecutorRule which should be replaced
|
||||
// with a dependency on the real library once b/ is cleared.
|
||||
override fun starting(description: Description) {
|
||||
super.starting(description)
|
||||
ArchTaskExecutor.getInstance()
|
||||
.setDelegate(
|
||||
object : TaskExecutor() {
|
||||
override fun executeOnDiskIO(runnable: Runnable) {
|
||||
runnable.run()
|
||||
}
|
||||
|
||||
override fun postToMainThread(runnable: Runnable) {
|
||||
runnable.run()
|
||||
}
|
||||
|
||||
override fun isMainThread(): Boolean {
|
||||
return true
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun finished(description: Description) {
|
||||
super.finished(description)
|
||||
ArchTaskExecutor.getInstance().setDelegate(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user