Merge "Fixes preference-ktx test flakes / failures" into androidx-master-dev
diff --git a/preference/ktx/src/androidTest/AndroidManifest.xml b/preference/ktx/src/androidTest/AndroidManifest.xml
index fa8fd40..8cbbccf9 100644
--- a/preference/ktx/src/androidTest/AndroidManifest.xml
+++ b/preference/ktx/src/androidTest/AndroidManifest.xml
@@ -18,6 +18,8 @@
package="androidx.preference.ktx.test">
<uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
<application>
- <activity android:name="androidx.preference.TestPreferenceActivity"/>
+ <activity
+ android:name="androidx.preference.PreferenceTestHelperActivity"
+ android:theme="@style/Theme.AppCompat.NoActionBar"/>
</application>
</manifest>
diff --git a/preference/ktx/src/androidTest/java/androidx/preference/PreferenceGroupTest.kt b/preference/ktx/src/androidTest/java/androidx/preference/PreferenceGroupTest.kt
index 90413c74..2246db6 100644
--- a/preference/ktx/src/androidTest/java/androidx/preference/PreferenceGroupTest.kt
+++ b/preference/ktx/src/androidTest/java/androidx/preference/PreferenceGroupTest.kt
@@ -16,6 +16,8 @@
package androidx.preference
+import androidx.preference.ktx.test.R
+import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ApplicationProvider
import androidx.test.filters.LargeTest
import androidx.test.rule.ActivityTestRule
@@ -35,19 +37,20 @@
@JvmField
@Rule
- val rule = ActivityTestRule(TestPreferenceActivity::class.java)
+ val rule = ActivityTestRule(PreferenceTestHelperActivity::class.java)
private val context = ApplicationProvider.getApplicationContext() as android.content.Context
private lateinit var preferenceGroup: PreferenceGroup
- @Before fun setup() {
- preferenceGroup = (rule
- .activity
- .supportFragmentManager
- .findFragmentByTag(
- TestPreferenceActivity.TAG) as PreferenceFragmentCompat).preferenceScreen
+ @Before
+ @UiThreadTest
+ fun setup() {
+ preferenceGroup =
+ rule.activity.setupPreferenceHierarchy(R.xml.test_preferencegroup).preferenceScreen
}
- @Test fun get() {
+ @UiThreadTest
+ @Test
+ fun get() {
val key = "key"
val preference = Preference(context)
preference.key = key
@@ -56,7 +59,9 @@
assertSame(preference, preferenceGroup[0])
}
- @Test fun contains() {
+ @UiThreadTest
+ @Test
+ fun contains() {
val preference = Preference(context)
assertFalse(preference in preferenceGroup)
assertTrue(preference !in preferenceGroup)
@@ -68,7 +73,9 @@
assertTrue(preference !in preferenceGroup)
}
- @Test fun plusAssign() {
+ @UiThreadTest
+ @Test
+ fun plusAssign() {
assertEquals(0, preferenceGroup.preferenceCount)
val preference1 = Preference(context)
@@ -82,7 +89,9 @@
assertSame(preference2, preferenceGroup.getPreference(1))
}
- @Test fun minusAssign() {
+ @UiThreadTest
+ @Test
+ fun minusAssign() {
val preference1 = Preference(context)
preferenceGroup.addPreference(preference1)
val preference2 = Preference(context)
@@ -98,7 +107,9 @@
assertEquals(0, preferenceGroup.preferenceCount)
}
- @Test fun size() {
+ @UiThreadTest
+ @Test
+ fun size() {
assertEquals(0, preferenceGroup.size)
val preference = Preference(context)
@@ -109,20 +120,24 @@
assertEquals(0, preferenceGroup.size)
}
- @Test fun isEmpty() {
+ @UiThreadTest
+ @Test
+ fun isEmpty() {
assertTrue(preferenceGroup.isEmpty())
preferenceGroup.addPreference(Preference(context))
assertFalse(preferenceGroup.isEmpty())
}
- @Test fun isNotEmpty() {
+ @UiThreadTest
+ @Test
+ fun isNotEmpty() {
assertFalse(preferenceGroup.isNotEmpty())
preferenceGroup.addPreference(Preference(context))
assertTrue(preferenceGroup.isNotEmpty())
}
- // Temporarily disabled due to b/113042342
- // @Test
+ @UiThreadTest
+ @Test
fun forEach() {
preferenceGroup.forEach {
fail("Empty preference group should not invoke lambda")
@@ -140,7 +155,9 @@
assertThat(preferences).containsExactly(preference1, preference2)
}
- @Test fun forEachIndexed() {
+ @UiThreadTest
+ @Test
+ fun forEachIndexed() {
preferenceGroup.forEach {
fail("Empty preference group should not invoke lambda")
}
@@ -158,7 +175,9 @@
assertThat(preferences).containsExactly(preference1, preference2)
}
- @Test fun iterator() {
+ @UiThreadTest
+ @Test
+ fun iterator() {
val preference1 = Preference(context)
preferenceGroup.addPreference(preference1)
val preference2 = Preference(context)
@@ -175,7 +194,9 @@
}
}
- @Test fun children() {
+ @UiThreadTest
+ @Test
+ fun children() {
val preferences = listOf(Preference(context), Preference(context), Preference(context))
preferences.forEach { preferenceGroup.addPreference(it) }
diff --git a/preference/ktx/src/androidTest/java/androidx/preference/PreferenceTestHelperActivity.kt b/preference/ktx/src/androidTest/java/androidx/preference/PreferenceTestHelperActivity.kt
new file mode 100644
index 0000000..e0cadd0
--- /dev/null
+++ b/preference/ktx/src/androidTest/java/androidx/preference/PreferenceTestHelperActivity.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2018 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 androidx.preference
+
+import android.os.Bundle
+import androidx.annotation.LayoutRes
+import androidx.appcompat.app.AppCompatActivity
+
+/**
+ * Helper activity that inflates a preference hierarchy defined in a given XML resource with a
+ * [PreferenceFragmentCompat] to aid testing.
+ */
+class PreferenceTestHelperActivity : AppCompatActivity() {
+
+ /**
+ * Inflates the given XML resource and returns the created PreferenceFragmentCompat.
+ *
+ * @param preferenceLayoutId The XML resource ID to inflate
+ * @return The PreferenceFragmentCompat that contains the inflated hierarchy
+ */
+ fun setupPreferenceHierarchy(@LayoutRes preferenceLayoutId: Int): PreferenceFragmentCompat {
+ val fragment = TestFragment(preferenceLayoutId)
+ supportFragmentManager
+ .beginTransaction()
+ .replace(android.R.id.content, fragment)
+ .commitNow()
+ return fragment
+ }
+
+ class TestFragment internal constructor(private val mPreferenceLayoutId: Int) :
+ PreferenceFragmentCompat() {
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ setPreferencesFromResource(mPreferenceLayoutId, rootKey)
+ }
+ }
+}
diff --git a/preference/ktx/src/androidTest/java/androidx/preference/TestPreferenceActivity.kt b/preference/ktx/src/androidTest/java/androidx/preference/TestPreferenceActivity.kt
deleted file mode 100644
index e58a16b..0000000
--- a/preference/ktx/src/androidTest/java/androidx/preference/TestPreferenceActivity.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2018 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 androidx.preference
-
-import android.os.Bundle
-import androidx.fragment.app.FragmentActivity
-import androidx.preference.ktx.test.R
-
-class TestPreferenceActivity : FragmentActivity() {
-
- companion object {
- const val TAG = "TestPreferenceActivity"
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- supportFragmentManager.beginTransaction()
- .add(android.R.id.content, TestPreferenceFragment(), TAG)
- .commitNow()
- }
-
- class TestPreferenceFragment : PreferenceFragmentCompat() {
- override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
- addPreferencesFromResource(R.xml.preferences)
- }
- }
-}
diff --git a/preference/ktx/src/androidTest/res/xml/preferences.xml b/preference/ktx/src/androidTest/res/xml/test_preferencegroup.xml
similarity index 100%
rename from preference/ktx/src/androidTest/res/xml/preferences.xml
rename to preference/ktx/src/androidTest/res/xml/test_preferencegroup.xml
diff --git a/preference/src/androidTest/java/androidx/preference/tests/PreferenceVisibilityTest.java b/preference/src/androidTest/java/androidx/preference/tests/PreferenceVisibilityTest.java
index fc43eec..f96d68c 100644
--- a/preference/src/androidTest/java/androidx/preference/tests/PreferenceVisibilityTest.java
+++ b/preference/src/androidTest/java/androidx/preference/tests/PreferenceVisibilityTest.java
@@ -222,7 +222,7 @@
}
/**
- * A {@link OnHierarchyChangeListener that will count down a provided {@link CountDownLatch}
+ * A {@link OnHierarchyChangeListener} that will count down a provided {@link CountDownLatch}
* to allow tests to wait for the view hierarchy to be updated, and fail the test if the
* hierarchy is updated when it shouldn't be.
*/