Skip to content

Commit 232cd62

Browse files
committed
Add Test.
1 parent 2051159 commit 232cd62

File tree

7 files changed

+61
-6
lines changed

7 files changed

+61
-6
lines changed

Examples/macOS/PublishViewModel.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,25 @@ final class PublishViewModel: ObservableObject {
9898
await makeSession(preference)
9999
}
100100
Task { @ScreenActor in
101+
await mixer.screen.size = .init(width: 1280, height: 720)
102+
await mixer.screen.backgroundColor = NSColor.black.cgColor
103+
101104
let assetScreenObject = AssetScreenObject()
102105
assetScreenObject.size = .init(width: 180, height: 180)
103106
assetScreenObject.layoutMargin = .init(top: 16, left: 16, bottom: 0, right: 0)
104107
try? assetScreenObject.startReading(AVAsset(url: URL(fileURLWithPath: Bundle.main.path(forResource: "SampleVideo_360x240_5mb", ofType: "mp4") ?? "")))
105108
try? await mixer.screen.addChild(assetScreenObject)
106-
await mixer.screen.size = .init(width: 1280, height: 720)
107-
await mixer.screen.backgroundColor = NSColor.black.cgColor
109+
110+
let image = ImageScreenObject()
111+
image.size = .init(width: 120, height: 120)
112+
image.horizontalAlignment = .right
113+
image.verticalAlignment = .bottom
114+
image.layoutMargin = .init(top: 0, left: 0, bottom: 16, right: 16)
115+
let nsImage = await NSApplication.shared.applicationIconImage
116+
if let cgImage = nsImage?.cgImage(forProposedRect: nil, context: nil, hints: nil) {
117+
image.ciImage = CIImage(cgImage: cgImage)
118+
}
119+
try? await mixer.screen.addChild(image)
108120
}
109121
}
110122

HaishinKit/Sources/Screen/ImageScreenObject.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public final class ImageScreenObject: ScreenObject {
127127
return super.makeBounds(size == .zero ? ciImage.extent.size : size)
128128
}
129129

130-
func setSource(_ source: String?) throws {
130+
public func setSource(_ source: String?) throws {
131131
self.source = source
132132
let imageSource = try ImageSourceFactory.parse(URL(string: source ?? ""))
133133
ciImage = try imageSource.toImage()

HaishinKit/Sources/Screen/Screen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public final class Screen: ScreenObjectContainerConvertible {
9191
private(set) var targetTimestamp: TimeInterval = 0.0
9292
private(set) var videoTrackScreenObject = VideoScreenObject()
9393
private var videoCaptureLatency: TimeInterval = 0.0
94-
private var root: ScreenObjectContainer = .init()
94+
private(set) var root: ScreenObjectContainer = .init()
9595
private var outputFormat: CMFormatDescription?
9696
private var pixelBufferPool: CVPixelBufferPool? {
9797
didSet {

HaishinKit/Sources/Screen/ScreenObjectSnapshotFactory.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,8 @@ public struct ScreenObjectSnapshotFactory {
4141
)
4242
}
4343
}
44+
45+
public func make(_ screen: Screen)-> ScreenObjectSnapshot {
46+
return make(screen.root)
47+
}
4448
}

HaishinKit/Tests/Screen/ScreenObjectContainerTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ import Testing
1515
try? container1.addChild(videoTrack1)
1616
try? container1.addChild(videoTrack2)
1717

18-
let videoTracks1 = container1.getScreenObjects() as [VideoTrackScreenObject]
18+
let videoTracks1 = container1.getScreenObjects() as [VideoScreenObject]
1919
#expect(videoTracks1.count == 2)
2020

2121
let container2 = ScreenObjectContainer()
2222
let videoTrack3 = VideoScreenObject()
2323
try? container2.addChild(videoTrack3)
2424
try? container1.addChild(container2)
2525

26-
let videoTracks2 = container1.getScreenObjects() as [VideoTrackScreenObject]
26+
let videoTracks2 = container1.getScreenObjects() as [VideoScreenObject]
2727
#expect(videoTracks2.count == 3)
2828
}
2929
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import AVFoundation
2+
import Foundation
3+
import Testing
4+
5+
@testable import HaishinKit
6+
7+
@ScreenActor
8+
@Suite struct ScreenObjectFactoryTests {
9+
@Test func videoSnapshot() throws {
10+
let string = """
11+
{"type":"video","id":"1771162233189358-1238207813","size":{"width":90,"height":160},"isVisible":true,"layoutMargin":{"top":16,"left":0,"bottom":0,"right":16},"horizontalAlignment":2,"verticalAlignment":0,"elements":{"track":"1"},"children":[]}
12+
""".data(using: .utf8)!
13+
let snapshot = try JSONDecoder().decode(ScreenObjectSnapshot.self, from: string)
14+
let factory = ScreenObjectFactory()
15+
let videoScreenObject = factory.make(snapshot) as? VideoScreenObject
16+
#expect(videoScreenObject?.track == 1)
17+
#expect(videoScreenObject?.horizontalAlignment == .right)
18+
#expect(videoScreenObject?.verticalAlignment == .top)
19+
#expect(videoScreenObject?.size == .init(width: 90, height: 160))
20+
}
21+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import AVFoundation
2+
import Foundation
3+
import Testing
4+
5+
@testable import HaishinKit
6+
7+
@ScreenActor
8+
@Suite struct ScreenObjectSnapshotTests {
9+
@Test func videoSnapshot() throws {
10+
let string = """
11+
{"type":"video","id":"1771162233189358-1238207813","size":{"width":90,"height":160},"isVisible":true,"layoutMargin":{"top":16,"left":0,"bottom":0,"right":16},"horizontalAlignment":2,"verticalAlignment":0,"elements":{"track":"1"},"children":[]}
12+
""".data(using: .utf8)!
13+
let snapshot = try JSONDecoder().decode(ScreenObjectSnapshot.self, from: string)
14+
#expect(snapshot.type == "video")
15+
#expect(snapshot.horizontalAlignment == 2)
16+
#expect(snapshot.verticalAlignment == 0)
17+
}
18+
}

0 commit comments

Comments
 (0)