From 94025c5262d9e6fbe911a20643c5a2b32bb847ba Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 22:03:54 -0400 Subject: [PATCH] Add test for BundleSavedState --- build.sh | 9 ++- uhabits-android/build.gradle | 5 +- .../isoron/uhabits/BaseUIAutomatorTest.java | 58 +++++++++++++++++++ .../uhabits/integration/SavedStateTest.java | 45 ++++++++++++++ 4 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java diff --git a/build.sh b/build.sh index 1059e375a..12df11b39 100755 --- a/build.sh +++ b/build.sh @@ -120,6 +120,12 @@ uninstall_apk() { $ADB uninstall ${PACKAGE_NAME} } +install_test_butler() { + log_info "Installing Test Butler" + $ADB install tools/test-butler-app-1.3.1.apk + $ADB uninstall com.linkedin.android.testbutler +} + install_apk() { if [ ! -z $UNINSTALL_FIRST ]; then uninstall_apk @@ -141,7 +147,7 @@ install_test_apk() { run_instrumented_tests() { log_info "Running instrumented tests" $ADB shell am instrument \ - -r -e coverage true -e size medium \ + -r -e coverage true \ -w ${PACKAGE_NAME}.test/android.support.test.runner.AndroidJUnitRunner \ > ${OUTPUTS_DIR}/instrument.txt @@ -197,6 +203,7 @@ run_local_tests() { run_adb_as_root build_apk build_instrumentation_apk + install_test_butler install_apk install_test_apk run_instrumented_tests diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 79b59cd81..633568fab 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -92,6 +92,9 @@ dependencies { androidTestCompile 'com.google.dagger:dagger:2.9' androidTestCompile "org.mockito:mockito-android:2.8.9" androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' + androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.linkedin.testbutler:test-butler-library:1.3.1' implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' @@ -134,7 +137,7 @@ task coverageReport(type: JacocoReport) { def androidClasses = "${buildDir}/intermediates/classes/debug" def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec" def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec" - + sourceDirectories = files(androidSrc) classDirectories = files(fileTree(dir: androidClasses, excludes: excludes)) executionData = files(jvmExecData, connectedExecData) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java new file mode 100644 index 000000000..871614092 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits; + +import android.content.*; +import android.support.test.uiautomator.*; + +import com.linkedin.android.testbutler.*; + +import org.junit.*; + +import static android.support.test.InstrumentationRegistry.*; +import static android.support.test.uiautomator.UiDevice.*; + +public class BaseUIAutomatorTest +{ + static final String PKG = "org.isoron.uhabits"; + + protected UiDevice device; + + @Before + public void setUp() + { + TestButler.setup(getTargetContext()); + TestButler.verifyAnimationsDisabled(getTargetContext()); + device = getInstance(getInstrumentation()); + } + + @After + public void tearDown() + { + TestButler.teardown(getTargetContext()); + } + + protected void startActivity(Class cls) + { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(PKG, cls.getCanonicalName())); + getContext().startActivity(intent); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java new file mode 100644 index 000000000..7250c62bd --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.integration; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.about.*; +import org.isoron.uhabits.activities.habits.list.*; +import org.junit.*; + +import static java.lang.Thread.*; + +public class SavedStateTest extends BaseUIAutomatorTest +{ + /** + * Make sure that the main activity can be recreated by using + * BundleSavedState after being destroyed. See bug: + * https://github.com/iSoron/uhabits/issues/287 + */ + @Test + public void testBundleSavedState() throws Exception + { + startActivity(ListHabitsActivity.class); + device.waitForIdle(); + startActivity(AboutActivity.class); + sleep(1000); + device.pressBack(); + } +}