diff --git a/.gitignore b/.gitignore
index 6dd511745..bc3eff6ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ doc
ant.properties
local.properties
tests/*$py.class
+tests/build.xml
diff --git a/Makefile b/Makefile
index 6272cf8a0..0bf4494c7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,6 @@
NDK_PATH=$(shell dirname `which ndk-build`)
SDK_PATH=$(shell dirname `which android`)
+SDK_PLATFORM_TOOLS_PATH=$(shell dirname `which adb`)
NUMCPUS=$(shell grep -c '^processor' /proc/cpuinfo || echo "4" )
TOPDIR=$(shell pwd)
PATCH_FFMPEG=$(shell cd submodules/externals/ffmpeg && git status | grep neon)
@@ -68,6 +69,15 @@ release: update-project
run-linphone:
ant run
+
+run-tests:
+ $(SDK_PLATFORM_TOOLS_PATH)/adb uninstall org.linphone.test
+ $(SDK_PLATFORM_TOOLS_PATH)/adb uninstall org.linphone
+ @cd $(TOPDIR)/tests/ && \
+ $(SDK_PATH)/android update test-project --path . -m ../ && \
+ ant debug && \
+ ant installd && \
+ ant test
clean:
$(NDK_PATH)/ndk-build clean
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 5ac2b4d8d..5653f276c 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -130,10 +130,12 @@
{
+
+ private Solo solo;
+
+ @SuppressWarnings("deprecation")
+ public AudioCodecsTest() {
+ super("org.linphone", LinphoneActivity.class);
+ }
+
+ private void selectItemInListOnUIThread(final int item) {
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ 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 void goToAudioCodecsSettings() {
+ 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(11);
+ solo.clickOnText(context.getString(R.string.pref_codecs));
+ 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), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_speex16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_speex8_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_speex8));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_ilbc_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_ilbc));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_amr_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_amr));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_gsm_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_gsm));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_g722_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_g722));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_silk24_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_silk24));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_silk16_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_silk16));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_pcmu_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_pcmu));
+ solo.sleep(500);
+ }
+
+ if (prefs.getBoolean(context.getString(R.string.pref_codec_pcma_key), false)) {
+ solo.clickOnText(context.getString(R.string.pref_codec_pcma));
+ solo.sleep(500);
+ }
+ }
+
+ private void goToDialerAndOutgoingCall(String codecTextToAssert) {
+ 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);
+ solo.clickOnView(solo.getView(R.id.status));
+ solo.waitForText(codecTextToAssert, 1, 6000);
+ Assert.assertTrue(solo.searchText(codecTextToAssert, 1));
+ solo.clickOnView(solo.getView(R.id.hangUp));
+
+ 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));
+
+ solo.sleep(500);
+ selectItemInListOnUIThread(4);
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ if (prefs.getBoolean(context.getString(R.string.pref_video_enable_key), false)) {
+ 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");
+ }
+
+ public void testCOutgoingAudioCallPCMU() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_pcmu));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("PCMU");
+ }
+
+ public void testDOutgoingAudioCallSilk16() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_silk16));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("SILK");
+ }
+
+ public void testEOutgoingAudioCallSilk24() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_silk24));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("SILK");
+ }
+
+ public void testFOutgoingAudioCallG722() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_g722));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("G722");
+ }
+
+ public void testGOutgoingAudioCallGSM() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_gsm));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("GSM");
+ }
+
+ public void testHOutgoingAudioCallAMR() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_amr));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("AMR");
+ }
+
+ public void testIOutgoingAudioCallILBC() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_ilbc));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("iLBC");
+ }
+
+ public void testKOutgoingAudioCallSpeex16() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_speex16));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("speex");
+ }
+
+ public void testJOutgoingAudioCallSpeex8() {
+ Context context = getActivity();
+ disableAllEnabledAudioCodecs();
+ solo.clickOnText(context.getString(R.string.pref_codec_speex8));
+ solo.goBack();
+
+ goToDialerAndOutgoingCall("speex");
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ solo.finishOpenedActivities();
+ }
+}
diff --git a/tests/src/org/linphone/test/HistoryTest.java b/tests/src/org/linphone/test/HistoryTest.java
index ab39ddc3c..bb19b42df 100644
--- a/tests/src/org/linphone/test/HistoryTest.java
+++ b/tests/src/org/linphone/test/HistoryTest.java
@@ -55,6 +55,7 @@ public class HistoryTest extends ActivityInstrumentationTestCase2