Completa L10n su login/hub/wizard/broadcast e introduce ThermalStateManager su iOS/Android con degradazione qualità e indicatore in overlay. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.8 KiB
Swift
50 lines
1.8 KiB
Swift
import XCTest
|
|
@testable import MatchLiveTv
|
|
|
|
@MainActor
|
|
final class ThermalAdaptationTests: XCTestCase {
|
|
func testSeriousReducesBitrateAndFps() {
|
|
let baseline = BroadcastConfig(
|
|
rtmpUrl: "rtmp://localhost/live/key",
|
|
videoBitrate: 2_500_000,
|
|
fps: 30
|
|
)
|
|
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .serious)
|
|
XCTAssertEqual(adapted.videoBitrate, 1_875_000)
|
|
XCTAssertEqual(adapted.fps, 24)
|
|
}
|
|
|
|
func testCriticalReducesFurther() {
|
|
let baseline = BroadcastConfig(
|
|
rtmpUrl: "rtmp://localhost/live/key",
|
|
videoBitrate: 2_500_000,
|
|
fps: 30
|
|
)
|
|
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .critical)
|
|
XCTAssertEqual(adapted.videoBitrate, 1_250_000)
|
|
XCTAssertEqual(adapted.fps, 20)
|
|
}
|
|
|
|
func testNominalKeepsBaseline() {
|
|
let baseline = BroadcastConfig(
|
|
rtmpUrl: "rtmp://localhost/live/key",
|
|
videoBitrate: 2_500_000,
|
|
fps: 30
|
|
)
|
|
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .nominal)
|
|
XCTAssertEqual(adapted.videoBitrate, baseline.videoBitrate)
|
|
XCTAssertEqual(adapted.fps, baseline.fps)
|
|
}
|
|
|
|
func testThermalStateLabels() {
|
|
AppLanguage.current = .it
|
|
XCTAssertEqual(ThermalState.nominal.displayLabel, L10n.t("thermal.state.nominal"))
|
|
XCTAssertEqual(ThermalState.fair.displayLabel, L10n.t("thermal.state.fair"))
|
|
XCTAssertEqual(ThermalState.serious.displayLabel, L10n.t("thermal.state.serious"))
|
|
XCTAssertEqual(ThermalState.critical.displayLabel, L10n.t("thermal.state.critical"))
|
|
AppLanguage.current = .en
|
|
XCTAssertEqual(ThermalState.nominal.displayLabel, "Temperature OK")
|
|
AppLanguage.current = .system
|
|
}
|
|
}
|