summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2023-11-21 15:05:38 +0100
committercyBerta <cyberta@riseup.net>2023-11-23 09:51:28 +0100
commit85e5ed816451b6e78574a40980f6b30876836e4d (patch)
treecf671b43510792e64c7e666b41e4ab83d2cd4c90
parent41dee27f6d6b2240097a3f8b5112e1a8fb8fde03 (diff)
fixing Screenshot tests for Bitmask, provider setup screenshot tests are also fixed for custom flavored builds.
-rw-r--r--app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java92
-rw-r--r--app/src/androidTest/java/se/leap/bitmaskclient/base/ProviderBaseTest.java167
-rw-r--r--app/src/androidTest/java/utils/ProviderSetupUtils.java93
-rw-r--r--app/src/androidTestCustom/java/se/leap/bitmaskclient/base/CustomProviderTest.java6
-rw-r--r--app/src/androidTestCustom/java/se/leap/bitmaskclient/suite/ScreenshotTest.java3
-rw-r--r--app/src/androidTestNormal/java/se/leap/bitmaskclient/base/BitmaskTest.java166
-rw-r--r--app/src/androidTestNormal/java/se/leap/bitmaskclient/base/ProviderSetupTest.java69
-rw-r--r--app/src/androidTestNormal/java/se/leap/bitmaskclient/suite/ScreenshotTest.java2
8 files changed, 338 insertions, 260 deletions
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java b/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java
new file mode 100644
index 00000000..a878951a
--- /dev/null
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java
@@ -0,0 +1,92 @@
+package se.leap.bitmaskclient;
+
+
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.action.ViewActions.replaceText;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withTagValue;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+import static utils.CustomInteractions.tryResolve;
+
+import android.app.Instrumentation;
+import android.content.Context;
+
+import androidx.test.espresso.ViewInteraction;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+
+import org.hamcrest.Matchers;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runner.manipulation.Ordering;
+
+import se.leap.bitmaskclient.base.fragments.MainActivityErrorDialog;
+import se.leap.bitmaskclient.base.utils.PreferenceHelper;
+import se.leap.bitmaskclient.providersetup.activities.SetupActivity;
+import tools.fastlane.screengrab.Screengrab;
+import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
+import tools.fastlane.screengrab.locale.LocaleTestRule;
+import utils.ProviderSetupUtils;
+
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class ProviderSetupTest {
+
+ @ClassRule
+ public static final LocaleTestRule localeTestRule = new LocaleTestRule();
+
+ @Rule
+ public ActivityScenarioRule<SetupActivity> mActivityScenarioRule =
+ new ActivityScenarioRule<>(SetupActivity.class);
+
+ UiDevice device;
+
+ @Before
+ public void setup() {
+ Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
+ //PreferenceHelper.clear();
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ device = UiDevice.getInstance(instrumentation);
+ }
+
+ @Test
+ public void test01_setupProviderDefault() {
+ ProviderSetupUtils.runProviderSetup(device, true, false, InstrumentationRegistry.getInstrumentation().getTargetContext());
+ }
+
+ @Test
+ public void test01_setupProviderCircumvention() {
+ ProviderSetupUtils.runProviderSetup(device, true, true, InstrumentationRegistry.getInstrumentation().getTargetContext());
+ }
+
+ @Test
+ public void testaddManuallyNewProviderScreenshot() {
+ if (!"normal".equals(BuildConfig.FLAVOR_branding)) {
+ System.out.println("skipping custom provider url test");
+ return;
+ }
+ ViewInteraction radioButtonSelection = tryResolve(onView(withText(R.string.add_provider)), matches(isDisplayed()));
+ radioButtonSelection.perform(click());
+
+ onView(withId(R.id.edit_customProvider)).perform(replaceText("https://leapvpn.myserver.org"));
+ Screengrab.screenshot("setup_custom_provider");
+ onView(withId(R.id.setup_next_button)).perform(click());
+ onView(withId(R.id.setup_next_button)).perform(click());
+ Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ tryResolve(
+ onView(withText(context.getString(R.string.malformed_url, context.getString(R.string.app_name)))),
+ matches(isDisplayed()),
+ 20);
+ Screengrab.screenshot("setup_provider_error_dialog");
+ }
+}
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/base/ProviderBaseTest.java b/app/src/androidTest/java/se/leap/bitmaskclient/base/ProviderBaseTest.java
deleted file mode 100644
index 68676bee..00000000
--- a/app/src/androidTest/java/se/leap/bitmaskclient/base/ProviderBaseTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package se.leap.bitmaskclient.base;
-
-import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
-import static androidx.test.espresso.Espresso.onData;
-import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
-import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.contrib.DrawerMatchers.isClosed;
-import static androidx.test.espresso.matcher.RootMatchers.isDialog;
-import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static androidx.test.espresso.matcher.ViewMatchers.withId;
-import static androidx.test.espresso.matcher.ViewMatchers.withTagValue;
-import static androidx.test.espresso.matcher.ViewMatchers.withText;
-import static org.hamcrest.Matchers.allOf;
-import static org.hamcrest.Matchers.anything;
-import static org.hamcrest.Matchers.is;
-import static utils.CustomInteractions.tryResolve;
-
-import android.app.Instrumentation;
-import android.content.SharedPreferences;
-import android.net.VpnService;
-import android.view.Gravity;
-
-import androidx.test.espresso.ViewInteraction;
-import androidx.test.espresso.contrib.DrawerActions;
-import androidx.test.ext.junit.rules.ActivityScenarioRule;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.LargeTest;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.uiautomator.UiDevice;
-import androidx.test.uiautomator.UiObject;
-import androidx.test.uiautomator.UiObjectNotFoundException;
-import androidx.test.uiautomator.UiSelector;
-
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.FixMethodOrder;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.MethodSorters;
-
-import se.leap.bitmaskclient.R;
-import se.leap.bitmaskclient.base.utils.PreferenceHelper;
-import tools.fastlane.screengrab.Screengrab;
-import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
-import tools.fastlane.screengrab.locale.LocaleTestRule;
-
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public abstract class ProviderBaseTest {
-
- @ClassRule
- public static final LocaleTestRule localeTestRule = new LocaleTestRule();
-
- @Rule
- public ActivityScenarioRule<StartActivity> mActivityScenarioRule =
- new ActivityScenarioRule<>(StartActivity.class);
-
- UiDevice device;
- @Before
- public void setup() {
- Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
- SharedPreferences preferences = PreferenceHelper.getSharedPreferences(getApplicationContext());
- preferences.edit().clear().commit();
- Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
- device = UiDevice.getInstance(instrumentation);
- }
-
- @Test
- public void test01_vpnStartTest() throws InterruptedException, UiObjectNotFoundException {
- boolean configurationNeeded = configureProviderIfNeeded();
-
- ViewInteraction mainButtonStop;
- if (!configurationNeeded) {
- // click on Main on/off button and start VPN
- ViewInteraction mainButton = tryResolve(
- onView(withId(R.id.main_button)),
- matches(isDisplayed())
- );
-
- mainButton.perform(click());
- Thread.sleep(50);
- Screengrab.screenshot("VPN_connecting");
-
- mainButtonStop = tryResolve(
- onView(allOf(
- withId(R.id.button),
- withTagValue(is("button_circle_stop")))),
- matches(isDisplayed()),
- 20);
- Screengrab.screenshot("VPN_connected");
- } else {
- // handle VPN permission dialog
- if (VpnService.prepare(getApplicationContext()) != null) {
- UiObject okButton = device.findObject(new UiSelector().packageName("com.android.vpndialogs").resourceId("android:id/button1"));
- okButton.click();
- }
- // on new configurations the VPN is automatically started
- Screengrab.screenshot("VPN_connecting");
- mainButtonStop = tryResolve(
- onView(allOf(
- withId(R.id.button),
- withTagValue(is("button_circle_stop")))),
- matches(isDisplayed()),
- 20);
- Screengrab.screenshot("VPN_connected");
- }
-
- mainButtonStop.perform(click());
- Screengrab.screenshot("VPN_ask_disconnect");
-
- onView(withText(android.R.string.yes))
- .inRoot(isDialog())
- .check(matches(isDisplayed()))
- .perform(click());
- Screengrab.screenshot("VPN_disconnected");
- }
-
- @Test
- public void test02_SettingsFragmentScreenshots() {
- onView(withId(R.id.drawer_layout))
- .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
- .perform(DrawerActions.open()); // Open Drawer
-
- Screengrab.screenshot("navigationDrawer");
-
- // Start the screen of your activity.
- onView(withId(R.id.advancedSettings))
- .perform(click());
-
- Screengrab.screenshot("settingsFragment");
- }
-
- @Test
- public void test03_LocationSelectionFragmentScreenshots() {
- onView(withId(R.id.drawer_layout))
- .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
- .perform(DrawerActions.open()); // Open Drawer
-
- onView(withId(R.id.manualGatewaySelection))
- .perform(click());
-
- Screengrab.screenshot("GatewaySelectionFragment");
- }
-
- @Test
- public void test04_AppExclusionFragmentScreenshots() {
- onView(withId(R.id.drawer_layout))
- .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
- .perform(DrawerActions.open()); // Open Drawer
-
- onView(withId(R.id.advancedSettings)).perform(click());
-
- onView(withId(R.id.exclude_apps)).perform(click());
-
- tryResolve(
- onData(anything()).inAdapterView(withId(android.R.id.list)).atPosition(2),
- matches(isDisplayed()),
- 5);
-
- Screengrab.screenshot("App_Exclusion_Fragment");
- }
-
- public abstract boolean configureProviderIfNeeded();
-}
diff --git a/app/src/androidTest/java/utils/ProviderSetupUtils.java b/app/src/androidTest/java/utils/ProviderSetupUtils.java
new file mode 100644
index 00000000..10e0b950
--- /dev/null
+++ b/app/src/androidTest/java/utils/ProviderSetupUtils.java
@@ -0,0 +1,93 @@
+package utils;
+
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withTagValue;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+import static utils.CustomInteractions.tryResolve;
+
+import android.content.Context;
+import android.net.VpnService;
+
+import androidx.test.espresso.NoMatchingViewException;
+import androidx.test.espresso.ViewInteraction;
+import androidx.test.espresso.matcher.ViewMatchers;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+import androidx.test.uiautomator.UiSelector;
+
+import org.hamcrest.Matchers;
+
+import se.leap.bitmaskclient.BuildConfig;
+import se.leap.bitmaskclient.R;
+import tools.fastlane.screengrab.Screengrab;
+
+public class ProviderSetupUtils {
+
+ public static void runProviderSetup(UiDevice device, boolean takeConfigurationScreenshots, boolean useCircumvention, Context targetContext) {
+ try {
+ // ------- PROVIDER SELECTION --------------
+ if ("normal".equals(BuildConfig.FLAVOR_branding)) {
+ System.out.println("next: provider selection");
+ ViewInteraction radioButtonSelection = tryResolve(onView(withText("Riseup")), matches(isDisplayed()));
+ if (takeConfigurationScreenshots) Screengrab.screenshot("provider_selection");
+ radioButtonSelection.perform(click());
+ // next button click
+ onView(withText(R.string.next)).perform(click());
+ }
+
+ // ------- CIRCUMVENTION SELECTION --------------
+ System.out.println("next: standard/circumvention selection");
+ if (useCircumvention) {
+ onView(withText(targetContext.getString(R.string.use_circumvention_tech))).perform(click());
+ } else {
+ onView(withText(targetContext.getString(R.string.use_standard_vpn, targetContext.getString(R.string.app_name)))).perform(click());
+ }
+ if (takeConfigurationScreenshots) Screengrab.screenshot("circumvention_selection");
+
+ // ------- CONFIGURATION PROGRESS --------------
+ System.out.println("next: configuring");
+ onView(withText(R.string.next)).perform(click());
+ tryResolve(
+ onView(
+ Matchers.allOf(
+ withText(R.string.configuring_provider),
+ withId(R.id.tv_title)
+ )
+ ),
+ matches(isDisplayed())
+ );
+ if (takeConfigurationScreenshots) Screengrab.screenshot("configuring_provider");
+
+ // ------- VPN PERMISSON DIALOG --------------
+ boolean showPermissionDialog = false;
+ if (VpnService.prepare(getApplicationContext()) != null) {
+ showPermissionDialog = true;
+ tryResolve(onView(withText(R.string.upcoming_connection_request_description)), matches(isDisplayed()), useCircumvention ? 180 : 20);
+ System.out.println("next: next permission request");
+ onView(withText(R.string.next)).perform(click());
+ UiObject okButton = device.findObject(new UiSelector().packageName("com.android.vpndialogs").resourceId("android:id/button1"));
+ okButton.waitForExists(30000);
+ okButton.click();
+ device.waitForWindowUpdate("com.android.vpndialogs", 1000);
+ }
+
+ // ------- START VPN --------------
+ System.out.println("next: perform click on VPN button");
+ ViewInteraction interaction = tryResolve(onView(withTagValue(Matchers.is("button_setup_circle_custom"))), matches(isDisplayed()), useCircumvention && !showPermissionDialog ? 180 : 20);
+ Screengrab.screenshot("all_set_start_vpn");
+ interaction.perform(click());
+ } catch (NoMatchingViewException e) {
+ // it might be that the provider was already configured, so we print the stack
+ // trace here and try to continue
+ e.printStackTrace();
+ } catch (UiObjectNotFoundException | NullPointerException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/app/src/androidTestCustom/java/se/leap/bitmaskclient/base/CustomProviderTest.java b/app/src/androidTestCustom/java/se/leap/bitmaskclient/base/CustomProviderTest.java
index 92416af4..15e6f799 100644
--- a/app/src/androidTestCustom/java/se/leap/bitmaskclient/base/CustomProviderTest.java
+++ b/app/src/androidTestCustom/java/se/leap/bitmaskclient/base/CustomProviderTest.java
@@ -22,9 +22,9 @@ import org.junit.Test;
import se.leap.bitmaskclient.R;
import tools.fastlane.screengrab.Screengrab;
-public class CustomProviderTest extends ProviderBaseTest {
+public class CustomProviderTest {
- @Test
+ /*@Test
@Override
public void test01_vpnStartTest() throws InterruptedException, UiObjectNotFoundException {
// handle VPN permission dialog
@@ -58,5 +58,5 @@ public class CustomProviderTest extends ProviderBaseTest {
@Override
public boolean configureProviderIfNeeded() {
return false;
- }
+ }*/
} \ No newline at end of file
diff --git a/app/src/androidTestCustom/java/se/leap/bitmaskclient/suite/ScreenshotTest.java b/app/src/androidTestCustom/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
index a19b0ffd..15a21173 100644
--- a/app/src/androidTestCustom/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
+++ b/app/src/androidTestCustom/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
@@ -6,12 +6,13 @@ import androidx.test.filters.LargeTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
+import se.leap.bitmaskclient.ProviderSetupTest;
import se.leap.bitmaskclient.base.CustomProviderTest;
@LargeTest
@RunWith(Suite.class)
@Suite.SuiteClasses({
- CustomProviderTest.class
+ ProviderSetupTest.class
})
public class ScreenshotTest {
}
diff --git a/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/BitmaskTest.java b/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/BitmaskTest.java
index aa437c74..1d340f61 100644
--- a/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/BitmaskTest.java
+++ b/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/BitmaskTest.java
@@ -1,42 +1,170 @@
package se.leap.bitmaskclient.base;
-import static androidx.test.espresso.Espresso.onData;
+import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.hasToString;
-import static utils.CustomInteractions.tryResolve;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+import static org.junit.Assert.assertNotNull;
+import static se.leap.bitmaskclient.base.MainActivity.ACTION_SHOW_VPN_FRAGMENT;
+import static utils.ProviderSetupUtils.runProviderSetup;
-import androidx.test.espresso.DataInteraction;
-import androidx.test.espresso.NoMatchingViewException;
+import android.Manifest;
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.view.Gravity;
+
+import androidx.test.espresso.Espresso;
+import androidx.test.espresso.PerformException;
+import androidx.test.espresso.ViewInteraction;
+import androidx.test.espresso.action.ViewActions;
+import androidx.test.espresso.assertion.ViewAssertions;
+import androidx.test.espresso.contrib.DrawerActions;
+import androidx.test.espresso.contrib.DrawerMatchers;
+import androidx.test.espresso.matcher.RootMatchers;
+import androidx.test.espresso.matcher.ViewMatchers;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.rule.GrantPermissionRule;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+import org.hamcrest.Matchers;
+import org.junit.Before;
+import org.junit.ClassRule;
import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.base.models.ProviderObservable;
+import tools.fastlane.screengrab.Screengrab;
+import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
+import tools.fastlane.screengrab.locale.LocaleTestRule;
+import utils.CustomInteractions;
@LargeTest
@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class BitmaskTest extends ProviderBaseTest {
+public class BitmaskTest {
+
+ @ClassRule
+ public static final LocaleTestRule localeTestRule = new LocaleTestRule();
+
+ @Rule
+ public GrantPermissionRule notificationPermissionRule = (Build.VERSION.SDK_INT >= 33) ? GrantPermissionRule.grant(Manifest.permission.POST_NOTIFICATIONS) : null;
+
+ UiDevice device;
+ @Before
+ public void setup() {
+ Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ device = UiDevice.getInstance(instrumentation);
+ }
+
+ @Test
+ public void test03_vpnStartTest() throws InterruptedException, UiObjectNotFoundException {
+ startMainActivity();
+
+ Screengrab.screenshot("VPN_connecting");
+ ViewInteraction mainButtonStop = CustomInteractions.tryResolve(
+ Espresso.onView(Matchers.allOf(
+ ViewMatchers.withId(R.id.button),
+ ViewMatchers.withTagValue(Matchers.is("button_circle_stop")))),
+ ViewAssertions.matches(ViewMatchers.isDisplayed()),
+ 20);
+ Screengrab.screenshot("VPN_connected");
+
+ mainButtonStop.perform(ViewActions.click());
+ Screengrab.screenshot("VPN_ask_disconnect");
+
+ Espresso.onView(ViewMatchers.withText(android.R.string.yes))
+ .inRoot(RootMatchers.isDialog())
+ .check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
+ .perform(ViewActions.click());
+ Screengrab.screenshot("VPN_disconnected");
+ }
+
+ @Test
+ public void test04_SettingsFragmentScreenshots() {
+ startMainActivity();
+ Espresso.onView(ViewMatchers.withId(R.id.drawer_layout))
+ .check(ViewAssertions.matches(DrawerMatchers.isClosed(Gravity.LEFT))) // Left Drawer should be closed.
+ .perform(DrawerActions.open()); // Open Drawer
+
+ Screengrab.screenshot("navigationDrawer");
+
+ // Start the screen of your activity.
+ Espresso.onView(ViewMatchers.withId(R.id.advancedSettings))
+ .perform(ViewActions.click());
+
+ Screengrab.screenshot("settingsFragment");
+ }
- @Override
- public boolean configureProviderIfNeeded() {
+ @Test
+ public void test05_LocationSelectionFragmentScreenshots() {
+ startMainActivity();
+ Espresso.onView(ViewMatchers.withId(R.id.drawer_layout))
+ .check(ViewAssertions.matches(DrawerMatchers.isClosed(Gravity.LEFT))) // Left Drawer should be closed.
+ .perform(DrawerActions.open()); // Open Drawer
+
+ Espresso.onView(ViewMatchers.withId(R.id.manualGatewaySelection))
+ .perform(ViewActions.click());
+
+ Screengrab.screenshot("GatewaySelectionFragment");
+ }
+
+ @Test
+ public void test06_AppExclusionFragmentScreenshots() {
+ startMainActivity();
+ Espresso.onView(ViewMatchers.withId(R.id.drawer_layout))
+ .check(ViewAssertions.matches(DrawerMatchers.isClosed(Gravity.LEFT))) // Left Drawer should be closed.
+ .perform(DrawerActions.open()); // Open Drawer
+
+ Espresso.onView(ViewMatchers.withId(R.id.advancedSettings)).perform(ViewActions.click());
+
+ Espresso.onView(ViewMatchers.withId(R.id.exclude_apps)).perform(ViewActions.click());
+
+ CustomInteractions.tryResolve(
+ Espresso.onData(Matchers.anything()).inAdapterView(ViewMatchers.withId(android.R.id.list)).atPosition(2),
+ ViewAssertions.matches(ViewMatchers.isDisplayed()),
+ 5);
+
+ Screengrab.screenshot("App_Exclusion_Fragment");
+ }
+
+ private void startMainActivity() {
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(MainActivity.class.getName(), null, false);
+ instrumentation.addMonitor(monitor);
+ Intent intent = new Intent(instrumentation.getTargetContext(), MainActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setAction(ACTION_SHOW_VPN_FRAGMENT);
+ instrumentation.startActivitySync(intent);
+ Activity activity = instrumentation.waitForMonitor(monitor);
+ assertNotNull(activity);
+ configureIfNeeded();
+ }
+
+ private void configureIfNeeded() {
+ if (ProviderObservable.getInstance().getCurrentProvider().isConfigured()) {
+ return;
+ }
+ final Context targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
try {
- DataInteraction linearLayout = tryResolve(onData(hasToString(containsString("riseup.net")))
- .inAdapterView(withId(R.id.provider_list)),
- 2);
- linearLayout.perform(click());
- return true;
- } catch (NoMatchingViewException e) {
- // it might be that the provider was already configured, so we print the stack
- // trace here and try to continue
- e.printStackTrace();
+ onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
+ } catch (PerformException performException) {
+ System.out.println("navigation drawer already opened");
}
- return false;
+ onView(withText(R.string.switch_provider_menu_option)).perform(click());
+ System.out.println("configure Provider... starting SetupActivity");
+
+ runProviderSetup(device, false, false, targetContext);
}
}
diff --git a/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/ProviderSetupTest.java b/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/ProviderSetupTest.java
deleted file mode 100644
index 460a30ad..00000000
--- a/app/src/androidTestNormal/java/se/leap/bitmaskclient/base/ProviderSetupTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package se.leap.bitmaskclient.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 org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.hasToString;
-import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES;
-import static utils.CustomInteractions.tryResolve;
-
-import android.content.SharedPreferences;
-
-import androidx.test.espresso.DataInteraction;
-import androidx.test.espresso.NoMatchingViewException;
-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 se.leap.bitmaskclient.R;
-import se.leap.bitmaskclient.base.utils.PreferenceHelper;
-import se.leap.bitmaskclient.providersetup.ProviderListActivity;
-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<ProviderListActivity> mActivityScenarioRule =
- new ActivityScenarioRule<>(ProviderListActivity.class);
-
- @Before
- public void setup() {
- Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy());
- SharedPreferences preferences = PreferenceHelper.getSharedPreferences(getApplicationContext());
- preferences.edit().clear().commit();
- }
-
- @Test
- public void testConfigureRiseupVPNScreenshot() {
- DataInteraction linearLayout = tryResolve(onData(hasToString(containsString("riseup.net")))
- .inAdapterView(withId(R.id.provider_list)),
- 2);
- Screengrab.screenshot("ProviderListActivity");
- linearLayout.perform(click());
- Screengrab.screenshot("ProviderListActivity_configureRiseup");
- }
-
- @Test
- public void testaddManuallyNewProviderScreenshot() {
- onData(anything()).inAdapterView(withId(R.id.provider_list)).atPosition(3).perform(click());
- Screengrab.screenshot("ProviderListActivity_addManuallyNewProvider");
- }
-}
diff --git a/app/src/androidTestNormal/java/se/leap/bitmaskclient/suite/ScreenshotTest.java b/app/src/androidTestNormal/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
index 5fa45a95..ec2e7b5c 100644
--- a/app/src/androidTestNormal/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
+++ b/app/src/androidTestNormal/java/se/leap/bitmaskclient/suite/ScreenshotTest.java
@@ -6,7 +6,7 @@ import androidx.test.filters.LargeTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
-import se.leap.bitmaskclient.base.ProviderSetupTest;
+import se.leap.bitmaskclient.ProviderSetupTest;
import se.leap.bitmaskclient.base.BitmaskTest;
@LargeTest