diff --git a/test_runner/src/main/kotlin/ftl/args/yml/FlankYml.kt b/test_runner/src/main/kotlin/ftl/args/yml/FlankYml.kt index 9f2f79580c..13cb903cd6 100644 --- a/test_runner/src/main/kotlin/ftl/args/yml/FlankYml.kt +++ b/test_runner/src/main/kotlin/ftl/args/yml/FlankYml.kt @@ -25,8 +25,12 @@ class FlankYmlParams( @JsonIgnoreProperties(ignoreUnknown = true) class FlankYml( - val flank: FlankYmlParams = FlankYmlParams() + // when an empty 'flank:' is present in a yaml then parsedFlank will be parsed as null. + @field:JsonProperty("flank") + private val parsedFlank: FlankYmlParams? = FlankYmlParams() ) { + val flank = parsedFlank ?: FlankYmlParams() + companion object : IYmlMap { override val map = mapOf("flank" to FlankYmlParams.keys) } diff --git a/test_runner/src/main/kotlin/ftl/args/yml/IosFlankYml.kt b/test_runner/src/main/kotlin/ftl/args/yml/IosFlankYml.kt index b69dd0107b..c4e8da8179 100644 --- a/test_runner/src/main/kotlin/ftl/args/yml/IosFlankYml.kt +++ b/test_runner/src/main/kotlin/ftl/args/yml/IosFlankYml.kt @@ -16,8 +16,11 @@ class IosFlankYmlParams( @JsonIgnoreProperties(ignoreUnknown = true) class IosFlankYml( - val flank: IosFlankYmlParams = IosFlankYmlParams() + // when an empty 'flank:' is present in a yaml then parsedFlank will be parsed as null. + @field:JsonProperty("flank") + private val parsedFlank: IosFlankYmlParams? = IosFlankYmlParams() ) { + val flank = parsedFlank ?: IosFlankYmlParams() companion object : IYmlMap { override val map = mapOf("flank" to IosFlankYmlParams.keys) } diff --git a/test_runner/src/main/kotlin/ftl/doctor/Doctor.kt b/test_runner/src/main/kotlin/ftl/doctor/Doctor.kt index 4578fa99d7..94393f960b 100644 --- a/test_runner/src/main/kotlin/ftl/doctor/Doctor.kt +++ b/test_runner/src/main/kotlin/ftl/doctor/Doctor.kt @@ -39,7 +39,7 @@ object Doctor { validArgs.forEach { (topLevelKey, keyList) -> val parsedKeys = mutableListOf() - parsed[topLevelKey].fields().forEach { parsedKeys.add(it.key) } + parsed[topLevelKey]?.fields()?.forEach { parsedKeys.add(it.key) } val unknownKeys = parsedKeys - keyList if (unknownKeys.isNotEmpty()) result += "Unknown keys in $topLevelKey -> $unknownKeys\n" } diff --git a/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt b/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt index 8430c5594b..d6fa914471 100644 --- a/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt @@ -1,5 +1,6 @@ package ftl.args +import com.google.common.truth.Truth.assertThat import ftl.config.Device import ftl.test.util.FlankTestRunner import ftl.test.util.TestHelper.assert @@ -56,7 +57,7 @@ class AndroidArgsTest { expectedException.expect(RuntimeException::class.java) expectedException.expectMessage("Unsupported model id") AndroidArgs.load( - """ + """ gcloud: app: $appApk test: $testApk @@ -72,7 +73,7 @@ class AndroidArgsTest { expectedException.expect(RuntimeException::class.java) expectedException.expectMessage("Unsupported version id") AndroidArgs.load( - """ + """ gcloud: app: $appApk test: $testApk @@ -88,7 +89,7 @@ class AndroidArgsTest { expectedException.expect(RuntimeException::class.java) expectedException.expectMessage("Incompatible model") AndroidArgs.load( - """ + """ gcloud: app: $appApk test: $testApk @@ -133,7 +134,7 @@ class AndroidArgsTest { fun androidArgsToString() { val androidArgs = AndroidArgs.load(androidNonDefault) assert( - androidArgs.toString(), """ + androidArgs.toString(), """ AndroidArgs gcloud: resultsBucket: mockBucket @@ -163,7 +164,7 @@ AndroidArgs @Test fun androidArgsDefault() { val androidArgs = AndroidArgs.load( - """ + """ gcloud: app: $appApk test: $testApk @@ -199,7 +200,7 @@ AndroidArgs @Test fun negativeOneTestShards() { val androidArgs = AndroidArgs.load( - """ + """ gcloud: app: $appApk test: $testErrorApk @@ -215,4 +216,20 @@ AndroidArgs testShardChunks.forEach { chunk -> assert(chunk.size, 1) } } } + + @Test + fun androidArgs_emptyFlank() { + val androidArgs = AndroidArgs.load( + """ + gcloud: + app: $appApk + test: $testApk + + flank: + """ + ) + + assertThat(androidArgs.appApk).isEqualTo(appApk) + assertThat(androidArgs.testApk).isEqualTo(testApk) + } } diff --git a/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt b/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt index 21c640ebe2..043c833302 100644 --- a/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt @@ -1,5 +1,6 @@ package ftl.args +import com.google.common.truth.Truth.assertThat import ftl.args.yml.FlankYml import ftl.args.yml.GcloudYml import ftl.args.yml.IosFlankYml @@ -171,4 +172,22 @@ IosArgs testShardChunks.forEach { chunk -> assert(chunk.size, 1) } } } + + @Test + fun iosArgs_emptyFlank() { + val iosArgs = IosArgs.load( + """ + gcloud: + test: $testPath + xctestrun-file: $xctestrunFile + + flank: +""" + ) + + with(iosArgs) { + assertThat(xctestrunZip).isEqualTo(testPath) + assertThat(xctestrunFile).isEqualTo(xctestrunFile) + } + } } diff --git a/test_runner/src/test/kotlin/ftl/doctor/DoctorTest.kt b/test_runner/src/test/kotlin/ftl/doctor/DoctorTest.kt index 4612c90112..241b76302b 100644 --- a/test_runner/src/test/kotlin/ftl/doctor/DoctorTest.kt +++ b/test_runner/src/test/kotlin/ftl/doctor/DoctorTest.kt @@ -66,6 +66,19 @@ Unknown keys in flank -> [three] ) } + @Test + fun androidDoctorTest3() { + val lint = Doctor.validateYaml( + AndroidArgs, """ +gcloud: + app: . + test: . + project: . + """.trimIndent() + ) + assertThat(lint).isEqualTo("") + } + @Test fun iosDoctorTest() { Doctor.checkIosCatalog() @@ -115,4 +128,17 @@ Unknown keys in flank -> [three] """.trimIndent() ) } + + @Test + fun iosDoctorTest3() { + val lint = Doctor.validateYaml( + IosArgs, """ +gcloud: + project: . + test: . + xctestrun-file: . +""".trimIndent() + ) + assertThat(lint).isEqualTo("") + } }