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 {