Add more media provider tests

This tests that deleting an audio entry also removes references to it
from the audio_genres_map and audio_playlists_map tables.

Change-Id: I537f348033b2ee44c4ffeb3456a36f08574cd497
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Genres_MembersTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Genres_MembersTest.java
index 5d31771..2e389b6 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Genres_MembersTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Genres_MembersTest.java
@@ -56,6 +56,8 @@
 
     @Override
     protected void tearDown() throws Exception {
+        // "jam" should already have been deleted as part of the test, but delete it again just
+        // in case the test failed and aborted before that.
         mContentResolver.delete(Media.EXTERNAL_CONTENT_URI, Media._ID + "=" + mAudioIdOfJam, null);
         mContentResolver.delete(Media.EXTERNAL_CONTENT_URI, Media._ID + "=" + mAudioIdOfJamLive,
                 null);
@@ -246,6 +248,47 @@
             assertEquals(0, c.getCount());
             c.close();
 
+            // same for 2nd genre
+            assertEquals(1, mContentResolver.delete(members2Uri, null, null));
+            c = mContentResolver.query(members2Uri, null, null, null, null);
+            assertEquals(0, c.getCount());
+            c.close();
+
+            // insert again, then verify that deleting the audio entry cleans up its genre member
+            // entry as well
+            values.put(Members.AUDIO_ID, mAudioIdOfJam);
+            membersUri = Members.getContentUri(MediaStoreAudioTestHelper.EXTERNAL_VOLUME_NAME,
+                    genreId);
+            assertNotNull(mContentResolver.insert(membersUri, values));
+            // Query members across all genres
+            c = mContentResolver.query(allMembersUri,
+                    new String[] { Members.AUDIO_ID, Members.GENRE_ID}, null, null, null);
+            colidx = c.getColumnIndex(Members.AUDIO_ID);
+            jamcnt = 0;
+            // The song should appear only once, for the genre we used when inserting it
+            while(c.moveToNext()) {
+                if (c.getLong(colidx) == mAudioIdOfJam) {
+                    jamcnt++;
+                    assertEquals(genreId, c.getLong(c.getColumnIndex(Members.GENRE_ID)));
+                }
+            }
+            assertEquals(1, jamcnt);
+            c.close();
+            mContentResolver.delete(Media.EXTERNAL_CONTENT_URI,
+                    Media._ID + "=" + mAudioIdOfJam, null);
+            // Query members across all genres
+            c = mContentResolver.query(allMembersUri,
+                    new String[] { Members.AUDIO_ID, Members.GENRE_ID}, null, null, null);
+            colidx = c.getColumnIndex(Members.AUDIO_ID);
+            jamcnt = 0;
+            // The song should no longer appear in the genre
+            while(c.moveToNext()) {
+                if (c.getLong(colidx) == mAudioIdOfJam) {
+                    jamcnt++;
+                }
+            }
+            assertEquals(0, jamcnt);
+            c.close();
         } finally {
             // the members are deleted when deleting the genre which they belong to
             mContentResolver.delete(Genres.EXTERNAL_CONTENT_URI, Genres._ID + "=" + genreId, null);
diff --git a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Playlists_MembersTest.java b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Playlists_MembersTest.java
index 092dba7..e758a87 100644
--- a/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Playlists_MembersTest.java
+++ b/tests/tests/provider/src/android/provider/cts/MediaStore_Audio_Playlists_MembersTest.java
@@ -342,6 +342,46 @@
             assertEquals(2, result);
             result = mContentResolver.delete(members2Uri, null, null);
             assertEquals(1, result);
+
+            // insert again, then verify that deleting the audio entry cleans up its playlist member
+            // entry as well
+            values.clear();
+            values.put(Members.AUDIO_ID, mIdOfAudio1);
+            values.put(Members.PLAY_ORDER, 1);
+            membersUri = Members.getContentUri(MediaStoreAudioTestHelper.EXTERNAL_VOLUME_NAME,
+                    playlistId);
+            audioUri = mContentResolver.insert(membersUri, values);
+            assertNotNull(audioUri);
+            // Query members of the playlist
+            c = mContentResolver.query(membersUri,
+                    new String[] { Members.AUDIO_ID, Members.PLAYLIST_ID}, null, null, null);
+            colidx = c.getColumnIndex(Members.AUDIO_ID);
+            cnt = 0;
+            // The song should appear only once, for the playlist we used when inserting it
+            while(c.moveToNext()) {
+                if (c.getLong(colidx) == mIdOfAudio1) {
+                    cnt++;
+                    assertEquals(playlistId, c.getLong(c.getColumnIndex(Members.PLAYLIST_ID)));
+                }
+            }
+            assertEquals(1, cnt);
+            c.close();
+            mContentResolver.delete(Media.EXTERNAL_CONTENT_URI,
+                    Media._ID + "=" + mIdOfAudio1, null);
+            // Query members of the playlist
+            c = mContentResolver.query(membersUri,
+                    new String[] { Members.AUDIO_ID, Members.PLAYLIST_ID}, null, null, null);
+            colidx = c.getColumnIndex(Members.AUDIO_ID);
+            cnt = 0;
+            // The song should no longer appear in the playlist
+            while(c.moveToNext()) {
+                if (c.getLong(colidx) == mIdOfAudio1) {
+                    cnt++;
+                }
+            }
+            assertEquals(0, cnt);
+            c.close();
+
         } finally {
             // delete the playlists
             mContentResolver.delete(Playlists.EXTERNAL_CONTENT_URI,