Files
Lawnchair/tests/multivalentTests/src/com/android/launcher3/folder/FolderPagedViewTest.kt
T
Sihua Ma 58e8573085 Migrate model tests to multivalent
Also migrating some other tests that have been verified

Test: SysUI studio
Test: atest NexusLauncherRoboTests
Flag: TEST_ONLY
Change-Id: I072201b8e7b98945ca88657fe813fef4727f16e4
2024-08-20 07:28:35 +00:00

173 lines
6.0 KiB
Kotlin

/*
* Copyright (C) 2024 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.launcher3.folder
import android.graphics.Point
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Test
import org.junit.runner.RunWith
data class TestCase(val maxCountX: Int, val maxCountY: Int, val totalItems: Int)
@SmallTest
@RunWith(AndroidJUnit4::class)
class FolderPagedViewTest {
companion object {
private fun makeFolderGridOrganizer(testCase: TestCase): FolderGridOrganizer {
val folderGridOrganizer = FolderGridOrganizer(testCase.maxCountX, testCase.maxCountY)
folderGridOrganizer.setContentSize(testCase.totalItems)
return folderGridOrganizer
}
}
@Test
fun setContentSize() {
assertCountXandY(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22),
expectedCountX = 4,
expectedCountY = 3
)
assertCountXandY(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 8),
expectedCountX = 3,
expectedCountY = 3
)
assertCountXandY(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 3),
expectedCountX = 2,
expectedCountY = 2
)
}
private fun assertCountXandY(testCase: TestCase, expectedCountX: Int, expectedCountY: Int) {
val folderGridOrganizer = makeFolderGridOrganizer(testCase)
assert(folderGridOrganizer.countX == expectedCountX) {
"Error on expected countX $expectedCountX got ${folderGridOrganizer.countX} using test case $testCase"
}
assert(folderGridOrganizer.countY == expectedCountY) {
"Error on expected countY $expectedCountY got ${folderGridOrganizer.countY} using test case $testCase"
}
}
@Test
fun getPosForRank() {
assertFolderRank(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22),
expectedPos = Point(0, 0),
rank = 0
)
assertFolderRank(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22),
expectedPos = Point(1, 0),
rank = 1
)
assertFolderRank(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22),
expectedPos = Point(3, 0),
rank = 3
)
assertFolderRank(
TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22),
expectedPos = Point(2, 1),
rank = 6
)
val testCase = TestCase(maxCountX = 4, maxCountY = 3, totalItems = 22)
// Rank 16 and 38 should yield the same point since 38 % 12 == 2
val folderGridOrganizer = makeFolderGridOrganizer(testCase)
assertFolderRank(testCase, expectedPos = folderGridOrganizer.getPosForRank(2), rank = 38)
}
private fun assertFolderRank(testCase: TestCase, expectedPos: Point, rank: Int) {
val folderGridOrganizer = makeFolderGridOrganizer(testCase)
val pos = folderGridOrganizer.getPosForRank(rank)
assert(pos == expectedPos) {
"Expected pos = $expectedPos doesn't match pos = $pos for the given rank $rank and the give test case $testCase"
}
}
@Test
fun isItemInPreview() {
val folderGridOrganizer = FolderGridOrganizer(5, 8)
folderGridOrganizer.setContentSize(ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW - 1)
// Very few items
for (i in 0..3) {
assertItemsInPreview(
TestCase(
maxCountX = 5,
maxCountY = 8,
totalItems = ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW - 1
),
expectedIsInPreview = true,
page = 0,
rank = i
)
}
for (i in 4..40) {
assertItemsInPreview(
TestCase(
maxCountX = 5,
maxCountY = 8,
totalItems = ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW - 1
),
expectedIsInPreview = false,
page = 0,
rank = i
)
}
// Full of items
assertItemsInPreview(
TestCase(maxCountX = 5, maxCountY = 8, totalItems = 40),
expectedIsInPreview = false,
page = 0,
rank = 2
)
assertItemsInPreview(
TestCase(maxCountX = 5, maxCountY = 8, totalItems = 40),
expectedIsInPreview = false,
page = 0,
rank = 2
)
assertItemsInPreview(
TestCase(maxCountX = 5, maxCountY = 8, totalItems = 40),
expectedIsInPreview = true,
page = 0,
rank = 5
)
assertItemsInPreview(
TestCase(maxCountX = 5, maxCountY = 8, totalItems = 40),
expectedIsInPreview = true,
page = 0,
rank = 6
)
}
private fun assertItemsInPreview(
testCase: TestCase,
expectedIsInPreview: Boolean,
page: Int,
rank: Int
) {
val folderGridOrganizer = makeFolderGridOrganizer(testCase)
val isInPreview = folderGridOrganizer.isItemInPreview(page, rank)
assert(isInPreview == expectedIsInPreview) {
"Item preview state should be $expectedIsInPreview but got $isInPreview, for page $page and rank $rank, for test case $testCase"
}
}
}