PreferenceGroupTest.kt revision c70fa8cd4041a803ee3be1a10ea530f8c6e6ff22
1/* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package androidx.preference 18 19import android.support.test.InstrumentationRegistry 20import android.support.test.rule.ActivityTestRule 21import androidx.testutils.assertThrows 22import androidx.testutils.fail 23import com.google.common.truth.Truth.assertThat 24import org.junit.Assert.assertEquals 25import org.junit.Assert.assertFalse 26import org.junit.Assert.assertSame 27import org.junit.Assert.assertTrue 28import org.junit.Before 29import org.junit.Rule 30import org.junit.Test 31 32class PreferenceGroupTest { 33 34 @JvmField 35 @Rule 36 val rule = ActivityTestRule(TestPreferenceActivity::class.java) 37 private val context = InstrumentationRegistry.getContext() 38 private lateinit var preferenceGroup: PreferenceGroup 39 40 @Before fun setup() { 41 preferenceGroup = (rule 42 .activity 43 .fragmentManager 44 .findFragmentByTag(TestPreferenceActivity.TAG) as PreferenceFragment).preferenceScreen 45 } 46 47 @Test fun get() { 48 val key = "key" 49 val preference = Preference(context) 50 preference.key = key 51 preferenceGroup.addPreference(preference) 52 assertSame(preference, preferenceGroup[key]) 53 assertSame(preference, preferenceGroup[0]) 54 } 55 56 @Test fun contains() { 57 val preference = Preference(context) 58 assertFalse(preference in preferenceGroup) 59 assertTrue(preference !in preferenceGroup) 60 preferenceGroup.addPreference(preference) 61 assertFalse(preference !in preferenceGroup) 62 assertTrue(preference in preferenceGroup) 63 preferenceGroup.removePreference(preference) 64 assertFalse(preference in preferenceGroup) 65 assertTrue(preference !in preferenceGroup) 66 } 67 68 @Test fun plusAssign() { 69 assertEquals(0, preferenceGroup.preferenceCount) 70 71 val preference1 = Preference(context) 72 preferenceGroup += preference1 73 assertEquals(1, preferenceGroup.preferenceCount) 74 assertSame(preference1, preferenceGroup.getPreference(0)) 75 76 val preference2 = Preference(context) 77 preferenceGroup += preference2 78 assertEquals(2, preferenceGroup.preferenceCount) 79 assertSame(preference2, preferenceGroup.getPreference(1)) 80 } 81 82 @Test fun minusAssign() { 83 val preference1 = Preference(context) 84 preferenceGroup.addPreference(preference1) 85 val preference2 = Preference(context) 86 preferenceGroup.addPreference(preference2) 87 88 assertEquals(2, preferenceGroup.preferenceCount) 89 90 preferenceGroup -= preference2 91 assertEquals(1, preferenceGroup.preferenceCount) 92 assertSame(preference1, preferenceGroup.getPreference(0)) 93 94 preferenceGroup -= preference1 95 assertEquals(0, preferenceGroup.preferenceCount) 96 } 97 98 @Test fun size() { 99 assertEquals(0, preferenceGroup.size) 100 101 val preference = Preference(context) 102 preferenceGroup.addPreference(preference) 103 assertEquals(1, preferenceGroup.size) 104 105 preferenceGroup.removePreference(preference) 106 assertEquals(0, preferenceGroup.size) 107 } 108 109 @Test fun isEmpty() { 110 assertTrue(preferenceGroup.isEmpty()) 111 preferenceGroup.addPreference(Preference(context)) 112 assertFalse(preferenceGroup.isEmpty()) 113 } 114 115 @Test fun isNotEmpty() { 116 assertFalse(preferenceGroup.isNotEmpty()) 117 preferenceGroup.addPreference(Preference(context)) 118 assertTrue(preferenceGroup.isNotEmpty()) 119 } 120 121 @Test fun forEach() { 122 preferenceGroup.forEach { 123 fail("Empty preference group should not invoke lambda") 124 } 125 126 val preference1 = Preference(context).apply { key = "ASD" } 127 preferenceGroup.addPreference(preference1) 128 val preference2 = Preference(context) 129 preferenceGroup.addPreference(preference2) 130 131 val preferences = mutableListOf<Preference>() 132 preferenceGroup.forEach { 133 preferences += it 134 } 135 assertThat(preferences).containsExactly(preference1, preference2) 136 } 137 138 @Test fun forEachIndexed() { 139 preferenceGroup.forEach { 140 fail("Empty preference group should not invoke lambda") 141 } 142 143 val preference1 = Preference(context) 144 preferenceGroup.addPreference(preference1) 145 val preference2 = Preference(context) 146 preferenceGroup.addPreference(preference2) 147 148 val preferences = mutableListOf<Preference>() 149 preferenceGroup.forEachIndexed { index, preference -> 150 assertEquals(index, preferences.size) 151 preferences += preference 152 } 153 assertThat(preferences).containsExactly(preference1, preference2) 154 } 155 156 @Test fun iterator() { 157 val preference1 = Preference(context) 158 preferenceGroup.addPreference(preference1) 159 val preference2 = Preference(context) 160 preferenceGroup.addPreference(preference2) 161 162 val iterator = preferenceGroup.iterator() 163 assertTrue(iterator.hasNext()) 164 assertSame(preference1, iterator.next()) 165 assertTrue(iterator.hasNext()) 166 assertSame(preference2, iterator.next()) 167 assertFalse(iterator.hasNext()) 168 assertThrows<IndexOutOfBoundsException> { 169 iterator.next() 170 } 171 } 172 173 @Test fun children() { 174 val preferences = listOf(Preference(context), Preference(context), Preference(context)) 175 preferences.forEach { preferenceGroup.addPreference(it) } 176 177 preferenceGroup.children.forEachIndexed { index, child -> 178 assertSame(preferences[index], child) 179 } 180 } 181} 182