Skip to content

Commit a941d2b

Browse files
committed
Merge remote-tracking branch 'origin/feature/apple' into feature/apple
2 parents adbddbf + c5ee4dc commit a941d2b

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

vendor/vendor-apple/base/src/main/kotlin/com/malinskiy/marathon/apple/logparser/parser/DeviceFailureException.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.malinskiy.marathon.apple.logparser.parser
22

3-
enum class DeviceFailureReason { Unknown, FailedRunner, ConnectionAbort, InvalidSimulatorIdentifier, UnreachableHost, ServicesUnavailable }
3+
enum class DeviceFailureReason { Unknown, FailedRunner, ConnectionAbort, InvalidSimulatorIdentifier, UnreachableHost, ServicesUnavailable, IncompatibleDevice }
44

55
class DeviceFailureException(
66
val reason: DeviceFailureReason,

vendor/vendor-apple/base/src/main/kotlin/com/malinskiy/marathon/apple/plist/bundle/BundleInfo.kt

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ class BundleInfo(delegate: NSDictionary) : PropertyList<NSDictionary>(delegate)
77
val categorization = Categorization(delegate)
88
val identification = Identification(delegate)
99
val naming = Naming(delegate)
10+
val undocumented = Undocumented(delegate)
1011
}

vendor/vendor-apple/base/src/main/kotlin/com/malinskiy/marathon/apple/xctestrun/TestRootFactory.kt

+29
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@ package com.malinskiy.marathon.apple.xctestrun
22

33
import com.malinskiy.marathon.apple.AppleDevice
44
import com.malinskiy.marathon.apple.RemoteFileManager
5+
import com.malinskiy.marathon.apple.logparser.parser.DeviceFailureException
6+
import com.malinskiy.marathon.apple.logparser.parser.DeviceFailureReason
57
import com.malinskiy.marathon.apple.model.AppleTestBundle
68
import com.malinskiy.marathon.apple.model.Arch
79
import com.malinskiy.marathon.apple.model.Sdk
10+
import com.malinskiy.marathon.apple.plist.bundle.BundleInfo
811
import com.malinskiy.marathon.apple.xctestrun.v2.TestConfiguration
912
import com.malinskiy.marathon.apple.xctestrun.v2.TestTarget
1013
import com.malinskiy.marathon.apple.xctestrun.v2.Xctestrun
1114
import com.malinskiy.marathon.config.exceptions.ConfigurationException
1215
import com.malinskiy.marathon.config.vendor.apple.TestType
1316
import com.malinskiy.marathon.config.vendor.apple.ios.XcresultConfiguration
17+
import com.malinskiy.marathon.exceptions.DeviceLostException
1418
import com.malinskiy.marathon.exceptions.DeviceSetupException
1519
import com.malinskiy.marathon.exceptions.TransferException
1620
import java.io.File
@@ -28,6 +32,8 @@ class TestRootFactory(
2832

2933
val testRoot = remoteFileManager.remoteTestRoot()
3034
remoteFileManager.createRemoteDirectory(testRoot)
35+
validateDeviceCompatibility(device, bundle)
36+
3137
val xctestrun = when (testType) {
3238
TestType.XCUITEST -> generateXCUITest(testRoot, remoteFileManager, bundle, useXctestParser)
3339
TestType.XCTEST -> generateXCTest(testRoot, remoteFileManager, bundle, useXctestParser)
@@ -46,6 +52,29 @@ class TestRootFactory(
4652
}
4753
}
4854

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+
4978
private suspend fun generateXCUITest(
5079
testRoot: String,
5180
remoteFileManager: RemoteFileManager,

0 commit comments

Comments
 (0)