Files
2022-02-27 00:05:15 +02:00

87 lines
3.0 KiB
Swift

//
// MetadataParser.swift
// AudioStreamingTests
//
// Created by Dimitrios Chatzieleftheriou on 01/06/2020.
// Copyright © 2020 Decimal. All rights reserved.
//
import XCTest
@testable import AudioStreaming
class MetadataParserTests: XCTestCase {
/// NOTE: Usual metadata values from icy stream are in the following format
/// "StreamTtitle='A song title - Artist';StreamProducer='A producer'"
func testParserOutputsCorrectResultFromCorrectData() throws {
let string = "StreamTitle='A song - Artist';StreamSong='A song';StreamArtist='Artist';"
let data = string.data(using: .utf8)!
let parser = MetadataParser()
let output = parser.parse(input: data)
switch output {
case let .success(values):
XCTAssertFalse(values.isEmpty)
XCTAssertEqual(values["StreamTitle"], "A song - Artist")
XCTAssertEqual(values["StreamSong"], "A song")
XCTAssertEqual(values["StreamArtist"], "Artist")
case .failure:
XCTFail()
}
}
func testParserOutputsCorrectResultFromActualRawDataOfAudioStream() throws {
let string = "StreamTitle=\'Gramatik - In This Whole World (Original Mix)\';\0\0\0\0"
let data = string.data(using: .utf8)!
let parser = MetadataParser()
let output = parser.parse(input: data)
switch output {
case let .success(values):
XCTAssertFalse(values.isEmpty)
XCTAssertEqual(values["StreamTitle"], "Gramatik - In This Whole World (Original Mix)")
case .failure:
XCTFail()
}
}
func testParserOutputsCorrectResultWhenEntryContainsEqualSign() throws {
let string = "StreamTitle=\'Gramatik - In This Whole World (Original Mix)\';StreamUrl=\'\';track_info=\'k4Smc3RhdHVzoUihQNJiGp6BpHR5cGWhVKJpZKhNWDUxMTYzNISmc3RhdHVzoUOhQNJiGp9cpHR5cGWhVKJpZKhNWDUxMDM3MoSmc3RhdHVzoUOhQNJiGqAqpHR5cGWhVKJpZKhNWDUxMjA5Ng==\';UTC=\'20220226T214447.206\';\0\0\0\0\0\0\0\0\0"
let data = string.data(using: .utf8)!
let parser = MetadataParser()
let output = parser.parse(input: data)
switch output {
case let .success(values):
XCTAssertFalse(values.isEmpty)
XCTAssertEqual(values["StreamTitle"], "Gramatik - In This Whole World (Original Mix)")
XCTAssertEqual(values["StreamUrl"], "")
XCTAssertEqual(values["track_info"], "k4Smc3RhdHVzoUihQNJiGp6BpHR5cGWhVKJpZKhNWDUxMTYzNISmc3RhdHVzoUOhQNJiGp9cpHR5cGWhVKJpZKhNWDUxMDM3MoSmc3RhdHVzoUOhQNJiGqAqpHR5cGWhVKJpZKhNWDUxMjA5Ng==")
XCTAssertEqual(values["UTC"], "20220226T214447.206")
case .failure:
XCTFail()
}
}
func testParserOutputsFailureOnEmptyStringData() throws {
let data = "".data(using: .utf8)!
let parser = MetadataParser()
let output = parser.parse(input: data)
switch output {
case .success:
XCTFail()
case let .failure(error):
XCTAssertEqual(error, MetadataParsingError.empty)
}
}
}