58e8573085
Also migrating some other tests that have been verified Test: SysUI studio Test: atest NexusLauncherRoboTests Flag: TEST_ONLY Change-Id: I072201b8e7b98945ca88657fe813fef4727f16e4
173 lines
6.0 KiB
Kotlin
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"
|
|
}
|
|
}
|
|
}
|