Skip to content

Commit 009ae8e

Browse files
Merge branch 'master' into #835-ios-software
2 parents 5d7a298 + b0af219 commit 009ae8e

13 files changed

Lines changed: 191 additions & 14 deletions

File tree

release_notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
- [#890](https://github.com/Flank/flank/pull/890) Convert bitrise ubuntu workflow into GitHub actions. ([piotradamczyk5](https://github.com/piotradamczyk5))
33
- [#876](https://github.com/Flank/flank/pull/876) Added option to print Android available devices to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
44
- [#895](https://github.com/Flank/flank/pull/895) Added option to print iOS available devices to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
5+
- [#894](https://github.com/Flank/flank/pull/894) Added option to print Android available versions to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
56
- [#897](https://github.com/Flank/flank/pull/897) Added option to print iOS available versions to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
67
-
78
-

test_runner/docs/ascii/flank.jar_-android.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ flank.jar
3535
*models*::
3636
Information about available models
3737

38+
*versions*::
39+
Information about available software versions
40+
3841
// end::picocli-generated-man-section-commands[]
3942

4043
// end::picocli-generated-full-manpage[]

test_runner/docs/ascii/flank.jar_-firebase-test-android.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ flank.jar
3535
*models*::
3636
Information about available models
3737

38+
*versions*::
39+
Information about available software versions
40+
3841
// end::picocli-generated-man-section-commands[]
3942

4043
// end::picocli-generated-full-manpage[]

test_runner/src/main/kotlin/ftl/android/AndroidCatalog.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ object AndroidCatalog {
2525

2626
fun devicesCatalogAsTable(projectId: String) = deviceCatalog(projectId).models.asPrintableTable()
2727

28+
fun supportedVersionsAsTable(projectId: String) = deviceCatalog(projectId).versions.asPrintableTable()
29+
2830
fun androidModelIds(projectId: String) =
2931
modelMap.getOrPut(projectId) { deviceCatalog(projectId).models.map { it.id } }
3032

test_runner/src/main/kotlin/ftl/cli/firebase/test/AndroidCommand.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ftl.cli.firebase.test
33
import ftl.cli.firebase.test.android.AndroidDoctorCommand
44
import ftl.cli.firebase.test.android.AndroidRunCommand
55
import ftl.cli.firebase.test.android.models.AndroidModelsCommand
6+
import ftl.cli.firebase.test.android.versions.AndroidVersionsCommand
67
import picocli.CommandLine
78
import picocli.CommandLine.Command
89

@@ -12,7 +13,8 @@ import picocli.CommandLine.Command
1213
subcommands = [
1314
AndroidRunCommand::class,
1415
AndroidDoctorCommand::class,
15-
AndroidModelsCommand::class
16+
AndroidModelsCommand::class,
17+
AndroidVersionsCommand::class
1618
],
1719
usageHelpAutoWidth = true
1820
)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ftl.cli.firebase.test.android.versions
2+
3+
import picocli.CommandLine
4+
5+
@CommandLine.Command(
6+
name = "versions",
7+
headerHeading = "",
8+
synopsisHeading = "%n",
9+
descriptionHeading = "%n@|bold,underline Description:|@%n%n",
10+
parameterListHeading = "%n@|bold,underline Parameters:|@%n",
11+
optionListHeading = "%n@|bold,underline Options:|@%n",
12+
header = ["Information about available software versions"],
13+
description = ["Information about available software versions. For example prints list of available software versions"],
14+
subcommands = [AndroidVersionsListCommand::class],
15+
usageHelpAutoWidth = true
16+
)
17+
class AndroidVersionsCommand : Runnable {
18+
override fun run() {
19+
CommandLine.usage(AndroidVersionsCommand(), System.out)
20+
}
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package ftl.cli.firebase.test.android.versions
2+
3+
import ftl.android.AndroidCatalog.supportedVersionsAsTable
4+
import ftl.args.AndroidArgs
5+
import ftl.config.FtlConstants
6+
import picocli.CommandLine
7+
import java.nio.file.Paths
8+
9+
@CommandLine.Command(
10+
name = "list",
11+
headerHeading = "",
12+
synopsisHeading = "%n",
13+
descriptionHeading = "%n@|bold,underline Description:|@%n%n",
14+
parameterListHeading = "%n@|bold,underline Parameters:|@%n",
15+
optionListHeading = "%n@|bold,underline Options:|@%n",
16+
header = ["List of OS versions available to test against"],
17+
description = ["Print current list of Android OS versions available to test against"],
18+
usageHelpAutoWidth = true
19+
)
20+
class AndroidVersionsListCommand : Runnable {
21+
override fun run() {
22+
println(supportedVersionsAsTable(AndroidArgs.load(Paths.get(configPath)).project))
23+
}
24+
25+
@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
26+
var configPath: String = FtlConstants.defaultAndroidConfig
27+
28+
@CommandLine.Option(names = ["-h", "--help"], usageHelp = true, description = ["Prints this help message"])
29+
var usageHelpRequested: Boolean = false
30+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package ftl.environment
2+
3+
import com.google.api.services.testing.model.AndroidVersion
4+
import com.google.api.services.testing.model.Date
5+
import ftl.reports.api.twoDigitString
6+
import ftl.util.applyColorsUsing
7+
import ftl.util.buildTable
8+
9+
fun List<AndroidVersion>.asPrintableTable() = createTestEnvironmentInfo().createAndroidSoftwareVersionsTable()
10+
11+
private fun List<AndroidVersion>.createTestEnvironmentInfo() =
12+
fold(mutableMapOf<String, MutableList<String>>()) { softwareInfo, softwareVersion ->
13+
softwareInfo.apply {
14+
getOrCreateList(OS_VERSION_ID).add(softwareVersion.id.orUnknown())
15+
getOrCreateList(VERSION).add(softwareVersion.versionString.orUnknown())
16+
getOrCreateList(CODE_NAME).add(softwareVersion.codeName.orUnknown())
17+
getOrCreateList(API_LEVEL).add(softwareVersion.apiLevel?.toString().orUnknown())
18+
getOrCreateList(RELEASE_DATE).add(softwareVersion.releaseDate.printableReleaseDate())
19+
getOrCreateList(TAGS).add(softwareVersion.tags.orEmpty().joinToString())
20+
}
21+
}
22+
23+
private fun Date?.printableReleaseDate() =
24+
if (this == null || year == null || month == null || day == null) "UNKNOWN"
25+
else "$year-${month.twoDigitString()}-${day.twoDigitString()}"
26+
27+
private fun TestEnvironmentInfo.createAndroidSoftwareVersionsTable() = buildTable(
28+
createTableColumnFor(OS_VERSION_ID),
29+
createTableColumnFor(VERSION),
30+
createTableColumnFor(CODE_NAME),
31+
createTableColumnFor(API_LEVEL),
32+
createTableColumnFor(RELEASE_DATE),
33+
createTableColumnFor(TAGS).applyColorsUsing(tagToSystemOutColorMapper)
34+
)
35+
36+
const val VERSION = "VERSION"
37+
const val CODE_NAME = "CODE_NAME"
38+
const val API_LEVEL = "API_LEVEL"
39+
const val RELEASE_DATE = "RELEASE_DATE"

test_runner/src/main/kotlin/ftl/reports/api/Utils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ internal fun Double.format(): String = "%.3f".format(Locale.ROOT, this)
1212

1313
internal fun Int?.format() = (this ?: 0).toString()
1414

15+
internal fun Int.twoDigitString() = toString().padStart(2, '0')
16+
1517
internal fun Duration?.millis(): Double =
1618
if (this == null)
1719
0.0 else

test_runner/src/test/kotlin/ftl/android/AndroidCatalogTest.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,44 @@ class AndroidCatalogTest {
6767
brokenModel.androidModelId = "brokenModel"
6868
assertFalse(AndroidCatalog.isVirtualDevice(brokenModel, projectId))
6969
}
70+
71+
@Test
72+
fun `should print available devices as table`() {
73+
// given
74+
val expectedHeaders =
75+
arrayOf("MODEL_ID", "MAKE", "MODEL_NAME", "FORM", "RESOLUTION", "OS_VERSION_IDS", "TAGS")
76+
val expectedSeparatorCount = expectedHeaders.size + 1
77+
78+
// when
79+
val devicesTable = AndroidCatalog.devicesCatalogAsTable(projectId)
80+
val headers = devicesTable.lines()[1]
81+
82+
// then
83+
// has all necessary headers
84+
expectedHeaders.forEach {
85+
assertThat(headers.contains(it)).isTrue()
86+
}
87+
// number of separators match
88+
assertThat(headers.count { it == '' }).isEqualTo(expectedSeparatorCount)
89+
}
90+
91+
@Test
92+
fun `should print available software versions as table`() {
93+
// given
94+
val expectedHeaders =
95+
arrayOf("OS_VERSION_ID", "VERSION", "CODE_NAME", "API_LEVEL", "RELEASE_DATE", "TAGS")
96+
val expectedSeparatorCount = expectedHeaders.size + 1
97+
98+
// when
99+
val devicesTable = AndroidCatalog.supportedVersionsAsTable(projectId)
100+
val headers = devicesTable.lines()[1]
101+
102+
// then
103+
// has all necessary headers
104+
expectedHeaders.forEach {
105+
assertThat(headers.contains(it)).isTrue()
106+
}
107+
// number of separators match
108+
assertThat(headers.count { it == '' }).isEqualTo(expectedSeparatorCount)
109+
}
70110
}

0 commit comments

Comments
 (0)