| // 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() |