From df3884775ba5c8b1574826906bdb9dd516f10bc0 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 17 Jun 2013 16:18:02 +0200 Subject: [PATCH] Added tests for calls (audio and video), not all implemented. --- res/values/non_localizable_custom.xml | 2 +- tests/src/org/linphone/test/Calls.java | 35 -- tests/src/org/linphone/test/CallsAudio.java | 353 ++++++++++++++++ tests/src/org/linphone/test/CallsVideo.java | 387 ++++++++++++++++++ .../linphone/test/LinphoneTestManager.java | 23 +- tests/src/org/linphone/test/SampleTest.java | 2 + 6 files changed, 760 insertions(+), 42 deletions(-) delete mode 100644 tests/src/org/linphone/test/Calls.java create mode 100644 tests/src/org/linphone/test/CallsAudio.java create mode 100644 tests/src/org/linphone/test/CallsVideo.java diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml index f322106a4..a37e68e4f 100644 --- a/res/values/non_localizable_custom.xml +++ b/res/values/non_localizable_custom.xml @@ -33,7 +33,7 @@ false false - false + true false true diff --git a/tests/src/org/linphone/test/Calls.java b/tests/src/org/linphone/test/Calls.java deleted file mode 100644 index 8ce7fdb8a..000000000 --- a/tests/src/org/linphone/test/Calls.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.linphone.test; - -import junit.framework.Assert; - -import org.linphone.InCallActivity; -import org.linphone.LinphoneActivity; -import org.linphone.core.LinphoneCall; - -import android.test.suitebuilder.annotation.LargeTest; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.SmallTest; - -/** - * @author Sylvain Berfini - */ -public class Calls extends SampleTest { - - @SmallTest - @MediumTest - @LargeTest - public void testASimpleCall() { - 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); - } -} diff --git a/tests/src/org/linphone/test/CallsAudio.java b/tests/src/org/linphone/test/CallsAudio.java new file mode 100644 index 000000000..2539f3ec2 --- /dev/null +++ b/tests/src/org/linphone/test/CallsAudio.java @@ -0,0 +1,353 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.InCallActivity; +import org.linphone.LinphoneActivity; +import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCall; + +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; + +/** + * @author Sylvain Berfini + */ +public class CallsAudio extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAInit() { + //Disable video + goToSettings(); + + selectItemInListOnUIThread(3); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title)); + solo.sleep(500); + + solo.goBack(); + solo.sleep(1000); + Assert.assertFalse(LinphoneManager.getLc().isVideoEnabled()); + } + + @SmallTest + @MediumTest + @LargeTest + public void testBOutgoingCallWithDefaultConfig() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testCDTMFRFC2833InPCMUCall() { + disableAllEnabledAudioCodecs(); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + goBackToDialerAfterCodecChanges(); + solo.sleep(1000); + + LinphoneManager.getLc().setUseRfc2833ForDtmfs(true); + LinphoneManager.getLc().setUseSipInfoForDtmfs(false); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + solo.clickOnView(solo.getView(org.linphone.R.id.Digit3)); + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + + solo.sleep(1000); + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + + //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed + //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived); + LinphoneTestManager.getInstance().isDTMFReceived = false; + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testDDTMFSIPINFO() { + LinphoneManager.getLc().setUseRfc2833ForDtmfs(false); + LinphoneManager.getLc().setUseSipInfoForDtmfs(true); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + solo.clickOnView(solo.getView(org.linphone.R.id.Digit3)); + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + + solo.sleep(1000); + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + + //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed + //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived); + LinphoneTestManager.getInstance().isDTMFReceived = false; + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testEOutgoingCallToAudioClient() { + LinphoneTestManager.getLc().enableVideo(false, false); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testFOutgoingCallToVideoClient() { + LinphoneTestManager.getLc().enableVideo(true, true); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testGOutgoingCallCancelled() { + LinphoneTestManager.getInstance().autoAnswer = false; + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.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.OutgoingRinging, LinphoneManager.getLc().getCalls()[0].getState()); + + LinphoneTestManager.getInstance().autoAnswer = true; + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testHOutgoingCallDeclined() { + LinphoneTestManager.getInstance().autoAnswer = true; // Just in case + LinphoneTestManager.getInstance().declineCall = true; + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + solo.sleep(500); + Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.error_call_declined))); + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + LinphoneTestManager.getInstance().declineCall = false; + } + + @MediumTest // TODO: Remove + @LargeTest + public void testIIncomingAudioCall() { + LinphoneTestManager.getInstance().declineCall = false; // Just in case + LinphoneTestManager.getLc().enableVideo(false, false); + } + + @MediumTest // TODO: Remove + @LargeTest + public void testJIncomingVideoCall() { + LinphoneTestManager.getLc().enableVideo(true, true); + + } + + @MediumTest + @LargeTest + public void testKSelfPauseResumeCall() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.pause)); + LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState(); + solo.sleep(1000); + + Assert.assertTrue(LinphoneCall.State.Paused == state || LinphoneCall.State.Pausing == state); + solo.clickOnView(solo.getView(org.linphone.R.id.pause)); + solo.sleep(1000); + + state = LinphoneManager.getLc().getCalls()[0].getState(); + Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testLRemotePauseResumeCall() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + LinphoneTestManager.getLc().pauseAllCalls(); + solo.sleep(1000); + + Assert.assertEquals(LinphoneCall.State.PausedByRemote, LinphoneManager.getLc().getCalls()[0].getState()); + LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]); + solo.sleep(1000); + + LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState(); + Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state); + + solo.clickLongOnScreen(200, 200); //To ensure controls are shown + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testMSwitchOnVideoInCallIsNotAllowed() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + Assert.assertFalse(solo.getView(org.linphone.R.id.video).isEnabled()); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + //TODO: Test each audio codec + + private void assertCallIsCorrectlyRunning() { + solo.waitForActivity("InCallActivity", 5000); + solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); + + solo.sleep(2000); + LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; + Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState()); + } + + private void goToSettings() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.settings)); + } + + private void goToAudioCodecsSettings() { + goToSettings(); + + selectItemInListOnUIThread(4); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_audio)); + solo.sleep(500); + } + + private void disableAllEnabledAudioCodecs() { + goToAudioCodecsSettings(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext); + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex16_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex8_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_ilbc_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_ilbc_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amr_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amr_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amrwb_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amrwb_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g729_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g729_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_gsm_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_gsm_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g722_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g722_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk24_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk24_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk16_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcmu_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcmu_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcma_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcma_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma)); + solo.sleep(500); + } + } + + private void goBackToDialerAfterCodecChanges() + { + solo.goBack(); + solo.goBack(); + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } +} diff --git a/tests/src/org/linphone/test/CallsVideo.java b/tests/src/org/linphone/test/CallsVideo.java new file mode 100644 index 000000000..5309d0555 --- /dev/null +++ b/tests/src/org/linphone/test/CallsVideo.java @@ -0,0 +1,387 @@ +package org.linphone.test; + +import junit.framework.Assert; + +import org.linphone.InCallActivity; +import org.linphone.LinphoneActivity; +import org.linphone.LinphoneManager; +import org.linphone.core.LinphoneCall; + +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; + +/** + * @author Sylvain Berfini + */ +public class CallsVideo extends SampleTest { + + @SmallTest + @MediumTest + @LargeTest + public void testAInit() { + //Disable video + goToSettings(); + + selectItemInListOnUIThread(3); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title)); + solo.sleep(500); + + solo.goBack(); + solo.sleep(1000); + Assert.assertTrue(LinphoneManager.getLc().isVideoEnabled()); + } + + @SmallTest + @MediumTest + @LargeTest + public void testBOutgoingCallWithDefaultConfig() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testCDTMFRFC2833InPCMUCall() { + disableAllEnabledAudioCodecs(); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + goBackToDialerAfterCodecChanges(); + solo.sleep(1000); + + LinphoneManager.getLc().setUseRfc2833ForDtmfs(true); + LinphoneManager.getLc().setUseSipInfoForDtmfs(false); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + solo.clickOnView(solo.getView(org.linphone.R.id.Digit3)); + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + + solo.sleep(1000); + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + + //To enable when issue http://git.linphone.org/mantis/view.php?id=750 will be fixed + //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived); + LinphoneTestManager.getInstance().isDTMFReceived = false; + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testDDTMFSIPINFO() { + LinphoneManager.getLc().setUseRfc2833ForDtmfs(false); + LinphoneManager.getLc().setUseSipInfoForDtmfs(true); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + solo.clickOnView(solo.getView(org.linphone.R.id.Digit3)); + solo.clickOnView(solo.getView(org.linphone.R.id.dialer)); + + solo.sleep(1000); + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + + //To enable when issue http://git.linphone.org/mantis/view.php?id=751 will be fixed + //Assert.assertTrue(LinphoneTestManager.getInstance().isDTMFReceived); + LinphoneTestManager.getInstance().isDTMFReceived = false; + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testEOutgoingCallToAudioClient() { + LinphoneTestManager.getLc().enableVideo(false, false); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testFOutgoingCallToVideoClient() { + LinphoneTestManager.getLc().enableVideo(true, true); + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testGOutgoingCallCancelled() { + LinphoneTestManager.getInstance().autoAnswer = false; + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.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.OutgoingRinging, LinphoneManager.getLc().getCalls()[0].getState()); + + LinphoneTestManager.getInstance().autoAnswer = true; + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testHOutgoingCallDeclined() { + LinphoneTestManager.getInstance().autoAnswer = true; // Just in case + LinphoneTestManager.getInstance().declineCall = true; + + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + solo.sleep(500); + Assert.assertTrue(solo.searchText(aContext.getString(org.linphone.R.string.error_call_declined))); + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + LinphoneTestManager.getInstance().declineCall = false; + } + + @MediumTest // TODO: Remove + @LargeTest + public void testIIncomingAudioCall() { + LinphoneTestManager.getInstance().declineCall = false; // Just in case + LinphoneTestManager.getLc().enableVideo(false, false); + + } + + @MediumTest // TODO: Remove + @LargeTest + public void testJIncomingVideoCall() { + LinphoneTestManager.getLc().enableVideo(true, true); + + } + + //TODO: Test each video codec + + @MediumTest + @LargeTest + public void testKSelfPauseResumeCall() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + solo.clickOnView(solo.getView(org.linphone.R.id.pause)); + LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState(); + solo.sleep(1000); + + Assert.assertTrue(LinphoneCall.State.Paused == state || LinphoneCall.State.Pausing == state); + solo.clickOnView(solo.getView(org.linphone.R.id.pause)); + solo.sleep(1000); + + state = LinphoneManager.getLc().getCalls()[0].getState(); + Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testLRemotePauseResumeCall() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + LinphoneTestManager.getLc().pauseAllCalls(); + solo.sleep(1000); + + Assert.assertEquals(LinphoneCall.State.PausedByRemote, LinphoneManager.getLc().getCalls()[0].getState()); + LinphoneTestManager.getLc().resumeCall(LinphoneTestManager.getLc().getCalls()[0]); + solo.sleep(1000); + + LinphoneCall.State state = LinphoneManager.getLc().getCalls()[0].getState(); + Assert.assertTrue(LinphoneCall.State.Resuming == state || LinphoneCall.State.StreamsRunning == state); + + solo.clickLongOnScreen(200, 200); //To ensure controls are shown + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + @MediumTest + @LargeTest + public void testMSwitchOffVideoInCall() { + solo.enterText(0, iContext.getString(org.linphone.test.R.string.account_test_calls_login) + "@" + iContext.getString(org.linphone.test.R.string.account_test_calls_domain)); + solo.clickOnView(solo.getView(org.linphone.R.id.Call)); + + assertCallIsCorrectlyRunning(); + + Assert.assertTrue(solo.getView(org.linphone.R.id.video).isEnabled()); + solo.clickOnView(solo.getView(org.linphone.R.id.video)); + Assert.assertFalse(LinphoneManager.getLc().getCurrentCall().cameraEnabled()); + + solo.clickOnView(solo.getView(org.linphone.R.id.hangUp)); + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } + + private void assertCallIsCorrectlyRunning() { + solo.waitForActivity("InCallActivity", 5000); + solo.assertCurrentActivity("Expected InCall Activity", InCallActivity.class); + + solo.sleep(2000); + LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; + Assert.assertEquals(LinphoneCall.State.StreamsRunning, call.getState()); + } + + private void goToSettings() { + solo.waitForActivity("LinphoneActivity", 2000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + + solo.clickOnView(solo.getView(org.linphone.R.id.settings)); + } + + private void goToAudioCodecsSettings() { + goToSettings(); + + selectItemInListOnUIThread(4); + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_audio)); + solo.sleep(500); + } + + private void goToVideoCodecsSettings() { + goToSettings(); + + selectItemInListOnUIThread(6); + if (solo.searchText(aContext.getString(org.linphone.R.string.pref_video), 2)) // Needed in case pref_video_enable_title contains pref_video + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video), 2); + else + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video)); + solo.sleep(500); + } + + private void disableAllEnabledAudioCodecs() { + goToAudioCodecsSettings(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext); + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex16_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex16)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_speex8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_speex8_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_speex8)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_ilbc_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_ilbc_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_ilbc)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amr_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amr_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amr)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_amrwb_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_amrwb_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_amrwb)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g729_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g729_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g729)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_gsm_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_gsm_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_gsm)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_g722_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_g722_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_g722)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk24_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk24_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk24)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_silk16_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_silk16_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_silk16)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcmu_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcmu_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcmu)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_codec_pcma_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_codec_pcma_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_codec_pcma)); + solo.sleep(500); + } + } + + private void disableAllEnabledVideoCodecs() { + goToVideoCodecsSettings(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(aContext); + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_vp8_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_vp8_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_vp8_title)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_h264_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_h264_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_h264_title)); + solo.sleep(500); + } + + if (prefs.getBoolean(aContext.getString(org.linphone.R.string.pref_video_codec_mpeg4_key), aContext.getResources().getBoolean(org.linphone.R.bool.pref_video_codec_mpeg4_default))) { + solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_codec_mpeg4_title)); + solo.sleep(500); + } + } + + private void goBackToDialerAfterCodecChanges() + { + solo.goBack(); + solo.goBack(); + + solo.waitForActivity("LinphoneActivity", 5000); + solo.assertCurrentActivity("Expected Linphone Activity", LinphoneActivity.class); + } +} diff --git a/tests/src/org/linphone/test/LinphoneTestManager.java b/tests/src/org/linphone/test/LinphoneTestManager.java index c4a9e4425..62241a5fd 100644 --- a/tests/src/org/linphone/test/LinphoneTestManager.java +++ b/tests/src/org/linphone/test/LinphoneTestManager.java @@ -49,6 +49,9 @@ public class LinphoneTestManager implements LinphoneCoreListener { private static Transports initialTransports; public String lastMessageReceived; + public boolean isDTMFReceived = false; + public boolean autoAnswer = true; + public boolean declineCall = false; private Timer mTimer = new Timer("Linphone scheduler"); @@ -62,7 +65,7 @@ public class LinphoneTestManager implements LinphoneCoreListener { throw new RuntimeException("Linphone Manager is already initialized"); instance = new LinphoneTestManager(ac, ic); - instance.startLibLinphone(ac); + instance.startLibLinphone(ic); TelephonyManager tm = (TelephonyManager) ac.getSystemService(Context.TELEPHONY_SERVICE); boolean gsmIdle = tm.getCallState() == TelephonyManager.CALL_STATE_IDLE; setGsmIdle(gsmIdle); @@ -188,6 +191,9 @@ public class LinphoneTestManager implements LinphoneCoreListener { mLc.setFirewallPolicy(FirewallPolicy.NoFirewall); } + mLc.setUseRfc2833ForDtmfs(false); + mLc.setUseSipInfoForDtmfs(true); + //accounts try { initAccounts(); @@ -411,10 +417,14 @@ public class LinphoneTestManager implements LinphoneCoreListener { // 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(); + if (declineCall) { + mLc.terminateCall(call); + } else if (autoAnswer) { + try { + mLc.acceptCall(call); + } catch (LinphoneCoreException e) { + e.printStackTrace(); + } } } } @@ -471,7 +481,8 @@ public class LinphoneTestManager implements LinphoneCoreListener { @Override public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) { // TODO Auto-generated method stub - + Log.e("DTMF received = " + dtmf); + isDTMFReceived = true; } @Override diff --git a/tests/src/org/linphone/test/SampleTest.java b/tests/src/org/linphone/test/SampleTest.java index 35bcb9bb4..40269f94b 100644 --- a/tests/src/org/linphone/test/SampleTest.java +++ b/tests/src/org/linphone/test/SampleTest.java @@ -1,6 +1,7 @@ package org.linphone.test; import org.linphone.LinphoneLauncherActivity; +import org.linphone.LinphoneManager; import android.content.Context; import android.test.ActivityInstrumentationTestCase2; @@ -31,6 +32,7 @@ public abstract class SampleTest extends ActivityInstrumentationTestCase2