whiskers.git / android / app / src / test / kotlin / app / whiskers / ErrorBreakerTest.kt
ErrorBreakerTest.kt32 lines · 970 B · raw
1package app.whiskers
2
3import android.speech.SpeechRecognizer
4import org.junit.Assert.assertFalse
5import org.junit.Assert.assertTrue
6import org.junit.Test
7
8class ErrorBreakerTest {
9    private var t = 0L
10    private val b = ErrorBreaker(threshold = 3, coolDownMs = 1_000, now = { t })
11
12    @Test fun silenceIsNotFailure() {
13        repeat(10) { b.failed(SpeechRecognizer.ERROR_NO_MATCH); b.failed(SpeechRecognizer.ERROR_SPEECH_TIMEOUT) }
14        assertFalse(b.open)
15    }
16
17    @Test fun threeHardErrorsInARowOpenItUntilTheCoolDownEnds() {
18        repeat(3) { b.failed(SpeechRecognizer.ERROR_NETWORK) }
19        assertTrue(b.open)
20        t = 999
21        assertTrue(b.open)
22        t = 1_000
23        assertFalse(b.open)
24    }
25
26    @Test fun aSuccessInBetweenStartsTheCountAgain() {
27        b.failed(SpeechRecognizer.ERROR_CLIENT); b.failed(SpeechRecognizer.ERROR_CLIENT)
28        b.heard()
29        b.failed(SpeechRecognizer.ERROR_CLIENT)
30        assertFalse(b.open)
31    }
32}