From a46871f892d76fce6cfdea907a72c8339a85d148 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Thu, 6 Feb 2020 16:25:42 -0500 Subject: [PATCH 01/14] Begin working on basic robo support. --- app/build.gradle | 1 + .../com/google/samples/apps/sunflower/Robo.kt | 104 ++++++++++++++++++ .../apps/sunflower/model/GardenList.kt | 69 ++++++++++++ .../samples/apps/sunflower/GardenFragment.kt | 2 +- .../main/res/layout/fragment_plant_list.xml | 2 +- build.gradle | 10 +- settings.gradle | 3 +- 7 files changed, 183 insertions(+), 8 deletions(-) create mode 100644 app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt create mode 100644 app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt diff --git a/app/build.gradle b/app/build.gradle index 66742fdc0..240394493 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,4 +84,5 @@ dependencies { androidTestImplementation "androidx.work:work-testing:$rootProject.workVersion" androidTestImplementation "com.google.truth:truth:$rootProject.truthVersion" testImplementation "junit:junit:$rootProject.junitVersion" + androidTestImplementation project(path: ':androidtest-library') } diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt new file mode 100644 index 000000000..9c4b7907f --- /dev/null +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2020 Google LLC + * + * 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 + * + * https://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.google.samples.apps.sunflower + +import androidx.test.rule.ActivityTestRule +import com.google.gson.GsonBuilder +import com.google.samples.apps.sunflower.model.GardenList +import com.moquality.android.RoboConfig +import com.moquality.android.RoboTest +import com.moquality.android.genModels +import org.junit.Rule +import org.junit.Test + +class Robo { + @get:Rule + val activityRule = ActivityTestRule(GardenActivity::class.java) + + @Test + fun model() { + GardenList + .openPlantList(false) + .openDescription("Avocado") + .add() + .backToList() + .openGardenList() + } + + @Test + fun generate() { + val model = genModels(GardenList::class.java) + val gson = GsonBuilder().run { + setPrettyPrinting() + }.create() + gson.toJson(model) + } + + @Test + fun robo() { + val config = RoboConfig("""{ + "com.google.samples.apps.sunflower.model.PlantDescription": { + "methods": { + "add": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "backToList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1 + } + } + }, + "com.google.samples.apps.sunflower.model.PlantList": { + "methods": { + "openDescription": { + "params": [ + { + "type": "java.lang.String", + "valid": ["Avocado", "Eggplant", "Apple", "Grape", "Hibiscus", "Beet", "Tomato", "Sunflower", "Watermelon"] + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "openGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 1 + } + } + }, + "com.google.samples.apps.sunflower.model.GardenList": { + "methods": { + "openPlantList": { + "params": [ + { + "type": "boolean" + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1 + } + } + } + }""") + + RoboTest(config).run(GardenList) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt new file mode 100644 index 000000000..0cd862456 --- /dev/null +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Google LLC + * + * 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 + * + * https://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.google.samples.apps.sunflower.model + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.PerformException +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.matcher.ViewMatchers.* +import com.google.samples.apps.sunflower.R +import org.hamcrest.Matchers.allOf + +object GardenList { + fun openPlantList(useAddButton: Boolean): PlantList { + val matcher = if (useAddButton) { + withId(R.id.add_plant) + } else { + withContentDescription("Plant list") + } + + onView(matcher).perform(click()) + return PlantList + } +} + +object PlantList { + fun openDescription(name: String): PlantDescription { + onView(withText(name)).perform(click()) + return PlantDescription + } + + fun openGardenList(): GardenList { + onView(withContentDescription("My garden")).perform(click()) + return GardenList + } +} + +object PlantDescription { + fun add(): PlantDescription { + onView(withId(R.id.fab)) + .withFailureHandler { error, viewMatcher -> + if (error !is PerformException) { + throw error + } + + error.printStackTrace() + } + .perform(click()) + return this + } + + fun backToList(): PlantList { + onView(allOf(withParent(withId(R.id.toolbar)), withParentIndex(0))).perform(click()) + return PlantList + } +} \ No newline at end of file diff --git a/app/src/main/java/com/google/samples/apps/sunflower/GardenFragment.kt b/app/src/main/java/com/google/samples/apps/sunflower/GardenFragment.kt index 0aa9fc286..789120e8a 100644 --- a/app/src/main/java/com/google/samples/apps/sunflower/GardenFragment.kt +++ b/app/src/main/java/com/google/samples/apps/sunflower/GardenFragment.kt @@ -67,4 +67,4 @@ class GardenFragment : Fragment() { requireActivity().findViewById(R.id.view_pager).currentItem = PLANT_LIST_PAGE_INDEX } -} +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_plant_list.xml b/app/src/main/res/layout/fragment_plant_list.xml index 1f75cd6d8..a59d615c7 100644 --- a/app/src/main/res/layout/fragment_plant_list.xml +++ b/app/src/main/res/layout/fragment_plant_list.xml @@ -37,4 +37,4 @@ tools:listitem="@layout/list_item_plant"/> - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index a72943af6..2001b3172 100644 --- a/build.gradle +++ b/build.gradle @@ -30,12 +30,12 @@ buildscript { espressoVersion = '3.1.1' fragmentVersion = '1.1.0-alpha09' glideVersion = '4.10.0' - gradleVersion = '3.5.1' - gsonVersion = '2.8.2' + gradleVersion = '3.5.3' + gsonVersion = '2.8.6' junitVersion = '4.12' - kotlinVersion = '1.3.41' + kotlinVersion = '1.3.61' ktlintVersion = '0.33.0' - ktxVersion = '1.0.2' + ktxVersion = '1.1.0' lifecycleVersion = '2.2.0-alpha01' materialVersion = '1.1.0-alpha09' navigationVersion = '2.0.0' @@ -55,7 +55,7 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:$gradleVersion" + classpath "com.android.tools.build:gradle:${gradleVersion}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion" } diff --git a/settings.gradle b/settings.gradle index 1ebe8029a..d5d261f14 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,5 @@ * limitations under the License. */ -include ':app' +include ':app', ':androidtest-library' +project(':androidtest-library').projectDir = new File('../android-library/androidtest-library') \ No newline at end of file From 452b80aae93f7a1997d485f9f740db7ad1120bac Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 7 Feb 2020 14:04:17 -0500 Subject: [PATCH 02/14] Add generic stuff to the model. --- .../com/google/samples/apps/sunflower/Robo.kt | 18 ++++++-- .../apps/sunflower/model/GardenList.kt | 41 ++++++++++++++----- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 9c4b7907f..2e684c40e 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -31,7 +31,7 @@ class Robo { @Test fun model() { - GardenList + GardenList.get() .openPlantList(false) .openDescription("Avocado") .add() @@ -60,7 +60,7 @@ class Robo { }, "backToList": { "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", + "returns": "generic", "weight": 1 } } @@ -71,7 +71,7 @@ class Robo { "params": [ { "type": "java.lang.String", - "valid": ["Avocado", "Eggplant", "Apple", "Grape", "Hibiscus", "Beet", "Tomato", "Sunflower", "Watermelon"] + "valid": ["Apple", "Avocado", "Eggplant"] } ], "returns": "com.google.samples.apps.sunflower.model.PlantDescription", @@ -86,6 +86,16 @@ class Robo { }, "com.google.samples.apps.sunflower.model.GardenList": { "methods": { + "openDescription": { + "params": [ + { + "type": "java.lang.String", + "valid": ["Apple", "Avocado", "Eggplant"] + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, "openPlantList": { "params": [ { @@ -99,6 +109,6 @@ class Robo { } }""") - RoboTest(config).run(GardenList) + RoboTest(config).run(GardenList.get()) } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt index 0cd862456..0e89d8502 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt @@ -23,7 +23,17 @@ import androidx.test.espresso.matcher.ViewMatchers.* import com.google.samples.apps.sunflower.R import org.hamcrest.Matchers.allOf -object GardenList { +class GardenList { + companion object { + private val instance = GardenList() + fun get() = instance + } + + fun openDescription(name: String): PlantDescription { + onView(withText(name)).perform(click()) + return PlantDescription.from(this) + } + fun openPlantList(useAddButton: Boolean): PlantList { val matcher = if (useAddButton) { withId(R.id.add_plant) @@ -32,26 +42,35 @@ object GardenList { } onView(matcher).perform(click()) - return PlantList + return PlantList.get() } } -object PlantList { - fun openDescription(name: String): PlantDescription { +class PlantList { + companion object { + private val instance = PlantList() + fun get() = instance + } + + fun openDescription(name: String): PlantDescription { onView(withText(name)).perform(click()) - return PlantDescription + return PlantDescription.from(this) } fun openGardenList(): GardenList { onView(withContentDescription("My garden")).perform(click()) - return GardenList + return GardenList.get() } } -object PlantDescription { - fun add(): PlantDescription { +class PlantDescription(private val parent: T) { + companion object { + fun from(parent: T) = PlantDescription(parent) + } + + fun add(): PlantDescription { onView(withId(R.id.fab)) - .withFailureHandler { error, viewMatcher -> + .withFailureHandler { error, _ -> if (error !is PerformException) { throw error } @@ -62,8 +81,8 @@ object PlantDescription { return this } - fun backToList(): PlantList { + fun backToList(): T { onView(allOf(withParent(withId(R.id.toolbar)), withParentIndex(0))).perform(click()) - return PlantList + return parent } } \ No newline at end of file From c79b710409e20041ce0c5bd8e546feb4244aa465 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 7 Feb 2020 14:46:43 -0500 Subject: [PATCH 03/14] Use click-and-then-expect model. --- .../com/google/samples/apps/sunflower/Robo.kt | 18 ++++++++++++++++-- .../samples/apps/sunflower/model/GardenList.kt | 12 ++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 2e684c40e..6e5a525cf 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -33,10 +33,12 @@ class Robo { fun model() { GardenList.get() .openPlantList(false) + .expectPlantList() .openDescription("Avocado") .add() .backToList() .openGardenList() + .expectGardenList() } @Test @@ -78,9 +80,15 @@ class Robo { "weight": 1 }, "openGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1, + "after": "expectGardenList" + }, + "expectGardenList": { "params": [], "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 1 + "weight": 0 } } }, @@ -102,8 +110,14 @@ class Robo { "type": "boolean" } ], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 1, + "after": "expectPlantList" + }, + "expectPlantList": { + "params": [], "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 1 + "weight": 0 } } } diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt index 0e89d8502..10f24ac84 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt @@ -34,7 +34,7 @@ class GardenList { return PlantDescription.from(this) } - fun openPlantList(useAddButton: Boolean): PlantList { + fun openPlantList(useAddButton: Boolean): GardenList { val matcher = if (useAddButton) { withId(R.id.add_plant) } else { @@ -42,6 +42,10 @@ class GardenList { } onView(matcher).perform(click()) + return this + } + + fun expectPlantList(): PlantList { return PlantList.get() } } @@ -57,8 +61,12 @@ class PlantList { return PlantDescription.from(this) } - fun openGardenList(): GardenList { + fun openGardenList(): PlantList { onView(withContentDescription("My garden")).perform(click()) + return this + } + + fun expectGardenList(): GardenList { return GardenList.get() } } From 4c91dc53853d950fafce615c2371b2686a719761 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 14 Feb 2020 13:06:55 -0500 Subject: [PATCH 04/14] Move robo config into its own file. --- app/build.gradle | 2 +- .../com/google/samples/apps/sunflower/Robo.kt | 75 ++----------------- app/src/main/assets/roboconfig.json | 70 +++++++++++++++++ app/src/main/res/robo/config.json | 66 ++++++++++++++++ build.gradle | 2 +- gradle.properties | 2 +- 6 files changed, 144 insertions(+), 73 deletions(-) create mode 100644 app/src/main/assets/roboconfig.json create mode 100644 app/src/main/res/robo/config.json diff --git a/app/build.gradle b/app/build.gradle index 240394493..dba6589f9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,4 +85,4 @@ dependencies { androidTestImplementation "com.google.truth:truth:$rootProject.truthVersion" testImplementation "junit:junit:$rootProject.junitVersion" androidTestImplementation project(path: ':androidtest-library') -} +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 6e5a525cf..9526b9412 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -19,6 +19,7 @@ package com.google.samples.apps.sunflower import androidx.test.rule.ActivityTestRule import com.google.gson.GsonBuilder import com.google.samples.apps.sunflower.model.GardenList +import com.google.samples.apps.sunflower.model.PlantList import com.moquality.android.RoboConfig import com.moquality.android.RoboTest import com.moquality.android.genModels @@ -50,78 +51,12 @@ class Robo { gson.toJson(model) } + @ExperimentalStdlibApi @Test fun robo() { - val config = RoboConfig("""{ - "com.google.samples.apps.sunflower.model.PlantDescription": { - "methods": { - "add": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "backToList": { - "params": [], - "returns": "generic", - "weight": 1 - } - } - }, - "com.google.samples.apps.sunflower.model.PlantList": { - "methods": { - "openDescription": { - "params": [ - { - "type": "java.lang.String", - "valid": ["Apple", "Avocado", "Eggplant"] - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 1, - "after": "expectGardenList" - }, - "expectGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 0 - } - } - }, - "com.google.samples.apps.sunflower.model.GardenList": { - "methods": { - "openDescription": { - "params": [ - { - "type": "java.lang.String", - "valid": ["Apple", "Avocado", "Eggplant"] - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openPlantList": { - "params": [ - { - "type": "boolean" - } - ], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 1, - "after": "expectPlantList" - }, - "expectPlantList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 0 - } - } - } - }""") + val file = javaClass.classLoader?.getResourceAsStream("assets/roboconfig.json") + ?: error("Unable to find robo config file") + val config = RoboConfig(file.readBytes().decodeToString()) RoboTest(config).run(GardenList.get()) } diff --git a/app/src/main/assets/roboconfig.json b/app/src/main/assets/roboconfig.json new file mode 100644 index 000000000..256931fda --- /dev/null +++ b/app/src/main/assets/roboconfig.json @@ -0,0 +1,70 @@ +{ + "com.google.samples.apps.sunflower.model.PlantDescription": { + "methods": { + "add": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "backToList": { + "params": [], + "returns": "generic", + "weight": 1 + } + } + }, + "com.google.samples.apps.sunflower.model.PlantList": { + "methods": { + "openDescription": { + "params": [ + { + "type": "java.lang.String", + "valid": ["Apple", "Avocado", "Eggplant"] + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "openGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1, + "after": "expectGardenList" + }, + "expectGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 0 + } + } + }, + "com.google.samples.apps.sunflower.model.GardenList": { + "methods": { + "openDescription": { + "params": [ + { + "type": "java.lang.String", + "valid": ["Apple", "Avocado", "Eggplant"] + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "openPlantList": { + "params": [ + { + "type": "boolean" + } + ], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 1, + "after": "expectPlantList" + }, + "expectPlantList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 0 + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/robo/config.json b/app/src/main/res/robo/config.json new file mode 100644 index 000000000..c9507f3df --- /dev/null +++ b/app/src/main/res/robo/config.json @@ -0,0 +1,66 @@ +{ + "com.google.samples.apps.sunflower.model.PlantDescription": { + "methods": { + "add": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "backToList": { + "params": [], + "returns": "generic", + "weight": 1 + } + } + }, + "com.google.samples.apps.sunflower.model.PlantList": { + "methods": { + "expectGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 1 + }, + "openDescription": { + "params": [ + { + "type": "java.lang.String" + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "openGardenList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1 + } + } + }, + "com.google.samples.apps.sunflower.model.GardenList": { + "methods": { + "expectPlantList": { + "params": [], + "returns": "com.google.samples.apps.sunflower.model.PlantList", + "weight": 1 + }, + "openDescription": { + "params": [ + { + "type": "java.lang.String" + } + ], + "returns": "com.google.samples.apps.sunflower.model.PlantDescription", + "weight": 1 + }, + "openPlantList": { + "params": [ + { + "type": "boolean" + } + ], + "returns": "com.google.samples.apps.sunflower.model.GardenList", + "weight": 1 + } + } + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 2001b3172..69308f4bc 100644 --- a/build.gradle +++ b/build.gradle @@ -77,4 +77,4 @@ spotless { target "**/*.kt" ktlint(ktlintVersion).userData(['max_line_length' : '100']) } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index c8e98a255..fd80b5f1e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,4 +32,4 @@ org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true +# org.gradle.parallel=true \ No newline at end of file From b35311986977c8ba03d67007fa64568289fb66d1 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Thu, 20 Feb 2020 13:27:31 -0500 Subject: [PATCH 05/14] Switch to interface-based config. --- app/build.gradle | 1 - .../com/google/samples/apps/sunflower/Robo.kt | 26 +++++++------------ 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dba6589f9..8e6ca1238 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -69,7 +69,6 @@ dependencies { implementation "androidx.work:work-runtime-ktx:$rootProject.workVersion" implementation "com.github.bumptech.glide:glide:$rootProject.glideVersion" implementation "com.google.android.material:material:$rootProject.materialVersion" - implementation "com.google.code.gson:gson:$rootProject.gsonVersion" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$rootProject.kotlinVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.coroutinesVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.coroutinesVersion" diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 9526b9412..710a7fdab 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -17,14 +17,13 @@ package com.google.samples.apps.sunflower import androidx.test.rule.ActivityTestRule -import com.google.gson.GsonBuilder import com.google.samples.apps.sunflower.model.GardenList -import com.google.samples.apps.sunflower.model.PlantList import com.moquality.android.RoboConfig +import com.moquality.android.RoboState import com.moquality.android.RoboTest -import com.moquality.android.genModels import org.junit.Rule import org.junit.Test +import java.lang.reflect.Method class Robo { @get:Rule @@ -42,22 +41,15 @@ class Robo { .expectGardenList() } - @Test - fun generate() { - val model = genModels(GardenList::class.java) - val gson = GsonBuilder().run { - setPrettyPrinting() - }.create() - gson.toJson(model) - } - - @ExperimentalStdlibApi @Test fun robo() { - val file = javaClass.classLoader?.getResourceAsStream("assets/roboconfig.json") - ?: error("Unable to find robo config file") - val config = RoboConfig(file.readBytes().decodeToString()) + RoboTest(Config).run(GardenList.get()) + } +} - RoboTest(config).run(GardenList.get()) +object Config : RoboConfig { + override fun generateArguments(state: RoboState, method: Method) = when (method.name) { + "openDescription" -> listOf(arrayOf("Avocado", "Tomato", "Apple").random()) + else -> super.generateArguments(state, method) } } \ No newline at end of file From 706809cb455d5778f2c6f6d2bdb72eca1ea11068 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Thu, 20 Feb 2020 17:54:58 -0500 Subject: [PATCH 06/14] Show errors after the test. --- .../com/google/samples/apps/sunflower/Robo.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 710a7fdab..8caacfacc 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -43,7 +43,23 @@ class Robo { @Test fun robo() { - RoboTest(Config).run(GardenList.get()) + val state = RoboTest(Config).run(GardenList.get(), 3) + + fun RoboState?.forEach(f: (state: RoboState) -> Unit) { + if (this == null) { + return + } + + f(this) + return this.previous.forEach(f) + } + + state.forEach { + val error = it.error + if (error != null) { + System.err.println("${it.previous?.currentPage?.simpleName}.${it.method}(): ${error.message}") + } + } } } From 9c4445bb1e9e3077868743757983b394c8ee23da Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 21 Feb 2020 11:40:20 -0500 Subject: [PATCH 07/14] Better error formatting. --- .../androidTest/java/com/google/samples/apps/sunflower/Robo.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 8caacfacc..4ab475f99 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -57,7 +57,7 @@ class Robo { state.forEach { val error = it.error if (error != null) { - System.err.println("${it.previous?.currentPage?.simpleName}.${it.method}(): ${error.message}") + System.err.println("${it.previous?.currentPage?.simpleName}.${it.method?.name}(${it.args.joinToString(", ")}): ${error.localizedMessage.substringBefore("\n")}") } } } From f6d5ac72018a00ee71092b163cd2a23c00c86727 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Fri, 21 Feb 2020 11:56:38 -0500 Subject: [PATCH 08/14] Move something that should have been in the library into the library. --- .../java/com/google/samples/apps/sunflower/Robo.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 4ab475f99..91b34e158 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -55,9 +55,8 @@ class Robo { } state.forEach { - val error = it.error - if (error != null) { - System.err.println("${it.previous?.currentPage?.simpleName}.${it.method?.name}(${it.args.joinToString(", ")}): ${error.localizedMessage.substringBefore("\n")}") + if (it.error != null) { + System.err.println(it.errorInfo) } } } From da74bc9ecbf89d652b6a852078c3d330cbfda1a5 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 24 Feb 2020 11:46:21 -0500 Subject: [PATCH 09/14] Fix missing dependency. --- app/build.gradle | 1 + .../androidTest/java/com/google/samples/apps/sunflower/Robo.kt | 2 +- .../java/com/google/samples/apps/sunflower/data/AppDatabase.kt | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8e6ca1238..5b28b47fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,4 +84,5 @@ dependencies { androidTestImplementation "com.google.truth:truth:$rootProject.truthVersion" testImplementation "junit:junit:$rootProject.junitVersion" androidTestImplementation project(path: ':androidtest-library') + implementation 'com.google.code.gson:gson:2.8.6' } \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 91b34e158..fdd4a5439 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -43,7 +43,7 @@ class Robo { @Test fun robo() { - val state = RoboTest(Config).run(GardenList.get(), 3) + val state = RoboTest(Config).run(GardenList.get()) fun RoboState?.forEach(f: (state: RoboState) -> Unit) { if (this == null) { diff --git a/app/src/main/java/com/google/samples/apps/sunflower/data/AppDatabase.kt b/app/src/main/java/com/google/samples/apps/sunflower/data/AppDatabase.kt index 04201aaad..43af8aff2 100644 --- a/app/src/main/java/com/google/samples/apps/sunflower/data/AppDatabase.kt +++ b/app/src/main/java/com/google/samples/apps/sunflower/data/AppDatabase.kt @@ -61,4 +61,4 @@ abstract class AppDatabase : RoomDatabase() { .build() } } -} +} \ No newline at end of file From 529cfeb002c44e76d272d727f699995b2dcd7b5a Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 24 Feb 2020 12:03:19 -0500 Subject: [PATCH 10/14] Print stack trace. --- .../com/google/samples/apps/sunflower/Robo.kt | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index fdd4a5439..25c51c88e 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -44,21 +44,7 @@ class Robo { @Test fun robo() { val state = RoboTest(Config).run(GardenList.get()) - - fun RoboState?.forEach(f: (state: RoboState) -> Unit) { - if (this == null) { - return - } - - f(this) - return this.previous.forEach(f) - } - - state.forEach { - if (it.error != null) { - System.err.println(it.errorInfo) - } - } + state.printStackTrace() } } From 89a5e8b0747c139a282ed6882f276715d25e2eb8 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 24 Feb 2020 15:23:17 -0500 Subject: [PATCH 11/14] Add a test for `long`s. --- app/build.gradle | 2 +- .../samples/apps/sunflower/{model/GardenList.kt => Model.kt} | 5 +++-- .../java/com/google/samples/apps/sunflower/Robo.kt | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) rename app/src/androidTest/java/com/google/samples/apps/sunflower/{model/GardenList.kt => Model.kt} (96%) diff --git a/app/build.gradle b/app/build.gradle index 5b28b47fc..c0903e5f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,5 +84,5 @@ dependencies { androidTestImplementation "com.google.truth:truth:$rootProject.truthVersion" testImplementation "junit:junit:$rootProject.junitVersion" androidTestImplementation project(path: ':androidtest-library') - implementation 'com.google.code.gson:gson:2.8.6' + implementation "com.google.code.gson:gson:${gsonVersion}" } \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Model.kt similarity index 96% rename from app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt rename to app/src/androidTest/java/com/google/samples/apps/sunflower/Model.kt index 10f24ac84..36012e3cc 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/model/GardenList.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Model.kt @@ -14,13 +14,12 @@ * limitations under the License. */ -package com.google.samples.apps.sunflower.model +package com.google.samples.apps.sunflower import androidx.test.espresso.Espresso.onView import androidx.test.espresso.PerformException import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.matcher.ViewMatchers.* -import com.google.samples.apps.sunflower.R import org.hamcrest.Matchers.allOf class GardenList { @@ -34,6 +33,8 @@ class GardenList { return PlantDescription.from(this) } + fun longTest(v: Long): GardenList = this + fun openPlantList(useAddButton: Boolean): GardenList { val matcher = if (useAddButton) { withId(R.id.add_plant) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 25c51c88e..33c5d2e90 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -17,7 +17,6 @@ package com.google.samples.apps.sunflower import androidx.test.rule.ActivityTestRule -import com.google.samples.apps.sunflower.model.GardenList import com.moquality.android.RoboConfig import com.moquality.android.RoboState import com.moquality.android.RoboTest From 6fe52ead75a041dd87d469baa47aa4dedc7b3077 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 24 Feb 2020 17:28:55 -0500 Subject: [PATCH 12/14] Fix whatever the heck that was. --- app/build.gradle | 2 +- app/src/main/assets/roboconfig.json | 70 ------------------- .../apps/sunflower/PlantDetailFragment.kt | 12 ++-- .../apps/sunflower/views/MaskedCardView.kt | 12 ++-- app/src/main/res/robo/config.json | 66 ----------------- build.gradle | 34 ++++----- gradle/wrapper/gradle-wrapper.properties | 19 +---- 7 files changed, 33 insertions(+), 182 deletions(-) delete mode 100644 app/src/main/assets/roboconfig.json delete mode 100644 app/src/main/res/robo/config.json diff --git a/app/build.gradle b/app/build.gradle index c0903e5f1..08281e1c1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,7 +55,7 @@ dependencies { kapt "com.github.bumptech.glide:compiler:$rootProject.glideVersion" implementation "androidx.appcompat:appcompat:$rootProject.appCompatVersion" implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion" - implementation "androidx.core:core-ktx:$rootProject.ktxVersion" + implementation "androidx.core:core-ktx:${rootProject.ktxVersion}" implementation "androidx.fragment:fragment-ktx:$rootProject.fragmentVersion" implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.lifecycleVersion" diff --git a/app/src/main/assets/roboconfig.json b/app/src/main/assets/roboconfig.json deleted file mode 100644 index 256931fda..000000000 --- a/app/src/main/assets/roboconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "com.google.samples.apps.sunflower.model.PlantDescription": { - "methods": { - "add": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "backToList": { - "params": [], - "returns": "generic", - "weight": 1 - } - } - }, - "com.google.samples.apps.sunflower.model.PlantList": { - "methods": { - "openDescription": { - "params": [ - { - "type": "java.lang.String", - "valid": ["Apple", "Avocado", "Eggplant"] - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 1, - "after": "expectGardenList" - }, - "expectGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 0 - } - } - }, - "com.google.samples.apps.sunflower.model.GardenList": { - "methods": { - "openDescription": { - "params": [ - { - "type": "java.lang.String", - "valid": ["Apple", "Avocado", "Eggplant"] - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openPlantList": { - "params": [ - { - "type": "boolean" - } - ], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 1, - "after": "expectPlantList" - }, - "expectPlantList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 0 - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/google/samples/apps/sunflower/PlantDetailFragment.kt b/app/src/main/java/com/google/samples/apps/sunflower/PlantDetailFragment.kt index 59479a32e..b30d124d0 100644 --- a/app/src/main/java/com/google/samples/apps/sunflower/PlantDetailFragment.kt +++ b/app/src/main/java/com/google/samples/apps/sunflower/PlantDetailFragment.kt @@ -122,11 +122,13 @@ class PlantDetailFragment : Fragment() { getString(R.string.share_text_plant, plant.name) } } - val shareIntent = ShareCompat.IntentBuilder.from(activity) - .setText(shareText) - .setType("text/plain") - .createChooserIntent() - .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or Intent.FLAG_ACTIVITY_MULTIPLE_TASK) + val shareIntent = activity?.let { + ShareCompat.IntentBuilder.from(it) + .setText(shareText) + .setType("text/plain") + .createChooserIntent() + .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or Intent.FLAG_ACTIVITY_MULTIPLE_TASK) + } startActivity(shareIntent) } diff --git a/app/src/main/java/com/google/samples/apps/sunflower/views/MaskedCardView.kt b/app/src/main/java/com/google/samples/apps/sunflower/views/MaskedCardView.kt index 7e4c0a392..1d0849801 100644 --- a/app/src/main/java/com/google/samples/apps/sunflower/views/MaskedCardView.kt +++ b/app/src/main/java/com/google/samples/apps/sunflower/views/MaskedCardView.kt @@ -39,12 +39,12 @@ class MaskedCardView @JvmOverloads constructor( @SuppressLint("RestrictedApi") private val pathProvider = ShapeAppearancePathProvider() private val path: Path = Path() - private val shapeAppearance: ShapeAppearanceModel = ShapeAppearanceModel( - context, - attrs, - defStyle, - R.style.Widget_MaterialComponents_CardView - ) + private val shapeAppearance: ShapeAppearanceModel = ShapeAppearanceModel() + //context, + //attrs, + //defStyle, + //R.style.Widget_MaterialComponents_CardView + private val rectF = RectF(0f, 0f, 0f, 0f) override fun onDraw(canvas: Canvas) { diff --git a/app/src/main/res/robo/config.json b/app/src/main/res/robo/config.json deleted file mode 100644 index c9507f3df..000000000 --- a/app/src/main/res/robo/config.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "com.google.samples.apps.sunflower.model.PlantDescription": { - "methods": { - "add": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "backToList": { - "params": [], - "returns": "generic", - "weight": 1 - } - } - }, - "com.google.samples.apps.sunflower.model.PlantList": { - "methods": { - "expectGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 1 - }, - "openDescription": { - "params": [ - { - "type": "java.lang.String" - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openGardenList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 1 - } - } - }, - "com.google.samples.apps.sunflower.model.GardenList": { - "methods": { - "expectPlantList": { - "params": [], - "returns": "com.google.samples.apps.sunflower.model.PlantList", - "weight": 1 - }, - "openDescription": { - "params": [ - { - "type": "java.lang.String" - } - ], - "returns": "com.google.samples.apps.sunflower.model.PlantDescription", - "weight": 1 - }, - "openPlantList": { - "params": [ - { - "type": "boolean" - } - ], - "returns": "com.google.samples.apps.sunflower.model.GardenList", - "weight": 1 - } - } - } -} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 69308f4bc..6459664ba 100644 --- a/build.gradle +++ b/build.gradle @@ -24,29 +24,29 @@ buildscript { // App dependencies appCompatVersion = '1.1.0' - constraintLayoutVersion = '2.0.0-beta3' - coreTestingVersion = '2.0.0' - coroutinesVersion = "1.3.0-M2" - espressoVersion = '3.1.1' - fragmentVersion = '1.1.0-alpha09' - glideVersion = '4.10.0' - gradleVersion = '3.5.3' + constraintLayoutVersion = '2.0.0-beta4' + coreTestingVersion = '2.1.0' + coroutinesVersion = '1.3.3' + espressoVersion = '3.2.0' + fragmentVersion = '1.2.2' + glideVersion = '4.11.0' + gradleVersion = '3.6.0' gsonVersion = '2.8.6' - junitVersion = '4.12' + junitVersion = '4.13' kotlinVersion = '1.3.61' ktlintVersion = '0.33.0' - ktxVersion = '1.1.0' - lifecycleVersion = '2.2.0-alpha01' - materialVersion = '1.1.0-alpha09' - navigationVersion = '2.0.0' - recyclerViewVersion = '1.1.0-alpha05' - roomVersion = '2.1.0' + lifecycleVersion = '2.2.0' + materialVersion = '1.2.0-alpha05' + navigationVersion = '2.2.1' + recyclerViewVersion = '1.2.0-alpha01' + roomVersion = '2.2.4' runnerVersion = '1.0.1' - truthVersion = '0.42' - testExtJunit = '1.1.0' + truthVersion = '1.0.1' + testExtJunit = '1.1.1' uiAutomatorVersion = '2.2.0' viewPagerVersion = '1.0.0' - workVersion = '2.1.0' + workVersion = '2.3.2' + ktxVersion = '1.2.0' } repositories { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 234a2fd29..4a21261c1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,21 +1,6 @@ -# -# Copyright 2018 Google LLC -# -# 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 -# -# https://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. -# -#Thu Aug 22 10:20:57 PDT 2019 +#Mon Feb 24 17:14:55 EST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip From 529ffa2505c84f1462e184a9763ec9c0dc88e80f Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 24 Feb 2020 17:48:27 -0500 Subject: [PATCH 13/14] Don't specify the scope of the `ktxVersion` variable. --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 08281e1c1..93dcc5d0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -55,7 +55,7 @@ dependencies { kapt "com.github.bumptech.glide:compiler:$rootProject.glideVersion" implementation "androidx.appcompat:appcompat:$rootProject.appCompatVersion" implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion" - implementation "androidx.core:core-ktx:${rootProject.ktxVersion}" + implementation "androidx.core:core-ktx:${ktxVersion}" implementation "androidx.fragment:fragment-ktx:$rootProject.fragmentVersion" implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.lifecycleVersion" From a01319a4f1084e7f819af2b964ccb9920b3dd14b Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Wed, 4 Mar 2020 16:35:47 -0500 Subject: [PATCH 14/14] Use new state API. --- .../androidTest/java/com/google/samples/apps/sunflower/Robo.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt index 33c5d2e90..d745ad879 100644 --- a/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt +++ b/app/src/androidTest/java/com/google/samples/apps/sunflower/Robo.kt @@ -20,6 +20,7 @@ import androidx.test.rule.ActivityTestRule import com.moquality.android.RoboConfig import com.moquality.android.RoboState import com.moquality.android.RoboTest +import com.moquality.android.printStackTrace import org.junit.Rule import org.junit.Test import java.lang.reflect.Method @@ -48,7 +49,7 @@ class Robo { } object Config : RoboConfig { - override fun generateArguments(state: RoboState, method: Method) = when (method.name) { + override fun generateArguments(state: List, method: Method) = when (method.name) { "openDescription" -> listOf(arrayOf("Avocado", "Tomato", "Apple").random()) else -> super.generateArguments(state, method) }