Loading src/java/com/android/internal/telephony/GsmCdmaConnection.java +1 −1 Original line number Diff line number Diff line Loading @@ -596,7 +596,7 @@ public class GsmCdmaConnection extends Connection { } // Returns true if state has changed, false if nothing changed /*package*/ boolean public boolean update (DriverCall dc) { GsmCdmaCall newParent; boolean changed = false; Loading tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java +141 −18 Original line number Diff line number Diff line Loading @@ -18,52 +18,50 @@ package com.android.internal.telephony; import android.os.Handler; import android.os.Looper; import android.telephony.PhoneNumberUtils; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.MediumTest; import android.util.Log; import android.telephony.DisconnectCause; import com.android.internal.telephony.test.SimulatedCommands; import com.android.internal.telephony.uicc.UiccController; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import java.lang.reflect.Field; import java.lang.reflect.Method; public class GsmCdmaConnectionTest { private static final String TAG = "GsmCdmaConnectionTest"; private ContextFixture mContextFixture; private GsmCdmaConnection connection; private SimulatedCommands mCi; @Mock GsmCdmaPhone mPhone; @Mock GsmCdmaCallTracker mCT; @Mock GsmCdmaCall mCall; private ContextFixture contextFixture; private GsmCdmaConnection connection; DriverCall mDC; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); contextFixture = new ContextFixture(); mContextFixture = new ContextFixture(); mCi = new SimulatedCommands(); Field field = Handler.class.getDeclaredField("mLooper"); field.setAccessible(true); field.set(mCT, Looper.getMainLooper()); doReturn(contextFixture.getTestDouble()).when(mPhone).getContext(); mCT.mCi = mCi; doReturn(mContextFixture.getTestDouble()).when(mPhone).getContext(); doReturn(mPhone).when(mCT).getPhone(); doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, "1234", mCT, mCall); mCT.mForegroundCall = new GsmCdmaCall(mCT); mCT.mBackgroundCall = new GsmCdmaCall(mCT); mCT.mRingingCall = new GsmCdmaCall(mCT); } @After Loading @@ -72,8 +70,133 @@ public class GsmCdmaConnectionTest { } @Test @SmallTest public void testOrigDialString() { assertEquals("1234", connection.getOrigDialString()); public void testFormatDialString(){ connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); /* case 1: If PAUSE/WAIT sequence at the end, ignore them */ String formattedDialStr = connection.formatDialString( String.format("+1 (700).555-41NN1234%c", PhoneNumberUtils.PAUSE)); assertEquals(formattedDialStr, "+1 (700).555-41NN1234"); /* case 2: If consecutive PAUSE/WAIT sequence in the middle of the string, * and if there is any WAIT in PAUSE/WAIT sequence, treat them like WAIT.*/ formattedDialStr = connection.formatDialString("+1 (700).555-41NN,;1234"); assertEquals(formattedDialStr, "+1 (700).555-41NN;1234"); } @Test @SmallTest public void testSanityGSM() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Testing initial state of GsmCdmaConnection"); assertEquals(connection.getState(), GsmCdmaCall.State.IDLE); assertEquals(connection.getPostDialState(), Connection.PostDialState.NOT_STARTED ); assertEquals(DisconnectCause.NOT_DISCONNECTED, DisconnectCause.NOT_DISCONNECTED); assertEquals(connection.getDisconnectTime(), 0); assertEquals(connection.getHoldDurationMillis(), 0); assertEquals(connection.getNumberPresentation(), PhoneConstants.PRESENTATION_ALLOWED); assertFalse(connection.isMultiparty()); assertNotNull(connection.getRemainingPostDialString()); assertEquals(connection.getOrigDialString(), "+1 (700).555-41NN,1234"); } @Test @SmallTest public void testSanityCDMA() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Testing initial state of GsmCdmaConnection"); assertEquals(connection.getState(), GsmCdmaCall.State.IDLE); assertEquals(connection.getPostDialState(), Connection.PostDialState.NOT_STARTED ); assertEquals(DisconnectCause.NOT_DISCONNECTED, DisconnectCause.NOT_DISCONNECTED); assertEquals(connection.getDisconnectTime(), 0); assertEquals(connection.getHoldDurationMillis(), 0); assertEquals(connection.getNumberPresentation(), PhoneConstants.PRESENTATION_ALLOWED); assertFalse(connection.isMultiparty()); assertNotNull(connection.getRemainingPostDialString()); /* CDMA phone type dont have origDialString */ assertNull(connection.getOrigDialString()); } @Test @SmallTest public void testConnectionStateUpdate() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Update the connection state from idle to active"); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); assertEquals(connection.getState(), GsmCdmaCall.State.ACTIVE); logd("update connection state from active to holding"); mDC.state = DriverCall.State.HOLDING; connection.update(mDC); assertEquals(connection.getState(), GsmCdmaCall.State.HOLDING); TelephonyTestUtils.waitForMs(50); assertTrue(connection.getHoldDurationMillis() >= 50); } @Test @MediumTest public void testCDMAPostDialPause() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Mock connection state from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("process post dail sequence with pause"); assertEquals(connection.getPostDialState(), Connection.PostDialState.PAUSE); /* pause for 2000 ms + 50ms margin */ TelephonyTestUtils.waitForMs(GsmCdmaConnection.PAUSE_DELAY_MILLIS_CDMA + 50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @MediumTest public void testGSMPostDialPause() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Mock connection state from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("process post dail sequence with pause"); assertEquals(connection.getPostDialState(), Connection.PostDialState.STARTED); /* pause for 2000 ms + 50ms margin */ TelephonyTestUtils.waitForMs(GsmCdmaConnection.PAUSE_DELAY_MILLIS_GSM + 50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @SmallTest public void testPostDialWait() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format("+1 (700).555-41NN%c1234", PhoneNumberUtils.WAIT),mCT,null); logd("Mock connection state transition from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("Process the post dial sequence with wait "); assertEquals(connection.getPostDialState(), Connection.PostDialState.WAIT); connection.proceedAfterWaitChar(); assertEquals(connection.getPostDialState(), Connection.PostDialState.STARTED); TelephonyTestUtils.waitForMs(50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @SmallTest public void testHangUpConnection() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("Hangup the connection locally"); connection.onDisconnect(DisconnectCause.LOCAL); assertEquals(connection.getState(), GsmCdmaCall.State.DISCONNECTED); assertEquals(connection.getDisconnectCause(), DisconnectCause.LOCAL); assertTrue(connection.getDisconnectTime() <= System.currentTimeMillis()); } private static void logd(String s) { Loading Loading
src/java/com/android/internal/telephony/GsmCdmaConnection.java +1 −1 Original line number Diff line number Diff line Loading @@ -596,7 +596,7 @@ public class GsmCdmaConnection extends Connection { } // Returns true if state has changed, false if nothing changed /*package*/ boolean public boolean update (DriverCall dc) { GsmCdmaCall newParent; boolean changed = false; Loading
tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java +141 −18 Original line number Diff line number Diff line Loading @@ -18,52 +18,50 @@ package com.android.internal.telephony; import android.os.Handler; import android.os.Looper; import android.telephony.PhoneNumberUtils; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.MediumTest; import android.util.Log; import android.telephony.DisconnectCause; import com.android.internal.telephony.test.SimulatedCommands; import com.android.internal.telephony.uicc.UiccController; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import java.lang.reflect.Field; import java.lang.reflect.Method; public class GsmCdmaConnectionTest { private static final String TAG = "GsmCdmaConnectionTest"; private ContextFixture mContextFixture; private GsmCdmaConnection connection; private SimulatedCommands mCi; @Mock GsmCdmaPhone mPhone; @Mock GsmCdmaCallTracker mCT; @Mock GsmCdmaCall mCall; private ContextFixture contextFixture; private GsmCdmaConnection connection; DriverCall mDC; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); contextFixture = new ContextFixture(); mContextFixture = new ContextFixture(); mCi = new SimulatedCommands(); Field field = Handler.class.getDeclaredField("mLooper"); field.setAccessible(true); field.set(mCT, Looper.getMainLooper()); doReturn(contextFixture.getTestDouble()).when(mPhone).getContext(); mCT.mCi = mCi; doReturn(mContextFixture.getTestDouble()).when(mPhone).getContext(); doReturn(mPhone).when(mCT).getPhone(); doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, "1234", mCT, mCall); mCT.mForegroundCall = new GsmCdmaCall(mCT); mCT.mBackgroundCall = new GsmCdmaCall(mCT); mCT.mRingingCall = new GsmCdmaCall(mCT); } @After Loading @@ -72,8 +70,133 @@ public class GsmCdmaConnectionTest { } @Test @SmallTest public void testOrigDialString() { assertEquals("1234", connection.getOrigDialString()); public void testFormatDialString(){ connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); /* case 1: If PAUSE/WAIT sequence at the end, ignore them */ String formattedDialStr = connection.formatDialString( String.format("+1 (700).555-41NN1234%c", PhoneNumberUtils.PAUSE)); assertEquals(formattedDialStr, "+1 (700).555-41NN1234"); /* case 2: If consecutive PAUSE/WAIT sequence in the middle of the string, * and if there is any WAIT in PAUSE/WAIT sequence, treat them like WAIT.*/ formattedDialStr = connection.formatDialString("+1 (700).555-41NN,;1234"); assertEquals(formattedDialStr, "+1 (700).555-41NN;1234"); } @Test @SmallTest public void testSanityGSM() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Testing initial state of GsmCdmaConnection"); assertEquals(connection.getState(), GsmCdmaCall.State.IDLE); assertEquals(connection.getPostDialState(), Connection.PostDialState.NOT_STARTED ); assertEquals(DisconnectCause.NOT_DISCONNECTED, DisconnectCause.NOT_DISCONNECTED); assertEquals(connection.getDisconnectTime(), 0); assertEquals(connection.getHoldDurationMillis(), 0); assertEquals(connection.getNumberPresentation(), PhoneConstants.PRESENTATION_ALLOWED); assertFalse(connection.isMultiparty()); assertNotNull(connection.getRemainingPostDialString()); assertEquals(connection.getOrigDialString(), "+1 (700).555-41NN,1234"); } @Test @SmallTest public void testSanityCDMA() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Testing initial state of GsmCdmaConnection"); assertEquals(connection.getState(), GsmCdmaCall.State.IDLE); assertEquals(connection.getPostDialState(), Connection.PostDialState.NOT_STARTED ); assertEquals(DisconnectCause.NOT_DISCONNECTED, DisconnectCause.NOT_DISCONNECTED); assertEquals(connection.getDisconnectTime(), 0); assertEquals(connection.getHoldDurationMillis(), 0); assertEquals(connection.getNumberPresentation(), PhoneConstants.PRESENTATION_ALLOWED); assertFalse(connection.isMultiparty()); assertNotNull(connection.getRemainingPostDialString()); /* CDMA phone type dont have origDialString */ assertNull(connection.getOrigDialString()); } @Test @SmallTest public void testConnectionStateUpdate() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Update the connection state from idle to active"); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); assertEquals(connection.getState(), GsmCdmaCall.State.ACTIVE); logd("update connection state from active to holding"); mDC.state = DriverCall.State.HOLDING; connection.update(mDC); assertEquals(connection.getState(), GsmCdmaCall.State.HOLDING); TelephonyTestUtils.waitForMs(50); assertTrue(connection.getHoldDurationMillis() >= 50); } @Test @MediumTest public void testCDMAPostDialPause() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Mock connection state from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("process post dail sequence with pause"); assertEquals(connection.getPostDialState(), Connection.PostDialState.PAUSE); /* pause for 2000 ms + 50ms margin */ TelephonyTestUtils.waitForMs(GsmCdmaConnection.PAUSE_DELAY_MILLIS_CDMA + 50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @MediumTest public void testGSMPostDialPause() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); logd("Mock connection state from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("process post dail sequence with pause"); assertEquals(connection.getPostDialState(), Connection.PostDialState.STARTED); /* pause for 2000 ms + 50ms margin */ TelephonyTestUtils.waitForMs(GsmCdmaConnection.PAUSE_DELAY_MILLIS_GSM + 50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @SmallTest public void testPostDialWait() { doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mPhone).getPhoneType(); connection = new GsmCdmaConnection(mPhone, String.format("+1 (700).555-41NN%c1234", PhoneNumberUtils.WAIT),mCT,null); logd("Mock connection state transition from alerting to active "); mDC.state = DriverCall.State.ALERTING; connection.update(mDC); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("Process the post dial sequence with wait "); assertEquals(connection.getPostDialState(), Connection.PostDialState.WAIT); connection.proceedAfterWaitChar(); assertEquals(connection.getPostDialState(), Connection.PostDialState.STARTED); TelephonyTestUtils.waitForMs(50); assertEquals(connection.getPostDialState(), Connection.PostDialState.COMPLETE); } @Test @SmallTest public void testHangUpConnection() { connection = new GsmCdmaConnection(mPhone, String.format( "+1 (700).555-41NN%c1234", PhoneNumberUtils.PAUSE), mCT, null); mDC.state = DriverCall.State.ACTIVE; connection.update(mDC); logd("Hangup the connection locally"); connection.onDisconnect(DisconnectCause.LOCAL); assertEquals(connection.getState(), GsmCdmaCall.State.DISCONNECTED); assertEquals(connection.getDisconnectCause(), DisconnectCause.LOCAL); assertTrue(connection.getDisconnectTime() <= System.currentTimeMillis()); } private static void logd(String s) { Loading