Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5321eb8

Browse files
update
1 parent 1810681 commit 5321eb8

File tree

2 files changed

+114
-1
lines changed

2 files changed

+114
-1
lines changed

‎README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SwiftUI video player iOS 14+, macOS 11+, tvOS 14+
2-
## ![GitHub Repo stars](https://img.shields.io/github/stars/swiftuiux/swiftui-loop-videoPlayer?style=social)⭐ Star it — so I know it’s worth my time to keep improving it.
2+
## ⭐ Star it — so I know it’s worth my time to keep improving it.
33

44
[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fswiftuiux%2Fswiftui-loop-videoplayer%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/swiftuiux/swiftui-loop-videoplayer)
55
[![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fswiftuiux%2Fswiftui-loop-videoPlayer%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/swiftuiux/swiftui-loop-videoPlayer)
@@ -113,6 +113,8 @@ You can reach out the effect simply via mask modifier
113113
[Perhaps that might be enough for your needs](https://github.com/swiftuiux/swiftui-loop-videoPlayer/issues/7#issuecomment-2341268743)
114114

115115

116+
117+
116118
## Testing
117119

118120
The package includes unit tests that cover key functionality. While not exhaustive, these tests help ensure the core components work as expected. UI tests are in progress and are being developed [in the example application](https://github.com/swiftuiux/swiftui-video-player-example). The run_tests.sh is an example script that automates testing by encapsulating test commands into a single executable file, simplifying the execution process. You can configure the script to run specific testing environment relevant to your projects.
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//
2+
// textArray.swift
3+
// swiftui-loop-videoplayer
4+
//
5+
// Created by Igor on 21.08.25.
6+
//
7+
8+
import XCTest
9+
import AVFoundation
10+
@testable import swiftui_loop_videoplayer
11+
12+
final class SettingsTests: XCTestCase {
13+
14+
// MARK: - events([PlayerEventFilter]?)
15+
16+
func testFetch_Events_WithArray() {
17+
let settings: [Setting] = [.events([.playing, .paused])]
18+
let events: [PlayerEventFilter] = settings.fetch(by: "events", defaulted: [])
19+
XCTAssertEqual(events, [.playing, .paused])
20+
}
21+
22+
func testFetch_Events_NilAssociatedValue() {
23+
let settings: [Setting] = [.events(nil)]
24+
// Optional(nil) won't cast to [PlayerEventFilter] → returns default
25+
let events: [PlayerEventFilter] = settings.fetch(by: "events", defaulted: [])
26+
XCTAssertTrue(events.isEmpty)
27+
}
28+
29+
// MARK: - name / ext / subtitles
30+
31+
func testFetch_Name_ReturnsStoredString() {
32+
let settings: [Setting] = [.name("teaser")]
33+
let value: String = settings.fetch(by: "name", defaulted: "")
34+
XCTAssertEqual(value, "teaser")
35+
}
36+
37+
func testFetch_Ext_ReturnsStoredString() {
38+
let settings: [Setting] = [.ext("mp4")]
39+
let value: String = settings.fetch(by: "ext", defaulted: "mov")
40+
XCTAssertEqual(value, "mp4")
41+
}
42+
43+
func testFetch_Subtitles_ReturnsStoredString() {
44+
let settings: [Setting] = [.subtitles("de")]
45+
let value: String = settings.fetch(by: "subtitles", defaulted: "en")
46+
XCTAssertEqual(value, "de")
47+
}
48+
49+
// MARK: - Missing / mismatch
50+
51+
func testFetch_ReturnsDefault_WhenNameMissing() {
52+
let settings: [Setting] = [.name("teaser")]
53+
let value: Int = settings.fetch(by: "fontSize", defaulted: 12)
54+
XCTAssertEqual(value, 12)
55+
}
56+
57+
func testFetch_ReturnsDefault_WhenTypeMismatch() {
58+
let settings: [Setting] = [.name("teaser")]
59+
let value: Int = settings.fetch(by: "name", defaulted: 0)
60+
XCTAssertEqual(value, 0)
61+
}
62+
63+
// MARK: - First match precedence
64+
65+
func testFetch_PrefersFirstMatch_WhenMultipleWithSameName() {
66+
let settings: [Setting] = [.name("first"), .name("second")]
67+
let value: String = settings.fetch(by: "name", defaulted: "")
68+
XCTAssertEqual(value, "first")
69+
}
70+
71+
// MARK: - Value-less cases → default
72+
73+
func testFetch_Vector_ReturnsDefault() {
74+
let settings: [Setting] = [.vector]
75+
let value: Bool = settings.fetch(by: "vector", defaulted: false)
76+
XCTAssertFalse(value)
77+
}
78+
79+
func testFetch_Loop_ReturnsDefault() {
80+
let settings: [Setting] = [.loop]
81+
let value: String = settings.fetch(by: "loop", defaulted: "no")
82+
XCTAssertEqual(value, "no")
83+
}
84+
85+
func testFetch_PictureInPicture_ReturnsDefault() {
86+
let settings: [Setting] = [.pictureInPicture]
87+
let pip: Bool = settings.fetch(by: "pictureInPicture", defaulted: false)
88+
XCTAssertFalse(pip)
89+
}
90+
91+
func testFetch_Mute_ReturnsDefault() {
92+
let settings: [Setting] = [.mute]
93+
let muted: Bool = settings.fetch(by: "mute", defaulted: false)
94+
XCTAssertFalse(muted)
95+
}
96+
97+
// MARK: - timePublishing / gravity
98+
99+
func testFetch_TimePublishing_CMTime() {
100+
let t = CMTime(seconds: 0.5, preferredTimescale: 600)
101+
let settings: [Setting] = [.timePublishing(t)]
102+
let fetched: CMTime = settings.fetch(by: "timePublishing", defaulted: .zero)
103+
XCTAssertEqual(CMTimeCompare(fetched, t), 0)
104+
}
105+
106+
func testFetch_Gravity_CustomAssociatedValue() {
107+
let settings: [Setting] = [.gravity(.resizeAspectFill)]
108+
let gravity: AVLayerVideoGravity = settings.fetch(by: "gravity", defaulted: .resize)
109+
XCTAssertEqual(gravity, .resizeAspectFill)
110+
}
111+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /