blob: 967bdc0f7bff3e27d41618f28d1111f957967b90 [file]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package com.flutter.gradle
import com.android.build.api.dsl.ApplicationDefaultConfig
import com.android.build.api.dsl.ApplicationExtension
import com.flutter.gradle.testing.mockProductFlavors
import io.mockk.every
import io.mockk.mockk
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
class DslVersionCodesTest {
@Test
fun `from reads the defaultConfig versionCode and the flavors that set one`() {
val extension =
mockApplicationExtension(
defaultConfigVersionCode = 42,
productFlavorVersionCodes = mapOf("free" to 7, "paid" to null, "demo" to 9)
)
assertEquals(
DslVersionCodes(
defaultConfigVersionCode = 42,
productFlavorVersionCodes = mapOf("free" to 7, "demo" to 9)
),
DslVersionCodes.from(extension)
)
}
@Test
fun `from reads a null defaultConfig versionCode`() {
val extension = mockApplicationExtension(defaultConfigVersionCode = null)
assertEquals(
DslVersionCodes(defaultConfigVersionCode = null, productFlavorVersionCodes = emptyMap()),
DslVersionCodes.from(extension)
)
}
@Test
fun `forVariant returns the versionCode of the first flavor, in dimension order, that sets one`() {
val versionCodes =
DslVersionCodes(
defaultConfigVersionCode = 42,
productFlavorVersionCodes = mapOf("paid" to 7, "demo" to 9)
)
assertEquals(7, versionCodes.forVariant(listOf("tier" to "paid", "mode" to "demo")))
assertEquals(9, versionCodes.forVariant(listOf("tier" to "free", "mode" to "demo")))
}
@Test
fun `forVariant falls back to the defaultConfig versionCode`() {
val versionCodes =
DslVersionCodes(defaultConfigVersionCode = 42, productFlavorVersionCodes = mapOf("paid" to 7))
assertEquals(42, versionCodes.forVariant(emptyList()))
assertEquals(42, versionCodes.forVariant(listOf("tier" to "free")))
}
@Test
fun `forVariant returns null when neither the flavors nor defaultConfig set a versionCode`() {
val versionCodes =
DslVersionCodes(defaultConfigVersionCode = null, productFlavorVersionCodes = mapOf("paid" to 7))
assertNull(versionCodes.forVariant(listOf("tier" to "free")))
}
private fun mockApplicationExtension(
defaultConfigVersionCode: Int?,
productFlavorVersionCodes: Map<String, Int?> = emptyMap()
): ApplicationExtension {
val defaultConfig = mockk<ApplicationDefaultConfig>()
every { defaultConfig.versionCode } returns defaultConfigVersionCode
val productFlavors = mockProductFlavors(productFlavorVersionCodes)
val extension = mockk<ApplicationExtension>()
every { extension.defaultConfig } returns defaultConfig
every { extension.productFlavors } returns productFlavors
return extension
}
}