Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60dccc84 authored by Chen Xu's avatar Chen Xu Committed by Android Partner Code Review
Browse files

Merge "GsmCdmaConnection Unit Test" into mm-wireless-dev

parents e3b8bf78 5d65624e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+141 −18
Original line number Diff line number Diff line
@@ -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
@@ -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) {