Files
SwiftAudioEx/Example/Tests/AudioSessionControllerTests.swift
2018-12-23 12:38:39 +01:00

101 lines
3.8 KiB
Swift

import Quick
import Nimble
import AVFoundation
@testable import SwiftAudio
class AudioSessionControllerTests: QuickSpec {
override func spec() {
describe("An AudioSessionController") {
let audioSessionController: AudioSessionController = AudioSessionController(audioSession: NonFailingAudioSession())
it("should be inactive", closure: {
expect(audioSessionController.audioSessionIsActive).to(beFalse())
})
context("when session is activated", {
beforeEach {
try? audioSessionController.activateSession()
}
it("should be active", closure: {
expect(audioSessionController.audioSessionIsActive).to(beTrue())
})
context("when deactivating session", {
beforeEach {
try? audioSessionController.deactivateSession()
}
it("should be inactive", closure: {
expect(audioSessionController.audioSessionIsActive).to(beFalse())
})
})
})
describe("its isObservingForInterruptions", {
it("should be true", closure: {
expect(audioSessionController.isObservingForInterruptions).to(beTrue())
})
context("when isObservingForInterruptions is set to false", {
beforeEach {
audioSessionController.isObservingForInterruptions = false
}
it("should be false", closure: {
expect(audioSessionController.isObservingForInterruptions).to(beFalse())
})
})
})
describe("its delegate", {
context("when a interruption arrives", {
var delegate: AudioSessionControllerDelegateImplementation!
beforeEach {
let notification = Notification(name: AVAudioSession.interruptionNotification, object: nil, userInfo: [
AVAudioSessionInterruptionTypeKey: UInt(0)
])
delegate = AudioSessionControllerDelegateImplementation()
audioSessionController.delegate = delegate
audioSessionController.handleInterruption(notification: notification)
}
it("should eventually be updated with the interruption type", closure: {
expect(delegate.interruptionType).toEventuallyNot(beNil())
})
})
})
}
describe("An AudioSessionController with a failing AudioSession") {
var audioSessionController: AudioSessionController!
beforeEach {
audioSessionController = AudioSessionController(audioSession: FailingAudioSession())
}
context("when activated", {
beforeEach {
try? audioSessionController.activateSession()
}
it("should be inactive", closure: {
expect(audioSessionController.audioSessionIsActive).to(beFalse())
})
})
}
}
}
class AudioSessionControllerDelegateImplementation: AudioSessionControllerDelegate {
var interruptionType: AVAudioSession.InterruptionType? = nil
func handleInterruption(type: AVAudioSession.InterruptionType) {
self.interruptionType = type
}
}