You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Music/MusicTests/ConnectionStateTests.swift

44 lines
2.6 KiB

import Testing
import Foundation
@testable import Music
struct ConnectionStateTests {
// Verifies that each valid forward transition is allowed.
@Test func validTransitionsSucceed() {
#expect(ConnectionState.disconnected.canTransition(to: .discovering) == true)
#expect(ConnectionState.discovering.canTransition(to: .foundHost("Mac Mini")) == true)
#expect(ConnectionState.foundHost("Mac Mini").canTransition(to: .downloadingDB) == true)
#expect(ConnectionState.downloadingDB.canTransition(to: .connectingCommandChannel) == true)
#expect(ConnectionState.connectingCommandChannel.canTransition(to: .connected("Mac Mini")) == true)
#expect(ConnectionState.connected("Mac Mini").canTransition(to: .connectionLost("Network changed")) == true)
#expect(ConnectionState.connectionLost("Network changed").canTransition(to: .discovering) == true)
}
// Verifies that skipping states is rejected.
@Test func invalidTransitionsRejected() {
#expect(ConnectionState.disconnected.canTransition(to: .connected("Mac Mini")) == false)
#expect(ConnectionState.discovering.canTransition(to: .connected("Mac Mini")) == false)
#expect(ConnectionState.connected("Mac Mini").canTransition(to: .discovering) == false)
}
// Any state can transition to disconnected (user can always disconnect).
@Test func anyStateCanDisconnect() {
#expect(ConnectionState.discovering.canTransition(to: .disconnected) == true)
#expect(ConnectionState.foundHost("X").canTransition(to: .disconnected) == true)
#expect(ConnectionState.downloadingDB.canTransition(to: .disconnected) == true)
#expect(ConnectionState.connectingCommandChannel.canTransition(to: .disconnected) == true)
#expect(ConnectionState.connected("X").canTransition(to: .disconnected) == true)
}
// Verifies the human-readable status message for each state.
@Test func userVisibleDescriptions() {
#expect(ConnectionState.disconnected.userMessage == nil)
#expect(ConnectionState.discovering.userMessage == "Searching for hosts...")
#expect(ConnectionState.foundHost("Mac Mini").userMessage == "Found Mac Mini")
#expect(ConnectionState.downloadingDB.userMessage == "Downloading library...")
#expect(ConnectionState.connectingCommandChannel.userMessage == "Connecting...")
#expect(ConnectionState.connected("Mac Mini").userMessage == "Connected to Mac Mini")
#expect(ConnectionState.connectionLost("Network changed").userMessage == "Connection lost — Network changed")
}
}