Fixed VoicemailStatusHelperlTestImpl test.
The current implementation of VoicemailStatusHelperImplTest assumed a
clean voicemail_status table. This may not be true if the database
previously had non-test entries populated.
This change restricts the scope of db query to only the test packages.
Change-Id: Ica61ed53fc43e5fa427afcd3427c6054fcc742da
diff --git a/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java b/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java
index 7ac7e49..b1a0175 100644
--- a/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java
+++ b/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java
@@ -28,8 +28,6 @@
import static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_OK;
import com.android.contacts.R;
-import com.android.contacts.voicemail.VoicemailStatusHelper;
-import com.android.contacts.voicemail.VoicemailStatusHelperImpl;
import com.android.contacts.voicemail.VoicemailStatusHelper.StatusMessage;
import android.content.ContentResolver;
@@ -39,16 +37,16 @@
import android.provider.VoicemailContract.Status;
import android.test.AndroidTestCase;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
/**
* Unit tests for {@link VoicemailStatusHelperImpl}.
*/
public class VoicemailStatusHelperImplTest extends AndroidTestCase {
- private static final String TEST_PACKAGE_1 = "com.test.package1";
- private static final String TEST_PACKAGE_2 = "com.test.package2";
+ private static final String[] TEST_PACKAGES = new String[] {
+ "com.test.package1",
+ "com.test.package2"
+ };
private static final Uri TEST_SETTINGS_URI = Uri.parse("http://www.visual.voicemail.setup");
private static final Uri TEST_VOICEMAIL_URI = Uri.parse("tel:901");
@@ -66,9 +64,6 @@
private static final int STATUS_MSG_INVITE_FOR_CONFIGURATION =
R.string.voicemail_status_configure_voicemail;
- // The packages whose status entries have been added during the test and needs to be cleaned
- // up in teardown.
- private Set<String> mPackagesToCleanup = new HashSet<String>();
// Object under test.
private VoicemailStatusHelper mStatusHelper;
@@ -80,14 +75,12 @@
@Override
protected void tearDown() throws Exception {
- for (String sourcePackage : mPackagesToCleanup) {
+ for (String sourcePackage : TEST_PACKAGES) {
deleteEntryForPackage(sourcePackage);
}
- mPackagesToCleanup.clear();
// Set member variables to null so that they are garbage collected across different runs
// of the tests.
mStatusHelper = null;
- mPackagesToCleanup = null;
super.tearDown();
}
@@ -97,14 +90,14 @@
}
public void testAllOK() {
- insertEntryForPackage(TEST_PACKAGE_1, getAllOkStatusValues());
- insertEntryForPackage(TEST_PACKAGE_2, getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
assertEquals(0, getStatusMessages().size());
}
public void testNotAllOKForOnePackage() {
- insertEntryForPackage(TEST_PACKAGE_1, getAllOkStatusValues());
- insertEntryForPackage(TEST_PACKAGE_2, getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
ContentValues values = new ContentValues();
// Good data channel + no notification
@@ -112,23 +105,23 @@
// msg: voicemail not available in call log page & none in call details page.
values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkExpectedMessage(TEST_PACKAGE_2, values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
STATUS_MSG_NONE, ACTION_MSG_CALL_VOICEMAIL);
// Message waiting + good data channel - no action.
values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkNoMessages(TEST_PACKAGE_2, values);
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkNoMessages(TEST_PACKAGES[1], values);
// No data channel + no notification
// action: call voicemail
// msg: voicemail not available in call log page & audio not available in call details page.
values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_OK);
values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkExpectedMessage(TEST_PACKAGE_2, values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
// No data channel + Notification OK
@@ -136,8 +129,8 @@
// msg: voicemail not available in call log page & audio not available in call details page.
values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkExpectedMessage(TEST_PACKAGE_2, values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
// No data channel + Notification OK
@@ -145,26 +138,26 @@
// msg: message waiting in call log page & audio not available in call details page.
values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkExpectedMessage(TEST_PACKAGE_2, values, STATUS_MSG_MESSAGE_WAITING,
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_MESSAGE_WAITING,
STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
// Not configured. No user action, so no message.
values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_NOT_CONFIGURED);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkNoMessages(TEST_PACKAGE_2, values);
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkNoMessages(TEST_PACKAGES[1], values);
// Can be configured - invite user for configure voicemail.
values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_CAN_BE_CONFIGURED);
- updateEntryForPackage(TEST_PACKAGE_2, values);
- checkExpectedMessage(TEST_PACKAGE_2, values, STATUS_MSG_INVITE_FOR_CONFIGURATION,
+ updateEntryForPackage(TEST_PACKAGES[1], values);
+ checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_INVITE_FOR_CONFIGURATION,
STATUS_MSG_NONE, ACTION_MSG_CONFIGURE, TEST_SETTINGS_URI);
}
// Test that priority of messages are handled well.
public void testMessageOrdering() {
- insertEntryForPackage(TEST_PACKAGE_1, getAllOkStatusValues());
- insertEntryForPackage(TEST_PACKAGE_2, getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
+ insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
final ContentValues valuesNoNotificationGoodDataChannel = new ContentValues();
valuesNoNotificationGoodDataChannel.put(NOTIFICATION_CHANNEL_STATE,
@@ -178,20 +171,20 @@
// Package1 with valuesNoNotificationGoodDataChannel and
// package2 with valuesNoNotificationNoDataChannel. Package2 should be above.
- updateEntryForPackage(TEST_PACKAGE_1, valuesNoNotificationGoodDataChannel);
- updateEntryForPackage(TEST_PACKAGE_2, valuesNoNotificationNoDataChannel);
+ updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationGoodDataChannel);
+ updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationNoDataChannel);
List<StatusMessage> messages = getStatusMessages();
assertEquals(2, messages.size());
- assertEquals(TEST_PACKAGE_1, messages.get(1).sourcePackage);
- assertEquals(TEST_PACKAGE_2, messages.get(0).sourcePackage);
+ assertEquals(TEST_PACKAGES[0], messages.get(1).sourcePackage);
+ assertEquals(TEST_PACKAGES[1], messages.get(0).sourcePackage);
// Now reverse the values - ordering should be reversed as well.
- updateEntryForPackage(TEST_PACKAGE_1, valuesNoNotificationNoDataChannel);
- updateEntryForPackage(TEST_PACKAGE_2, valuesNoNotificationGoodDataChannel);
+ updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationNoDataChannel);
+ updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationGoodDataChannel);
messages = getStatusMessages();
assertEquals(2, messages.size());
- assertEquals(TEST_PACKAGE_1, messages.get(0).sourcePackage);
- assertEquals(TEST_PACKAGE_2, messages.get(1).sourcePackage);
+ assertEquals(TEST_PACKAGES[0], messages.get(0).sourcePackage);
+ assertEquals(TEST_PACKAGES[1], messages.get(1).sourcePackage);
}
/** Checks that the expected source status message is returned by VoicemailStatusHelper. */
@@ -245,7 +238,6 @@
if (getContentResolver().insert(Status.buildSourceUri(sourcePackage), values) == null) {
updateEntryForPackage(sourcePackage, values);
}
- mPackagesToCleanup.add(sourcePackage);
}
private void deleteEntryForPackage(String sourcePackage) {
@@ -258,11 +250,24 @@
}
private List<StatusMessage> getStatusMessages() {
+ // Restrict the cursor to only the the test packages to eliminate any side effects if there
+ // are other status messages already stored on the device.
Cursor cursor = getContentResolver().query(Status.CONTENT_URI,
- VoicemailStatusHelperImpl.PROJECTION, null, null, null);
+ VoicemailStatusHelperImpl.PROJECTION, getTestPackageSelection(), null, null);
return mStatusHelper.getStatusMessages(cursor);
}
+ private String getTestPackageSelection() {
+ StringBuilder sb = new StringBuilder();
+ for (String sourcePackage : TEST_PACKAGES) {
+ if (sb.length() > 0) {
+ sb.append(" OR ");
+ }
+ sb.append(String.format("(source_package='%s')", sourcePackage));
+ }
+ return sb.toString();
+ }
+
private ContentResolver getContentResolver() {
return getContext().getContentResolver();
}