diff options
Diffstat (limited to 'app/src/androidTest/legacy/VpnTestController.java')
-rw-r--r-- | app/src/androidTest/legacy/VpnTestController.java | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/app/src/androidTest/legacy/VpnTestController.java b/app/src/androidTest/legacy/VpnTestController.java new file mode 100644 index 00000000..4c6a6370 --- /dev/null +++ b/app/src/androidTest/legacy/VpnTestController.java @@ -0,0 +1,137 @@ +package se.leap.bitmaskclient.test; + +import android.view.View; +import android.widget.Button; + +import com.robotium.solo.Condition; +import com.robotium.solo.Solo; + +import de.blinkt.openvpn.activities.DisconnectVPN; +import mbanje.kurt.fabbutton.ProgressRingView; +import se.leap.bitmaskclient.Dashboard; +import se.leap.bitmaskclient.R; +import se.leap.bitmaskclient.userstatus.FabButton; + +import static junit.framework.Assert.assertTrue; + +public class VpnTestController { + + private final Solo solo; + + public VpnTestController(Solo solo) { + this.solo = solo; + } + + protected void turnVpnOnAndOff() { + clickVpnButton(); + turningEipOn(); + clickVpnButton(); + turningEipOff(); + } + + protected void clickVpnButton() throws IllegalStateException { + Button button = getVpnButton(); + if(!isVpnButton(button)) + throw new IllegalStateException(); + solo.clickOnButton(String.valueOf(button.getText())); + } + + protected Button getVpnButton() { + View button_view = solo.getView(R.id.vpn_main_button); + if (button_view != null) + return (Button) button_view; + else + return null; + } + + private boolean isVpnButton(Button button) { + return button != null && !button.getText().toString().isEmpty(); + } + + protected FabButton getVpnWholeIcon() { + assertTrue(solo.waitForActivity(Dashboard.class, 5 * 1000)); + + View view = solo.getView(R.id.vpn_status_image); + if (view != null) + return (FabButton) view; + else + return null; + } + + protected void turningEipOn() { + assertInProgress(); + int max_seconds_until_connected = 120; + + Condition condition = new Condition() { + @Override + public boolean isSatisfied() { + return iconShowsConnected(); + } + }; + assertTrue("condition iconShowsConnected not fulfilled within " + max_seconds_until_connected + " seconds." , solo.waitForCondition(condition, max_seconds_until_connected * 1000)); + sleepSeconds(2); + } + + private void assertInProgress() { + FabButton whole_icon = getVpnWholeIcon(); + ProgressRingView a; + a = whole_icon != null ? + (ProgressRingView) getVpnWholeIcon().findViewById(R.id.fabbutton_ring) : + new ProgressRingView(solo.getCurrentActivity()); + BaseTestDashboardFragment.isShownWithinConfinesOfVisibleScreen(a); + } + + private boolean iconShowsConnected() { + View vpnIconView = getVpnWholeIcon(); + return vpnIconView.getTag().equals(R.drawable.ic_stat_vpn); + } + + protected boolean iconShowsDisconnected() { + View vpnIconView = getVpnWholeIcon(); + return vpnIconView.getTag().equals(R.drawable.ic_stat_vpn_offline); + } + + protected void turningEipOff() { + okToBrowserWarning(); + int max_seconds_until_connected = 120; + + Condition condition = new Condition() { + @Override + public boolean isSatisfied() { + return iconShowsDisconnected(); + } + }; + assertTrue(solo.waitForCondition(condition, max_seconds_until_connected * 1000)); + sleepSeconds(2); + } + + private void okToBrowserWarning() { + assertTrue(solo.waitForDialogToOpen()); + clickYes(); + solo.waitForDialogToClose(); + } + + private void clickYes() { + String yes = solo.getString(android.R.string.yes); + solo.clickOnButton(yes); + } + + private void clickDisconnect() { + String disconnect = solo.getString(R.string.cancel_connection); + solo.clickOnButton(disconnect); + } + + @SuppressWarnings("unused") + private void sayOkToDisconnect() throws IllegalStateException { + boolean disconnect_vpn_appeared = solo.waitForActivity(DisconnectVPN.class); + if(disconnect_vpn_appeared){ + clickDisconnect(); + solo.waitForDialogToClose(); + } + else throw new IllegalStateException(); + } + + void sleepSeconds(int seconds) { + solo.sleep(seconds * 1000); + } +} |