music: add tests for album types
Add tests for Album.Type. Other tests for the music library will be done separately.
This commit is contained in:
parent
dc73f96ba8
commit
a2b51825e8
26 changed files with 147 additions and 101 deletions
|
@ -36,7 +36,7 @@ import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.MusicMode
|
import org.oxycblt.auxio.music.MusicMode
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
import org.oxycblt.auxio.music.MusicParent
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.Sort
|
import org.oxycblt.auxio.music.library.Sort
|
||||||
import org.oxycblt.auxio.util.*
|
import org.oxycblt.auxio.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
import org.oxycblt.auxio.music.MusicParent
|
||||||
import org.oxycblt.auxio.music.Song
|
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.collect
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
|
|
|
@ -33,9 +33,9 @@ import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.list.Header
|
import org.oxycblt.auxio.list.Header
|
||||||
import org.oxycblt.auxio.list.Item
|
import org.oxycblt.auxio.list.Item
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
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.music.storage.MimeType
|
||||||
import org.oxycblt.auxio.playback.PlaybackSettings
|
import org.oxycblt.auxio.playback.PlaybackSettings
|
||||||
import org.oxycblt.auxio.util.*
|
import org.oxycblt.auxio.util.*
|
||||||
|
|
|
@ -36,7 +36,7 @@ import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
import org.oxycblt.auxio.music.MusicParent
|
||||||
import org.oxycblt.auxio.music.Song
|
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.collect
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
|
|
|
@ -50,8 +50,8 @@ import org.oxycblt.auxio.home.list.SongListFragment
|
||||||
import org.oxycblt.auxio.home.tabs.AdaptiveTabStrategy
|
import org.oxycblt.auxio.home.tabs.AdaptiveTabStrategy
|
||||||
import org.oxycblt.auxio.list.selection.SelectionFragment
|
import org.oxycblt.auxio.list.selection.SelectionFragment
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
import org.oxycblt.auxio.music.library.Library
|
||||||
import org.oxycblt.auxio.music.Sort
|
import org.oxycblt.auxio.music.library.Sort
|
||||||
import org.oxycblt.auxio.music.system.Indexer
|
import org.oxycblt.auxio.music.system.Indexer
|
||||||
import org.oxycblt.auxio.ui.MainNavigationAction
|
import org.oxycblt.auxio.ui.MainNavigationAction
|
||||||
import org.oxycblt.auxio.ui.NavigationViewModel
|
import org.oxycblt.auxio.ui.NavigationViewModel
|
||||||
|
|
|
@ -23,9 +23,9 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import org.oxycblt.auxio.home.tabs.Tab
|
import org.oxycblt.auxio.home.tabs.Tab
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
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.playback.PlaybackSettings
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.AlbumViewHolder
|
||||||
import org.oxycblt.auxio.list.recycler.SelectionIndicatorAdapter
|
import org.oxycblt.auxio.list.recycler.SelectionIndicatorAdapter
|
||||||
import org.oxycblt.auxio.list.recycler.SyncListDiffer
|
import org.oxycblt.auxio.list.recycler.SyncListDiffer
|
||||||
import org.oxycblt.auxio.music.*
|
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.formatDurationMs
|
||||||
import org.oxycblt.auxio.playback.secsToMs
|
import org.oxycblt.auxio.playback.secsToMs
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer
|
||||||
import org.oxycblt.auxio.music.Artist
|
import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.MusicMode
|
import org.oxycblt.auxio.music.MusicMode
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
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.playback.formatDurationMs
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
import org.oxycblt.auxio.util.nonZeroOrNull
|
import org.oxycblt.auxio.util.nonZeroOrNull
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer
|
||||||
import org.oxycblt.auxio.music.Genre
|
import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.music.MusicMode
|
import org.oxycblt.auxio.music.MusicMode
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
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.playback.formatDurationMs
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ import org.oxycblt.auxio.list.recycler.SyncListDiffer
|
||||||
import org.oxycblt.auxio.music.MusicMode
|
import org.oxycblt.auxio.music.MusicMode
|
||||||
import org.oxycblt.auxio.music.MusicParent
|
import org.oxycblt.auxio.music.MusicParent
|
||||||
import org.oxycblt.auxio.music.Song
|
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.formatDurationMs
|
||||||
import org.oxycblt.auxio.playback.secsToMs
|
import org.oxycblt.auxio.playback.secsToMs
|
||||||
import org.oxycblt.auxio.util.collectImmediately
|
import org.oxycblt.auxio.util.collectImmediately
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.Genre
|
import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.Song
|
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.
|
* A [Keyer] implementation for [Music] data.
|
||||||
|
|
|
@ -21,8 +21,8 @@ import androidx.lifecycle.ViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
|
import org.oxycblt.auxio.music.library.Library
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [ViewModel] that manages the current selection.
|
* A [ViewModel] that manages the current selection.
|
||||||
|
|
|
@ -30,6 +30,7 @@ import kotlinx.parcelize.IgnoredOnParcel
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.list.Item
|
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.parseId3GenreNames
|
||||||
import org.oxycblt.auxio.music.parsing.parseMultiValue
|
import org.oxycblt.auxio.music.parsing.parseMultiValue
|
||||||
import org.oxycblt.auxio.music.storage.*
|
import org.oxycblt.auxio.music.storage.*
|
||||||
|
|
|
@ -21,6 +21,7 @@ import android.content.Context
|
||||||
import android.os.storage.StorageManager
|
import android.os.storage.StorageManager
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import org.oxycblt.auxio.R
|
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.Directory
|
||||||
import org.oxycblt.auxio.music.storage.MusicDirectories
|
import org.oxycblt.auxio.music.storage.MusicDirectories
|
||||||
import org.oxycblt.auxio.settings.Settings
|
import org.oxycblt.auxio.settings.Settings
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
package org.oxycblt.auxio.music
|
package org.oxycblt.auxio.music
|
||||||
|
|
||||||
|
import org.oxycblt.auxio.music.library.Library
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A repository granting access to the music library.
|
* A repository granting access to the music library.
|
||||||
*
|
*
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music
|
package org.oxycblt.auxio.music.library
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
@ -43,10 +43,10 @@ class Library(rawSongs: List<Song.Raw>, settings: MusicSettings) {
|
||||||
/** All [Genre]s found on the device. */
|
/** All [Genre]s found on the device. */
|
||||||
val genres = buildGenres(songs)
|
val genres = buildGenres(songs)
|
||||||
|
|
||||||
|
// Use a mapping to make finding information based on it's UID much faster.
|
||||||
private val uidMap = buildMap {
|
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)) {
|
for (music in (songs + albums + artists + genres)) {
|
||||||
|
// Finalize all music in the same mapping creation loop for efficiency.
|
||||||
music._finalize()
|
music._finalize()
|
||||||
this[music.uid] = music
|
this[music.uid] = music
|
||||||
}
|
}
|
|
@ -15,13 +15,14 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music
|
package org.oxycblt.auxio.music.library
|
||||||
|
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import org.oxycblt.auxio.IntegerTable
|
import org.oxycblt.auxio.IntegerTable
|
||||||
import org.oxycblt.auxio.R
|
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.
|
* A sorting method.
|
|
@ -21,8 +21,8 @@ import androidx.lifecycle.ViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
|
import org.oxycblt.auxio.music.library.Library
|
||||||
import org.oxycblt.auxio.util.unlikelyToBeNull
|
import org.oxycblt.auxio.util.unlikelyToBeNull
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,8 +28,8 @@ import kotlinx.coroutines.withContext
|
||||||
import kotlinx.coroutines.yield
|
import kotlinx.coroutines.yield
|
||||||
import org.oxycblt.auxio.BuildConfig
|
import org.oxycblt.auxio.BuildConfig
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.extractor.*
|
import org.oxycblt.auxio.music.extractor.*
|
||||||
|
import org.oxycblt.auxio.music.library.Library
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.logE
|
import org.oxycblt.auxio.util.logE
|
||||||
import org.oxycblt.auxio.util.logW
|
import org.oxycblt.auxio.util.logW
|
||||||
|
|
|
@ -24,7 +24,7 @@ import android.database.sqlite.SQLiteOpenHelper
|
||||||
import android.provider.BaseColumns
|
import android.provider.BaseColumns
|
||||||
import androidx.core.database.sqlite.transaction
|
import androidx.core.database.sqlite.transaction
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
import org.oxycblt.auxio.music.library.Library
|
||||||
import org.oxycblt.auxio.util.*
|
import org.oxycblt.auxio.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -21,9 +21,9 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.oxycblt.auxio.BuildConfig
|
import org.oxycblt.auxio.BuildConfig
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
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.playback.state.PlaybackStateManager.Listener
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
import org.oxycblt.auxio.util.logE
|
import org.oxycblt.auxio.util.logE
|
||||||
|
|
|
@ -43,10 +43,10 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.oxycblt.auxio.BuildConfig
|
import org.oxycblt.auxio.BuildConfig
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicSettings
|
import org.oxycblt.auxio.music.MusicSettings
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
|
import org.oxycblt.auxio.music.library.Library
|
||||||
import org.oxycblt.auxio.playback.PlaybackSettings
|
import org.oxycblt.auxio.playback.PlaybackSettings
|
||||||
import org.oxycblt.auxio.playback.replaygain.ReplayGainAudioProcessor
|
import org.oxycblt.auxio.playback.replaygain.ReplayGainAudioProcessor
|
||||||
import org.oxycblt.auxio.playback.state.InternalPlayer
|
import org.oxycblt.auxio.playback.state.InternalPlayer
|
||||||
|
|
|
@ -31,9 +31,9 @@ import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.list.Header
|
import org.oxycblt.auxio.list.Header
|
||||||
import org.oxycblt.auxio.list.Item
|
import org.oxycblt.auxio.list.Item
|
||||||
import org.oxycblt.auxio.music.*
|
import org.oxycblt.auxio.music.*
|
||||||
import org.oxycblt.auxio.music.Library
|
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
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.playback.PlaybackSettings
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.logD
|
import org.oxycblt.auxio.util.logD
|
||||||
|
|
82
app/src/test/java/org/oxycblt/auxio/music/AlbumTypeTest.kt
Normal file
82
app/src/test/java/org/oxycblt/auxio/music/AlbumTypeTest.kt
Normal file
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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")))
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,35 +23,28 @@ import org.junit.Test
|
||||||
|
|
||||||
class DateTest {
|
class DateTest {
|
||||||
@Test
|
@Test
|
||||||
fun date_equals() {
|
fun date_equals_varyingPrecision() {
|
||||||
assertTrue(
|
|
||||||
requireNotNull(Date.from("2016-08-16T00:01:02")) ==
|
|
||||||
requireNotNull(Date.from("2016-08-16T00:01:02")))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun date_precisionEquals() {
|
|
||||||
assertTrue(
|
assertTrue(
|
||||||
requireNotNull(Date.from("2016-08-16T00:01:02")) !=
|
requireNotNull(Date.from("2016-08-16T00:01:02")) !=
|
||||||
requireNotNull(Date.from("2016-08-16")))
|
requireNotNull(Date.from("2016-08-16")))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun date_compareDates() {
|
fun date_compareTo_dates() {
|
||||||
val a = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
val a = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
||||||
val b = requireNotNull(Date.from("2016-09-16T00:01:02"))
|
val b = requireNotNull(Date.from("2016-09-16T00:01:02"))
|
||||||
assertEquals(-1, a.compareTo(b))
|
assertEquals(-1, a.compareTo(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun date_compareTimes() {
|
fun date_compareTo_times() {
|
||||||
val a = requireNotNull(Date.from("2016-08-16T00:02:02"))
|
val a = requireNotNull(Date.from("2016-08-16T00:02:02"))
|
||||||
val b = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
val b = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
||||||
assertEquals(1, a.compareTo(b))
|
assertEquals(1, a.compareTo(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun date_comparePrecision() {
|
fun date_compareTo_varyingPrecision() {
|
||||||
val a = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
val a = requireNotNull(Date.from("2016-08-16T00:01:02"))
|
||||||
val b = requireNotNull(Date.from("2016-08-16"))
|
val b = requireNotNull(Date.from("2016-08-16"))
|
||||||
assertEquals(
|
assertEquals(
|
||||||
|
@ -61,77 +54,42 @@ class DateTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun date_fromYear() {
|
fun date_from_values() {
|
||||||
assertEquals("2016", Date.from(2016).toString())
|
assertEquals("2016", Date.from(2016).toString())
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun date_fromDate() {
|
|
||||||
assertEquals("2016-08-16", Date.from(2016, 8, 16).toString())
|
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())
|
assertEquals("2016-08-16T00:01Z", Date.from(2016, 8, 16, 0, 1).toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun date_fromFormalTimestamp() {
|
fun date_from_yearDate() {
|
||||||
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() {
|
|
||||||
assertEquals("2016-08-16", Date.from(20160816).toString())
|
assertEquals("2016-08-16", Date.from(20160816).toString())
|
||||||
assertEquals("2016-08-16", Date.from("20160816").toString())
|
assertEquals("2016-08-16", Date.from("20160816").toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@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 =
|
val range =
|
||||||
requireNotNull(
|
requireNotNull(
|
||||||
Date.Range.from(
|
Date.Range.from(
|
||||||
|
@ -145,7 +103,7 @@ class DateTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun dateRange_fromSingle() {
|
fun dateRange_from_one() {
|
||||||
val range =
|
val range =
|
||||||
requireNotNull(
|
requireNotNull(
|
||||||
Date.Range.from(listOf(requireNotNull(Date.from("2016-08-16T00:01:02")))))
|
Date.Range.from(listOf(requireNotNull(Date.from("2016-08-16T00:01:02")))))
|
||||||
|
@ -154,7 +112,7 @@ class DateTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun dateRange_empty() {
|
fun dateRange_from_none() {
|
||||||
assertEquals(null, Date.Range.from(listOf()))
|
assertEquals(null, Date.Range.from(listOf()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
package org.oxycblt.auxio.music
|
package org.oxycblt.auxio.music
|
||||||
|
|
||||||
|
import org.oxycblt.auxio.music.library.Sort
|
||||||
import org.oxycblt.auxio.music.storage.MusicDirectories
|
import org.oxycblt.auxio.music.storage.MusicDirectories
|
||||||
|
|
||||||
interface FakeMusicSettings : MusicSettings {
|
interface FakeMusicSettings : MusicSettings {
|
||||||
|
|
Loading…
Reference in a new issue