Skip to content

Commit 41d9f7d

Browse files
committed
Add windows vendor and tests
1 parent 526ac3d commit 41d9f7d

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

.editorconfig

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*]
4+
end_of_line = lf
5+
insert_final_newline = true
6+
7+
[*.swift]
8+
indent_style = tab
9+
indent_size = 4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import Foundation
2+
3+
#if os(Windows)
4+
5+
import WinSDK
6+
7+
internal class WindowsVendorSystem: VendorSystem {
8+
override var manufacturer: String {
9+
return "unknown"
10+
}
11+
12+
override var type: String {
13+
return "Windows"
14+
}
15+
16+
override var model: String {
17+
return "unknown"
18+
}
19+
20+
override var name: String {
21+
return "unknown"
22+
}
23+
24+
override var identifierForVendor: String? {
25+
return nil
26+
}
27+
28+
override var systemName: String {
29+
// If the name is larger than 256 characters, we might get an error.
30+
var size: DWORD = 256
31+
var buffer = [CHAR](repeating: 0, count: Int(size))
32+
guard GetComputerNameA(&buffer, &size) else {
33+
return "unknown"
34+
}
35+
36+
return String(cString: buffer)
37+
}
38+
39+
override var systemVersion: String {
40+
let version = ProcessInfo.processInfo.operatingSystemVersion
41+
return "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)"
42+
}
43+
44+
override var screenSize: ScreenSize {
45+
var rect: RECT = .init(left: 0, top: 0, right: 0, bottom: 0)
46+
guard SystemParametersInfoA(UInt32(SPI_GETWORKAREA), 0, &rect, 0) else {
47+
return ScreenSize(width: 0, height: 0)
48+
}
49+
50+
return ScreenSize(width: rect.width, height: rect.height)
51+
}
52+
53+
override var userAgent: String? {
54+
return "unknown"
55+
}
56+
57+
override var connection: ConnectionStatus {
58+
return .unknown
59+
}
60+
61+
override var requiredPlugins: [any PlatformPlugin] {
62+
[]
63+
}
64+
}
65+
66+
extension RECT {
67+
internal var width: Double {
68+
Double(right - left)
69+
}
70+
71+
internal var height: Double {
72+
Double(bottom - top)
73+
}
74+
}
75+
#endif
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import XCTest
2+
@testable import Segment
3+
4+
#if os(Windows)
5+
6+
final class WindowsVendorSystem_Tests: XCTestCase {
7+
func testScreenSizeReturnsNonEmpty() {
8+
let system = WindowsVendorSystem()
9+
10+
let screen = system.screenSize
11+
12+
XCTAssertNotEqual(screen.width, 0)
13+
XCTAssertNotEqual(screen.height, 0)
14+
}
15+
16+
func testNameReturnsNonEmpty() {
17+
let system = WindowsVendorSystem()
18+
19+
let name = system.systemName
20+
21+
XCTAssertNotEqual(name, "unknown")
22+
}
23+
24+
func testVersionNumberIsWellFormatted() {
25+
let system = WindowsVendorSystem()
26+
27+
let version = system.systemVersion
28+
29+
let components = version.split(separator: ".")
30+
31+
XCTAssertEqual(components.count, 3)
32+
33+
// Ensure that the version components are all numeric
34+
XCTAssertTrue(components.allSatisfy({ Int($0) != nil }))
35+
}
36+
}
37+
38+
#endif

0 commit comments

Comments
 (0)