From 13ccc6610fef25ab6bae99bde6ec1d1fe93ba458 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 12 Jun 2013 15:10:13 +0200 Subject: [PATCH] New tests --- .classpath | 4 +- src/org/linphone/LinphoneManager.java | 2 - tests/.classpath | 11 +- tests/AndroidManifest.xml | 29 +- tests/ant.properties | 18 + tests/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 0 bytes tests/res/drawable-ldpi/ic_launcher.png | Bin 2729 -> 0 bytes tests/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 0 bytes tests/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 0 bytes tests/res/values/config.xml | 23 + .../org/linphone/test/AccountAssistant.java | 171 ++++++ .../org/linphone/test/AccountManagement.java | 91 +++ tests/src/org/linphone/test/AccountsTest.java | 226 -------- .../linphone/test/AccountzFreephonieTest.java | 142 ----- .../test/AudioAndVideoCodecsTest.java | 385 ------------- tests/src/org/linphone/test/Calls.java | 50 ++ tests/src/org/linphone/test/Chat.java | 95 ++++ tests/src/org/linphone/test/ChatTest.java | 138 ----- tests/src/org/linphone/test/History.java | 29 + tests/src/org/linphone/test/HistoryTest.java | 159 ------ .../linphone/test/LinphoneTestManager.java | 528 ++++++++++++++++++ tests/src/org/linphone/test/Log.java | 11 - .../linphone/test/PushNotificationTest.java | 101 ---- tests/src/org/linphone/test/SampleTest.java | 45 ++ .../src/org/linphone/test/SignalingTest.java | 120 ---- 25 files changed, 1087 insertions(+), 1291 deletions(-) create mode 100644 tests/ant.properties delete mode 100644 tests/res/drawable-hdpi/ic_launcher.png delete mode 100644 tests/res/drawable-ldpi/ic_launcher.png delete mode 100644 tests/res/drawable-mdpi/ic_launcher.png delete mode 100644 tests/res/drawable-xhdpi/ic_launcher.png create mode 100644 tests/res/values/config.xml create mode 100644 tests/src/org/linphone/test/AccountAssistant.java create mode 100644 tests/src/org/linphone/test/AccountManagement.java delete mode 100644 tests/src/org/linphone/test/AccountsTest.java delete mode 100644 tests/src/org/linphone/test/AccountzFreephonieTest.java delete mode 100644 tests/src/org/linphone/test/AudioAndVideoCodecsTest.java create mode 100644 tests/src/org/linphone/test/Calls.java create mode 100644 tests/src/org/linphone/test/Chat.java delete mode 100644 tests/src/org/linphone/test/ChatTest.java create mode 100644 tests/src/org/linphone/test/History.java delete mode 100644 tests/src/org/linphone/test/HistoryTest.java create mode 100644 tests/src/org/linphone/test/LinphoneTestManager.java delete mode 100644 tests/src/org/linphone/test/Log.java delete mode 100644 tests/src/org/linphone/test/PushNotificationTest.java create mode 100644 tests/src/org/linphone/test/SampleTest.java delete mode 100644 tests/src/org/linphone/test/SignalingTest.java 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 96a442e5b8e9394ccf50bab9988cb2316026245d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9397 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 diff --git a/tests/res/drawable-mdpi/ic_launcher.png b/tests/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 359047dfa4ed206e41e2354f9c6b307e713efe32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 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 diff --git a/tests/res/drawable-xhdpi/ic_launcher.png b/tests/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 71c6d760f05183ef8a47c614d8d13380c8528499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14383 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 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(); - } -}