blob: 597cd0386acba95398e37bb32452ab8eceb68de9 [file] [log] [blame]
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: objc_interop
// REQUIRES: OS=ios
import MediaPlayer
import StdlibUnittest
import StdlibUnittestFoundationExtras
let MediaPlayerTests = TestSuite("MediaPlayer")
MediaPlayerTests.test("decodablePlayParameters") {
if #available(iOS 11.0, *) {
let identifier = "1234567890"
let kind = "song"
let isLibrary = true
let playParamsData = """
{
"id": "\(identifier)",
"kind": "\(kind)",
"isLibrary": \(isLibrary)
}
""".data(using: .utf8)!
do {
let decoder = JSONDecoder()
let playParameters = try decoder.decode(MPMusicPlayerPlayParameters.self, from: playParamsData)
let playParametersDictionary = playParameters.dictionary
expectEqual(identifier, playParametersDictionary["id"] as! String)
expectEqual(kind, playParametersDictionary["kind"] as! String)
expectEqual(isLibrary, playParametersDictionary["isLibrary"] as! Bool)
}
catch {
expectUnreachableCatch(error)
}
}
}
MediaPlayerTests.test("decodingInvalidPlayParameters") {
if #available(iOS 11.0, *) {
let invalidPlayParamsData = """
{
"kind": "song"
}
""".data(using: .utf8)!
do {
let decoder = JSONDecoder()
let _ = try decoder.decode(MPMusicPlayerPlayParameters.self, from: invalidPlayParamsData)
expectUnreachable()
}
catch DecodingError.dataCorrupted(_) {}
catch {
expectUnreachableCatch(error)
}
}
}
MediaPlayerTests.test("encodablePlayParameters") {
if #available(iOS 11.0, *) {
let identifier = "1234567890"
let kind = "song"
let isLibrary = true
let correspondingPlayParamsString = """
{"id":"\(identifier)","kind":"\(kind)","isLibrary":\(isLibrary)}
"""
let playParametersDictionary: [String: Any] = [
"id": identifier,
"kind": kind,
"isLibrary": isLibrary
]
guard let playParameters = MPMusicPlayerPlayParameters(dictionary: playParametersDictionary) else {
expectUnreachable()
return
}
do {
let encoder = JSONEncoder()
let encodedPlayParamsData = try encoder.encode(playParameters)
let encodedPlayParamsString = String(data: encodedPlayParamsData, encoding: .utf8)!
expectEqual(correspondingPlayParamsString, encodedPlayParamsString)
}
catch {
expectUnreachableCatch(error)
}
}
}
runAllTests()