diff options
| author | cyBerta <cyberta@riseup.net> | 2023-11-22 10:41:39 +0100 | 
|---|---|---|
| committer | cyBerta <cyberta@riseup.net> | 2023-11-23 09:51:28 +0100 | 
| commit | e2eccdcf5c49daf9236f782dcdf8ba9924cf7147 (patch) | |
| tree | 16c7c6f34655867d29e26d6a285d8f729b4809dd /app/src/androidTest/java | |
| parent | 85e5ed816451b6e78574a40980f6b30876836e4d (diff) | |
improve screenhsot tests, fix them for custom flavored builds
Diffstat (limited to 'app/src/androidTest/java')
3 files changed, 181 insertions, 10 deletions
| diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/BitmaskTest.java b/app/src/androidTest/java/se/leap/bitmaskclient/BitmaskTest.java new file mode 100644 index 00000000..1ca0980a --- /dev/null +++ b/app/src/androidTest/java/se/leap/bitmaskclient/BitmaskTest.java @@ -0,0 +1,152 @@ +package se.leap.bitmaskclient; + + +import static org.junit.Assert.assertNotNull; + +import android.Manifest; +import android.app.Activity; +import android.app.Instrumentation; +import android.content.Intent; +import android.os.Build; +import android.view.Gravity; + +import androidx.test.espresso.Espresso; +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.base.MainActivity; +import se.leap.bitmaskclient.base.StartActivity; +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.CustomInteractions; +import utils.ProviderSetupUtils; + +@LargeTest +@RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +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 test01_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 test02_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"); +    } + +    @Test +    public void test03_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 test04_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 setupActivityMonitor = new Instrumentation.ActivityMonitor(SetupActivity.class.getName(), null, false); +        Instrumentation.ActivityMonitor mainActivityMonitor = new Instrumentation.ActivityMonitor(MainActivity.class.getName(), null, false); +        instrumentation.addMonitor(setupActivityMonitor); +        instrumentation.addMonitor(mainActivityMonitor); +        Intent intent = new Intent(instrumentation.getTargetContext(), StartActivity.class); +        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +        instrumentation.startActivitySync(intent); +        Activity setupActivity = instrumentation.waitForMonitorWithTimeout(setupActivityMonitor, 1000L); +        if (setupActivity != null) { +            ProviderSetupUtils.runProviderSetup(device, false, false, InstrumentationRegistry.getInstrumentation().getTargetContext()); +        } +        Activity mainActivity = instrumentation.waitForMonitorWithTimeout(mainActivityMonitor, 1000); +        assertNotNull(mainActivity); +    } +} diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java b/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java index a878951a..b9da0dff 100644 --- a/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java +++ b/app/src/androidTest/java/se/leap/bitmaskclient/ProviderSetupTest.java @@ -7,7 +7,6 @@ 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; @@ -20,18 +19,15 @@ 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.FixMethodOrder;  import org.junit.Rule;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.junit.runner.manipulation.Ordering; +import org.junit.runners.MethodSorters; -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; @@ -40,6 +36,7 @@ import utils.ProviderSetupUtils;  @LargeTest  @RunWith(AndroidJUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING)  public class ProviderSetupTest {      @ClassRule @@ -65,24 +62,27 @@ public class ProviderSetupTest {      }      @Test -    public void test01_setupProviderCircumvention() { +    public void test02_setupProviderCircumvention() {          ProviderSetupUtils.runProviderSetup(device, true, true, InstrumentationRegistry.getInstrumentation().getTargetContext());      }      @Test -    public void testaddManuallyNewProviderScreenshot() { +    public void test03_addManuallyNewProviderScreenshot() {          if (!"normal".equals(BuildConfig.FLAVOR_branding)) {              System.out.println("skipping custom provider url test");              return;          } +        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); +          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(withText(context.getString(R.string.use_standard_vpn, context.getString(R.string.app_name)))).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()), diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/suite/ScreenshotTest.java b/app/src/androidTest/java/se/leap/bitmaskclient/suite/ScreenshotTest.java new file mode 100644 index 00000000..f3a8d73c --- /dev/null +++ b/app/src/androidTest/java/se/leap/bitmaskclient/suite/ScreenshotTest.java @@ -0,0 +1,19 @@ +package se.leap.bitmaskclient.suite; + + +import androidx.test.filters.LargeTest; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +import se.leap.bitmaskclient.BitmaskTest; +import se.leap.bitmaskclient.ProviderSetupTest; + +@LargeTest +@RunWith(Suite.class) +@Suite.SuiteClasses({ +        ProviderSetupTest.class, +        BitmaskTest.class, +}) +public class ScreenshotTest { +} | 
