diff --git a/.classpath b/.classpath index b6af78b2d..2c1efbc34 100644 --- a/.classpath +++ b/.classpath @@ -1,17 +1,17 @@ - - + + diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 59f7a8531..9cf73a674 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -71,7 +71,6 @@ import org.linphone.core.LinphoneCoreFactory; import org.linphone.core.LinphoneCoreListener; import org.linphone.core.LinphoneFriend; import org.linphone.core.LinphoneInfoMessage; -import org.linphone.core.LinphoneLogHandler; import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.PayloadType; import org.linphone.mediastream.Log; @@ -1723,7 +1722,6 @@ public class LinphoneManager implements LinphoneCoreListener { @Override public void transferState(LinphoneCore lc, LinphoneCall call, State new_call_state) { - // TODO Auto-generated method stub } @Override diff --git a/tests/.classpath b/tests/.classpath index a64829987..8890c27cc 100644 --- a/tests/.classpath +++ b/tests/.classpath @@ -1,10 +1,15 @@ - - + + + + + + + + - diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 30c743114..a43330b26 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -4,16 +4,41 @@ android:versionCode="1" android:versionName="1.0" > - /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/ant.properties b/tests/ant.properties new file mode 100644 index 000000000..836edf047 --- /dev/null +++ b/tests/ant.properties @@ -0,0 +1,18 @@ +# This file is used to override default values used by the Ant build system. +# +# This file must be checked into Version Control Systems, as it is +# integral to the build system of your project. + +# This file is only used by the Ant script. + +# You can use this to override default values such as +# 'source.dir' for the location of your java source folder and +# 'out.dir' for the location of your output folder. + +# You can also use it define how the release builds are signed by declaring +# the following properties: +# 'key.store' for the location of your keystore and +# 'key.alias' for the name of the key to use. +# The password will be asked during the build when you use the 'release' target. + +tested.project.dir=../ diff --git a/tests/res/drawable-hdpi/ic_launcher.png b/tests/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 96a442e5b..000000000 Binary files a/tests/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/tests/res/drawable-ldpi/ic_launcher.png b/tests/res/drawable-ldpi/ic_launcher.png deleted file mode 100644 index 99238729d..000000000 Binary files a/tests/res/drawable-ldpi/ic_launcher.png and /dev/null differ diff --git a/tests/res/drawable-mdpi/ic_launcher.png b/tests/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 359047dfa..000000000 Binary files a/tests/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/tests/res/drawable-xhdpi/ic_launcher.png b/tests/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 71c6d760f..000000000 Binary files a/tests/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/tests/res/values/config.xml b/tests/res/values/config.xml new file mode 100644 index 000000000..52af84c9f --- /dev/null +++ b/tests/res/values/config.xml @@ -0,0 +1,23 @@ + + + + wizard15 + wizard15 + sip.linphone.org + + wizard15 + wizard15 + test.linphone.org + + wizard42 + wizard42 + wizard42@linphone.org + + viish + lucifer + sip.linphone.org + + Ping! + Pong! + + \ No newline at end of file diff --git a/tests/src/org/linphone/test/AccountAssistant.java b/tests/src/org/linphone/test/AccountAssistant.java new file mode 100644 index 000000000..72c665c9e --- /dev/null +++ b/tests/src/org/linphone/test/AccountAssistant.java @@ -0,0 +1,171 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.LinphoneActivity; +import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCore.RegistrationState; +import org.linphone.core.LinphoneProxyConfig; +import org.linphone.mediastream.video.capture.hwconf.Hacks; +import org.linphone.setup.SetupActivity; + +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +public class AccountAssistant extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAWizardDisplayedAfterInstall() { + solo.waitForActivity("SetupActivity", 3000); + solo.assertCurrentActivity("Expected Setup Activity", SetupActivity.class); + } + + @SmallTest + @MediumTest + @LargeTest + public void testBLoginWithLinphoneAccount() { + solo.waitForActivity("SetupActivity", 1000); + + solo.clickOnView(solo.getView(org.linphone.R.id.setup_next)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_login_linphone)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_username), iContext.getString(R.string.account_linphone_login)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password), iContext.getString(R.string.account_linphone_pwd)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_apply)); + + if (!Hacks.hasBuiltInEchoCanceller()) + solo.waitForActivity("LinphoneActivity", 8000); + else + solo.waitForActivity("LinphoneActivity", 2000); + Assert.assertTrue(solo.searchText(iContext.getString(R.string.account_linphone_login) + "@sip.linphone.org")); + + solo.sleep(3000); //Wait for registration to be done + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 1); + LinphoneProxyConfig proxyConfig = proxyConfigs[0]; + Assert.assertEquals(RegistrationState.RegistrationOk, proxyConfig.getState()); + + //Check the wizard added sip.linphone.org custom settings + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); + String stunServer = prefs.getString(aContext.getString(org.linphone.R.string.pref_stun_server_key), ""); + Assert.assertEquals(stunServer, aContext.getString(org.linphone.R.string.default_stun)); + + String transport = prefs.getString(aContext.getString(org.linphone.R.string.pref_transport_key), aContext.getString(org.linphone.R.string.pref_transport_udp_key)); + Assert.assertEquals(transport, aContext.getString(org.linphone.R.string.pref_transport_tls_key)); + + String proxy = prefs.getString(aContext.getString(org.linphone.R.string.pref_proxy_key), ""); + Assert.assertEquals(proxy, aContext.getString(org.linphone.R.string.default_domain) + ":5223"); + boolean outboundproxy = prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_enable_outbound_proxy_key), false); + Assert.assertEquals(outboundproxy, true); + + boolean ice = prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_ice_enable_key), false); + Assert.assertEquals(ice, true); + } + + @LargeTest + public void testCWizardDoesntShowWhenAccountIsConfigured() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testDLoginWithGenericAccount() { + startWizard(); + + solo.clickOnView(solo.getView(org.linphone.R.id.setup_next)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_login_generic)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_username), iContext.getString(R.string.account_generic_login)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password), iContext.getString(R.string.account_generic_pwd)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_domain), iContext.getString(R.string.account_generic_domain)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_apply)); + + if (!Hacks.hasBuiltInEchoCanceller()) + solo.waitForActivity("LinphoneActivity", 8000); + else + solo.waitForActivity("LinphoneActivity", 2000); + Assert.assertTrue(solo.searchText(iContext.getString(R.string.account_generic_login) + "@" + iContext.getString(R.string.account_generic_domain))); + + solo.sleep(3000); //Wait for registration to be done + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 2); + LinphoneProxyConfig proxyConfig = proxyConfigs[1]; + Assert.assertEquals(RegistrationState.RegistrationOk, proxyConfig.getState()); + } + + @LargeTest + public void testECreateNewAccount() { + startWizard(); + + solo.clickOnView(solo.getView(org.linphone.R.id.setup_next)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_create_account)); + + TextView error = (TextView) solo.getView(org.linphone.R.id.setup_error); + ImageView createAccount = (ImageView) solo.getView(org.linphone.R.id.setup_create); + int sleepingTime = 1500; + + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_username), iContext.getString(R.string.account_create_login).substring(0,2)); + solo.sleep(sleepingTime); + Assert.assertEquals(error.getText(), aContext.getString(org.linphone.R.string.wizard_username_incorrect)); + Assert.assertFalse(createAccount.isEnabled()); + + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_username)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_username), iContext.getString(R.string.account_linphone_login)); + solo.sleep(sleepingTime*2); + Assert.assertEquals(error.getText(), aContext.getString(org.linphone.R.string.wizard_username_unavailable)); + Assert.assertFalse(createAccount.isEnabled()); + + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password), iContext.getString(R.string.account_create_pwd).substring(0,2)); + solo.sleep(sleepingTime); + Assert.assertEquals(error.getText(), aContext.getString(org.linphone.R.string.wizard_passwords_unmatched)); + Assert.assertFalse(createAccount.isEnabled()); + + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_password)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password), iContext.getString(R.string.account_create_pwd).substring(0,2)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password_confirm), iContext.getString(R.string.account_create_pwd).substring(0,2)); + solo.sleep(sleepingTime); + Assert.assertEquals(error.getText(), aContext.getString(org.linphone.R.string.wizard_password_incorrect)); + Assert.assertFalse(createAccount.isEnabled()); + + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_email), iContext.getString(R.string.account_create_email).substring(0, 12)); + solo.sleep(sleepingTime); + Assert.assertEquals(error.getText(), aContext.getString(org.linphone.R.string.wizard_email_incorrect)); + Assert.assertFalse(createAccount.isEnabled()); + + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_username)); + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_password)); + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_password_confirm)); + solo.clearEditText((EditText) solo.getView(org.linphone.R.id.setup_email)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_username), iContext.getString(R.string.account_create_login)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password), iContext.getString(R.string.account_create_pwd)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_password_confirm), iContext.getString(R.string.account_create_pwd)); + solo.enterText((EditText) solo.getView(org.linphone.R.id.setup_email), iContext.getString(R.string.account_create_email)); + solo.sleep(sleepingTime); + Assert.assertEquals(error.getText(), ""); + Assert.assertTrue(createAccount.isEnabled()); + } + + @LargeTest + public void testFCancelWizard() { + startWizard(); + solo.clickOnView(solo.getView(org.linphone.R.id.setup_cancel)); + + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + private void startWizard() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.settings)); + solo.clickOnText(aContext.getString(org.linphone.R.string.setup_title).substring(0, STRING_LENGTH_MAX)); + } +} diff --git a/tests/src/org/linphone/test/AccountManagement.java b/tests/src/org/linphone/test/AccountManagement.java new file mode 100644 index 000000000..d4b633a5f --- /dev/null +++ b/tests/src/org/linphone/test/AccountManagement.java @@ -0,0 +1,91 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.FragmentsAvailable; +import org.linphone.LinphoneActivity; +import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCore.RegistrationState; +import org.linphone.core.LinphoneProxyConfig; + +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.view.KeyEvent; + +public class AccountManagement extends SampleTest { + + @MediumTest + @LargeTest + public void testAEditAccount() { + goToSettings(); + solo.clickOnText(iContext.getString(R.string.account_generic_login) + "@" + iContext.getString(R.string.account_generic_domain)); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_username)); + solo.enterText(0, "new"); + //Hack to validate the dialog + solo.sendKey(KeyEvent.KEYCODE_ENTER); + solo.sendKey(KeyEvent.KEYCODE_TAB); + solo.sendKey(KeyEvent.KEYCODE_ENTER); + //End of hack + + solo.goBack(); + solo.goBack(); + solo.waitForFragmentByTag(FragmentsAvailable.DIALER.toString(), 2000); + + solo.sleep(2000); //Wait for registration to be done + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 2); + LinphoneProxyConfig proxyConfig = proxyConfigs[1]; + Assert.assertEquals(proxyConfig.getState(), RegistrationState.RegistrationOk); + Assert.assertTrue(proxyConfig.getIdentity(), proxyConfig.getIdentity().contains("new")); + } + + @MediumTest + @LargeTest + public void testBDeleteAccount() { + goToSettings(); + solo.clickOnText(iContext.getString(R.string.account_generic_login) + "new"); + selectItemInListOnUIThread(7); + solo.clickLongOnText(aContext.getString(org.linphone.R.string.pref_delete_account)); + + solo.goBack(); + solo.goBack(); + + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 1); + } + + @LargeTest + public void testCDisableAccount() { + goToSettings(); + solo.clickOnText(iContext.getString(R.string.account_linphone_login)); + selectItemInListOnUIThread(5); + solo.clickLongOnText(aContext.getString(org.linphone.R.string.pref_disable_account)); + + solo.goBack(); + solo.goBack(); + + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 0); + } + + @LargeTest + public void testDEnableAccount() { + goToSettings(); + solo.clickOnText(iContext.getString(R.string.account_linphone_login)); + selectItemInListOnUIThread(5); + solo.clickLongOnText(aContext.getString(org.linphone.R.string.pref_disable_account)); + + solo.goBack(); + solo.goBack(); + + LinphoneProxyConfig[] proxyConfigs = LinphoneManager.getLc().getProxyConfigList(); + Assert.assertEquals(proxyConfigs.length, 1); + } + + private void goToSettings() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.settings)); + } +} diff --git a/tests/src/org/linphone/test/AccountsTest.java b/tests/src/org/linphone/test/AccountsTest.java deleted file mode 100644 index c3fc473e1..000000000 --- a/tests/src/org/linphone/test/AccountsTest.java +++ /dev/null @@ -1,226 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.LinphoneActivity; -import org.linphone.R; -import org.linphone.mediastream.video.capture.hwconf.Hacks; -import org.linphone.setup.SetupActivity; - -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; - -import com.jayway.android.robotium.solo.Solo; - -public class AccountsTest extends - ActivityInstrumentationTestCase2 { - - private Solo solo; - - @SuppressWarnings("deprecation") - public AccountsTest() { - super("org.linphone", LinphoneActivity.class); - } - - private void selectItemInListOnUIThread(final int item) { - solo.sleep(500); - getActivity().runOnUiThread(new Runnable() { - public void run() { - ListView list = (ListView) solo.getView(android.R.id.list); - list.setSelection(item); - } - }); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - public void testAConfigureExistingLinphoneAccount() { - Context context = getActivity(); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - int nbAccountsBefore = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - - solo.waitForActivity("SetupActivity", 2000); - solo.assertCurrentActivity("Expected Setup Activity", SetupActivity.class); - Log.testSuccess("Wizard launching at first startup"); - - solo.clickOnView(solo.getView(R.id.setup_next)); - solo.clickOnText(context.getString(R.string.setup_login_linphone)); - solo.enterText((EditText) solo.getView(R.id.setup_username), "wizard15"); - solo.enterText((EditText) solo.getView(R.id.setup_password), "wizard15"); - solo.clickOnText(context.getString(R.string.setup_apply)); - - if (!Hacks.hasBuiltInEchoCanceller()) - solo.waitForActivity("LinphoneActivity", 8000); - else - solo.waitForActivity("LinphoneActivity", 2000); - Assert.assertTrue(solo.searchText("wizard15@sip.linphone.org")); - - int nbAccountsAfter = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - Assert.assertEquals(nbAccountsBefore + 1, nbAccountsAfter); - Log.testSuccess("Configure existing sip.linphone.org account"); - - String stunServer = prefs.getString(context.getString(R.string.pref_stun_server_key), ""); - Assert.assertEquals(stunServer, context.getString(R.string.default_stun)); - Log.testSuccess("Default stun server is configured"); - - String transport = prefs.getString(context.getString(R.string.pref_transport_key), context.getString(R.string.pref_transport_udp_key)); - Assert.assertEquals(transport, context.getString(R.string.pref_transport_tls_key)); - Log.testSuccess("TLS is set by default"); - - String proxy = prefs.getString(context.getString(R.string.pref_proxy_key), ""); - Assert.assertEquals(proxy, context.getString(R.string.default_domain) + ":5223"); - boolean outboundproxy = prefs.getBoolean(context.getString(R.string.pref_enable_outbound_proxy_key), false); - Assert.assertEquals(outboundproxy, true); - Log.testSuccess("Outbound proxy is configured"); - - boolean ice = prefs.getBoolean(context.getString(R.string.pref_ice_enable_key), false); - Assert.assertEquals(ice, true); - Log.testSuccess("ICE is enabled"); - } - - public void testBConfigureExternalSIPAccount() { - Context context = getActivity(); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - int nbAccountsBefore = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - Log.testSuccess("Wizard not launching at startup if account is configured"); - - solo.clickOnView(solo.getView(R.id.settings)); - solo.clickOnText(context.getString(R.string.setup_title)); - - solo.assertCurrentActivity("Expected Setup Activity", SetupActivity.class); - solo.clickOnView(solo.getView(R.id.setup_next)); - solo.clickOnText(context.getString(R.string.setup_login_generic)); - solo.enterText((EditText) solo.getView(R.id.setup_username), "junit"); - solo.enterText((EditText) solo.getView(R.id.setup_password), "junit"); - solo.enterText((EditText) solo.getView(R.id.setup_domain), "test.linphone.org"); - solo.clickOnText(context.getString(R.string.setup_apply)); - - solo.waitForActivity("LinphoneActivity", 2000); - Assert.assertTrue(solo.searchText("junit@test.linphone.org")); - - int nbAccountsAfter = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - Assert.assertEquals(nbAccountsBefore + 1, nbAccountsAfter); - Log.testSuccess("Configure existing generic account"); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - Assert.assertTrue(solo.searchText("junit@test.linphone.org")); - - solo.clickOnText("junit@test.linphone.org"); - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_default_account)); - solo.goBack(); - int defaultAccount = prefs.getInt(context.getString(R.string.pref_default_account_key), 0); - solo.sleep(1000); - Assert.assertEquals(1, defaultAccount); - Log.testSuccess("Select another account as default"); - } - - public void testCDeleteConfiguredAccount() { - Context context = getActivity(); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - int nbAccountsBefore = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - - solo.clickOnView(solo.getView(R.id.settings)); - Assert.assertTrue(solo.searchText("wizard15@sip.linphone.org")); - - solo.clickOnText("wizard15@sip.linphone.org"); - selectItemInListOnUIThread(7); - solo.clickOnText(context.getString(R.string.pref_delete_account)); - - solo.goBack(); - - int nbAccountsAfter = prefs.getInt(getActivity().getString(R.string.pref_extra_accounts), 0); - Assert.assertEquals(nbAccountsBefore - 1, nbAccountsAfter); - Log.testSuccess("Deleting existing SIP account"); - } - - public void testDTryCreatingExistingAccount() { - Context context = getActivity(); - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - - solo.clickOnView(solo.getView(R.id.settings)); - solo.clickOnText(context.getString(R.string.setup_title)); - - solo.assertCurrentActivity("Expected Setup Activity", SetupActivity.class); - - solo.clickOnView(solo.getView(R.id.setup_next)); - solo.clickOnText(context.getString(R.string.setup_create_account)); - - TextView error = (TextView) solo.getView(R.id.setup_error); - ImageView createAccount = (ImageView) solo.getView(R.id.setup_create); - int sleepingTime = 1500; - - solo.enterText((EditText) solo.getView(R.id.setup_username), "wi"); - solo.sleep(sleepingTime); - Assert.assertEquals(error.getText(), context.getString(R.string.wizard_username_incorrect)); - Assert.assertFalse(createAccount.isEnabled()); - Log.testSuccess("Username incorrect error message"); - - solo.clearEditText((EditText) solo.getView(R.id.setup_username)); - solo.enterText((EditText) solo.getView(R.id.setup_username), "wizard15"); - solo.sleep(sleepingTime*2); - Assert.assertEquals(error.getText(), context.getString(R.string.wizard_username_unavailable)); - Assert.assertFalse(createAccount.isEnabled()); - Log.testSuccess("Username already in use error message"); - - solo.enterText((EditText) solo.getView(R.id.setup_password), "wi"); - solo.sleep(sleepingTime); - Assert.assertEquals(error.getText(), context.getString(R.string.wizard_password_incorrect)); - Assert.assertFalse(createAccount.isEnabled()); - Log.testSuccess("Password incorrect error message"); - - solo.clearEditText((EditText) solo.getView(R.id.setup_password)); - solo.enterText((EditText) solo.getView(R.id.setup_password), "wizard15"); - solo.enterText((EditText) solo.getView(R.id.setup_password_confirm), "wizard14"); - solo.sleep(sleepingTime); - Assert.assertEquals(error.getText(), context.getString(R.string.wizard_passwords_unmatched)); - Assert.assertFalse(createAccount.isEnabled()); - Log.testSuccess("Passwords doesn't match error message"); - - solo.enterText((EditText) solo.getView(R.id.setup_email), "wizard15@lin"); - solo.sleep(sleepingTime); - Assert.assertEquals(error.getText(), context.getString(R.string.wizard_email_incorrect)); - Assert.assertFalse(createAccount.isEnabled()); - Log.testSuccess("Email incorrect error message"); - - solo.clearEditText((EditText) solo.getView(R.id.setup_username)); - solo.clearEditText((EditText) solo.getView(R.id.setup_password)); - solo.clearEditText((EditText) solo.getView(R.id.setup_password_confirm)); - solo.clearEditText((EditText) solo.getView(R.id.setup_email)); - solo.enterText((EditText) solo.getView(R.id.setup_username), "wizard42"); - solo.enterText((EditText) solo.getView(R.id.setup_password), "wizard42"); - solo.enterText((EditText) solo.getView(R.id.setup_password_confirm), "wizard42"); - solo.enterText((EditText) solo.getView(R.id.setup_email), "wizard42@linphone.org"); - solo.sleep(sleepingTime); - Assert.assertEquals(error.getText(), ""); - Assert.assertTrue(createAccount.isEnabled()); - Log.testSuccess("All wizard fields correctly filled"); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/AccountzFreephonieTest.java b/tests/src/org/linphone/test/AccountzFreephonieTest.java deleted file mode 100644 index 4387f1b5a..000000000 --- a/tests/src/org/linphone/test/AccountzFreephonieTest.java +++ /dev/null @@ -1,142 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.InCallActivity; -import org.linphone.LinphoneActivity; -import org.linphone.LinphoneManager; -import org.linphone.R; -import org.linphone.core.LinphoneCall; -import org.linphone.setup.SetupActivity; - -import android.content.Context; -import android.test.ActivityInstrumentationTestCase2; -import android.widget.EditText; -import android.widget.ListView; - -import com.jayway.android.robotium.solo.Solo; - -public class AccountzFreephonieTest extends ActivityInstrumentationTestCase2 { - - private static final String numberToCallToTestPSTNGateway = "0482532176"; - private Solo solo; - - @SuppressWarnings("deprecation") - public AccountzFreephonieTest() { - super("org.linphone", LinphoneActivity.class); - } - - private void selectItemInListOnUIThread(final int item) { - solo.sleep(500); - getActivity().runOnUiThread(new Runnable() { - public void run() { - ListView list = (ListView) solo.getView(android.R.id.list); - list.setSelection(item); - } - }); - } - - private void configureFreephonieAccount() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_network_title)); - solo.clickOnText(context.getString(R.string.pref_transport)); - solo.clickOnText(context.getString(R.string.pref_transport_udp)); - solo.goBack(); - selectItemInListOnUIThread(0); - - solo.clickOnText(context.getString(R.string.setup_title)); - solo.assertCurrentActivity("Expected Setup Activity", SetupActivity.class); - solo.clickOnView(solo.getView(R.id.setup_next)); - solo.clickOnText(context.getString(R.string.setup_login_generic)); - solo.enterText((EditText) solo.getView(R.id.setup_username), "0953335419"); - solo.enterText((EditText) solo.getView(R.id.setup_password), "jodeeeeeer"); - solo.enterText((EditText) solo.getView(R.id.setup_domain), "freephonie.net"); - solo.clickOnText(context.getString(R.string.setup_apply)); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - solo.clickOnText("0953335419@freephonie.net"); - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_default_account)); - -// solo.clickOnText(context.getString(R.string.pref_proxy)); -// solo.enterText(0, "sip.linphone.org"); -// solo.clickOnText("OK"); -// solo.clickOnText(context.getString(R.string.pref_enable_outbound_proxy)); - - solo.goBack(); - solo.goBack(); - } - - private void deleteFreephonieAccount() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(0); - solo.clickOnText("junit@test.linphone.org"); - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_default_account)); - solo.goBack(); - - solo.clickOnText("0953335419@freephonie.net"); - selectItemInListOnUIThread(7); - solo.clickOnText(context.getString(R.string.pref_delete_account)); - - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_network_title)); - solo.clickOnText(context.getString(R.string.pref_transport)); - solo.clickOnText(context.getString(R.string.pref_transport_tls)); - solo.goBack(); - - solo.goBack(); - } - - private void goToDialerAndOutgoingCall() { - solo.clickOnView(solo.getView(R.id.dialer)); - solo.clickOnView(solo.getView(R.id.Adress)); - solo.enterText((EditText) solo.getView(R.id.Adress), numberToCallToTestPSTNGateway); - solo.clickOnView(solo.getView(R.id.Call)); - - solo.waitForActivity("InCallActivity", 2000); - solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - solo.sleep(2000); - try { - LinphoneCall.State state = LinphoneManager.getLcIfManagerNotDestroyedOrNull().getCalls()[0].getState(); - Assert.assertTrue(state == LinphoneCall.State.OutgoingEarlyMedia || state == LinphoneCall.State.OutgoingRinging || state == LinphoneCall.State.StreamsRunning); - } catch (AssertionError ae) { - } finally { - solo.clickOnView(solo.getView(R.id.hangUp)); - } - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - public void testAOutgoingCallUsingPSTNGatewayAndFreephonieNetwork() { - configureFreephonieAccount(); - goToDialerAndOutgoingCall(); - deleteFreephonieAccount(); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/AudioAndVideoCodecsTest.java b/tests/src/org/linphone/test/AudioAndVideoCodecsTest.java deleted file mode 100644 index 8fb836886..000000000 --- a/tests/src/org/linphone/test/AudioAndVideoCodecsTest.java +++ /dev/null @@ -1,385 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.InCallActivity; -import org.linphone.LinphoneActivity; -import org.linphone.R; - -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; -import android.view.View; -import android.widget.EditText; -import android.widget.ListView; - -import com.jayway.android.robotium.solo.Solo; - -public class AudioAndVideoCodecsTest extends ActivityInstrumentationTestCase2 { - private static final String sipAdressToCall = "macmini@sip.linphone.org"; - private Solo solo; - - @SuppressWarnings("deprecation") - public AudioAndVideoCodecsTest() { - super("org.linphone", LinphoneActivity.class); - } - - private void selectItemInListOnUIThread(final int item) { - solo.sleep(500); - getActivity().runOnUiThread(new Runnable() { - public void run() { - ListView list = (ListView) solo.getView(android.R.id.list); - list.setSelection(item); - } - }); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - private boolean getBoolean(int key) { - return getActivity().getResources().getBoolean(key); - } - - private void goToAudioCodecsSettings() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(4); - solo.clickOnText(context.getString(R.string.pref_audio)); - solo.sleep(500); - } - - private void goToVideoCodecsSettings() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(6); - if (solo.searchText(context.getString(R.string.pref_video), 2)) // Needed in case pref_video_enable_title contains pref_video - solo.clickOnText(context.getString(R.string.pref_video), 2); - else - solo.clickOnText(context.getString(R.string.pref_video)); - solo.sleep(500); - } - - private void disableAllEnabledAudioCodecs() { - Context context = getActivity(); - - goToAudioCodecsSettings(); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - if (prefs.getBoolean(context.getString(R.string.pref_codec_speex16_key), getBoolean(R.bool.pref_codec_speex16_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_speex16)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_speex8_key), getBoolean(R.bool.pref_codec_speex8_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_speex8)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_ilbc_key), getBoolean(R.bool.pref_codec_ilbc_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_ilbc)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_amr_key), getBoolean(R.bool.pref_codec_amr_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_amr)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_amrwb_key), getBoolean(R.bool.pref_codec_amrwb_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_amrwb)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_g729_key), getBoolean(R.bool.pref_codec_g729_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_g729)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_gsm_key), getBoolean(R.bool.pref_codec_gsm_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_gsm)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_g722_key), getBoolean(R.bool.pref_codec_g722_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_g722)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_silk24_key), getBoolean(R.bool.pref_codec_silk24_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_silk24)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_silk16_key), getBoolean(R.bool.pref_codec_silk16_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_silk16)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_pcmu_key), getBoolean(R.bool.pref_codec_pcmu_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_pcmu)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_codec_pcma_key), getBoolean(R.bool.pref_codec_pcma_default))) { - solo.clickOnText(context.getString(R.string.pref_codec_pcma)); - solo.sleep(500); - } - } - - private void disableAllEnabledVideoCodecs() { - Context context = getActivity(); - - goToVideoCodecsSettings(); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - if (prefs.getBoolean(context.getString(R.string.pref_video_codec_vp8_key), getBoolean(R.bool.pref_video_codec_vp8_default))) { - solo.clickOnText(context.getString(R.string.pref_video_codec_vp8_title)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_video_codec_h264_key), getBoolean(R.bool.pref_video_codec_h264_default))) { - solo.clickOnText(context.getString(R.string.pref_video_codec_h264_title)); - solo.sleep(500); - } - - if (prefs.getBoolean(context.getString(R.string.pref_video_codec_mpeg4_key), getBoolean(R.bool.pref_video_codec_mpeg4_default))) { - solo.clickOnText(context.getString(R.string.pref_video_codec_mpeg4_title)); - solo.sleep(500); - } - } - - private void goToDialerAndOutgoingCall(String codecTextToAssert) { - Context context = getActivity(); - - solo.clickOnView(solo.getView(R.id.dialer)); - solo.clickOnView(solo.getView(R.id.Adress)); - solo.enterText((EditText) solo.getView(R.id.Adress), sipAdressToCall); - solo.clickOnView(solo.getView(R.id.Call)); - - boolean incompatibleMediaParams = solo.waitForText(context.getString(R.string.error_incompatible_media), 1, 1500); - if (!incompatibleMediaParams) { // There is a possiblity the callee doesn't support the codec, in which case we don't have to wait for the incall view - solo.waitForActivity("InCallActivity", 1000); - solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - solo.clickOnView(solo.getView(R.id.status)); - solo.waitForText(codecTextToAssert, 1, 6000); - Assert.assertTrue(solo.searchText(codecTextToAssert, 1)); - - View hangUp = solo.getView(R.id.hangUp); - if (hangUp.getVisibility() == View.VISIBLE) - solo.clickOnView(hangUp); - else { // While on video, menu can hide. Click the first time to display it back, then click again to really hang up - solo.clickOnView(hangUp); - solo.sleep(1000); - solo.clickOnView(hangUp); - } - } else { - Log.testFailure("Incompatible media parameters for codec " + codecTextToAssert); - } - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - } - - public void testADisableVideo() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(4); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - if (prefs.getBoolean(context.getString(R.string.pref_video_enable_key), getBoolean(R.bool.pref_video_enable_default))) { - solo.clickOnText(context.getString(R.string.pref_video_enable_title)); - solo.sleep(500); - } - } - - public void testBOutgoingAudioCallPCMA() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_pcma)); - solo.goBack(); - - goToDialerAndOutgoingCall("PCMA"); - solo.sleep(1000); - } - - public void testCOutgoingAudioCallPCMU() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_pcmu)); - solo.goBack(); - - goToDialerAndOutgoingCall("PCMU"); - solo.sleep(1000); - } - - public void testDOutgoingAudioCallSilk16() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_silk16)); - solo.goBack(); - - goToDialerAndOutgoingCall("SILK"); - solo.sleep(1000); - } - - public void testEOutgoingAudioCallSilk24() { -// Silk24 no longer available -// Context context = getActivity(); -// disableAllEnabledAudioCodecs(); -// solo.clickOnText(context.getString(R.string.pref_codec_silk24)); -// solo.goBack(); -// -// goToDialerAndOutgoingCall("SILK"); -// solo.sleep(1000); - } - - public void testFOutgoingAudioCallG722() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_g722)); - solo.goBack(); - - goToDialerAndOutgoingCall("G722"); - solo.sleep(1000); - } - - public void testGOutgoingAudioCallGSM() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_gsm)); - solo.goBack(); - - goToDialerAndOutgoingCall("GSM"); - solo.sleep(1000); - } - - public void testHOutgoingAudioCallAMR() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_amr)); - solo.goBack(); - - goToDialerAndOutgoingCall("AMR"); - solo.sleep(1000); - } - - public void testIOutgoingAudioCallAMRWB() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_amrwb)); - solo.goBack(); - - goToDialerAndOutgoingCall("AMRWB"); - solo.sleep(1000); - } - - public void testJOutgoingAudioCallG729() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_g729)); - solo.goBack(); - - goToDialerAndOutgoingCall("G729"); - solo.sleep(1000); - } - - public void testKOutgoingAudioCallILBC() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_ilbc)); - solo.goBack(); - - goToDialerAndOutgoingCall("iLBC"); - solo.sleep(1000); - } - - public void testLOutgoingAudioCallSpeex8() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_speex8)); - solo.goBack(); - - goToDialerAndOutgoingCall("speex"); - solo.sleep(1000); - } - - public void testMOutgoingAudioCallSpeex16() { - Context context = getActivity(); - disableAllEnabledAudioCodecs(); - solo.clickOnText(context.getString(R.string.pref_codec_speex16)); - solo.goBack(); - - goToDialerAndOutgoingCall("speex"); - solo.sleep(1000); - } - - public void testNEnableVideo() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - solo.sleep(500); - selectItemInListOnUIThread(4); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - if (!prefs.getBoolean(context.getString(R.string.pref_video_enable_key), getBoolean(R.bool.pref_video_enable_default))) { - solo.clickOnText(context.getString(R.string.pref_video_enable_title)); - solo.sleep(500); - } - } - - public void testOOutgoingVideoCallVP8() { - Context context = getActivity(); - disableAllEnabledVideoCodecs(); - solo.clickOnText(context.getString(R.string.pref_video_codec_vp8_title)); - solo.goBack(); - - goToDialerAndOutgoingCall("VP8"); - solo.sleep(1000); - } - - public void testPOutgoingVideoCallH264() { - Context context = getActivity(); - disableAllEnabledVideoCodecs(); - solo.clickOnText(context.getString(R.string.pref_video_codec_h264_title)); - solo.goBack(); - - goToDialerAndOutgoingCall("H264"); - solo.sleep(1000); - } - - public void testQOutgoingVideoCallMPG4() { - Context context = getActivity(); - disableAllEnabledVideoCodecs(); - solo.clickOnText(context.getString(R.string.pref_video_codec_mpeg4_title)); - solo.goBack(); - - goToDialerAndOutgoingCall("MP4V-ES"); - solo.sleep(1000); - } - - @Override - public void tearDown() throws Exception { - if (solo.getCurrentActivity().getClass() == InCallActivity.class) { - solo.clickOnView(solo.getView(R.id.hangUp)); - } - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/Calls.java b/tests/src/org/linphone/test/Calls.java new file mode 100644 index 000000000..b74b361f4 --- /dev/null +++ b/tests/src/org/linphone/test/Calls.java @@ -0,0 +1,50 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.InCallActivity; +import org.linphone.LinphoneActivity; +import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCore.RegistrationState; + +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; + +public class Calls extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAInitLinphoneCore() { + LinphoneTestManager.createAndStart(aContext, iContext); + + solo.sleep(2000); + Assert.assertEquals(RegistrationState.RegistrationOk, LinphoneTestManager.getLc().getProxyConfigList()[0].getState()); + } + + @SmallTest + @MediumTest + @LargeTest + public void testBSimpleCall() { + solo.enterText(0, iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + solo.waitForActivity("InCallActivity", 5000); + solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); + + solo.sleep(2000); + Assert.assertEquals(LinphoneCall.State.StreamsRunning, LinphoneTestManager.getLc().getCalls()[0].getState()); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @SmallTest + @MediumTest + @LargeTest + public void testZShutDownLinphoneCore() { + LinphoneTestManager.destroy(); + } +} diff --git a/tests/src/org/linphone/test/Chat.java b/tests/src/org/linphone/test/Chat.java new file mode 100644 index 000000000..14997631f --- /dev/null +++ b/tests/src/org/linphone/test/Chat.java @@ -0,0 +1,95 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.LinphoneActivity; +import org.linphone.core.LinphoneChatMessage; +import org.linphone.core.LinphoneChatMessage.State; +import org.linphone.core.LinphoneChatRoom; +import org.linphone.core.LinphoneCore.RegistrationState; +import org.linphone.mediastream.Log; + +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; + +public class Chat extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAInitLinphoneCore() { + LinphoneTestManager.createAndStart(aContext, iContext); + + solo.sleep(2000); + Assert.assertEquals(RegistrationState.RegistrationOk, LinphoneTestManager.getLc().getProxyConfigList()[0].getState()); + } + + @LargeTest + public void testBEmptyChatHistory() { + goToChat(); + + Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.no_chat_history))); + } + + @SmallTest + @MediumTest + @LargeTest + public void testCSendTextMessage() { + goToChat(); + + solo.enterText(0, "sip:" + iContext.getString(R.string.account_test_calls_login) + "@" + iContext.getString(R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.newDiscussion)); + + solo.enterText(0, iContext.getString(R.string.chat_test_text_sent)); + solo.clickOnView(solo.getView(org.linphone.R.id.sendMessage)); + + solo.sleep(1000); + Assert.assertTrue(solo.searchText(iContext.getString(R.string.chat_test_text_sent))); + Assert.assertEquals(iContext.getString(R.string.chat_test_text_sent), LinphoneTestManager.getInstance().lastMessageReceived); + } + + @LargeTest + public void testDNotEmptyChatHistory() { + goToChat(); + + Assert.assertFalse(solo.searchText(aContext.getString(org.linphone.R.string.no_chat_history))); + Assert.assertTrue(solo.searchText(iContext.getString(org.linphone.test.R.string.account_test_calls_login))); + } + + @SmallTest + @MediumTest + @LargeTest + public void testEReceiveTextMessage() { + goToChat(); + solo.clickOnText(iContext.getString(org.linphone.test.R.string.account_test_calls_login)); + + LinphoneChatRoom chatRoom = LinphoneTestManager.getLc().createChatRoom("sip:" + iContext.getString(R.string.account_linphone_login) + "@" + iContext.getString(R.string.account_linphone_domain)); + LinphoneChatMessage msg = chatRoom.createLinphoneChatMessage(iContext.getString(R.string.chat_test_text_received)); + chatRoom.sendMessage(msg, new LinphoneChatMessage.StateListener() { + @Override + public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, + State state) { + Log.e("Chat message state = " + state.toString()); + } + }); + + solo.sleep(1000); + Assert.assertTrue(solo.searchText(iContext.getString(R.string.chat_test_text_received))); + } + + @SmallTest + @MediumTest + @LargeTest + public void testZShutDownLinphoneCore() { + LinphoneTestManager.destroy(); + } + + private void goToChat() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.chat)); + } + +} diff --git a/tests/src/org/linphone/test/ChatTest.java b/tests/src/org/linphone/test/ChatTest.java deleted file mode 100644 index f48d0cc27..000000000 --- a/tests/src/org/linphone/test/ChatTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.LinphoneActivity; -import org.linphone.R; - -import android.content.Context; -import android.test.ActivityInstrumentationTestCase2; -import android.widget.EditText; - -import com.jayway.android.robotium.solo.Solo; - -public class ChatTest extends ActivityInstrumentationTestCase2 { - - private static final String testTextMessage = "Test"; - private Solo solo; - - @SuppressWarnings("deprecation") - public ChatTest() { - super("org.linphone", LinphoneActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - public void testADisplayEmptyChatList() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.chat)); - - Assert.assertTrue(solo.searchText(context.getString(R.string.no_chat_history))); - Log.testSuccess("Empty chat list displayed"); - } - - public void testBStartConversationAndSaveItAsDraft() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.chat)); - - solo.enterText((EditText) solo.getView(R.id.newFastChat), "cotcot@sip.linphone.org"); - solo.clickOnText(context.getString(R.string.button_new_chat)); - solo.sleep(1000); - - solo.enterText((EditText) solo.getView(R.id.message), testTextMessage); - solo.goBack(); - solo.sleep(1000); - Assert.assertTrue(solo.searchText(context.getString(R.string.draft))); - Log.testSuccess("Conversation created and message saved as draft"); - } - - public void testCUseSavedDraftMessageAndSentIt() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.chat)); - - solo.clickOnText(context.getString(R.string.draft)); - Assert.assertTrue(solo.searchText(testTextMessage)); - Log.testSuccess("Draft successfully restored"); - - solo.clickOnText(context.getString(R.string.button_send_message)); - solo.sleep(1000); - Assert.assertTrue(solo.searchText(testTextMessage)); - Log.testSuccess("Chat message sent"); - - solo.goBack(); - solo.sleep(1000); - Assert.assertTrue(solo.searchText("cotcot")); - Assert.assertFalse(solo.searchText(context.getString(R.string.draft), true)); - Log.testSuccess("Conversation created but no more saved as draft"); - } - - public void testDDeleteMessage() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.chat)); - - solo.clickOnText("cotcot"); - Assert.assertTrue(solo.searchText(testTextMessage)); - solo.clickLongOnText(testTextMessage); - solo.sleep(1000); - - solo.clickOnText(context.getString(R.string.delete)); - solo.sleep(1000); - Assert.assertFalse(solo.searchText(testTextMessage)); - Log.testSuccess("Chat message successfully deleted"); - } - - public void testEIncomingMessageAndDeleteConversation() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.chat)); - - solo.enterText((EditText) solo.getView(R.id.newFastChat), "junit"); - solo.clickOnText(context.getString(R.string.button_new_chat)); - solo.sleep(1000); - - solo.enterText((EditText) solo.getView(R.id.message), testTextMessage); - solo.clickOnText(context.getString(R.string.button_send_message)); - solo.sleep(1000); - - Assert.assertTrue(solo.searchText(testTextMessage, 2)); - Log.testSuccess("Chat message successfully received"); - - solo.goBack(); - Assert.assertTrue(solo.searchText("junit", 2)); - solo.clickOnView(solo.getView(R.id.clearFastChatField)); - EditText fastChat = (EditText) solo.getView(R.id.newFastChat); - Assert.assertEquals(fastChat.getText().toString(), ""); - Log.testSuccess("Fast new chat cleaned"); - - solo.clickOnText(context.getString(R.string.button_edit)); - solo.clickOnText("junit"); - solo.clickOnText(context.getString(R.string.button_ok)); - solo.sleep(1000); - - Assert.assertTrue(solo.searchText(context.getString(R.string.no_chat_history))); - Log.testSuccess("Conversation successfully deleted"); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/History.java b/tests/src/org/linphone/test/History.java new file mode 100644 index 000000000..8d2243bef --- /dev/null +++ b/tests/src/org/linphone/test/History.java @@ -0,0 +1,29 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.LinphoneActivity; + +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; + +public class History extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testACheckForTestCallInHistory() { + goToHistory(); + + Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.today))); + Assert.assertTrue(solo.searchText(iContext.getString(org.linphone.test.R.string.account_test_calls_login))); + } + + private void goToHistory() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.history)); + } +} diff --git a/tests/src/org/linphone/test/HistoryTest.java b/tests/src/org/linphone/test/HistoryTest.java deleted file mode 100644 index ac102d9b8..000000000 --- a/tests/src/org/linphone/test/HistoryTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.InCallActivity; -import org.linphone.LinphoneActivity; -import org.linphone.LinphoneManager; -import org.linphone.R; - -import android.content.Context; -import android.test.ActivityInstrumentationTestCase2; -import android.widget.EditText; -import android.widget.ListView; - -import com.jayway.android.robotium.solo.Solo; - -public class HistoryTest extends ActivityInstrumentationTestCase2 { - - private Solo solo; - - @SuppressWarnings("deprecation") - public HistoryTest() { - super("org.linphone", LinphoneActivity.class); - } - - private void selectItemInListOnUIThread(final int item) { - solo.sleep(500); - getActivity().runOnUiThread(new Runnable() { - public void run() { - ListView list = (ListView) solo.getView(android.R.id.list); - list.setSelection(item); - } - }); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - - //Depending on previous tests, history may not be empty - LinphoneManager.getLc().clearCallLogs(); - } - - public void testADisplayEmptyHistory() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - Assert.assertTrue(solo.searchText(context.getString(R.string.no_call_history))); - Log.testSuccess("Empty History displayed"); - } - - public void testBCallToFillHistory() { - Context context = getActivity(); - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - - solo.clickOnView(solo.getView(R.id.settings)); - selectItemInListOnUIThread(4); - solo.clickOnText(context.getString(R.string.pref_video_enable_title)); - - solo.clickOnView(solo.getView(R.id.dialer)); - solo.clickOnView(solo.getView(R.id.Adress)); - solo.enterText((EditText) solo.getView(R.id.Adress), "cotcot@sip.linphone.org"); - solo.clickOnView(solo.getView(R.id.Call)); - - solo.waitForActivity("InCallActivity", 2000); - solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - Log.testSuccess("Outgoing call to cotcot successfull"); - - solo.clickOnView(solo.getView(R.id.hangUp)); - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - - solo.clickOnView(solo.getView(R.id.history)); - Assert.assertTrue(solo.searchText("cotcot")); - Log.testSuccess("Cotcot entry in history"); - } - - public void testCDisplayEmptyMissedCallHistory() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - solo.clickOnText(context.getString(R.string.button_missed_call)); - Assert.assertTrue(solo.searchText(context.getString(R.string.no_missed_call_history))); - Log.testSuccess("Empty Missed Call History displayed"); - } - - public void testDCallBackFromHistoryEntry() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - solo.clickOnText(context.getString(R.string.button_all_call)); - solo.sleep(500); - solo.clickOnText("cotcot"); - solo.waitForActivity("InCallActivity", 2000); - solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - Log.testSuccess("Outgoing call to cotcot from history successfull"); - - solo.clickOnView(solo.getView(R.id.hangUp)); - solo.waitForActivity("LinphoneActivity", 2000); - } - - public void testEDisplayHistoryDetails() { - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - solo.clickOnView(solo.getView(R.id.detail)); - Assert.assertTrue(solo.searchText("cotcot@sip.linphone.org")); - Log.testSuccess("Displaying history entry details"); - } - - public void testFDeleteHistoryEntry() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - solo.clickOnText(context.getString(R.string.button_edit)); - solo.sleep(1000); - solo.clickOnText("cotcot"); - solo.clickOnText(context.getString(R.string.button_ok)); - - Assert.assertFalse(solo.searchText("cotcot", 2)); - Log.testSuccess("Clean history from one cotcot entries"); - } - - public void testGDeleteAllHistoryEntries() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.history)); - - solo.clickOnText(context.getString(R.string.button_edit)); - solo.sleep(2000); - solo.clickOnText(context.getString(R.string.button_delete_all)); - solo.clickOnText(context.getString(R.string.button_ok)); - - Assert.assertTrue(solo.searchText(context.getString(R.string.no_call_history))); - Log.testSuccess("Clean history from all entries"); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/LinphoneTestManager.java b/tests/src/org/linphone/test/LinphoneTestManager.java new file mode 100644 index 000000000..c4a9e4425 --- /dev/null +++ b/tests/src/org/linphone/test/LinphoneTestManager.java @@ -0,0 +1,528 @@ +package org.linphone.test; + +import java.util.Timer; +import java.util.TimerTask; + +import org.linphone.LinphoneException; +import org.linphone.LinphoneManager; +import org.linphone.LinphoneManager.LinphoneConfigException; +import org.linphone.LinphoneService; +import org.linphone.R; +import org.linphone.core.LinphoneAddress; +import org.linphone.core.LinphoneAuthInfo; +import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCall.State; +import org.linphone.core.LinphoneCallStats; +import org.linphone.core.LinphoneChatMessage; +import org.linphone.core.LinphoneChatRoom; +import org.linphone.core.LinphoneCore; +import org.linphone.core.LinphoneCore.EcCalibratorStatus; +import org.linphone.core.LinphoneCore.FirewallPolicy; +import org.linphone.core.LinphoneCore.GlobalState; +import org.linphone.core.LinphoneCore.MediaEncryption; +import org.linphone.core.LinphoneCore.RegistrationState; +import org.linphone.core.LinphoneCore.Transports; +import org.linphone.core.LinphoneCoreException; +import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.LinphoneCoreListener; +import org.linphone.core.LinphoneFriend; +import org.linphone.core.LinphoneInfoMessage; +import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.PayloadType; +import org.linphone.mediastream.Log; +import org.linphone.mediastream.Version; +import org.linphone.mediastream.video.capture.AndroidVideoApi5JniWrapper; +import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; +import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera; + +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager.NameNotFoundException; +import android.telephony.TelephonyManager; + +public class LinphoneTestManager implements LinphoneCoreListener { + + private static LinphoneTestManager instance; + private Context mContext, mIContext; + private LinphoneCore mLc; + private static Transports initialTransports; + + public String lastMessageReceived; + + private Timer mTimer = new Timer("Linphone scheduler"); + + private LinphoneTestManager(Context ac, Context ic) { + mContext = ac; + mIContext = ic; + } + + public static LinphoneTestManager createAndStart(Context ac, Context ic) { + if (instance != null) + throw new RuntimeException("Linphone Manager is already initialized"); + + instance = new LinphoneTestManager(ac, ic); + instance.startLibLinphone(ac); + TelephonyManager tm = (TelephonyManager) ac.getSystemService(Context.TELEPHONY_SERVICE); + boolean gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE; + setGsmIdle(gsmIdle); + + if (Version.isVideoCapable()) + AndroidVideoApi5JniWrapper.setAndroidSdkVersion(Version.sdk()); + return instance; + } + + private synchronized void startLibLinphone(Context c) { + try { + LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); + + mLc = LinphoneCoreFactory.instance().createLinphoneCore(this); + mLc.getConfig().setInt("sip", "store_auth_info", 0); + mLc.setContext(c); + try { + String versionName = c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionName; + if (versionName == null) { + versionName = String.valueOf(c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionCode); + } + mLc.setUserAgent("LinphoneAndroid", versionName); + } catch (NameNotFoundException e) { + Log.e(e, "cannot get version name"); + } + + mLc.enableIpv6(false); + mLc.setRing(null); + + int availableCores = Runtime.getRuntime().availableProcessors(); + Log.w("MediaStreamer : " + availableCores + " cores detected and configured"); + mLc.setCpuCount(availableCores); + + try { + initFromConf(); + } catch (LinphoneException e) { + Log.w("no config ready yet"); + } + + TimerTask lTask = new TimerTask() { + @Override + public void run() { + mLc.iterate(); + } + }; + mTimer.scheduleAtFixedRate(lTask, 0, 20); + + IntentFilter lFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); + lFilter.addAction(Intent.ACTION_SCREEN_OFF); + + resetCameraFromPreferences(); + } + catch (Exception e) { + Log.e(e, "Cannot start linphone"); + } + } + + private void resetCameraFromPreferences() { + boolean useFrontCam = true; + int camId = 0; + AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras(); + for (AndroidCamera androidCamera : cameras) { + if (androidCamera.frontFacing == useFrontCam) + camId = androidCamera.id; + } + LinphoneManager.getLc().setVideoDevice(camId); + } + + public void initFromConf() throws LinphoneConfigException { + LinphoneCoreFactory.instance().setDebugMode(true, "LinphoneTester"); + + if (initialTransports == null) + initialTransports = mLc.getSignalingTransportPorts(); + + setSignalingTransportsFromConfiguration(initialTransports); + initMediaEncryption(); + + mLc.setVideoPolicy(true, true); + + readAndSetAudioAndVideoPorts(); + + String defaultIncomingCallTimeout = mContext.getString(org.linphone.R.string.pref_incoming_call_timeout_default); + int incomingCallTimeout = tryToParseIntValue(defaultIncomingCallTimeout, defaultIncomingCallTimeout); + mLc.setIncomingTimeout(incomingCallTimeout); + + try { + // Configure audio codecs +// enableDisableAudioCodec("speex", 32000, 1, R.string.pref_codec_speex32_key); + enableDisableAudioCodec("speex", 32000, 1, false); + enableDisableAudioCodec("speex", 16000, 1, R.string.pref_codec_speex16_key); + enableDisableAudioCodec("speex", 8000, 1, R.string.pref_codec_speex8_key); + enableDisableAudioCodec("iLBC", 8000, 1, R.string.pref_codec_ilbc_key); + enableDisableAudioCodec("GSM", 8000, 1, R.string.pref_codec_gsm_key); + enableDisableAudioCodec("G722", 8000, 1, R.string.pref_codec_g722_key); + enableDisableAudioCodec("G729", 8000, 1, R.string.pref_codec_g729_key); + enableDisableAudioCodec("PCMU", 8000, 1, R.string.pref_codec_pcmu_key); + enableDisableAudioCodec("PCMA", 8000, 1, R.string.pref_codec_pcma_key); + enableDisableAudioCodec("AMR", 8000, 1, R.string.pref_codec_amr_key); + enableDisableAudioCodec("AMR-WB", 16000, 1, R.string.pref_codec_amrwb_key); + //enableDisableAudioCodec("SILK", 24000, 1, R.string.pref_codec_silk24_key); + enableDisableAudioCodec("SILK", 24000, 1, false); + enableDisableAudioCodec("SILK", 16000, 1, R.string.pref_codec_silk16_key); + //enableDisableAudioCodec("SILK", 12000, 1, R.string.pref_codec_silk12_key); + enableDisableAudioCodec("SILK", 12000, 1, false); + enableDisableAudioCodec("SILK", 8000, 1, R.string.pref_codec_silk8_key); + + // Configure video codecs + for (PayloadType videoCodec : mLc.getVideoCodecs()) { + enableDisableVideoCodecs(videoCodec); + } + } catch (LinphoneCoreException e) { + throw new LinphoneConfigException(mContext.getString(R.string.wrong_settings),e); + } + boolean isVideoEnabled = true; + mLc.enableVideo(isVideoEnabled, isVideoEnabled); + + //stun server + String lStun = mContext.getString(R.string.default_stun); + mLc.setStunServer(lStun); + if (lStun!=null && lStun.length()>0) { + mLc.setFirewallPolicy(FirewallPolicy.UseIce); + } else { + mLc.setFirewallPolicy(FirewallPolicy.NoFirewall); + } + + //accounts + try { + initAccounts(); + + //init network state + mLc.setNetworkReachable(true); + } catch (LinphoneCoreException e) { + throw new LinphoneConfigException(mContext.getString(R.string.wrong_settings),e); + } + } + + public boolean detectVideoCodec(String mime) { + for (PayloadType videoCodec : mLc.getVideoCodecs()) { + if (mime.equals(videoCodec.getMime())) return true; + } + return false; + } + + public boolean detectAudioCodec(String mime){ + for (PayloadType audioCodec : mLc.getAudioCodecs()) { + if (mime.equals(audioCodec.getMime())) return true; + } + return false; + } + + void initMediaEncryption(){ + MediaEncryption me=MediaEncryption.None; + mLc.setMediaEncryption(me); + } + + public void initAccounts() throws LinphoneCoreException { + mLc.clearAuthInfos(); + mLc.clearProxyConfigs(); + + String username = mIContext.getString(org.linphone.test.R.string.account_test_calls_login); + String password = mIContext.getString(org.linphone.test.R.string.account_test_calls_pwd); + String domain = mIContext.getString(org.linphone.test.R.string.account_test_calls_domain); + LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username, password, null); + mLc.addAuthInfo(lAuthInfo); + String identity = "sip:" + username +"@" + domain; + String proxy = "sip:" + domain; + LinphoneProxyConfig proxycon = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, null, true); + mLc.addProxyConfig(proxycon); + mLc.setDefaultProxyConfig(proxycon); + + LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig(); + if (lDefaultProxyConfig != null) { + //escape + + lDefaultProxyConfig.setDialEscapePlus(false); + } else if (LinphoneService.isReady()) { + LinphoneService.instance().onRegistrationStateChanged(RegistrationState.RegistrationNone, null); + } + } + + private void readAndSetAudioAndVideoPorts() throws NumberFormatException { + int aPortStart, aPortEnd, vPortStart, vPortEnd; + int defaultAudioPort, defaultVideoPort; + defaultAudioPort = Integer.parseInt(mContext.getString(R.string.default_audio_port)); + defaultVideoPort = Integer.parseInt(mContext.getString(R.string.default_video_port)); + aPortStart = aPortEnd = defaultAudioPort; + vPortStart = vPortEnd = defaultVideoPort; + + String audioPort = String.valueOf(aPortStart); + String videoPort = String.valueOf(vPortStart); + + if (audioPort.contains("-")) { + // Port range + aPortStart = Integer.parseInt(audioPort.split("-")[0]); + aPortEnd = Integer.parseInt(audioPort.split("-")[1]); + } else { + try { + aPortStart = aPortEnd = Integer.parseInt(audioPort); + } catch (NumberFormatException nfe) { + aPortStart = aPortEnd = defaultAudioPort; + } + } + + if (videoPort.contains("-")) { + // Port range + vPortStart = Integer.parseInt(videoPort.split("-")[0]); + vPortEnd = Integer.parseInt(videoPort.split("-")[1]); + } else { + try { + vPortStart = vPortEnd = Integer.parseInt(videoPort); + } catch (NumberFormatException nfe) { + vPortStart = vPortEnd = defaultVideoPort; + } + } + + if (aPortStart >= aPortEnd) { + mLc.setAudioPort(aPortStart); + } else { + mLc.setAudioPortRange(aPortStart, aPortEnd); + } + + if (vPortStart >= vPortEnd) { + mLc.setVideoPort(vPortStart); + } else { + mLc.setVideoPortRange(vPortStart, vPortEnd); + } + } + + private int tryToParseIntValue(String valueToParse, String defaultValue) { + return tryToParseIntValue(valueToParse, Integer.parseInt(defaultValue)); + } + + private int tryToParseIntValue(String valueToParse, int defaultValue) { + try { + int returned = Integer.parseInt(valueToParse); + return returned; + } catch (NumberFormatException nfe) { + + } + return defaultValue; + } + + public static synchronized final LinphoneTestManager getInstance() { + return instance; + } + + private void setSignalingTransportsFromConfiguration(Transports t) { + Transports ports = new Transports(t); + boolean useRandomPort = true; + int lPreviousPort = 5060; + if (lPreviousPort>0xFFFF || useRandomPort) { + lPreviousPort=(int)(Math.random() * (0xFFFF - 1024)) + 1024; + Log.w("Using random port " + lPreviousPort); + } + + ports.udp = 0; + ports.tls = 0; + ports.tcp = lPreviousPort; + + mLc.setSignalingTransportPorts(ports); + } + + public static synchronized final LinphoneCore getLc() { + return getInstance().mLc; + } + + private void enableDisableAudioCodec(String codec, int rate, int channels, int key) throws LinphoneCoreException { + PayloadType pt = mLc.findPayloadType(codec, rate, channels); + if (pt !=null) { + boolean enable = true; + mLc.enablePayloadType(pt, enable); + } + } + private void enableDisableAudioCodec(String codec, int rate, int channels, boolean enable) throws LinphoneCoreException { + PayloadType pt = mLc.findPayloadType(codec, rate, channels); + if (pt !=null) { + mLc.enablePayloadType(pt, enable); + } + } + + private void enableDisableVideoCodecs(PayloadType videoCodec) throws LinphoneCoreException { + boolean enable = true; + mLc.enablePayloadType(videoCodec, enable); + } + + private int savedMaxCallWhileGsmIncall; + private synchronized void preventSIPCalls() { + if (savedMaxCallWhileGsmIncall != 0) { + Log.w("SIP calls are already blocked due to GSM call running"); + return; + } + savedMaxCallWhileGsmIncall = mLc.getMaxCalls(); + mLc.setMaxCalls(0); + } + private synchronized void allowSIPCalls() { + if (savedMaxCallWhileGsmIncall == 0) { + Log.w("SIP calls are already allowed as no GSM call knowned to be running"); + return; + } + mLc.setMaxCalls(savedMaxCallWhileGsmIncall); + savedMaxCallWhileGsmIncall = 0; + } + public static void setGsmIdle(boolean gsmIdle) { + LinphoneTestManager mThis = instance; + if (mThis == null) return; + if (gsmIdle) { + mThis.allowSIPCalls(); + } else { + mThis.preventSIPCalls(); + } + } + + private void doDestroy() { + try { + mTimer.cancel(); + mLc.destroy(); + } + catch (RuntimeException e) { + e.printStackTrace(); + } + finally { + mLc = null; + instance = null; + } + } + + public static synchronized void destroy() { + if (instance == null) return; + instance.doDestroy(); + } + + @Override + public void authInfoRequested(LinphoneCore lc, String realm, String username) { + // TODO Auto-generated method stub + + } + + @Override + public void globalState(LinphoneCore lc, GlobalState state, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void callState(LinphoneCore lc, LinphoneCall call, State cstate, + String message) { + // TODO Auto-generated method stub + Log.e("Call state = " + cstate.toString()); + if (cstate == LinphoneCall.State.IncomingReceived) { + try { + mLc.acceptCall(call); + } catch (LinphoneCoreException e) { + e.printStackTrace(); + } + } + } + + @Override + public void callStatsUpdated(LinphoneCore lc, LinphoneCall call, + LinphoneCallStats stats) { + // TODO Auto-generated method stub + + } + + @Override + public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call, + boolean encrypted, String authenticationToken) { + // TODO Auto-generated method stub + + } + + @Override + public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, + RegistrationState cstate, String smessage) { + // TODO Auto-generated method stub + Log.e("Registration state = " + cstate.toString()); + } + + @Override + public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, + String url) { + // TODO Auto-generated method stub + + } + + @Override + public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) { + // TODO Auto-generated method stub + + } + + @Override + public void textReceived(LinphoneCore lc, LinphoneChatRoom cr, + LinphoneAddress from, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, + LinphoneChatMessage message) { + // TODO Auto-generated method stub + Log.e("Message received = " + message.getText()); + lastMessageReceived = message.getText(); + } + + @Override + public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) { + // TODO Auto-generated method stub + + } + + @Override + public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status, + int delay_ms, Object data) { + // TODO Auto-generated method stub + + } + + @Override + public void notifyReceived(LinphoneCore lc, LinphoneCall call, + LinphoneAddress from, byte[] event) { + // TODO Auto-generated method stub + + } + + @Override + public void show(LinphoneCore lc) { + // TODO Auto-generated method stub + + } + + @Override + public void displayStatus(LinphoneCore lc, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void displayMessage(LinphoneCore lc, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void displayWarning(LinphoneCore lc, String message) { + // TODO Auto-generated method stub + + } + + @Override + public void transferState(LinphoneCore lc, LinphoneCall call, + State new_call_state) { + // TODO Auto-generated method stub + + } + + @Override + public void infoReceived(LinphoneCore lc, LinphoneCall call, + LinphoneInfoMessage info) { + // TODO Auto-generated method stub + + } +} diff --git a/tests/src/org/linphone/test/Log.java b/tests/src/org/linphone/test/Log.java deleted file mode 100644 index 63e3df1f7..000000000 --- a/tests/src/org/linphone/test/Log.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.linphone.test; - -public class Log { - public static void testSuccess(String testName) { - android.util.Log.wtf("TEST SUCCESS", testName); - } - - public static void testFailure(String testName) { - android.util.Log.wtf("TEST FAILURE", testName); - } -} diff --git a/tests/src/org/linphone/test/PushNotificationTest.java b/tests/src/org/linphone/test/PushNotificationTest.java deleted file mode 100644 index aa725d1bd..000000000 --- a/tests/src/org/linphone/test/PushNotificationTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.linphone.test; - -import java.util.ArrayList; -import java.util.List; - -import junit.framework.Assert; - -import org.apache.http.HttpVersion; -import org.apache.http.NameValuePair; -import org.apache.http.client.HttpClient; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.BasicResponseHandler; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.HttpParams; -import org.apache.http.params.HttpProtocolParams; -import org.apache.http.protocol.HTTP; -import org.linphone.LinphoneActivity; -import org.linphone.R; -import org.linphone.mediastream.Log; - -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; - -import com.jayway.android.robotium.solo.Solo; - -public class PushNotificationTest extends - ActivityInstrumentationTestCase2 { - - private Solo solo; - - @SuppressWarnings("deprecation") - public PushNotificationTest() { - super("org.linphone", LinphoneActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - private HttpClient createHttpClient() - { - HttpParams params = new BasicHttpParams(); - HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); - HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET); - HttpProtocolParams.setUseExpectContinue(params, true); - - SchemeRegistry schReg = new SchemeRegistry(); - schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); - schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); - ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg); - - return new DefaultHttpClient(conMgr, params); - } - - public void testIncomingPushNotification() { - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - String regId = prefs.getString(getActivity().getString(R.string.push_reg_id_key), null); - - // Send a push notification - // To do the same from a terminal use: curl --header "Authorization: key=AIzaSyBJAhCVeeqIErwTfYwy-t83_EwvZlCFo9I" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"DEVICE_REG_ID\"]}" - HttpClient httpClient = createHttpClient(); - HttpPost httpPost = new HttpPost("https://android.googleapis.com/gcm/send"); - httpPost.setHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8"); - httpPost.setHeader("Authorization", "key=AIzaSyBJAhCVeeqIErwTfYwy-t83_EwvZlCFo9I"); // Test API -// httpPost.setHeader("Authorization", "key=AIzaSyDbCO1_KgFhkig_aaTutxx0jEHIib0i8C0"); - - List nameValuePairs = new ArrayList(2); - nameValuePairs.add(new BasicNameValuePair("data.test", "TEST")); - nameValuePairs.add(new BasicNameValuePair("registration_id", regId)); - try { - httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); - String result = httpClient.execute(httpPost, new BasicResponseHandler()); - Log.d("TEST Http POST result: " + result); - } catch (Exception e) { - e.printStackTrace(); - new junit.framework.TestFailure(this, e.getCause()); - } - - // Can be true if a previous notification worked and log hasn't been cleared since... - Assert.assertTrue(solo.waitForLogMessage("Push notification received", 3000)); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -} diff --git a/tests/src/org/linphone/test/SampleTest.java b/tests/src/org/linphone/test/SampleTest.java new file mode 100644 index 000000000..b3c23692b --- /dev/null +++ b/tests/src/org/linphone/test/SampleTest.java @@ -0,0 +1,45 @@ +package org.linphone.test; + +import org.linphone.LinphoneLauncherActivity; + +import android.content.Context; +import android.test.ActivityInstrumentationTestCase2; +import android.widget.ListView; + +import com.jayway.android.robotium.solo.Solo; + + + +public abstract class SampleTest extends ActivityInstrumentationTestCase2{ + + protected final int STRING_LENGTH_MAX = 20; + + protected Solo solo; + protected Context aContext, iContext; + + public SampleTest() { + super(LinphoneLauncherActivity.class); + } + + @Override + public void setUp() throws Exception { + solo = new Solo(getInstrumentation()); + aContext = getActivity(); + iContext = getInstrumentation().getContext(); + } + + @Override + public void tearDown() throws Exception { + solo.finishOpenedActivities(); + } + + protected void selectItemInListOnUIThread(final int item) { + solo.sleep(500); + getActivity().runOnUiThread(new Runnable() { + public void run() { + ListView list = (ListView) solo.getView(android.R.id.list); + list.setSelection(item); + } + }); + } +} \ No newline at end of file diff --git a/tests/src/org/linphone/test/SignalingTest.java b/tests/src/org/linphone/test/SignalingTest.java deleted file mode 100644 index 143811b9a..000000000 --- a/tests/src/org/linphone/test/SignalingTest.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.InCallActivity; -import org.linphone.LinphoneActivity; -import org.linphone.R; - -import android.content.Context; -import android.test.ActivityInstrumentationTestCase2; -import android.widget.EditText; -import android.widget.ListView; - -import com.jayway.android.robotium.solo.Solo; - -public class SignalingTest extends ActivityInstrumentationTestCase2 { - private static final String sipAdressToCall = "macmini@sip.linphone.org"; - private Solo solo; - - @SuppressWarnings("deprecation") - public SignalingTest() { - super("org.linphone", LinphoneActivity.class); - } - - private void selectItemInListOnUIThread(final int item) { - solo.sleep(500); - getActivity().runOnUiThread(new Runnable() { - public void run() { - ListView list = (ListView) solo.getView(android.R.id.list); - list.setSelection(item); - } - }); - } - - private void goToNetworkSettings() { - Context context = getActivity(); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - solo.clickOnView(solo.getView(R.id.settings)); - - selectItemInListOnUIThread(6); - solo.clickOnText(context.getString(R.string.pref_network_title)); - solo.sleep(500); - } - - private void goToDialerAndOutgoingCall() { - solo.clickOnView(solo.getView(R.id.dialer)); - solo.clickOnView(solo.getView(R.id.Adress)); - solo.enterText((EditText) solo.getView(R.id.Adress), sipAdressToCall); - solo.clickOnView(solo.getView(R.id.Call)); - - solo.waitForActivity("InCallActivity", 2000); - solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); - solo.waitForText("03", 1, 5000); - solo.clickOnView(solo.getView(R.id.hangUp)); - - solo.waitForActivity("LinphoneActivity", 2000); - solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } - - public void testARegistrationUDP() { - Context context = getActivity(); - goToNetworkSettings(); - - solo.clickOnText(context.getString(R.string.pref_transport)); - solo.clickOnText(context.getString(R.string.pref_transport_udp)); - solo.goBack(); - solo.goBack(); - - Assert.assertTrue(solo.searchText(context.getString(R.string.status_connected, 2000))); - } - - public void testBOutgoingCallUDP() { - goToDialerAndOutgoingCall(); - } - - public void testCRegistrationTCP() { - Context context = getActivity(); - goToNetworkSettings(); - - solo.clickOnText(context.getString(R.string.pref_transport)); - solo.clickOnText(context.getString(R.string.pref_transport_tcp)); - solo.goBack(); - solo.goBack(); - - Assert.assertTrue(solo.searchText(context.getString(R.string.status_connected, 2000))); - } - - public void testDOutgoingCallTCP() { - goToDialerAndOutgoingCall(); - } - - public void testERegistrationTLS() { - Context context = getActivity(); - goToNetworkSettings(); - - solo.clickOnText(context.getString(R.string.pref_transport)); - solo.clickOnText(context.getString(R.string.pref_transport_tls)); - solo.goBack(); - solo.goBack(); - - Assert.assertTrue(solo.searchText(context.getString(R.string.status_connected, 2000))); - } - - public void testFOutgoingCallTLS() { - goToDialerAndOutgoingCall(); - } - - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - } -}