@@ -2,15 +2,19 @@ package com.malinskiy.marathon.apple.xctestrun
2
2
3
3
import com.malinskiy.marathon.apple.AppleDevice
4
4
import com.malinskiy.marathon.apple.RemoteFileManager
5
+ import com.malinskiy.marathon.apple.logparser.parser.DeviceFailureException
6
+ import com.malinskiy.marathon.apple.logparser.parser.DeviceFailureReason
5
7
import com.malinskiy.marathon.apple.model.AppleTestBundle
6
8
import com.malinskiy.marathon.apple.model.Arch
7
9
import com.malinskiy.marathon.apple.model.Sdk
10
+ import com.malinskiy.marathon.apple.plist.bundle.BundleInfo
8
11
import com.malinskiy.marathon.apple.xctestrun.v2.TestConfiguration
9
12
import com.malinskiy.marathon.apple.xctestrun.v2.TestTarget
10
13
import com.malinskiy.marathon.apple.xctestrun.v2.Xctestrun
11
14
import com.malinskiy.marathon.config.exceptions.ConfigurationException
12
15
import com.malinskiy.marathon.config.vendor.apple.TestType
13
16
import com.malinskiy.marathon.config.vendor.apple.ios.XcresultConfiguration
17
+ import com.malinskiy.marathon.exceptions.DeviceLostException
14
18
import com.malinskiy.marathon.exceptions.DeviceSetupException
15
19
import com.malinskiy.marathon.exceptions.TransferException
16
20
import java.io.File
@@ -28,6 +32,8 @@ class TestRootFactory(
28
32
29
33
val testRoot = remoteFileManager.remoteTestRoot()
30
34
remoteFileManager.createRemoteDirectory(testRoot)
35
+ validateDeviceCompatibility(device, bundle)
36
+
31
37
val xctestrun = when (testType) {
32
38
TestType .XCUITEST -> generateXCUITest(testRoot, remoteFileManager, bundle, useXctestParser)
33
39
TestType .XCTEST -> generateXCTest(testRoot, remoteFileManager, bundle, useXctestParser)
@@ -46,6 +52,29 @@ class TestRootFactory(
46
52
}
47
53
}
48
54
55
+ private fun validateDeviceCompatibility (device : AppleDevice , bundle : AppleTestBundle ) {
56
+ bundle.applicationBundleInfo?.let { validateDeviceBundle(it, device) }
57
+ validateDeviceBundle(bundle.testBundleInfo, device)
58
+ }
59
+
60
+ private fun validateDeviceBundle (bundle : BundleInfo , device : AppleDevice ) {
61
+ val bundleSupportedPlatforms = bundle.undocumented.bundleSupportedPlatforms
62
+ val platform = device.sdk.platformName
63
+ if (! bundleSupportedPlatforms.contains(platform)) {
64
+ throw DeviceLostException (
65
+ DeviceFailureException (
66
+ reason = DeviceFailureReason .IncompatibleDevice ,
67
+ message = " Device ${device.serialNumber} with platform $platform " +
68
+ " is incompatible with bundle's supported platforms [${
69
+ bundleSupportedPlatforms.joinToString(
70
+ " ,"
71
+ )
72
+ } ]"
73
+ )
74
+ )
75
+ }
76
+ }
77
+
49
78
private suspend fun generateXCUITest (
50
79
testRoot : String ,
51
80
remoteFileManager : RemoteFileManager ,
0 commit comments