Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

Commit

Permalink
Verify DSL compatibility with groovy (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
CristianGM authored May 16, 2022
1 parent 64e2f63 commit 4e6ff78
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 3 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

group = "io.github.flank.gradle"
version = "0.2.0"
version = "0.2.1"

repositories {
google()
Expand Down
8 changes: 6 additions & 2 deletions src/main/kotlin/io/github/flank/gradle/Device.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional

open class Device(
open class Device
@JvmOverloads
constructor(
@Input val id: String,
@Input val osVersion: Int,
@Internal val make: String? = null,
Expand Down Expand Up @@ -41,7 +43,9 @@ open class Device(
override fun compareTo(other: Device): Int = comparator.compare(this, other)
}

class NexusLowRes(osVersion: Int, locale: String? = null, orientation: Orientation? = null) :
class NexusLowRes
@JvmOverloads
constructor(osVersion: Int, locale: String? = null, orientation: Orientation? = null) :
Device(id, osVersion, make, model, locale, orientation) {
companion object : MinSdk {
override val id = "NexusLowRes"
Expand Down
155 changes: 155 additions & 0 deletions src/test/kotlin/DslCompatibility.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import java.io.File
import org.junit.Test
import strikt.api.expectThat
import strikt.assertions.isNotNull
import strikt.gradle.testkit.isSuccess
import strikt.gradle.testkit.task

class DslCompatibility : GradleTest() {
@Test
fun kotlinCompatibility() {
projectFromResources("app")
File(testProjectDir.root, "build.gradle.kts")
.appendText(
"""
simpleFlank {
// Changing the credentials file, default: rootProject.file("ftl-credentials.json")
credentialsFile.set(file("some-credentials.json"))
// Making the tests cacheable
hermeticTests.set(true)
// if all modules have hermetic tests, add `simple-flank.hermeticTests=true` to your `gradle.properties`
// Choosing the devices manually
// default is NexusLowRes, and the minSdk from the project
devices.set(listOf(
io.github.flank.gradle.NexusLowRes(23),
io.github.flank.gradle.NexusLowRes(30, "es_ES", io.github.flank.gradle.Device.Orientation.landscape),
io.github.flank.gradle.Device("oriole", 31, "Google", "Pixel 6")
))
// Filtering tests
testTargets {
inClass("io.flank.sample.TestClass")
notInClass("io.flank.sample.NotATestClass", "io.flank.sample.NotATestClassEither")
small() // or medium() or large()
annotation("io.flank.test.InstrumentationTest")
notAnnotation("io.flank.test.Flaky")
inPackage("io.flank.sample")
notInPackage("io.flank.external")
testFile("/sdcard/tmp/testFile.txt")
notTestFile("/sdcard/tmp/notTestFile.txt")
regex("BarTest.*")
filter("com.android.foo.MyCustomFilter", "com.android.foo.AnotherCustomFilter")
runnerBuilder("com.android.foo.MyCustomBuilder", "com.android.foo.AnotherCustomBuilder")
}
// EnvironmentVariables
// default
environmentVariables.set(mapOf("clearPackageData" to "true", "something" to "1", "whatever" to "I don't know"))
// default extracted from credentials
projectId.set("my-GCP-project")
// Downloading files
directoriesToPull.set(listOf("/sdcard/"))
filesToDownload.set(listOf("a.txt","b.txt"))
keepFilePath.set(true)
// other options
testTimeout.set("15m")
recordVideo.set(true)
numFlakyTestAttempts.set(3)
failFast.set(true)
performanceMetrics.set(true)
}
""".trimIndent())

val build = gradleRunner("flankDoctorDebug", "--stacktrace").forwardOutput().build()

expectThat(build) { task(":flankDoctorDebug").isNotNull().isSuccess() }
}

@Test
fun groovyCompatibility() {
projectFromResources("library")
File(testProjectDir.root, "build.gradle")
.appendText(
"""
simpleFlank {
// Changing the credentials file, default: rootProject.file("ftl-credentials.json")
credentialsFile = file("some-credentials.json")
// Making the tests cacheable
hermeticTests = true
// if all modules have hermetic tests, add `simple-flank.hermeticTests=true` to your `gradle.properties`
// Choosing the devices manually
// default is NexusLowRes, and the minSdk from the project
devices = [
new io.github.flank.gradle.NexusLowRes(23),
new io.github.flank.gradle.NexusLowRes(30, "es_ES", io.github.flank.gradle.Device.Orientation.landscape),
new io.github.flank.gradle.Device("oriole", 31, "Google", "Pixel 6")
]
// Filtering tests
testTargets {
inClass("io.flank.sample.TestClass")
notInClass("io.flank.sample.NotATestClass", "io.flank.sample.NotATestClassEither")
small() // or medium() or large()
annotation("io.flank.test.InstrumentationTest")
notAnnotation("io.flank.test.Flaky")
inPackage("io.flank.sample")
notInPackage("io.flank.external")
testFile("/sdcard/tmp/testFile.txt")
notTestFile("/sdcard/tmp/notTestFile.txt")
regex("BarTest.*")
filter("com.android.foo.MyCustomFilter", "com.android.foo.AnotherCustomFilter")
runnerBuilder("com.android.foo.MyCustomBuilder", "com.android.foo.AnotherCustomBuilder")
}
// EnvironmentVariables
// default
environmentVariables = [
clearPackageData: "true",
something: "1",
whatever: "I don't know"
]
// default extracted from credentials
projectId = "my-GCP-project"
// Downloading files
directoriesToPull = ["/sdcard/"]
filesToDownload = ["a.txt","b.txt"]
keepFilePath = true
// other options
testTimeout = "15m"
recordVideo = true
numFlakyTestAttempts = 3
failFast = true
performanceMetrics = true
}
""".trimIndent())

val build = gradleRunner("flankDoctorDebug", "--stacktrace").forwardOutput().build()

expectThat(build) { task(":flankDoctorDebug").isNotNull().isSuccess() }
}
}

0 comments on commit 4e6ff78

Please sign in to comment.