Loading src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +2 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,8 @@ public class SmsBroadcastUndelivered { while (cursor.moveToNext()) { InboundSmsTracker tracker; try { tracker = new InboundSmsTracker(cursor, isCurrentFormat3gpp2); tracker = TelephonyComponentFactory.getInstance().makeInboundSmsTracker(cursor, isCurrentFormat3gpp2); } catch (IllegalArgumentException e) { Rlog.e(TAG, "error loading SmsTracker: " + e); continue; Loading src/java/com/android/internal/telephony/TelephonyComponentFactory.java +8 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony; import android.content.Context; import android.database.Cursor; import android.os.Handler; import android.os.IDeviceIdleController; import android.os.PowerManager; Loading Loading @@ -103,6 +104,13 @@ public class TelephonyComponentFactory { sequenceNumber, messageCount, is3gpp2WapPdu); } /** * Create a tracker from a row of raw table */ public InboundSmsTracker makeInboundSmsTracker(Cursor cursor, boolean isCurrentFormat3gpp2) { return new InboundSmsTracker(cursor, isCurrentFormat3gpp2); } public ImsPhoneCallTracker makeImsPhoneCallTracker(ImsPhone imsPhone) { return new ImsPhoneCallTracker(imsPhone); } Loading tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -321,6 +322,8 @@ public abstract class TelephonyTest { doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) .makeInboundSmsTracker(any(byte[].class), anyLong(), anyInt(), anyBoolean(), anyString(), anyInt(), anyInt(), anyInt(), anyBoolean()); doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) .makeInboundSmsTracker(any(Cursor.class), anyBoolean()); doReturn(mImsCT).when(mTelephonyComponentFactory) .makeImsPhoneCallTracker(any(ImsPhone.class)); doReturn(mCdmaSSM).when(mTelephonyComponentFactory) Loading tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java +92 −63 Original line number Diff line number Diff line Loading @@ -35,9 +35,11 @@ import android.test.suitebuilder.annotation.MediumTest; import com.android.internal.telephony.InboundSmsHandler; import com.android.internal.telephony.InboundSmsTracker; import com.android.internal.telephony.SmsBroadcastUndelivered; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsStorageMonitor; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.cdma.CdmaInboundSmsHandler; import com.android.internal.util.HexDump; import com.android.internal.util.IState; import com.android.internal.util.StateMachine; Loading Loading @@ -68,9 +70,13 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { private InboundSmsTracker mInboundSmsTrackerPart1; @Mock private InboundSmsTracker mInboundSmsTrackerPart2; @Mock private CdmaInboundSmsHandler mCdmaInboundSmsHandler; private GsmInboundSmsHandler mGsmInboundSmsHandler; private FakeSmsContentProvider mContentProvider; private static final Uri sRawUri = Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw"); private ContentValues mInboundSmsTrackerCV = new ContentValues(); // For multi-part SMS private ContentValues mInboundSmsTrackerCVPart1; Loading Loading @@ -99,7 +105,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { @Override public Uri insert(Uri uri, ContentValues values) { Uri newUri = null; if (uri.compareTo(Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw")) == 0) { if (uri.compareTo(sRawUri) == 0) { if (values != null) { mRawCursor.addRow(convertRawCVtoArrayList(values)); mNumRows++; Loading Loading @@ -244,9 +250,9 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { doReturn(mSmsPdu).when(mInboundSmsTracker).getPdu(); doReturn(mInboundSmsTrackerCV).when(mInboundSmsTracker).getContentValues(); FakeSmsContentProvider contentProvider = new FakeSmsContentProvider(); mContentProvider = new FakeSmsContentProvider(); ((MockContentResolver)mContext.getContentResolver()).addProvider( Telephony.Sms.CONTENT_URI.getAuthority(), contentProvider); Telephony.Sms.CONTENT_URI.getAuthority(), mContentProvider); new GsmInboundSmsHandlerTestHandler(TAG).start(); waitUntilReady(); Loading Loading @@ -276,28 +282,21 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testNewSms() { transitionFromStartupToIdle(); // send new SMS to state machine and verify that triggers SMS_DELIVER_ACTION mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_NEW_SMS, new AsyncResult(null, mSmsMessage, null)); waitForMs(100); private void verifySmsIntentBroadcasts(int numPastBroadcasts) { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); verify(mContext, times(1 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); intentArgumentCaptor.getAllValues().get(numPastBroadcasts).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); verify(mContext, times(2 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); intentArgumentCaptor.getAllValues().get(numPastBroadcasts + 1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); Loading @@ -306,6 +305,19 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testNewSms() { transitionFromStartupToIdle(); // send new SMS to state machine and verify that triggers SMS_DELIVER_ACTION mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_NEW_SMS, new AsyncResult(null, mSmsMessage, null)); waitForMs(100); verifySmsIntentBroadcasts(0); } @Test @MediumTest public void testNewSmsFromBlockedNumber_noBroadcastsSent() { Loading @@ -323,6 +335,20 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } private void verifyDataSmsIntentBroadcasts(int numPastBroadcasts) { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(1 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(numPastBroadcasts).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testBroadcastSms() { Loading @@ -333,16 +359,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mInboundSmsTracker); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifyDataSmsIntentBroadcasts(0); } @Test Loading @@ -354,24 +371,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mSmsMessage, null)); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifySmsIntentBroadcasts(0); } private void prepareMultiPartSms() { Loading Loading @@ -440,24 +440,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mSmsMessage, null)); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifySmsIntentBroadcasts(0); } @Test Loading Loading @@ -493,4 +476,50 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { verify(mContext, never()).sendBroadcast(any(Intent.class)); assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testBroadcastUndelivered() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); doReturn(0).when(mInboundSmsTracker).getDestPort(); //add a fake entry to db ContentValues rawSms = new ContentValues(); mContentProvider.insert(sRawUri, rawSms); //make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); //when user unlocks the device, the message in db should be broadcast mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifyDataSmsIntentBroadcasts(1); } @Test @MediumTest public void testBroadcastUndeliveredMultiPart() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); // prepare SMS part 1 and part 2 prepareMultiPartSms(); //add the 2 SMS parts to db mContentProvider.insert(sRawUri, mInboundSmsTrackerCVPart1); mContentProvider.insert(sRawUri, mInboundSmsTrackerCVPart2); //return InboundSmsTracker objects corresponding to the 2 parts doReturn(mInboundSmsTrackerPart1).doReturn(mInboundSmsTrackerPart2). when(mTelephonyComponentFactory).makeInboundSmsTracker(any(Cursor.class), anyBoolean()); //when user unlocks the device, the message in db should be broadcast mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifySmsIntentBroadcasts(1); } } Loading
src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +2 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,8 @@ public class SmsBroadcastUndelivered { while (cursor.moveToNext()) { InboundSmsTracker tracker; try { tracker = new InboundSmsTracker(cursor, isCurrentFormat3gpp2); tracker = TelephonyComponentFactory.getInstance().makeInboundSmsTracker(cursor, isCurrentFormat3gpp2); } catch (IllegalArgumentException e) { Rlog.e(TAG, "error loading SmsTracker: " + e); continue; Loading
src/java/com/android/internal/telephony/TelephonyComponentFactory.java +8 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony; import android.content.Context; import android.database.Cursor; import android.os.Handler; import android.os.IDeviceIdleController; import android.os.PowerManager; Loading Loading @@ -103,6 +104,13 @@ public class TelephonyComponentFactory { sequenceNumber, messageCount, is3gpp2WapPdu); } /** * Create a tracker from a row of raw table */ public InboundSmsTracker makeInboundSmsTracker(Cursor cursor, boolean isCurrentFormat3gpp2) { return new InboundSmsTracker(cursor, isCurrentFormat3gpp2); } public ImsPhoneCallTracker makeImsPhoneCallTracker(ImsPhone imsPhone) { return new ImsPhoneCallTracker(imsPhone); } Loading
tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -321,6 +322,8 @@ public abstract class TelephonyTest { doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) .makeInboundSmsTracker(any(byte[].class), anyLong(), anyInt(), anyBoolean(), anyString(), anyInt(), anyInt(), anyInt(), anyBoolean()); doReturn(mInboundSmsTracker).when(mTelephonyComponentFactory) .makeInboundSmsTracker(any(Cursor.class), anyBoolean()); doReturn(mImsCT).when(mTelephonyComponentFactory) .makeImsPhoneCallTracker(any(ImsPhone.class)); doReturn(mCdmaSSM).when(mTelephonyComponentFactory) Loading
tests/telephonytests/src/com/android/internal/telephony/gsm/GsmInboundSmsHandlerTest.java +92 −63 Original line number Diff line number Diff line Loading @@ -35,9 +35,11 @@ import android.test.suitebuilder.annotation.MediumTest; import com.android.internal.telephony.InboundSmsHandler; import com.android.internal.telephony.InboundSmsTracker; import com.android.internal.telephony.SmsBroadcastUndelivered; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsStorageMonitor; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.cdma.CdmaInboundSmsHandler; import com.android.internal.util.HexDump; import com.android.internal.util.IState; import com.android.internal.util.StateMachine; Loading Loading @@ -68,9 +70,13 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { private InboundSmsTracker mInboundSmsTrackerPart1; @Mock private InboundSmsTracker mInboundSmsTrackerPart2; @Mock private CdmaInboundSmsHandler mCdmaInboundSmsHandler; private GsmInboundSmsHandler mGsmInboundSmsHandler; private FakeSmsContentProvider mContentProvider; private static final Uri sRawUri = Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw"); private ContentValues mInboundSmsTrackerCV = new ContentValues(); // For multi-part SMS private ContentValues mInboundSmsTrackerCVPart1; Loading Loading @@ -99,7 +105,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { @Override public Uri insert(Uri uri, ContentValues values) { Uri newUri = null; if (uri.compareTo(Uri.withAppendedPath(Telephony.Sms.CONTENT_URI, "raw")) == 0) { if (uri.compareTo(sRawUri) == 0) { if (values != null) { mRawCursor.addRow(convertRawCVtoArrayList(values)); mNumRows++; Loading Loading @@ -244,9 +250,9 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { doReturn(mSmsPdu).when(mInboundSmsTracker).getPdu(); doReturn(mInboundSmsTrackerCV).when(mInboundSmsTracker).getContentValues(); FakeSmsContentProvider contentProvider = new FakeSmsContentProvider(); mContentProvider = new FakeSmsContentProvider(); ((MockContentResolver)mContext.getContentResolver()).addProvider( Telephony.Sms.CONTENT_URI.getAuthority(), contentProvider); Telephony.Sms.CONTENT_URI.getAuthority(), mContentProvider); new GsmInboundSmsHandlerTestHandler(TAG).start(); waitUntilReady(); Loading Loading @@ -276,28 +282,21 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testNewSms() { transitionFromStartupToIdle(); // send new SMS to state machine and verify that triggers SMS_DELIVER_ACTION mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_NEW_SMS, new AsyncResult(null, mSmsMessage, null)); waitForMs(100); private void verifySmsIntentBroadcasts(int numPastBroadcasts) { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); verify(mContext, times(1 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); intentArgumentCaptor.getAllValues().get(numPastBroadcasts).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); verify(mContext, times(2 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); intentArgumentCaptor.getAllValues().get(numPastBroadcasts + 1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); Loading @@ -306,6 +305,19 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testNewSms() { transitionFromStartupToIdle(); // send new SMS to state machine and verify that triggers SMS_DELIVER_ACTION mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_NEW_SMS, new AsyncResult(null, mSmsMessage, null)); waitForMs(100); verifySmsIntentBroadcasts(0); } @Test @MediumTest public void testNewSmsFromBlockedNumber_noBroadcastsSent() { Loading @@ -323,6 +335,20 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { assertEquals("IdleState", getCurrentState().getName()); } private void verifyDataSmsIntentBroadcasts(int numPastBroadcasts) { ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(1 + numPastBroadcasts)).sendBroadcast( intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(numPastBroadcasts).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testBroadcastSms() { Loading @@ -333,16 +359,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mInboundSmsTracker); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.DATA_SMS_RECEIVED_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifyDataSmsIntentBroadcasts(0); } @Test Loading @@ -354,24 +371,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mSmsMessage, null)); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifySmsIntentBroadcasts(0); } private void prepareMultiPartSms() { Loading Loading @@ -440,24 +440,7 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { mSmsMessage, null)); waitForMs(100); ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_DELIVER_ACTION, intentArgumentCaptor.getValue().getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class); verify(mContext, times(2)).sendBroadcast(intentArgumentCaptor.capture()); assertEquals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION, intentArgumentCaptor.getAllValues().get(1).getAction()); assertEquals("WaitingState", getCurrentState().getName()); mContextFixture.sendBroadcastToOrderedBroadcastReceivers(); waitForMs(50); assertEquals("IdleState", getCurrentState().getName()); verifySmsIntentBroadcasts(0); } @Test Loading Loading @@ -493,4 +476,50 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest { verify(mContext, never()).sendBroadcast(any(Intent.class)); assertEquals("IdleState", getCurrentState().getName()); } @Test @MediumTest public void testBroadcastUndelivered() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); doReturn(0).when(mInboundSmsTracker).getDestPort(); //add a fake entry to db ContentValues rawSms = new ContentValues(); mContentProvider.insert(sRawUri, rawSms); //make it a single-part message doReturn(1).when(mInboundSmsTracker).getMessageCount(); //when user unlocks the device, the message in db should be broadcast mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifyDataSmsIntentBroadcasts(1); } @Test @MediumTest public void testBroadcastUndeliveredMultiPart() throws Exception { replaceInstance(SmsBroadcastUndelivered.class, "instance", null, null); SmsBroadcastUndelivered.initialize(mContext, mGsmInboundSmsHandler, mCdmaInboundSmsHandler); // prepare SMS part 1 and part 2 prepareMultiPartSms(); //add the 2 SMS parts to db mContentProvider.insert(sRawUri, mInboundSmsTrackerCVPart1); mContentProvider.insert(sRawUri, mInboundSmsTrackerCVPart2); //return InboundSmsTracker objects corresponding to the 2 parts doReturn(mInboundSmsTrackerPart1).doReturn(mInboundSmsTrackerPart2). when(mTelephonyComponentFactory).makeInboundSmsTracker(any(Cursor.class), anyBoolean()); //when user unlocks the device, the message in db should be broadcast mContext.sendBroadcast(new Intent(Intent.ACTION_USER_UNLOCKED)); waitForMs(100); verifySmsIntentBroadcasts(1); } }