You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Music/MusicShared/Tests/MusicSharedTests/HLSManifestGeneratorTests.s...

78 lines
3.0 KiB

import Testing
@testable import MusicShared
struct HLSManifestGeneratorTests {
// Generates a manifest for a 16-second track with 6s segments.
// Expects 3 segments: 6s, 6s, 4s (remainder).
@Test func generatesCorrectManifestForTypicalTrack() {
let manifest = HLSManifestGenerator.manifest(
trackId: 42,
duration: 16.0,
segmentDuration: 6.0
)
#expect(manifest.contains("#EXTM3U"))
#expect(manifest.contains("#EXT-X-VERSION:3"))
#expect(manifest.contains("#EXT-X-TARGETDURATION:6"))
#expect(manifest.contains("#EXT-X-MEDIA-SEQUENCE:0"))
#expect(manifest.contains("#EXTINF:6.000,"))
#expect(manifest.contains("#EXTINF:4.000,"))
#expect(manifest.contains("segments/0.mp3"))
#expect(manifest.contains("segments/1.mp3"))
#expect(manifest.contains("segments/2.mp3"))
#expect(!manifest.contains("segments/3.mp3"))
#expect(manifest.contains("#EXT-X-ENDLIST"))
}
// A track whose duration is an exact multiple of the segment duration.
// Expects no short final segment.
@Test func exactMultipleOfSegmentDuration() {
let manifest = HLSManifestGenerator.manifest(
trackId: 1,
duration: 12.0,
segmentDuration: 6.0
)
let segmentCount = manifest.components(separatedBy: "#EXTINF:6.000,").count - 1
#expect(segmentCount == 2)
#expect(!manifest.contains("segments/2.mp3"))
}
// A very short track (shorter than one segment).
// Expects a single segment with the track's full duration.
@Test func veryShortTrack() {
let manifest = HLSManifestGenerator.manifest(
trackId: 7,
duration: 2.5,
segmentDuration: 6.0
)
#expect(manifest.contains("#EXTINF:2.500,"))
#expect(manifest.contains("segments/0.mp3"))
#expect(!manifest.contains("segments/1.mp3"))
}
// Segment count helper returns the correct number of segments.
@Test func segmentCountCalculation() {
#expect(HLSManifestGenerator.segmentCount(duration: 16.0, segmentDuration: 6.0) == 3)
#expect(HLSManifestGenerator.segmentCount(duration: 12.0, segmentDuration: 6.0) == 2)
#expect(HLSManifestGenerator.segmentCount(duration: 2.5, segmentDuration: 6.0) == 1)
#expect(HLSManifestGenerator.segmentCount(duration: 6.0, segmentDuration: 6.0) == 1)
}
// Time range for a given segment index returns correct start and duration.
@Test func segmentTimeRange() {
// Track: 16s, segment: 6s segments at 0-6, 6-12, 12-16
let range0 = HLSManifestGenerator.segmentTimeRange(
index: 0, trackDuration: 16.0, segmentDuration: 6.0
)
#expect(range0.start == 0.0)
#expect(range0.duration == 6.0)
let range2 = HLSManifestGenerator.segmentTimeRange(
index: 2, trackDuration: 16.0, segmentDuration: 6.0
)
#expect(range2.start == 12.0)
#expect(range2.duration == 4.0)
}
}