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}