Aggiunge app iOS nativa con parità multi-sport e test unitari.
Porting SwiftUI da Android (auth, hub, wizard, broadcast RTMP, overlay, scoring board-aware), reload hub al ritorno da diretta, decodifica score tollerante e documentazione allineata. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
47
native/ios/MatchLiveTvTests/ApiInstantTests.swift
Normal file
47
native/ios/MatchLiveTvTests/ApiInstantTests.swift
Normal file
@@ -0,0 +1,47 @@
|
||||
import XCTest
|
||||
|
||||
/// Smoke test eseguibile senza @testable import (validazione logica pura).
|
||||
final class ApiInstantTests: XCTestCase {
|
||||
func testOverlayKindMapping() {
|
||||
XCTAssertEqual(OverlayKindMapping.fromApi("basket"), "basket")
|
||||
XCTAssertEqual(OverlayKindMapping.fromApi("none"), "none")
|
||||
XCTAssertEqual(OverlayKindMapping.fromApi(nil), "volley")
|
||||
}
|
||||
|
||||
func testRTMPUrlParser() {
|
||||
let target = RTMPUrlParserLogic.parse("rtmp://stream.example.com/live/match_abc-123")
|
||||
XCTAssertEqual(target?.connectURL, "rtmp://stream.example.com/live")
|
||||
XCTAssertEqual(target?.streamName, "match_abc-123")
|
||||
}
|
||||
}
|
||||
|
||||
enum OverlayKindMapping {
|
||||
static func fromApi(_ value: String?) -> String {
|
||||
switch value?.lowercased() {
|
||||
case "none", "timer": return "none"
|
||||
case "basket": return "basket"
|
||||
case "timed": return "timed"
|
||||
case "racket": return "racket"
|
||||
default: return "volley"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum RTMPUrlParserLogic {
|
||||
struct Target {
|
||||
let connectURL: String
|
||||
let streamName: String
|
||||
}
|
||||
|
||||
static func parse(_ urlString: String) -> Target? {
|
||||
guard let url = URL(string: urlString), url.scheme?.hasPrefix("rtmp") == true else { return nil }
|
||||
let pathParts = url.path.split(separator: "/").map(String.init)
|
||||
guard pathParts.count >= 2 else { return nil }
|
||||
let app = pathParts.dropLast().joined(separator: "/")
|
||||
let streamName = pathParts.last ?? ""
|
||||
var connect = "rtmp://\(url.host ?? "")"
|
||||
if let port = url.port { connect += ":\(port)" }
|
||||
connect += "/\(app)"
|
||||
return Target(connectURL: connect, streamName: streamName)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user