Files
Lawnchair/tests/src/com/android/launcher3/responsive/FolderSpecTest.kt
T
Jordan Silva 8f7986abae Responsive grid cleanup
This CL renames some of the variables to keep it consistent across the code. It removes workarounds that were made to facilitate easy code reviews without breaking the tests.
It is a cleanup of the responsive grid feature.

Bug: 299889733
Flag: ACONFIG com.android.launcher3.enable_responsive_workspace TEAMFOOD
Test: CalculatedAllAppsSpecTest
Test: CalculatedFolderSpecTest
Test: CalculatedHotseatSpecTest
Test: CalculatedWorkspaceSpecTest
Test: AllAppsSpecsTest
Test: FolderSpecTest
Test: HotseatSpecsTest
Test: WorkspaceSpecsTest
Change-Id: I198fadfbcfc0d1b32a62a3076949b42ee1fbcf33
2023-11-09 22:06:03 +00:00

307 lines
12 KiB
Kotlin

/*
* Copyright (C) 2023 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.responsive
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
import com.android.launcher3.AbstractDeviceProfileTest
import com.android.launcher3.responsive.ResponsiveSpec.Companion.ResponsiveSpecType
import com.android.launcher3.responsive.ResponsiveSpec.DimensionType
import com.android.launcher3.tests.R
import com.android.launcher3.util.TestResourceHelper
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
class FolderSpecTest : AbstractDeviceProfileTest() {
override val runningContext: Context = InstrumentationRegistry.getInstrumentation().context
val deviceSpec = deviceSpecs["tablet"]!!
val aspectRatio = deviceSpec.naturalSize.first.toFloat() / deviceSpec.naturalSize.second
@Before
fun setup() {
initializeVarsForPhone(deviceSpec)
}
@Test
fun parseValidFile() {
val resourceHelper = TestResourceHelper(context, R.xml.valid_folders_specs)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
val specs = folderSpecs.getSpecsByAspectRatio(aspectRatio)
val sizeSpec16 = SizeSpec(16f.dpToPx())
val widthSpecsExpected =
listOf(
ResponsiveSpec(
maxAvailableSize = 800.dpToPx(),
dimensionType = DimensionType.WIDTH,
specType = ResponsiveSpecType.Folder,
startPadding = sizeSpec16,
endPadding = sizeSpec16,
gutter = sizeSpec16,
cellSize = SizeSpec(matchWorkspace = true)
),
ResponsiveSpec(
maxAvailableSize = 9999.dpToPx(),
dimensionType = DimensionType.WIDTH,
specType = ResponsiveSpecType.Folder,
startPadding = sizeSpec16,
endPadding = sizeSpec16,
gutter = sizeSpec16,
cellSize = SizeSpec(102f.dpToPx())
)
)
val heightSpecsExpected =
ResponsiveSpec(
maxAvailableSize = 9999.dpToPx(),
dimensionType = DimensionType.HEIGHT,
specType = ResponsiveSpecType.Folder,
startPadding = SizeSpec(24f.dpToPx()),
endPadding = SizeSpec(64f.dpToPx()),
gutter = sizeSpec16,
cellSize = SizeSpec(matchWorkspace = true)
)
assertThat(specs.widthSpecs.size).isEqualTo(widthSpecsExpected.size)
assertThat(specs.widthSpecs[0]).isEqualTo(widthSpecsExpected[0])
assertThat(specs.widthSpecs[1]).isEqualTo(widthSpecsExpected[1])
assertThat(specs.heightSpecs.size).isEqualTo(1)
assertThat(specs.heightSpecs[0]).isEqualTo(heightSpecsExpected)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_missingTag_throwsError() {
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_1)
ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_moreThanOneValuePerTag_throwsError() {
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_2)
ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_valueBiggerThan1_throwsError() {
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_3)
ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_missingSpecs_throwsError() {
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_4)
ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_missingWidthBreakpoint_throwsError() {
val availableSpace = 900.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.WIDTH,
specType = ResponsiveSpecType.Folder,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_5)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.WIDTH,
cells,
availableSpace,
calculatedWorkspaceSpec
)
}
@Test(expected = IllegalStateException::class)
fun parseInvalidFile_missingHeightBreakpoint_throwsError() {
val availableSpace = 900.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.HEIGHT,
specType = ResponsiveSpecType.Folder,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.invalid_folders_specs_5)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.HEIGHT,
cells,
availableSpace,
calculatedWorkspaceSpec
)
}
@Test
fun retrievesCalculatedWidthSpec() {
val availableSpace = 800.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.WIDTH,
specType = ResponsiveSpecType.Workspace,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.valid_folders_specs)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
val calculatedWidthSpec =
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.WIDTH,
cells,
availableSpace,
calculatedWorkspaceSpec
)
assertThat(calculatedWidthSpec.cells).isEqualTo(cells)
assertThat(calculatedWidthSpec.availableSpace).isEqualTo(availableSpace)
assertThat(calculatedWidthSpec.startPaddingPx).isEqualTo(16.dpToPx())
assertThat(calculatedWidthSpec.endPaddingPx).isEqualTo(16.dpToPx())
assertThat(calculatedWidthSpec.gutterPx).isEqualTo(16.dpToPx())
assertThat(calculatedWidthSpec.cellSizePx).isEqualTo(calculatedWorkspaceSpec.cellSizePx)
}
@Test(expected = IllegalStateException::class)
fun retrievesCalculatedWidthSpec_invalidCalculatedResponsiveSpecType_throwsError() {
val availableSpace = 10.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.HEIGHT,
specType = ResponsiveSpecType.Folder,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.valid_folders_specs)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.WIDTH,
cells,
availableSpace,
calculatedWorkspaceSpec
)
}
@Test
fun retrievesCalculatedHeightSpec() {
val availableSpace = 700.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.HEIGHT,
specType = ResponsiveSpecType.Workspace,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.valid_folders_specs)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
val calculatedHeightSpec =
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.HEIGHT,
cells,
availableSpace,
calculatedWorkspaceSpec
)
assertThat(calculatedHeightSpec.cells).isEqualTo(cells)
assertThat(calculatedHeightSpec.availableSpace).isEqualTo(availableSpace)
assertThat(calculatedHeightSpec.startPaddingPx).isEqualTo(24.dpToPx())
assertThat(calculatedHeightSpec.endPaddingPx).isEqualTo(64.dpToPx())
assertThat(calculatedHeightSpec.gutterPx).isEqualTo(16.dpToPx())
assertThat(calculatedHeightSpec.cellSizePx).isEqualTo(calculatedWorkspaceSpec.cellSizePx)
}
@Test(expected = IllegalStateException::class)
fun retrievesCalculatedHeightSpec_invalidCalculatedResponsiveSpecType_throwsError() {
val availableSpace = 10.dpToPx()
val cells = 3
val workspaceSpec =
ResponsiveSpec(
maxAvailableSize = availableSpace,
dimensionType = DimensionType.WIDTH,
specType = ResponsiveSpecType.Folder,
startPadding = SizeSpec(fixedSize = 10f),
endPadding = SizeSpec(fixedSize = 10f),
gutter = SizeSpec(fixedSize = 10f),
cellSize = SizeSpec(fixedSize = 10f)
)
val calculatedWorkspaceSpec =
CalculatedResponsiveSpec(aspectRatio, availableSpace, cells, workspaceSpec)
val resourceHelper = TestResourceHelper(context, R.xml.valid_folders_specs)
val folderSpecs = ResponsiveSpecsProvider.create(resourceHelper, ResponsiveSpecType.Folder)
folderSpecs.getCalculatedSpec(
aspectRatio,
DimensionType.HEIGHT,
cells,
availableSpace,
calculatedWorkspaceSpec
)
}
}