From c1d90eb954c7e1bd13bf0ac35cecb614f530007f Mon Sep 17 00:00:00 2001 From: Martijn Brekhof Date: Wed, 30 Nov 2016 13:21:21 +0100 Subject: [PATCH] Added unittest for multi-disc albums (#317) --- .../provider/mediaprovider/AlbumsTest.java | 4 +- .../provider/mediaprovider/ArtistsTest.java | 4 +- .../provider/mediaprovider/SongsTest.java | 20 +- .../provider/mediaprovider/TestValues.java | 17 ++ .../assets/AudioLibrary.GetAlbums.json | 29 ++ .../assets/AudioLibrary.GetArtists.json | 24 +- .../assets/AudioLibrary.GetSongs.json | 272 +++++++++++++++++- .../org/xbmc/kore/testutils/TestUtils.java | 1 + tools/json/gentestnumbers.pl | 53 ++-- 9 files changed, 391 insertions(+), 33 deletions(-) diff --git a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/AlbumsTest.java b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/AlbumsTest.java index ab9bd23..1dd8b8f 100644 --- a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/AlbumsTest.java +++ b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/AlbumsTest.java @@ -37,11 +37,11 @@ public class AlbumsTest extends AbstractTestClass { Cursor cursor = shadowContentResolver.query(uri, TestValues.Album.PROJECTION, null, null, null); assertNotNull(cursor); - assertEquals("cursor size ", 234, cursor.getCount()); + assertEquals("cursor size ", 235, cursor.getCount()); int columnIndex = cursor.getColumnIndex(MediaContract.AlbumsColumns.ALBUMID); TestUtils.testCursorContainsRange(cursor, columnIndex, 1, 75); TestUtils.testCursorContainsRange(cursor, columnIndex, 77, 82); - TestUtils.testCursorContainsRange(cursor, columnIndex, 84, 235); + TestUtils.testCursorContainsRange(cursor, columnIndex, 84, 237); } @Test diff --git a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/ArtistsTest.java b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/ArtistsTest.java index bfab5ac..6e08fbf 100644 --- a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/ArtistsTest.java +++ b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/ArtistsTest.java @@ -37,12 +37,12 @@ public class ArtistsTest extends AbstractTestClass { Cursor cursor = shadowContentResolver.query(uri, TestValues.Artist.PROJECTION, null, null, null); assertNotNull(cursor); - assertEquals("cursor size ", 228, cursor.getCount()); + assertEquals("cursor size ", 229, cursor.getCount()); TestUtils.testCursorContainsRange(cursor, cursor.getColumnIndex(MediaContract.ArtistsColumns.ARTISTID), 1, 94); //Artist id 95 should be missing TestUtils.testCursorContainsRange(cursor, cursor.getColumnIndex(MediaContract.ArtistsColumns.ARTISTID), - 96, 228); + 96, 230); } @Test diff --git a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/SongsTest.java b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/SongsTest.java index 894cdfe..ed04213 100644 --- a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/SongsTest.java +++ b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/SongsTest.java @@ -105,9 +105,9 @@ public class SongsTest extends AbstractTestClass { null, null, null); assertNotNull(cursor); - assertEquals("cursor size ", 1810, cursor.getCount()); + assertEquals("cursor size ", 1817, cursor.getCount()); TestUtils.testCursorContainsRange(cursor, cursor.getColumnIndex(MediaContract.Songs.SONGID), - 1, 1810); + 1, 1817); } @Test @@ -131,8 +131,6 @@ public class SongsTest extends AbstractTestClass { TestValues.ArtistSong.PROJECTION, null, null, null); - assertTrue(CursorUtils.moveCursorToFirstOccurrence(cursor, cursor.getColumnIndex(MediaContract.Songs.SONGID), - TestValues.SongWithArtistWithoutAlbum.songId)); assertTrue(CursorUtils.moveCursorToFirstOccurrence(cursor, cursor.getColumnIndex(MediaContract.Songs.SONGID), TestValues.SongWithArtistWithoutAlbum.songId)); TestValues.SongWithArtistWithoutAlbum.test(cursor); @@ -165,6 +163,20 @@ public class SongsTest extends AbstractTestClass { } + @Test + public void queryMultidiscAlbumSongsTest() { + Uri uri = MediaContract.Songs.buildAlbumSongsListUri(hostInfo.getId(), + TestValues.MultidiscAlbumSongs.albumId); + + Cursor cursor = shadowContentResolver.query(uri, TestValues.MultidiscAlbumSongs.PROJECTION, + null, null, null); + + assertNotNull(cursor); + assertEquals("cursor size ", 7, cursor.getCount()); + TestUtils.testCursorContainsRange(cursor, cursor.getColumnIndex(MediaContract.SongsColumns.SONGID), + 1811, 1817); + } + private void testMultipleArtistInArtistSongsList(int artistId, int songId) { Uri uri = MediaContract.Songs.buildArtistSongsListUri(hostInfo.getId(), artistId); diff --git a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/TestValues.java b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/TestValues.java index d69041d..796ea0c 100644 --- a/app/src/test/java/org/xbmc/kore/provider/mediaprovider/TestValues.java +++ b/app/src/test/java/org/xbmc/kore/provider/mediaprovider/TestValues.java @@ -139,6 +139,23 @@ public class TestValues { } } + public static class MultidiscAlbumSongs { + public static int albumId = 237; + public static String title = "Multi disc album"; + public static String displayArtist = "Multi disc artist"; + + public static String[] PROJECTION = MediaContract.Songs.ALL_COLUMNS; + + public static void test(Cursor cursor) { + int resultAlbumId = cursor.getInt(cursor.getColumnIndex(MediaContract.AlbumsColumns.ALBUMID)); + assertEquals(albumId, resultAlbumId); + String resultTitle = cursor.getString(cursor.getColumnIndex(MediaContract.AlbumsColumns.TITLE)); + assertEquals(title, resultTitle); + String resultArtist = cursor.getString(cursor.getColumnIndex(MediaContract.AlbumsColumns.DISPLAYARTIST)); + assertEquals(displayArtist, resultArtist); + } + } + public static class ArtistSong { public static int songId = 96; public static int artistId = Artist.artistId; diff --git a/app/src/testUtils/assets/AudioLibrary.GetAlbums.json b/app/src/testUtils/assets/AudioLibrary.GetAlbums.json index f228fca..4e25368 100644 --- a/app/src/testUtils/assets/AudioLibrary.GetAlbums.json +++ b/app/src/testUtils/assets/AudioLibrary.GetAlbums.json @@ -7631,6 +7631,35 @@ "description" : "", "thumbnail" : "", "rating" : 0 + }, + { + "type" : "", + "musicbrainzalbumid" : "", + "title" : "Multi disc album", + "label" : "Multi disc album", + "genreid" : [], + "theme" : [], + "albumlabel" : "", + "playcount" : 0, + "style" : [], + "albumid" : 237, + "rating" : 0, + "fanart" : "", + "genre" : [], + "description" : "", + "artist" : [ + "Multi disc artist" + ], + "year" : 0, + "artistid" : [ + 230 + ], + "mood" : [], + "displayartist" : "Multi disc artist", + "thumbnail" : "", + "musicbrainzalbumartistid" : [ + "" + ] } ] } diff --git a/app/src/testUtils/assets/AudioLibrary.GetArtists.json b/app/src/testUtils/assets/AudioLibrary.GetArtists.json index 3027274..94286ac 100644 --- a/app/src/testUtils/assets/AudioLibrary.GetArtists.json +++ b/app/src/testUtils/assets/AudioLibrary.GetArtists.json @@ -4562,11 +4562,31 @@ "musicbrainzartistid" : [ "" ] + }, + { + "instrument" : [], + "yearsactive" : [], + "label" : "Multi disc artist", + "died" : "", + "born" : "", + "genre" : [], + "fanart" : "", + "disbanded" : "", + "artist" : "Multi disc artist", + "description" : "", + "formed" : "", + "style" : [], + "artistid" : 230, + "mood" : [], + "thumbnail" : "", + "musicbrainzartistid" : [ + "" + ] } ], "limits" : { - "total" : 227, - "end" : 228, + "total" : 228, + "end" : 229, "start" : 0 } } diff --git a/app/src/testUtils/assets/AudioLibrary.GetSongs.json b/app/src/testUtils/assets/AudioLibrary.GetSongs.json index 112ffa0..ee3061a 100644 --- a/app/src/testUtils/assets/AudioLibrary.GetSongs.json +++ b/app/src/testUtils/assets/AudioLibrary.GetSongs.json @@ -75383,12 +75383,278 @@ "playcount" : 0, "track" : 3, "albumid" : 236 - } + }, + { + "genreid" : [], + "albumartistid" : [ + 232 + ], + "musicbrainztrackid" : "", + "duration" : 5, + "disc" : 1, + "album" : "Multi disc album", + "musicbrainzalbumid" : "", + "label" : "First disc first song", + "title" : "First disc first song", + "artistid" : [ + 232 + ], + "lastplayed" : "", + "displayartist" : "Multi disc artist", + "musicbrainzalbumartistid" : [], + "thumbnail" : "", + "musicbrainzartistid" : [], + "comment" : "", + "lyrics" : "", + "track" : 1, + "year" : 0, + "songid" : 1811, + "fanart" : "", + "genre" : [], + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/01-first_disc_first_track.mp3", + "artist" : [ + "Multi disc artist" + ], + "playcount" : 0, + "albumid" : 237, + "rating" : 0, + "albumartist" : [ + "Multi disc artist" + ] + }, + { + "musicbrainzalbumid" : "", + "label" : "First disc second song", + "title" : "First disc second song", + "album" : "Multi disc album", + "disc" : 1, + "duration" : 5, + "musicbrainztrackid" : "", + "albumartistid" : [ + 232 + ], + "genreid" : [], + "playcount" : 0, + "rating" : 0, + "albumartist" : [ + "Multi disc artist" + ], + "albumid" : 237, + "genre" : [], + "fanart" : "", + "artist" : [ + "Multi disc artist" + ], + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/02-first_disc_second_track.mp3", + "year" : 0, + "songid" : 1812, + "track" : 2, + "lastplayed" : "", + "artistid" : [ + 232 + ], + "thumbnail" : "", + "musicbrainzartistid" : [], + "comment" : "", + "musicbrainzalbumartistid" : [], + "lyrics" : "", + "displayartist" : "Multi disc artist" + }, + { + "album" : "Multi disc album", + "musicbrainzalbumid" : "", + "title" : "Second disc first song", + "label" : "Second disc first song", + "albumartistid" : [ + 232 + ], + "genreid" : [], + "musicbrainztrackid" : "", + "duration" : 5, + "disc" : 2, + "genre" : [], + "fanart" : "", + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/01-second_disc_first_track.mp3", + "artist" : [ + "Multi disc artist" + ], + "playcount" : 0, + "albumid" : 237, + "albumartist" : [ + "Multi disc artist" + ], + "rating" : 0, + "artistid" : [ + 232 + ], + "lastplayed" : "", + "displayartist" : "Multi disc artist", + "thumbnail" : "", + "musicbrainzartistid" : [], + "comment" : "", + "musicbrainzalbumartistid" : [], + "lyrics" : "", + "track" : 1, + "songid" : 1813, + "year" : 0 + }, + { + "albumartist" : [ + "Multi disc artist" + ], + "rating" : 0, + "albumid" : 237, + "playcount" : 0, + "artist" : [ + "Multi disc artist" + ], + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/02-second_disc_second_track.mp3", + "genre" : [], + "fanart" : "", + "year" : 0, + "songid" : 1814, + "track" : 2, + "musicbrainzartistid" : [], + "thumbnail" : "", + "musicbrainzalbumartistid" : [], + "comment" : "", + "lyrics" : "", + "displayartist" : "Multi disc artist", + "lastplayed" : "", + "artistid" : [ + 232 + ], + "label" : "Second disc second song", + "title" : "Second disc second song", + "musicbrainzalbumid" : "", + "album" : "Multi disc album", + "duration" : 5, + "disc" : 2, + "musicbrainztrackid" : "", + "genreid" : [], + "albumartistid" : [ + 232 + ] + }, + { + "title" : "Third disc first song", + "label" : "Third disc first song", + "musicbrainzalbumid" : "", + "album" : "Multi disc album", + "disc" : 3, + "duration" : 5, + "musicbrainztrackid" : "", + "genreid" : [], + "albumartistid" : [ + 232 + ], + "rating" : 0, + "albumartist" : [ + "Multi disc artist" + ], + "albumid" : 237, + "playcount" : 0, + "artist" : [ + "Multi disc artist" + ], + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/01-third_disc_first_track.mp3", + "genre" : [], + "fanart" : "", + "year" : 0, + "songid" : 1815, + "track" : 1, + "thumbnail" : "", + "musicbrainzalbumartistid" : [], + "musicbrainzartistid" : [], + "comment" : "", + "lyrics" : "", + "displayartist" : "Multi disc artist", + "lastplayed" : "", + "artistid" : [ + 232 + ] + }, + { + "album" : "Multi disc album", + "musicbrainzalbumid" : "", + "label" : "Third disc second song", + "title" : "Third disc second song", + "musicbrainztrackid" : "", + "genreid" : [], + "albumartistid" : [ + 232 + ], + "duration" : 5, + "disc" : 3, + "fanart" : "", + "genre" : [], + "artist" : [ + "Multi disc artist" + ], + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/02-third_disc_second_track.mp3", + "playcount" : 0, + "albumartist" : [ + "Multi disc artist" + ], + "rating" : 0, + "albumid" : 237, + "lastplayed" : "", + "artistid" : [ + 232 + ], + "musicbrainzalbumartistid" : [], + "thumbnail" : "", + "musicbrainzartistid" : [], + "comment" : "", + "lyrics" : "", + "displayartist" : "Multi disc artist", + "year" : 0, + "songid" : 1816, + "track" : 2 + }, + { + "file" : "/Users/martijn/Projects/dummymediafiles/media/music/Multi disc artist/Multi disc album/03-third_disc_third_track.mp3", + "artist" : [ + "Multi disc artist" + ], + "fanart" : "", + "genre" : [], + "albumid" : 237, + "albumartist" : [ + "Multi disc artist" + ], + "rating" : 0, + "playcount" : 0, + "displayartist" : "Multi disc artist", + "thumbnail" : "", + "musicbrainzartistid" : [], + "musicbrainzalbumartistid" : [], + "lyrics" : "", + "comment" : "", + "artistid" : [ + 232 + ], + "lastplayed" : "", + "track" : 3, + "year" : 0, + "songid" : 1817, + "album" : "Multi disc album", + "title" : "Third disc third song", + "label" : "Third disc third song", + "musicbrainzalbumid" : "", + "albumartistid" : [ + 232 + ], + "genreid" : [], + "musicbrainztrackid" : "", + "duration" : 5, + "disc" : 3 + } ], "limits" : { - "end" : 1809, + "end" : 1817, "start" : 0, - "total" : 1810 + "total" : 1818 } }, "jsonrpc" : "2.0" diff --git a/app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java b/app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java index 1ff80e5..9e7c1ab 100644 --- a/app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java +++ b/app/src/testUtils/java/org/xbmc/kore/testutils/TestUtils.java @@ -49,6 +49,7 @@ public class TestUtils { /** * Tests if cursor contains all numbers from start until end for given column index. + * Including the start and end integers. * @param columnIndex * @param cursor * @param start diff --git a/tools/json/gentestnumbers.pl b/tools/json/gentestnumbers.pl index 05a013c..4c24e6a 100755 --- a/tools/json/gentestnumbers.pl +++ b/tools/json/gentestnumbers.pl @@ -197,41 +197,48 @@ sub printAlbumTestNumbers($$) { print "\n\n"; } -sub printSongTestNumbers($$) { - my $artistid = shift; - my $albumid = shift; +sub printSongTestNumbers(\@) { + my $songids = shift; + print "Amount of songs: ", scalar @{$songids}, "\n\n"; + print "Song ids: "; + my @songs = sort {$a->{"songid"} <=> $b->{"songid"}} @{$songids}; + printRanges("songid", @songs); + print "\n\n"; +} - my $json_hash = decodeJson( "AudioLibrary.GetSongs.json" ); - my $result = getSongs($json_hash); - print "Amount of songs: ", scalar @{$result}, "\n\n"; +sub printArtistSongsTestNumbers(\@$) { + my $songids = shift; + my $artistid = shift; my @songsforartist; - my @songsforalbum; - print "Song ids: "; - - my @songids = sort {$a->{"songid"} <=> $b->{"songid"}} @{$result}; - printRanges("songid", @songids); - - for my $song (@songids) { + for my $song (@{$songids}) { for my $id (@{$song->{"artistid"}}) { if ( $id == $artistid ) { push @songsforartist, $song; } } + } + print "Songs for artistid " . $artistid . ": total=" . scalar @songsforartist . ": ids="; + printRanges("songid", @songsforartist); + print "\n"; +} + +sub printAlbumSongsTestNumbers(\@$) { + my $songids = shift; + my $albumid = shift; + + my @songsforalbum; + + for my $song (@{$songids}) { if ( $song->{"albumid"} == $albumid ) { push @songsforalbum, $song; } } - print "\n\n"; - - print "Songs for artistid " . $artistid . ": total=" . scalar @songsforartist . ": ids="; - printRanges("songid", @songsforartist); - print "\n\n"; print "Songs for albumid " . $albumid . ": total=" . scalar @songsforalbum . ": ids="; printRanges("songid", @songsforalbum); - print "\n\n"; + print "\n"; } sub printSongCornerCases() { @@ -278,6 +285,12 @@ printArtistTestNumbers(13); printAlbumTestNumbers(13, 13); printAlbumCornerCases(); -printSongTestNumbers(13, 13); +my $json_hash = decodeJson( "AudioLibrary.GetSongs.json" ); +my $result = getSongs($json_hash); +printSongTestNumbers(@{$result}); +printArtistSongsTestNumbers(@{$result}, 232); +printAlbumSongsTestNumbers(@{$result}, 237); +print "\n\n"; printSongCornerCases(); +