diff options
| -rw-r--r-- | packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt index e27838c4ef4d..1412c84c137b 100644 --- a/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt +++ b/packages/SettingsLib/Preference/testutils/com/android/settingslib/preference/CatalystScreenTestCase.kt @@ -27,6 +27,7 @@ import androidx.preference.PreferenceScreen import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat +import java.util.concurrent.atomic.AtomicBoolean import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -53,7 +54,7 @@ abstract class CatalystScreenTestCase { enableCatalystScreen() assertThat(preferenceScreenCreator.isFlagEnabled(context)).isTrue() val catalystScreen = dumpPreferenceScreen() - Log.i("Catalyst", catalystScreen) + Log.i(TAG, catalystScreen) disableCatalystScreen() assertThat(preferenceScreenCreator.isFlagEnabled(context)).isFalse() @@ -83,11 +84,26 @@ abstract class CatalystScreenTestCase { } private fun dumpPreferenceScreen(): String { + // Dump threads for troubleshooting when the test thread is stuck. + // Latest junit Timeout rule supports similar feature but it is not yet available on AOSP. + val taskFinished = AtomicBoolean() + Thread { + Thread.sleep(20000) + if (!taskFinished.get()) dumpThreads() + } + .apply { + isDaemon = true + start() + } + @Suppress("UNCHECKED_CAST") val clazz = preferenceScreenCreator.fragmentClass() as Class<PreferenceFragmentCompat> val builder = StringBuilder() FragmentScenario.launch(clazz).use { - it.onFragment { fragment -> fragment.preferenceScreen.toString(builder) } + it.onFragment { fragment -> + taskFinished.set(true) + fragment.preferenceScreen.toString(builder) + } } return builder.toString() } @@ -120,4 +136,16 @@ abstract class CatalystScreenTestCase { } builder.append(indent).append("}\n") } + + companion object { + const val TAG = "CatalystScreenTestCase" + + fun dumpThreads() { + for ((thread, stack) in Thread.getAllStackTraces()) { + Log.i(TAG, "$thread") + for (frame in stack) Log.i(TAG, " $frame") + Log.i(TAG, "") + } + } + } } |