diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 3c6925e22..bbc6d07ee 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -36,7 +36,7 @@ import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.util.* /** diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index ff5ecd6d1..66d25fe08 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index fd6f97b5a..81282e354 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -33,9 +33,9 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.list.Header import org.oxycblt.auxio.list.Item import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Library +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.music.storage.MimeType import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.* diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 36c3815fc..e72e2753c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -36,7 +36,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.logD diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 8b89fef47..c1e0278a6 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -50,8 +50,8 @@ import org.oxycblt.auxio.home.list.SongListFragment import org.oxycblt.auxio.home.tabs.AdaptiveTabStrategy import org.oxycblt.auxio.list.selection.SelectionFragment import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Library +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.music.system.Indexer import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.NavigationViewModel diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 8775e99c3..c49fb75f1 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -23,9 +23,9 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import org.oxycblt.auxio.home.tabs.Tab import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Library +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.logD diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 011ad304c..8cae8c396 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.AlbumViewHolder import org.oxycblt.auxio.list.recycler.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.SyncListDiffer import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.playback.secsToMs import org.oxycblt.auxio.util.collectImmediately diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index f87a1a458..eaa0bfa2d 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.nonZeroOrNull diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index 50ed0fc04..d0989bd56 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.util.collectImmediately diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 2a15e79b8..da42fbd9a 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -36,7 +36,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.formatDurationMs import org.oxycblt.auxio.playback.secsToMs import org.oxycblt.auxio.util.collectImmediately diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt index 8c9acd412..a324690a2 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt @@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Sort /** * A [Keyer] implementation for [Music] data. diff --git a/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt b/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt index cb42d096e..a607b9cd6 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt @@ -21,8 +21,8 @@ import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore +import org.oxycblt.auxio.music.library.Library /** * A [ViewModel] that manages the current selection. diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index 3c8c031be..481a2116b 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -30,6 +30,7 @@ import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import org.oxycblt.auxio.R import org.oxycblt.auxio.list.Item +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.music.parsing.parseId3GenreNames import org.oxycblt.auxio.music.parsing.parseMultiValue import org.oxycblt.auxio.music.storage.* diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt index 465f7c8df..b96a97fbd 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicSettings.kt @@ -21,6 +21,7 @@ import android.content.Context import android.os.storage.StorageManager import androidx.core.content.edit import org.oxycblt.auxio.R +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.music.storage.Directory import org.oxycblt.auxio.music.storage.MusicDirectories import org.oxycblt.auxio.settings.Settings diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt index 6b5ea25b1..cb04ef3e4 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -17,6 +17,8 @@ package org.oxycblt.auxio.music +import org.oxycblt.auxio.music.library.Library + /** * A repository granting access to the music library. * diff --git a/app/src/main/java/org/oxycblt/auxio/music/Library.kt b/app/src/main/java/org/oxycblt/auxio/music/library/Library.kt similarity index 97% rename from app/src/main/java/org/oxycblt/auxio/music/Library.kt rename to app/src/main/java/org/oxycblt/auxio/music/library/Library.kt index e85bc28d6..88cbe302f 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Library.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/library/Library.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.music +package org.oxycblt.auxio.music.library import android.content.Context import android.net.Uri @@ -43,10 +43,10 @@ class Library(rawSongs: List, settings: MusicSettings) { /** All [Genre]s found on the device. */ val genres = buildGenres(songs) + // Use a mapping to make finding information based on it's UID much faster. private val uidMap = buildMap { - // We need to finalize the newly-created music and also add it to a mapping to make - // de-serializing music from UIDs much faster. Do these in the same loop for efficiency. for (music in (songs + albums + artists + genres)) { + // Finalize all music in the same mapping creation loop for efficiency. music._finalize() this[music.uid] = music } diff --git a/app/src/main/java/org/oxycblt/auxio/music/Sort.kt b/app/src/main/java/org/oxycblt/auxio/music/library/Sort.kt similarity index 99% rename from app/src/main/java/org/oxycblt/auxio/music/Sort.kt rename to app/src/main/java/org/oxycblt/auxio/music/library/Sort.kt index 5c8fa818f..01d57a57d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Sort.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/library/Sort.kt @@ -15,13 +15,14 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.music +package org.oxycblt.auxio.music.library import androidx.annotation.IdRes import kotlin.math.max import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R -import org.oxycblt.auxio.music.Sort.Mode +import org.oxycblt.auxio.music.* +import org.oxycblt.auxio.music.library.Sort.Mode /** * A sorting method. diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt index 3c6732f58..c92334228 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt @@ -21,8 +21,8 @@ import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore +import org.oxycblt.auxio.music.library.Library import org.oxycblt.auxio.util.unlikelyToBeNull /** diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt index 826a77b3a..45215a8d3 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt @@ -28,8 +28,8 @@ import kotlinx.coroutines.withContext import kotlinx.coroutines.yield import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.extractor.* +import org.oxycblt.auxio.music.library.Library import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE import org.oxycblt.auxio.util.logW diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt index b9ea4a594..8aea48e50 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateDatabase.kt @@ -24,7 +24,7 @@ import android.database.sqlite.SQLiteOpenHelper import android.provider.BaseColumns import androidx.core.database.sqlite.transaction import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library +import org.oxycblt.auxio.music.library.Library import org.oxycblt.auxio.util.* /** diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index d404b92f1..9114450fc 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -21,9 +21,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Library +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.state.PlaybackStateManager.Listener import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 790445ad3..df7da5c53 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -43,10 +43,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch import org.oxycblt.auxio.BuildConfig -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicSettings import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song +import org.oxycblt.auxio.music.library.Library import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.playback.replaygain.ReplayGainAudioProcessor import org.oxycblt.auxio.playback.state.InternalPlayer diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt index b543898b7..9341a7390 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt @@ -31,9 +31,9 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.list.Header import org.oxycblt.auxio.list.Item import org.oxycblt.auxio.music.* -import org.oxycblt.auxio.music.Library import org.oxycblt.auxio.music.MusicStore -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.library.Library +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.playback.PlaybackSettings import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.logD diff --git a/app/src/test/java/org/oxycblt/auxio/music/AlbumTypeTest.kt b/app/src/test/java/org/oxycblt/auxio/music/AlbumTypeTest.kt new file mode 100644 index 000000000..ea4581f54 --- /dev/null +++ b/app/src/test/java/org/oxycblt/auxio/music/AlbumTypeTest.kt @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023 Auxio Project + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.oxycblt.auxio.music + +import org.junit.Assert.assertEquals +import org.junit.Test + +class AlbumTypeTest { + @Test + fun albumType_parse_primary() { + assertEquals(Album.Type.Album(null), Album.Type.parse(listOf("album"))) + assertEquals(Album.Type.EP(null), Album.Type.parse(listOf("ep"))) + assertEquals(Album.Type.Single(null), Album.Type.parse(listOf("single"))) + } + + @Test + fun albumType_parse_secondary() { + assertEquals(Album.Type.Compilation(null), Album.Type.parse(listOf("album", "compilation"))) + assertEquals(Album.Type.Soundtrack, Album.Type.parse(listOf("album", "soundtrack"))) + assertEquals(Album.Type.Mix, Album.Type.parse(listOf("album", "dj-mix"))) + assertEquals(Album.Type.Mixtape, Album.Type.parse(listOf("album", "mixtape/street"))) + } + + @Test + fun albumType_parse_modifiers() { + assertEquals( + Album.Type.Album(Album.Type.Refinement.LIVE), Album.Type.parse(listOf("album", "live"))) + assertEquals( + Album.Type.Album(Album.Type.Refinement.REMIX), + Album.Type.parse(listOf("album", "remix"))) + assertEquals( + Album.Type.EP(Album.Type.Refinement.LIVE), Album.Type.parse(listOf("ep", "live"))) + assertEquals( + Album.Type.EP(Album.Type.Refinement.REMIX), Album.Type.parse(listOf("ep", "remix"))) + assertEquals( + Album.Type.Single(Album.Type.Refinement.LIVE), + Album.Type.parse(listOf("single", "live"))) + assertEquals( + Album.Type.Single(Album.Type.Refinement.REMIX), + Album.Type.parse(listOf("single", "remix"))) + } + + @Test + fun albumType_parse_secondaryModifiers() { + assertEquals( + Album.Type.Compilation(Album.Type.Refinement.LIVE), + Album.Type.parse(listOf("album", "compilation", "live"))) + assertEquals( + Album.Type.Compilation(Album.Type.Refinement.REMIX), + Album.Type.parse(listOf("album", "compilation", "remix"))) + } + + @Test + fun albumType_parse_orphanedSecondary() { + assertEquals(Album.Type.Compilation(null), Album.Type.parse(listOf("compilation"))) + assertEquals(Album.Type.Soundtrack, Album.Type.parse(listOf("soundtrack"))) + assertEquals(Album.Type.Mix, Album.Type.parse(listOf("dj-mix"))) + assertEquals(Album.Type.Mixtape, Album.Type.parse(listOf("mixtape/street"))) + } + + @Test + fun albumType_parse_orphanedModifier() { + assertEquals(Album.Type.Album(Album.Type.Refinement.LIVE), Album.Type.parse(listOf("live"))) + assertEquals( + Album.Type.Album(Album.Type.Refinement.REMIX), Album.Type.parse(listOf("remix"))) + } +} diff --git a/app/src/test/java/org/oxycblt/auxio/music/DateTest.kt b/app/src/test/java/org/oxycblt/auxio/music/DateTest.kt index 721cfd629..bd21969fc 100644 --- a/app/src/test/java/org/oxycblt/auxio/music/DateTest.kt +++ b/app/src/test/java/org/oxycblt/auxio/music/DateTest.kt @@ -23,35 +23,28 @@ import org.junit.Test class DateTest { @Test - fun date_equals() { - assertTrue( - requireNotNull(Date.from("2016-08-16T00:01:02")) == - requireNotNull(Date.from("2016-08-16T00:01:02"))) - } - - @Test - fun date_precisionEquals() { + fun date_equals_varyingPrecision() { assertTrue( requireNotNull(Date.from("2016-08-16T00:01:02")) != requireNotNull(Date.from("2016-08-16"))) } @Test - fun date_compareDates() { + fun date_compareTo_dates() { val a = requireNotNull(Date.from("2016-08-16T00:01:02")) val b = requireNotNull(Date.from("2016-09-16T00:01:02")) assertEquals(-1, a.compareTo(b)) } @Test - fun date_compareTimes() { + fun date_compareTo_times() { val a = requireNotNull(Date.from("2016-08-16T00:02:02")) val b = requireNotNull(Date.from("2016-08-16T00:01:02")) assertEquals(1, a.compareTo(b)) } @Test - fun date_comparePrecision() { + fun date_compareTo_varyingPrecision() { val a = requireNotNull(Date.from("2016-08-16T00:01:02")) val b = requireNotNull(Date.from("2016-08-16")) assertEquals( @@ -61,77 +54,42 @@ class DateTest { } @Test - fun date_fromYear() { + fun date_from_values() { assertEquals("2016", Date.from(2016).toString()) - } - - @Test - fun date_fromDate() { assertEquals("2016-08-16", Date.from(2016, 8, 16).toString()) - } - - @Test - fun date_fromDatetime() { assertEquals("2016-08-16T00:01Z", Date.from(2016, 8, 16, 0, 1).toString()) } @Test - fun date_fromFormalTimestamp() { - assertEquals("2016-08-16T00:01:02Z", Date.from("2016-08-16T00:01:02").toString()) - } - - @Test - fun date_fromSpacedTimestamp() { - assertEquals("2016-08-16T00:01:02Z", Date.from("2016-08-16 00:01:02").toString()) - } - - @Test - fun date_fromDatestamp() { - assertEquals( - "2016-08-16", - Date.from("2016-08-16").toString(), - ) - } - - @Test - fun date_fromWeirdDateTimestamp() { - assertEquals("2016-08-16T00:01Z", Date.from("2016-08-16T00:01").toString()) - } - - @Test - fun date_fromWeirdDatestamp() { - assertEquals("2016-08", Date.from("2016-08").toString()) - } - - @Test - fun date_fromYearStamp() { - assertEquals("2016", Date.from("2016").toString()) - } - - @Test - fun date_fromWackTimestamp() { - assertEquals("2016-11", Date.from("2016-11-32 25:43:01").toString()) - } - - @Test - fun date_fromBustedTimestamp() { - assertEquals(null, Date.from("2016-08-16:00:01:02")) - assertEquals(null, Date.from("")) - } - - @Test - fun date_fromWackYear() { - assertEquals(Date.from(0), null) - } - - @Test - fun date_fromYearDate() { + fun date_from_yearDate() { assertEquals("2016-08-16", Date.from(20160816).toString()) assertEquals("2016-08-16", Date.from("20160816").toString()) } @Test - fun dateRange_fromDates() { + fun date_from_timestamp() { + assertEquals("2016-08-16T00:01:02Z", Date.from("2016-08-16T00:01:02").toString()) + assertEquals("2016-08-16T00:01:02Z", Date.from("2016-08-16 00:01:02").toString()) + } + + @Test + fun date_from_lesserPrecision() { + assertEquals("2016", Date.from("2016").toString()) + assertEquals("2016-08", Date.from("2016-08").toString()) + assertEquals("2016-08-16", Date.from("2016-08-16").toString()) + assertEquals("2016-08-16T00:01Z", Date.from("2016-08-16T00:01").toString()) + } + + @Test + fun date_from_wack() { + assertEquals(null, Date.from(0)) + assertEquals(null, Date.from("")) + assertEquals(null, Date.from("2016-08-16:00:01:02")) + assertEquals("2016-11", Date.from("2016-11-32 25:43:01").toString()) + } + + @Test + fun dateRange_from_correct() { val range = requireNotNull( Date.Range.from( @@ -145,7 +103,7 @@ class DateTest { } @Test - fun dateRange_fromSingle() { + fun dateRange_from_one() { val range = requireNotNull( Date.Range.from(listOf(requireNotNull(Date.from("2016-08-16T00:01:02"))))) @@ -154,7 +112,7 @@ class DateTest { } @Test - fun dateRange_empty() { + fun dateRange_from_none() { assertEquals(null, Date.Range.from(listOf())) } } diff --git a/app/src/test/java/org/oxycblt/auxio/music/FakeMusicSettings.kt b/app/src/test/java/org/oxycblt/auxio/music/FakeMusicSettings.kt index a0a3096a6..946595096 100644 --- a/app/src/test/java/org/oxycblt/auxio/music/FakeMusicSettings.kt +++ b/app/src/test/java/org/oxycblt/auxio/music/FakeMusicSettings.kt @@ -17,6 +17,7 @@ package org.oxycblt.auxio.music +import org.oxycblt.auxio.music.library.Sort import org.oxycblt.auxio.music.storage.MusicDirectories interface FakeMusicSettings : MusicSettings {