Skip to content

Commit 2ae6adf

Browse files
committed
feat : add missing watch support
1 parent ab9fd80 commit 2ae6adf

File tree

4 files changed

+222
-0
lines changed

4 files changed

+222
-0
lines changed

Sources/DeviceIdentificator/Models/AppleWatchModel+Processor.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ public extension DeviceModel.AppleWatchModel {
3737
case .series9_41mmCellular: return .appleS9
3838
case .series9_45mmGPS: return .appleS9
3939
case .series9_45mmCellular: return .appleS9
40+
case .series10_42mmGPS: return .appleS10
41+
case .series10_42mmCellular: return .appleS10
42+
case .series10_46mmGPS: return .appleS10
43+
case .series10_46mmCellular: return .appleS10
44+
case .series11_42mmGPS: return .appleS10
45+
case .series11_42mmCellular: return .appleS10
46+
case .series11_46mmGPS: return .appleS10
47+
case .series11_46mmCellular: return .appleS10
4048
case .SE_40mmGPS: return .appleS5
4149
case .SE_40mmCellular: return .appleS5
4250
case .SE_44mmGPS: return .appleS5
@@ -47,6 +55,7 @@ public extension DeviceModel.AppleWatchModel {
4755
case .SE2_44mmCellular: return .appleS8
4856
case .ultra: return .appleS8
4957
case .ultra2: return .appleS9
58+
case .ultra3: return .appleS10
5059
}
5160
}
5261
}

Sources/DeviceIdentificator/Processor.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public extension DeviceModel {
6767
case appleS7
6868
case appleS8
6969
case appleS9
70+
case appleS10
7071
}
7172
}
7273

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import XCTest
2+
@testable import DeviceIdentificator
3+
4+
class AdditionalCoverageTests: XCTestCase {
5+
6+
func test_description_is_name() {
7+
DeviceModel.allCases.forEach { model in
8+
XCTAssertEqual(model.description, model.name)
9+
}
10+
}
11+
12+
func test_mac_catalyst_and_designed_for_ipad() {
13+
let catalyst = DeviceModel.macCatalyst
14+
XCTAssertEqual(catalyst.name, "Mac Catalyst")
15+
XCTAssertNil(catalyst.deviceIdentifier)
16+
XCTAssertEqual(catalyst.architecture, "arm64")
17+
18+
let designedForIPad = DeviceModel.macDesignedForIpad
19+
XCTAssertEqual(designedForIPad.name, "Mac Designed for iPad")
20+
XCTAssertNil(designedForIPad.deviceIdentifier)
21+
XCTAssertEqual(designedForIPad.architecture, "arm64")
22+
}
23+
24+
func test_unknown_model() {
25+
let unknown = DeviceModel.unknown(model: "TestDevice1,1")
26+
XCTAssertEqual(unknown.name, "Unknown device: TestDevice1,1")
27+
XCTAssertEqual(unknown.deviceIdentifier, "TestDevice1,1")
28+
XCTAssertNil(unknown.architecture)
29+
XCTAssertFalse(unknown.hasRoundedDisplayCorners)
30+
XCTAssertFalse(unknown.hasDynamicIsland)
31+
}
32+
33+
func test_allDevicesWithRoundedDisplayCorners() {
34+
let devices = DeviceModel.allDevicesWithRoundedDisplayCorners
35+
XCTAssertFalse(devices.isEmpty)
36+
37+
// Verifica que todos los dispositivos en la lista realmente tengan la propiedad.
38+
devices.forEach {
39+
XCTAssertTrue($0.hasRoundedDisplayCorners)
40+
}
41+
42+
// Verifica que un dispositivo que no debería estar, no esté.
43+
let iPhone8 = DeviceModel.iPhone(.iPhone8Global)
44+
XCTAssertFalse(devices.contains(iPhone8))
45+
}
46+
47+
func test_simpleName_strips_parentheses() {
48+
let iPad = DeviceModel.iPad(.gen1Wifi) // "iPad 1G (Wifi)"
49+
XCTAssertEqual(iPad.simpleName, "iPad 1G")
50+
51+
let mac = DeviceModel.mac(.iMac2PortsM1) // "iMac (M1 2 ports)"
52+
XCTAssertEqual(mac.simpleName, "iMac")
53+
}
54+
55+
func test_init_with_simulator_identifier() {
56+
// Simula el entorno de un simulador
57+
let originalEnv = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
58+
setenv("SIMULATOR_MODEL_IDENTIFIER", "iPhone15,4", 1) // iPhone 15
59+
60+
let simulatorDevice = DeviceModel(deviceIdentifier: "arm64")
61+
62+
let expectedModel = DeviceModel.simulator(.iPhone(.iPhone15), arch: "arm64")
63+
XCTAssertEqual(simulatorDevice, expectedModel)
64+
XCTAssertEqual(simulatorDevice.name, "Simulator of iPhone 15 @ arm64")
65+
XCTAssertTrue(simulatorDevice.isSimulator)
66+
XCTAssertTrue(simulatorDevice.isIphone)
67+
68+
// Limpia la variable de entorno
69+
if let originalEnv = originalEnv {
70+
setenv("SIMULATOR_MODEL_IDENTIFIER", originalEnv, 1)
71+
} else {
72+
unsetenv("SIMULATOR_MODEL_IDENTIFIER")
73+
}
74+
}
75+
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import XCTest
2+
@testable import DeviceIdentificator
3+
4+
class NewModelsTests: XCTestCase {
5+
6+
// MARK: - iPhone Tests
7+
8+
func test_iPhone17_properties() {
9+
let model: DeviceModel.IPhoneModel = .iPhone17
10+
let device = DeviceModel.iPhone(model)
11+
XCTAssertEqual(device.name, "iPhone 17")
12+
XCTAssertEqual(device.deviceIdentifier, "iPhone18,3")
13+
XCTAssertEqual(model.processor, .appleA19)
14+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPhone18,3"), device)
15+
}
16+
17+
func test_iPhone17Pro_properties() {
18+
let model: DeviceModel.IPhoneModel = .iPhone17Pro
19+
let device = DeviceModel.iPhone(model)
20+
XCTAssertEqual(device.name, "iPhone 17 Pro")
21+
XCTAssertEqual(device.deviceIdentifier, "iPhone18,1")
22+
XCTAssertEqual(model.processor, .appleA19Pro)
23+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPhone18,1"), device)
24+
}
25+
26+
func test_iPhone17ProMax_properties() {
27+
let model: DeviceModel.IPhoneModel = .iPhone17ProMax
28+
let device = DeviceModel.iPhone(model)
29+
XCTAssertEqual(device.name, "iPhone 17 Pro Max")
30+
XCTAssertEqual(device.deviceIdentifier, "iPhone18,2")
31+
XCTAssertEqual(model.processor, .appleA19Pro)
32+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPhone18,2"), device)
33+
}
34+
35+
func test_iPhoneAir_properties() {
36+
let model: DeviceModel.IPhoneModel = .iPhoneAir
37+
let device = DeviceModel.iPhone(model)
38+
XCTAssertEqual(device.name, "iPhone Air")
39+
XCTAssertEqual(device.deviceIdentifier, "iPhone18,4")
40+
XCTAssertEqual(model.processor, .appleA19)
41+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPhone18,4"), device)
42+
}
43+
44+
// MARK: - iPad Tests
45+
46+
func test_iPadGen11_properties() {
47+
let wifiModel: DeviceModel.IPadModel = .gen11Wifi
48+
let wifiDevice = DeviceModel.iPad(wifiModel)
49+
XCTAssertEqual(wifiDevice.name, "iPad 11G (Wifi)")
50+
XCTAssertEqual(wifiDevice.deviceIdentifier, "iPad15,7")
51+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,7"), wifiDevice)
52+
53+
let cellularModel: DeviceModel.IPadModel = .gen11Cellular
54+
let cellularDevice = DeviceModel.iPad(cellularModel)
55+
XCTAssertEqual(cellularDevice.name, "iPad 11G (Cellular)")
56+
XCTAssertEqual(cellularDevice.deviceIdentifier, "iPad15,8")
57+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,8"), cellularDevice)
58+
}
59+
60+
func test_iPadAirM3_properties() {
61+
let air11Wifi: DeviceModel.IPadModel = .air11InchM3Wifi
62+
let air11WifiDevice = DeviceModel.iPad(air11Wifi)
63+
XCTAssertEqual(air11WifiDevice.name, "iPad Air M3 11\" (Wifi)")
64+
XCTAssertEqual(air11WifiDevice.deviceIdentifier, "iPad15,3")
65+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,3"), air11WifiDevice)
66+
67+
let air11Cellular: DeviceModel.IPadModel = .air11InchM3Cellular
68+
let air11CellularDevice = DeviceModel.iPad(air11Cellular)
69+
XCTAssertEqual(air11CellularDevice.name, "iPad Air M3 11\" (Cellular)")
70+
XCTAssertEqual(air11CellularDevice.deviceIdentifier, "iPad15,4")
71+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,4"), air11CellularDevice)
72+
73+
let air13Wifi: DeviceModel.IPadModel = .air13InchM3Wifi
74+
let air13WifiDevice = DeviceModel.iPad(air13Wifi)
75+
XCTAssertEqual(air13WifiDevice.name, "iPad Air M3 13\" (Wifi)")
76+
XCTAssertEqual(air13WifiDevice.deviceIdentifier, "iPad15,5")
77+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,5"), air13WifiDevice)
78+
79+
let air13Cellular: DeviceModel.IPadModel = .air13InchM3Cellular
80+
let air13CellularDevice = DeviceModel.iPad(air13Cellular)
81+
XCTAssertEqual(air13CellularDevice.name, "iPad Air M3 13\" (Cellular)")
82+
XCTAssertEqual(air13CellularDevice.deviceIdentifier, "iPad15,6")
83+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad15,6"), air13CellularDevice)
84+
}
85+
86+
func test_iPadMiniA17Pro_properties() {
87+
let wifiModel: DeviceModel.IPadModel = .miniA17ProWifi
88+
let wifiDevice = DeviceModel.iPad(wifiModel)
89+
XCTAssertEqual(wifiDevice.name, "iPad Mini A17 Pro (Wifi)")
90+
XCTAssertEqual(wifiDevice.deviceIdentifier, "iPad16,1")
91+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad16,1"), wifiDevice)
92+
93+
let cellularModel: DeviceModel.IPadModel = .miniA17ProCellular
94+
let cellularDevice = DeviceModel.iPad(cellularModel)
95+
XCTAssertEqual(cellularDevice.name, "iPad Mini A17 Pro (Cellular)")
96+
XCTAssertEqual(cellularDevice.deviceIdentifier, "iPad16,2")
97+
XCTAssertEqual(DeviceModel(deviceIdentifier: "iPad16,2"), cellularDevice)
98+
}
99+
100+
// MARK: - Apple Watch Tests
101+
102+
func test_AppleWatchSeries10_properties() {
103+
let gps42mm = DeviceModel.appleWatch(.series10_42mmGPS)
104+
XCTAssertEqual(gps42mm.name, "Apple Watch Series 10 42mm")
105+
XCTAssertEqual(gps42mm.deviceIdentifier, "Watch7,8")
106+
XCTAssertEqual(DeviceModel.AppleWatchModel.series10_42mmGPS.processor, .appleS10)
107+
XCTAssertEqual(DeviceModel(deviceIdentifier: "Watch7,8"), gps42mm)
108+
109+
let cellular42mm = DeviceModel.appleWatch(.series10_42mmCellular)
110+
XCTAssertEqual(cellular42mm.name, "Apple Watch Series 10 42mm")
111+
XCTAssertEqual(cellular42mm.deviceIdentifier, "Watch7,10")
112+
XCTAssertEqual(DeviceModel.AppleWatchModel.series10_42mmCellular.processor, .appleS10)
113+
XCTAssertEqual(DeviceModel(deviceIdentifier: "Watch7,10"), cellular42mm)
114+
}
115+
116+
func test_AppleWatchUltra3_properties() {
117+
let model = DeviceModel.appleWatch(.ultra3)
118+
XCTAssertEqual(model.name, "Apple Watch Ultra 3")
119+
XCTAssertEqual(model.deviceIdentifier, "Watch7,12")
120+
XCTAssertEqual(DeviceModel.AppleWatchModel.ultra3.processor, .appleS10)
121+
XCTAssertEqual(DeviceModel(deviceIdentifier: "Watch7,12"), model)
122+
}
123+
124+
func test_AppleWatchSeries11_properties() {
125+
let gps42mm = DeviceModel.appleWatch(.series11_42mmGPS)
126+
XCTAssertEqual(gps42mm.name, "Apple Watch Series 11 42mm")
127+
XCTAssertEqual(gps42mm.deviceIdentifier, "Watch7,17")
128+
XCTAssertEqual(DeviceModel.AppleWatchModel.series11_42mmGPS.processor, .appleS10)
129+
XCTAssertEqual(DeviceModel(deviceIdentifier: "Watch7,17"), gps42mm)
130+
131+
let cellular42mm = DeviceModel.appleWatch(.series11_42mmCellular)
132+
XCTAssertEqual(cellular42mm.name, "Apple Watch Series 11 42mm")
133+
XCTAssertEqual(cellular42mm.deviceIdentifier, "Watch7,19")
134+
XCTAssertEqual(DeviceModel.AppleWatchModel.series11_42mmCellular.processor, .appleS10)
135+
XCTAssertEqual(DeviceModel(deviceIdentifier: "Watch7,19"), cellular42mm)
136+
}
137+
}

0 commit comments

Comments
 (0)