1 /* 2 * Copyright (C) 2024 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 package com.android.avatarpicker.tests.unit.domain 17 18 import android.content.res.Resources 19 import androidx.test.platform.app.InstrumentationRegistry 20 import com.android.avatarpicker.data.ColoredIconsRepository 21 import com.android.avatarpicker.data.IllustrationsRepository 22 import com.android.avatarpicker.data.MediaRepository 23 import com.android.avatarpicker.domain.GroupedSelectableItemsUseCase 24 import com.android.avatarpicker.domain.GroupedSelectableItemsUseCaseImpl 25 import com.android.avatarpicker.tests.R 26 import com.android.avatarpicker.ui.details.items.SelectableType 27 import com.google.common.truth.Truth 28 import kotlinx.coroutines.ExperimentalCoroutinesApi 29 import kotlinx.coroutines.launch 30 import kotlinx.coroutines.test.StandardTestDispatcher 31 import kotlinx.coroutines.test.advanceUntilIdle 32 import kotlinx.coroutines.test.runTest 33 import org.junit.Assert.* 34 import org.junit.Before 35 import org.junit.Test 36 37 class GroupedSelectableItemsUseCaseImplTest { 38 private lateinit var resources: Resources 39 private lateinit var illustrationsRepository: IllustrationsRepository 40 private lateinit var coloredIconsRepository: ColoredIconsRepository 41 private lateinit var mediaRepository: MediaRepository 42 private lateinit var useCase: GroupedSelectableItemsUseCase 43 44 @Before setupnull45 fun setup() { 46 resources = 47 InstrumentationRegistry.getInstrumentation().getContext().getResources() 48 illustrationsRepository = IllustrationsRepository(resources) 49 coloredIconsRepository = ColoredIconsRepository(resources) 50 mediaRepository = MediaRepository() 51 } 52 53 @OptIn(ExperimentalCoroutinesApi::class) 54 @Test <lambda>null55 fun testUseCaseDefaultIcons() = runTest { 56 illustrationsRepository.imagesDescriptionsResId = R.array.avatar_image_descriptions_empty 57 illustrationsRepository.imagesResId = R.array.avatar_images_empty 58 var items = mutableListOf<List<SelectableType>>() 59 useCase = 60 GroupedSelectableItemsUseCaseImpl(mediaRepository, 61 coloredIconsRepository, 62 illustrationsRepository, 63 StandardTestDispatcher(this.testScheduler)) 64 launch { items.addAll(useCase()) } 65 advanceUntilIdle() 66 Truth.assertThat(items.size).isEqualTo(1) 67 Truth.assertThat(items[0].size).isEqualTo(10) 68 } 69 70 @OptIn(ExperimentalCoroutinesApi::class) 71 @Test <lambda>null72 fun testUseCaseIllustrations() = runTest { 73 illustrationsRepository.imagesDescriptionsResId = R.array.avatar_image_descriptions_png 74 illustrationsRepository.imagesResId = R.array.avatar_images_png 75 var items = mutableListOf<List<SelectableType>>() 76 useCase = 77 GroupedSelectableItemsUseCaseImpl(mediaRepository, 78 coloredIconsRepository, 79 illustrationsRepository, 80 StandardTestDispatcher(this.testScheduler)) 81 launch { items.addAll(useCase()) } 82 advanceUntilIdle() 83 Truth.assertThat(items.size).isEqualTo(2) 84 Truth.assertThat(items[0].size).isEqualTo(2) 85 Truth.assertThat(items[1].size).isEqualTo(3) 86 } 87 }