Coverage Summary for Class: ClickTrackValidator (com.vsevolodganin.clicktrack.common)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
ClickTrackValidator |
0%
(0/3)
|
0%
(0/3)
|
0%
(0/25)
|
3.4%
(4/117)
|
ClickTrackValidator$ClickTrackValidationResult |
0%
(0/1)
|
|
0%
(0/3)
|
0%
(0/12)
|
ClickTrackValidator$CueValidationResult |
0%
(0/1)
|
|
0%
(0/3)
|
0%
(0/12)
|
ClickTrackValidator$WhenMappings |
|
Total |
0%
(0/5)
|
0%
(0/3)
|
0%
(0/31)
|
2.8%
(4/141)
|
package com.vsevolodganin.clicktrack.common
import com.vsevolodganin.clicktrack.edit.EditClickTrackState
import com.vsevolodganin.clicktrack.edit.EditCueState
import com.vsevolodganin.clicktrack.model.ClickTrack
import com.vsevolodganin.clicktrack.model.Cue
import com.vsevolodganin.clicktrack.model.CueDuration
import me.tatarka.inject.annotations.Inject
@Inject
class ClickTrackValidator(private val bpmValidator: BpmValidator) {
class ClickTrackValidationResult(
val validClickTrack: ClickTrack,
val cueValidationResults: List<CueValidationResult>,
)
class CueValidationResult(
val validCue: Cue,
val errors: Set<EditCueState.Error>,
)
fun validate(editClickTrackState: EditClickTrackState): ClickTrackValidationResult {
val cueValidationResults = editClickTrackState.cues.map(::validate)
return ClickTrackValidationResult(
validClickTrack = ClickTrack(
name = editClickTrackState.name.trim(),
loop = editClickTrackState.loop,
tempoOffset = editClickTrackState.tempoOffset,
cues = cueValidationResults.map(CueValidationResult::validCue),
),
cueValidationResults = cueValidationResults,
)
}
private fun validate(editCueState: EditCueState): CueValidationResult {
val name = editCueState.name.trim()
val errors = mutableSetOf<EditCueState.Error>()
val bpmValidationResult = bpmValidator.validate(editCueState.bpm)
if (bpmValidationResult.hasError) {
errors += EditCueState.Error.BPM
}
return CueValidationResult(
validCue = Cue(
name = name,
bpm = bpmValidationResult.coercedBpm,
timeSignature = editCueState.timeSignature,
duration = when (editCueState.activeDurationType) {
CueDuration.Type.BEATS -> editCueState.beats
CueDuration.Type.MEASURES -> editCueState.measures
CueDuration.Type.TIME -> editCueState.time
},
pattern = editCueState.pattern,
),
errors = errors,
)
}
}