Skip to content

Commit 373888d

Browse files
committed
Added Interstitital Tag Builder tests
1 parent cc7dfd3 commit 373888d

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

mamba.xcodeproj/project.pbxproj

+8
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@
6767
E65FB24A2CD524BF00BF6F56 /* InterstitialTagBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB2492CD524BF00BF6F56 /* InterstitialTagBuilder.swift */; };
6868
E65FB24B2CD524BF00BF6F56 /* InterstitialTagBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB2492CD524BF00BF6F56 /* InterstitialTagBuilder.swift */; };
6969
E65FB24C2CD524BF00BF6F56 /* InterstitialTagBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB2492CD524BF00BF6F56 /* InterstitialTagBuilder.swift */; };
70+
E65FB24E2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB24D2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift */; };
71+
E65FB24F2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB24D2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift */; };
72+
E65FB2502CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65FB24D2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift */; };
7073
EC03B63D1E5CC55800BF1F97 /* RapidParserMasterParseArray.c in Sources */ = {isa = PBXBuildFile; fileRef = EC03B63B1E5CC55800BF1F97 /* RapidParserMasterParseArray.c */; };
7174
EC03B63E1E5CC55800BF1F97 /* RapidParserMasterParseArray.c in Sources */ = {isa = PBXBuildFile; fileRef = EC03B63B1E5CC55800BF1F97 /* RapidParserMasterParseArray.c */; };
7275
EC03B63F1E5CC55800BF1F97 /* RapidParserMasterParseArray.h in Headers */ = {isa = PBXBuildFile; fileRef = EC03B63C1E5CC55800BF1F97 /* RapidParserMasterParseArray.h */; };
@@ -682,6 +685,7 @@
682685
E65FB2412CD51E4200BF6F56 /* InterstitialValueTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialValueTypes.swift; sourceTree = "<group>"; };
683686
E65FB2452CD5241D00BF6F56 /* InterstitialValueTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialValueTests.swift; sourceTree = "<group>"; };
684687
E65FB2492CD524BF00BF6F56 /* InterstitialTagBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialTagBuilder.swift; sourceTree = "<group>"; };
688+
E65FB24D2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialTagBuilderTests.swift; sourceTree = "<group>"; };
685689
EC03B62D1E5CC54900BF1F97 /* PrototypeRapidParseArray.include */ = {isa = PBXFileReference; lastKnownFileType = text; path = PrototypeRapidParseArray.include; sourceTree = "<group>"; };
686690
EC03B62E1E5CC54900BF1F97 /* RapidParser_LookingForEForEXTINFState_ParseArray.include */ = {isa = PBXFileReference; lastKnownFileType = text; path = RapidParser_LookingForEForEXTINFState_ParseArray.include; sourceTree = "<group>"; };
687691
EC03B62F1E5CC54900BF1F97 /* RapidParser_LookingForEForEXTState_ParseArray.include */ = {isa = PBXFileReference; lastKnownFileType = text; path = RapidParser_LookingForEForEXTState_ParseArray.include; sourceTree = "<group>"; };
@@ -1337,6 +1341,7 @@
13371341
EC073F5F1FE08F7500689228 /* String+Helio.swift */,
13381342
EC7492A61DD29F7000AF4E20 /* URLSchemeChangeTests.swift */,
13391343
EC9BCAA21D749D8B0032BEBE /* Value Types */,
1344+
E65FB24D2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift */,
13401345
);
13411346
path = "Util Tests";
13421347
sourceTree = "<group>";
@@ -1927,6 +1932,7 @@
19271932
EC7492761DD29EC800AF4E20 /* EXT_X_KEYTagParserTests.swift in Sources */,
19281933
883290561EA172170064588B /* MambaStringRefExtensionTests.swift in Sources */,
19291934
ECDE185122387257008566BB /* VariantPlaylistMediaSpanTests.swift in Sources */,
1935+
E65FB2502CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */,
19301936
EC7492A91DD29F7000AF4E20 /* MambaUtilTests.swift in Sources */,
19311937
EC7492741DD29EC800AF4E20 /* EXT_X_I_FRAME_STREAM_INFTagParserTests.swift in Sources */,
19321938
ECFBD90E1E5CCC2200379FC2 /* MambaStringRefTests.m in Sources */,
@@ -2107,6 +2113,7 @@
21072113
EC7492291DD29E4A00AF4E20 /* FixtureLoader.swift in Sources */,
21082114
F7CFF27F1F392009009F4C82 /* CMTimeMakeFromStringTests.swift in Sources */,
21092115
ECDE185222387257008566BB /* VariantPlaylistMediaSpanTests.swift in Sources */,
2116+
E65FB24F2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */,
21102117
EC7492771DD29EC800AF4E20 /* EXT_X_KEYTagParserTests.swift in Sources */,
21112118
EC7492AA1DD29F7000AF4E20 /* MambaUtilTests.swift in Sources */,
21122119
ECFBD90F1E5CCC2200379FC2 /* MambaStringRefTests.m in Sources */,
@@ -2287,6 +2294,7 @@
22872294
ECE253F0209A50B500D388CE /* EXT_X_I_FRAME_STREAM_INFTagParserTests.swift in Sources */,
22882295
ECDE185322387257008566BB /* VariantPlaylistMediaSpanTests.swift in Sources */,
22892296
ECE25405209A50B500D388CE /* CodecArrayTests.swift in Sources */,
2297+
E65FB24E2CD526DD00BF6F56 /* InterstitialTagBuilderTests.swift in Sources */,
22902298
ECE253EA209A50A100D388CE /* MambaStringRefTests.m in Sources */,
22912299
ECE253F7209A50B500D388CE /* StringArrayParserTests.swift in Sources */,
22922300
ECE25401209A50B500D388CE /* MambaUtilTests.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
//
2+
// InterstitialTagBuilderTests.swift
3+
// mambaTests
4+
//
5+
// Created by Migneco, Ray on 10/23/24.
6+
// Copyright © 2024 Comcast Corporation.
7+
// Licensed under the Apache License, Version 2.0 (the "License");
8+
// you may not use this file except in compliance with the License.
9+
// You may obtain a copy of the License at
10+
//
11+
// http://www.apache.org/licenses/LICENSE-2.0
12+
//
13+
// Unless required by applicable law or agreed to in writing, software
14+
// distributed under the License is distributed on an "AS IS" BASIS,
15+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
// See the License for the specific language governing permissions and
17+
// limitations under the License. All rights reserved.
18+
//
19+
20+
import XCTest
21+
22+
@testable import mamba
23+
24+
25+
final class InterstitialTagBuilderTests: XCTestCase {
26+
27+
func testTagBuilder() {
28+
29+
let startDate = Date()
30+
let id: String = "12345"
31+
let assetUri: String = "http://not.a.real.uri"
32+
let assetListUri: String = "http://not.a.real.list"
33+
34+
let validator = EXT_X_DATERANGETagValidator()
35+
36+
// test URI
37+
var tagBuilder = InterstitialTagBuilder(id: id,
38+
startDate: startDate,
39+
assetUri: assetUri)
40+
41+
var tag = decorateAndTest(tagBuilder)
42+
43+
XCTAssertEqual(tag.value(forValueIdentifier: PantosValue.startDate), String.DateFormatter.iso8601MS.string(from: startDate))
44+
XCTAssertEqual(tag.value<String>(forValueIdentifier: PantosValue.id), id)
45+
XCTAssertEqual(tag.value<String>(forValueIdentifier: PantosValue.assetUri), assetUri)
46+
XCTAssertNil(tag.value<String>(forValueIdentifier: PantosValue.assetList))
47+
48+
XCTAssertNil(validator.validate(tag: tag))
49+
50+
// test asset list
51+
tagBuilder = InterstitialTagBuilder(id: id,
52+
startDate: startDate,
53+
assetList: assetListUri)
54+
55+
tag = decorateAndTest(tagBuilder)
56+
57+
XCTAssertEqual(tag.value<String>(forValueIdentifier: PantosValue.assetList), assetListUri)
58+
XCTAssertNil(tag.value<String>(forValueIdentifier: PantosValue.assetUri))
59+
60+
XCTAssertNil(validator.validate(tag: tag))
61+
}
62+
63+
func decorateAndTest(_ tagBuilder: InterstitialTagBuilder) -> PlaylistTag {
64+
65+
let duration: Double = 10.0
66+
let plannedDuration: Double = 10.0
67+
let alignment = HLSInterstitialAlignment(values: [.in, .out])
68+
let restrictions = HLSInterstitialSeekRestrictions(restrictions: [.skip, .jump])
69+
let playoutLimit: Double = 30.0
70+
let resumeOffset: Double = 5.0
71+
let timelineStyle = HLSInterstitialTimelineStyle.highlight
72+
let timelineOccupation = HLSInterstitialTimelineOccupation.point
73+
let contentVariation = false
74+
let clientAttributes: [String: LosslessStringConvertible] = ["X-COM-BEACON-URI": "http://not.a.real.beacon",
75+
"X-COM-AD-PROVIDER-ID": 100]
76+
77+
let tag = tagBuilder
78+
.withDuration(duration)
79+
.withPlannedDuration(plannedDuration)
80+
.withAlignment(alignment)
81+
.withRestrictions(restrictions)
82+
.withPlayoutLimit(playoutLimit)
83+
.withResumeOffset(resumeOffset)
84+
.withTimelineStyle(timelineStyle)
85+
.withTimelineOccupation(timelineOccupation)
86+
.withContentVariation(contentVariation)
87+
.withClientAttributes(clientAttributes)
88+
.buildTag()
89+
90+
XCTAssertEqual(tag.value<Double>(forValueIdentifier: PantosValue.duration), duration)
91+
XCTAssertEqual(tag.value<Double>(forValueIdentifier: PantosValue.plannedDuration), plannedDuration)
92+
XCTAssertEqual(tag.value<HLSInterstitialAlignment>(forValueIdentifier: PantosValue.snap), alignment)
93+
XCTAssertEqual(tag.value<HLSInterstitialSeekRestrictions>(forValueIdentifier: PantosValue.restrict), restrictions)
94+
XCTAssertEqual(tag.value<Double>(forValueIdentifier: PantosValue.playoutLimit), playoutLimit)
95+
XCTAssertEqual(tag.value<Double>(forValueIdentifier: PantosValue.resumeOffset), resumeOffset)
96+
XCTAssertEqual(tag.value<HLSInterstitialTimelineStyle>(forValueIdentifier: PantosValue.timelineStyle), timelineStyle)
97+
XCTAssertEqual(tag.value<HLSInterstitialTimelineOccupation>(forValueIdentifier: PantosValue.timelineOccupies), timelineOccupation)
98+
XCTAssertEqual(tag.value<Bool>(forValueIdentifier: PantosValue.contentMayVary), contentVariation)
99+
100+
// check client attributes
101+
for (k, v) in clientAttributes {
102+
guard let val = tag.value(forKey: k) else {
103+
XCTFail("Expected to find value for key \(k)")
104+
continue
105+
}
106+
107+
XCTAssertEqual(val, v.description)
108+
}
109+
110+
return tag
111+
}
112+
113+
}

0 commit comments

Comments
 (0)