New tests
This commit is contained in:
parent
42e4cdc671
commit
13ccc6610f
25 changed files with 1087 additions and 1291 deletions
|
@ -1,17 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry excluding="org/linphone/mediastream/MediastreamerActivity.java" kind="src" path="submodules/linphone/mediastreamer2/java/src"/>
|
||||
<classpathentry kind="src" path="submodules/linphone/java/j2se"/>
|
||||
<classpathentry kind="src" path="submodules/linphone/java/common"/>
|
||||
<classpathentry kind="src" path="submodules/linphone/java/impl"/>
|
||||
<classpathentry kind="src" path="submodules/externals/axmlrpc/src/main/java"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="lib" path="libs/android-support-v4.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="libs/gcm.jar"/>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="lib" path="/home/viish/Work/linphone-android/tests/libs/robotium-solo-4.1.jar">
|
||||
<attributes>
|
||||
<attribute name="javadoc_location" value="jar:file:/home/viish/Work/linphone-android/tests/libs/robotium-solo-4.1-javadoc.jar!/"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/linphone-android-private"/>
|
||||
<classpathentry kind="lib" path="libs/robotium-solo-4.1.jar"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
||||
|
|
|
@ -4,16 +4,41 @@
|
|||
android:versionCode="1"
|
||||
android:versionName="1.0" >
|
||||
|
||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> />
|
||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
|
||||
<uses-permission android:name="android.permission.CALL_PHONE"/>
|
||||
<!-- Needed to allow Linphone to install on tablets, since android.permission.CALL_PHONE implies android.hardware.telephony is required -->
|
||||
<uses-feature android:name="android.hardware.telephony" android:required="false" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<!-- Needed to allow Linphone to install on tablets, since android.permission.CAMERA implies android.hardware.camera and android.hardware.camera.autofocus are required -->
|
||||
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||
<uses-permission android:name="android.permission.READ_LOGS" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<!-- Needed to store received images if the user wants to -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<!-- Needed to use our own Contact editor -->
|
||||
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
|
||||
<!-- Needed to route the audio to the bluetooth headset if available -->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
|
||||
|
||||
<instrumentation
|
||||
android:name="android.test.InstrumentationTestRunner"
|
||||
android:targetPackage="org.linphone" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name" >
|
||||
<uses-library android:name="android.test.runner" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
18
tests/ant.properties
Normal file
18
tests/ant.properties
Normal file
|
@ -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=../
|
Binary file not shown.
Before Width: | Height: | Size: 9.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 14 KiB |
23
tests/res/values/config.xml
Normal file
23
tests/res/values/config.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="account_linphone_login">wizard15</string>
|
||||
<string name="account_linphone_pwd">wizard15</string>
|
||||
<string name="account_linphone_domain">sip.linphone.org</string>
|
||||
|
||||
<string name="account_generic_login">wizard15</string>
|
||||
<string name="account_generic_pwd">wizard15</string>
|
||||
<string name="account_generic_domain">test.linphone.org</string>
|
||||
|
||||
<string name="account_create_login">wizard42</string>
|
||||
<string name="account_create_pwd">wizard42</string>
|
||||
<string name="account_create_email">wizard42@linphone.org</string>
|
||||
|
||||
<string name="account_test_calls_login">viish</string>
|
||||
<string name="account_test_calls_pwd">lucifer</string>
|
||||
<string name="account_test_calls_domain">sip.linphone.org</string>
|
||||
|
||||
<string name="chat_test_text_sent">Ping!</string>
|
||||
<string name="chat_test_text_received">Pong!</string>
|
||||
|
||||
</resources>
|
171
tests/src/org/linphone/test/AccountAssistant.java
Normal file
171
tests/src/org/linphone/test/AccountAssistant.java
Normal file
|
@ -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));
|
||||
}
|
||||
}
|
91
tests/src/org/linphone/test/AccountManagement.java
Normal file
91
tests/src/org/linphone/test/AccountManagement.java
Normal file
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
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();
|
||||
}
|
||||
}
|
50
tests/src/org/linphone/test/Calls.java
Normal file
50
tests/src/org/linphone/test/Calls.java
Normal file
|
@ -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();
|
||||
}
|
||||
}
|
95
tests/src/org/linphone/test/Chat.java
Normal file
95
tests/src/org/linphone/test/Chat.java
Normal file
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
29
tests/src/org/linphone/test/History.java
Normal file
29
tests/src/org/linphone/test/History.java
Normal file
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
528
tests/src/org/linphone/test/LinphoneTestManager.java
Normal file
528
tests/src/org/linphone/test/LinphoneTestManager.java
Normal file
|
@ -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
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
|
||||
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<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(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();
|
||||
}
|
||||
}
|
45
tests/src/org/linphone/test/SampleTest.java
Normal file
45
tests/src/org/linphone/test/SampleTest.java
Normal file
|
@ -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<LinphoneLauncherActivity>{
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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<LinphoneActivity> {
|
||||
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();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue