From e201e92acf17e3a71e2bffb73419fdd3726b0569 Mon Sep 17 00:00:00 2001 From: cyberta Date: Mon, 2 Jan 2023 21:08:29 +0100 Subject: simple example setup for fastlane, doing some screenshots in different languages, including screenshots with phone frames for use in an app store --- .gitignore | 3 + app/build.gradle | 19 +++--- .../androidTest/java/base/ProviderSetupTest.java | 68 ++++++++++++++++++++++ app/src/debug/AndroidManifest.xml | 43 ++++++++++++++ fastlane/Fastfile | 6 ++ fastlane/README.md | 8 +++ fastlane/Screengrabfile | 20 +++++++ fastlane/report.xml | 20 ------- 8 files changed, 160 insertions(+), 27 deletions(-) create mode 100644 app/src/androidTest/java/base/ProviderSetupTest.java create mode 100644 app/src/debug/AndroidManifest.xml create mode 100644 fastlane/Screengrabfile delete mode 100644 fastlane/report.xml diff --git a/.gitignore b/.gitignore index fb10e3e2..3997ee6d 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,6 @@ lib-bitmask-core-x86_64/bitmaskcore_x86_64-sources.jar lib-bitmask-core-x86_64/bitmaskcore_x86_64.aar lib-bitmask-core/bitmaskcore-sources.jar lib-bitmask-core/bitmaskcore.aar + + +fastlane/report.xml diff --git a/app/build.gradle b/app/build.gradle index 92120f88..359597a4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -276,12 +276,13 @@ android { applicationIdSuffix ".beta" appSuffix = " Beta" buildConfigField "Boolean", "DEBUG_MODE", "true" + testCoverageEnabled = false // tor-android doesn't know this build-type, fallback to release in that case matchingFallbacks = ['release'] } debug { - testCoverageEnabled = true + testCoverageEnabled = false buildConfigField "Boolean", "DEBUG_MODE", "true" } } @@ -410,13 +411,17 @@ dependencies { testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.9' testImplementation group: 'com.tngtech.java', name: 'junit-dataprovider', version: '1.10.0' - androidTestImplementation 'org.mockito:mockito-core:3.6.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-intents:3.4.0' - //TODO: remove that library - androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3' + androidTestImplementation 'org.mockito:mockito-core:3.9.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.5.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.5.0' + + androidTestImplementation 'tools.fastlane:screengrab:2.1.1' + testImplementation 'tools.fastlane:screengrab:2.1.1' + + testImplementation 'org.json:json:20180813' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' annotationProcessor 'com.squareup.dagger:dagger-compiler:1.2.2' diff --git a/app/src/androidTest/java/base/ProviderSetupTest.java b/app/src/androidTest/java/base/ProviderSetupTest.java new file mode 100644 index 00000000..fd46a093 --- /dev/null +++ b/app/src/androidTest/java/base/ProviderSetupTest.java @@ -0,0 +1,68 @@ +package base; + + +import static android.content.Context.MODE_PRIVATE; +import static androidx.test.core.app.ApplicationProvider.getApplicationContext; +import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static org.hamcrest.Matchers.anything; + +import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES; + +import android.content.SharedPreferences; + +import androidx.test.ext.junit.rules.ActivityScenarioRule; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.filters.LargeTest; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Locale; + +import se.leap.bitmaskclient.R; +import se.leap.bitmaskclient.base.StartActivity; +import se.leap.bitmaskclient.base.utils.PreferenceHelper; +import se.leap.bitmaskclient.providersetup.ProviderListActivity; +import se.leap.bitmaskclient.providersetup.activities.ProviderSetupBaseActivity; +import se.leap.bitmaskclient.testutils.ForceLocaleRule; +import tools.fastlane.screengrab.Screengrab; +import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy; +import tools.fastlane.screengrab.locale.LocaleTestRule; + +@LargeTest +@RunWith(AndroidJUnit4.class) +public class ProviderSetupTest { + + @ClassRule + public static final LocaleTestRule localeTestRule = new LocaleTestRule(); + + @Rule + public ActivityScenarioRule mActivityScenarioRule = + new ActivityScenarioRule<>(ProviderListActivity.class); + + @Before + public void setup() { + Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy()); + SharedPreferences preferences = getApplicationContext().getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE); + preferences.edit().clear().commit(); + } + + @Test + public void testConfigureRiseupVPNScreenshot() { + Screengrab.screenshot("configureRiseupVPN_before_button_click"); + onData(anything()).inAdapterView(withId(R.id.provider_list)).atPosition(2).perform(click()); + Screengrab.screenshot("configureRiseupVPN_after_button_click"); + } + + @Test + public void testaddManuallyNewProviderScreenshot() { + Screengrab.screenshot("addManuallyNewProvider_before_button_click"); + onData(anything()).inAdapterView(withId(R.id.provider_list)).atPosition(3).perform(click()); + Screengrab.screenshot("addManuallyNewProvider_after_button_click"); + } +} diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..51e17015 --- /dev/null +++ b/app/src/debug/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 19c557cc..d985984d 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -21,6 +21,12 @@ platform :android do gradle(task: "test") end + lane :screenshots do + capture_android_screenshots + frameit(white: true) + # deliver + end + desc "Submit a new Beta Build to Crashlytics Beta" lane :beta do gradle(task: "clean assembleRelease") diff --git a/fastlane/README.md b/fastlane/README.md index 7ec1207f..96002ac1 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -23,6 +23,14 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do Runs all the tests +### android screenshots + +```sh +[bundle exec] fastlane android screenshots +``` + + + ### android beta ```sh diff --git a/fastlane/Screengrabfile b/fastlane/Screengrabfile new file mode 100644 index 00000000..4c46de1a --- /dev/null +++ b/fastlane/Screengrabfile @@ -0,0 +1,20 @@ +# remove the leading '#' to uncomment lines + +# app_package_name('your.app.package') +# use_tests_in_packages(['your.screenshot.tests.package']) + +app_apk_path('app/build/outputs/apk/normalProductionFat/debug/Bitmask_debug.apk') +# tests_apk_path('app/build/intermediates/apk/androidTest/normalProductionFat/debug/app-normal-production-fat-debug-androidTest.apk') + +# all locales +# locales(['ar', 'az', 'bg', 'bn', 'br', 'ca', 'cs', 'de', 'el', 'es', 'es-AR', 'et', 'eu', 'fa-IR', 'fi', 'fr', 'gl', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'my', 'nl', 'no', 'pl', 'pt-BR', 'pt-PT', 'ro', 'ru', 'tr', 'ug', 'uk', 'vi', 'zh-CN', 'zh-TW']) +# prioritized locales +# locales(['ar', 'bn', 'de', 'es', 'fa-IR', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'my', 'nl', 'pt-BR', 'pt-PT', 'ru', 'tr', 'ug', 'uk', 'zh-CN', 'zh-TW']) +# development locales +locales(['ar', 'de', 'ru']) + +# clear all previously generated screenshots in your local output directory before creating new ones +clear_previous_screenshots(true) + +# For more information about all available options run +# fastlane screengrab --help diff --git a/fastlane/report.xml b/fastlane/report.xml deleted file mode 100644 index 071e9c62..00000000 --- a/fastlane/report.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3