package org.openintents.wifiserver.test; import junit.framework.AssertionFailedError; import org.openintents.wifiserver.OIWiFiServerActivity_; import org.openintents.wifiserver.R; import org.openintents.wifiserver.preference.OIWiFiPreferencesActivity_; import android.app.Activity; import android.content.Intent; import android.preference.PreferenceManager; import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.Smoke; import com.jayway.android.robotium.solo.Solo; public class TestPreferencesActivity extends InstrumentationTestCase { private Solo solo; private static final String TAG = TestPreferencesActivity.class.getSimpleName(); private Activity activity; private String getString(int resId) { return activity.getString(resId); } @Override protected void setUp() throws Exception { super.setUp(); Intent i = new Intent(); i.setAction("android.intent.action.MAIN"); i.setClassName(OIWiFiServerActivity_.class.getPackage().getName(), OIWiFiServerActivity_.class.getCanonicalName()); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity = getInstrumentation().startActivitySync(i); this.solo = new Solo(getInstrumentation(), activity); } @Override protected void tearDown() { solo.finishOpenedActivities(); } /** * Enables or disables ssl by clicking on the specific preference. * Preference activity must be in foreground when calling this function. * * @param enable <code>true</code> if ssl should be enabled, <code>false</code> otherwise. */ private void enableSSL(boolean enable) { solo.assertCurrentActivity("Expected "+OIWiFiPreferencesActivity_.class.getSimpleName()+" activity!", OIWiFiPreferencesActivity_.class); if (enable ^ PreferenceManager.getDefaultSharedPreferences(activity).getBoolean(getString(R.string.prefsSSLEnableKey), Boolean.parseBoolean(getString(R.string.prefsSSLEnableDefault)))) { solo.clickOnText(getString(R.string.prefsSSLEnableTitle)); } } private int getSSLPort() { return PreferenceManager.getDefaultSharedPreferences(activity).getInt(getString(R.string.prefsSSLPortKey), Integer.parseInt(getString(R.string.prefsSSLPortDefault))); } private int getStdPort() { return PreferenceManager.getDefaultSharedPreferences(activity).getInt(getString(R.string.prefsPortKey), Integer.parseInt(getString(R.string.prefsPortDefault))); } private void gotoPreferenceActivity() { solo.assertCurrentActivity("Expected "+OIWiFiServerActivity_.class.getSimpleName()+" activity!", OIWiFiServerActivity_.class); solo.clickOnMenuItem(getString(R.string.preferences), true); solo.assertCurrentActivity("Expected "+OIWiFiPreferencesActivity_.class.getSimpleName()+" activity!", OIWiFiPreferencesActivity_.class); } @Smoke public void test000Eula() { String accept = getString(org.openintents.distribution.R.string.oi_distribution_eula_accept); String cancel = getString(org.openintents.distribution.R.string.oi_distribution_eula_refuse); boolean existsAccept = solo.searchButton(accept); boolean existsCancel = solo.searchButton(cancel); if (existsAccept && existsCancel) { solo.clickOnButton(accept); } } @Smoke public void test001RecentChanges() { String recentChanges = getString(org.openintents.distribution.R.string.oi_distribution_newversion_recent_changes); String cont = getString(org.openintents.distribution.R.string.oi_distribution_newversion_continue); while (solo.scrollUp()) ; boolean existsRecentChanges = solo.searchText(recentChanges); boolean existsCont = solo.searchButton(cont); if (existsRecentChanges && existsCont) { solo.clickOnButton(cont); } } /** * This test activates ssl and sets the standard port to the same value as * ssl port. */ public void testDuplicatedPort_1() { gotoPreferenceActivity(); enableSSL(true); int sslPort = getSSLPort(); solo.clickOnText(getString(R.string.prefsPortTitle)); solo.clearEditText(0); solo.waitForText(""); solo.typeText(0, String.valueOf(sslPort)); solo.clickOnButton(getString(android.R.string.ok)); assertTrue(solo.waitForText(getString(R.string.errorPortDuplicate))); solo.goBackToActivity(OIWiFiServerActivity_.class.getSimpleName()); } /** * This test activates ssl and sets the ssl port to the same value as * standard port. */ public void testDuplicatedPort_2() { gotoPreferenceActivity(); enableSSL(true); int stdPort = getStdPort(); solo.clickOnText(getString(R.string.prefsSSLPortTitle)); solo.clearEditText(0); solo.waitForText(""); solo.typeText(0, String.valueOf(stdPort)); solo.clickOnButton(getString(android.R.string.ok)); assertTrue(solo.waitForText(getString(R.string.errorPortDuplicate))); solo.goBackToActivity(OIWiFiServerActivity_.class.getSimpleName()); } /** * This test deactivates ssl and sets the standard port to the same value as * ssl port. */ public void testDuplicatedPort_3() { gotoPreferenceActivity(); enableSSL(false); int sslPort = getSSLPort(); solo.clickOnText(getString(R.string.prefsPortTitle)); solo.clearEditText(0); solo.waitForText(""); solo.typeText(0, String.valueOf(sslPort)); solo.clickOnButton(getString(android.R.string.ok)); assertTrue(solo.waitForText(getString(R.string.errorPortDuplicate))); solo.goBackToActivity(OIWiFiServerActivity_.class.getSimpleName()); } }