From 61bfe78c55e2e0fc2bc3d3d49add3dbd3829a56b Mon Sep 17 00:00:00 2001 From: Alexander Botkin Date: Sun, 4 Oct 2020 11:21:39 -0700 Subject: [PATCH] Arrays of XCResultValueTypes do not parse correctly (#52) Change Description: This change addresses an issue where arrays (such as [Double] in the performance metrics object) were not properly being decoded. This was due to the need to decode into the intermediate type of XCResultValueType in order to get to the true values underneath. Test Plan/Testing Performed: Added the xcresult that @OdNairy gave in #51. Added some explicit tests to double-check that the values returned match what we would expect. Also did a quick test if we removed one of the enum cases like "CPU Time" that the metric type enum would properly handle new metric identifier values from new xcresult versions. --- .../ActionTestPerformanceMetricSummary.swift | 40 +++++ Sources/XCParseCore/XCPResultDecoding.swift | 5 + ...cMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== | 1 + ...ol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== | Bin 0 -> 1558 bytes ...5-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== | Bin 0 -> 1037 bytes ...uhPxSCRxvqRT7E_cc6ZPyDigkCpEzU8vh51DA7LQ== | 1 + ...5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== | 1 + ...RH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== | Bin 0 -> 845 bytes ...2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== | Bin 0 -> 133 bytes ...4Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== | Bin 0 -> 34767 bytes ...Lu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== | 1 + ...g1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== | Bin 0 -> 299 bytes ...lAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== | Bin 0 -> 467 bytes ...xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== | 1 + ...fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== | 1 + ...EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== | Bin 0 -> 3226 bytes ...KE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== | Bin 0 -> 1430 bytes ...yNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== | Bin 0 -> 264 bytes ...d92yV7we2bNn83ct1Ble8J48QfQJby9Hp2CdXL7g== | Bin 0 -> 1672 bytes ...y-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== | Bin 0 -> 132 bytes ...imQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== | Bin 0 -> 136 bytes ...x_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== | Bin 0 -> 8442 bytes ...9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== | Bin 0 -> 454 bytes ...cMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== | Bin 0 -> 133 bytes ...ol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== | Bin 0 -> 1 bytes ...5-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== | Bin 0 -> 199 bytes ...uhPxSCRxvqRT7E_cc6ZPyDigkCpEzU8vh51DA7LQ== | Bin 0 -> 67 bytes ...5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== | Bin 0 -> 67 bytes ...RH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== | Bin 0 -> 1 bytes ...2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== | Bin 0 -> 133 bytes ...4Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== | Bin 0 -> 1 bytes ...Lu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== | Bin 0 -> 67 bytes ...g1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== | Bin 0 -> 1 bytes ...lAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== | Bin 0 -> 1 bytes ...xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== | Bin 0 -> 67 bytes ...fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== | Bin 0 -> 67 bytes ...EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== | Bin 0 -> 1 bytes ...KE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== | Bin 0 -> 1 bytes ...yNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== | Bin 0 -> 1 bytes ...d92yV7we2bNn83ct1Ble8J48QfQJby9Hp2CdXL7g== | Bin 0 -> 331 bytes ...y-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== | Bin 0 -> 199 bytes ...imQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== | Bin 0 -> 1 bytes ...x_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== | Bin 0 -> 1 bytes ...9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== | Bin 0 -> 1 bytes .../Resources/testMetrics.xcresult/Info.plist | 29 ++++ Tests/xcparseTests/xcparseTests.swift | 140 ++++++++++++++++++ 46 files changed, 220 insertions(+) create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~5KVP6nYPs-Yr5hFGnDRK2hXaIBRQORPEoS8i6apIBA1mqvol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~5s3-5BV1jxEIk5Ihk_mH_4P2XK0oAdk2T7zGhK1j6tmio55-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~8nVAn0b5EP01lDGHHno97wQuNrVkgJ6rpbjAf7clB58UbXuhPxSCRxvqRT7E_cc6ZPyDigkCpEzU8vh51DA7LQ== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~AJwN_W4l3bSyi3kQ5xNhx0ikEYLjYplHuUMwritsZdoPEU5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~CJsaEjh-7Cqbe0uPNuxHLRY3uwz5cqUGHbDufWuCpTXt_QRH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~Im6O2_22kPqRqFNNNQHHe0d_c7-dv40dnbFjdE4nVm36dm2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~TzjIxWffpqTF_0tq-Raw3jYnVXJg0VaagPf4NtKkQgd9P14Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~Xp8XnaKg1YV96SY8RgA0ohH5zVbTGR8uijnn57TAYoNs7XLu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~a7Vlmq47u0Lpm69gGieHPOAknsRn1Qsaaar97b660Dj6frlAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~flnPvaRumYUD0EyzIpFDpfKglmVoGNF7vtb3u_adZPQwR_EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~gdTzDhB6AbcSixtsM_nZ8JKBA68_i2TxaykVzdv767DUIuKE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~hcPYoefObdz7yoOUvXm9kC5KK4C2yxaL3FpH2ucu0PAjdHyNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~k19jmlIfY6-T69UZzxSgz-dohjtf-XoZrqgF06fevp05vGd92yV7we2bNn83ct1Ble8J48QfQJby9Hp2CdXL7g== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~kkcINcZfK36jjcB3irAf-rcOctqnCDZ38gCg_RC5n7z73Ny-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/data.0~v61lLQfmRh7wn6YhQqf2UavyJtDRmbyOmojlb0QewIBAHO9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~5KVP6nYPs-Yr5hFGnDRK2hXaIBRQORPEoS8i6apIBA1mqvol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~5s3-5BV1jxEIk5Ihk_mH_4P2XK0oAdk2T7zGhK1j6tmio55-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~8nVAn0b5EP01lDGHHno97wQuNrVkgJ6rpbjAf7clB58UbXuhPxSCRxvqRT7E_cc6ZPyDigkCpEzU8vh51DA7LQ== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~AJwN_W4l3bSyi3kQ5xNhx0ikEYLjYplHuUMwritsZdoPEU5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~CJsaEjh-7Cqbe0uPNuxHLRY3uwz5cqUGHbDufWuCpTXt_QRH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~Im6O2_22kPqRqFNNNQHHe0d_c7-dv40dnbFjdE4nVm36dm2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~TzjIxWffpqTF_0tq-Raw3jYnVXJg0VaagPf4NtKkQgd9P14Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~Xp8XnaKg1YV96SY8RgA0ohH5zVbTGR8uijnn57TAYoNs7XLu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~a7Vlmq47u0Lpm69gGieHPOAknsRn1Qsaaar97b660Dj6frlAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~flnPvaRumYUD0EyzIpFDpfKglmVoGNF7vtb3u_adZPQwR_EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~gdTzDhB6AbcSixtsM_nZ8JKBA68_i2TxaykVzdv767DUIuKE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~hcPYoefObdz7yoOUvXm9kC5KK4C2yxaL3FpH2ucu0PAjdHyNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~k19jmlIfY6-T69UZzxSgz-dohjtf-XoZrqgF06fevp05vGd92yV7we2bNn83ct1Ble8J48QfQJby9Hp2CdXL7g== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~kkcINcZfK36jjcB3irAf-rcOctqnCDZ38gCg_RC5n7z73Ny-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== create mode 100644 Tests/Resources/testMetrics.xcresult/Data/refs.0~v61lLQfmRh7wn6YhQqf2UavyJtDRmbyOmojlb0QewIBAHO9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== create mode 100644 Tests/Resources/testMetrics.xcresult/Info.plist diff --git a/Sources/XCParseCore/ActionTestPerformanceMetricSummary.swift b/Sources/XCParseCore/ActionTestPerformanceMetricSummary.swift index f71d82d..97e2193 100644 --- a/Sources/XCParseCore/ActionTestPerformanceMetricSummary.swift +++ b/Sources/XCParseCore/ActionTestPerformanceMetricSummary.swift @@ -8,6 +8,40 @@ import Foundation + +public enum ActionTestPerformanceMetric : ExpressibleByStringLiteral { + case ClockMonotonicTime + case CPUCycles + case CPUInstructionsRetired + case CPUTime + case DiskLogicalWrites + case MemoryPhysical + case MemoryPhysicalPeak + case Unknown(name: String) + + public init(stringLiteral name: String) { + switch name { + case "com.apple.dt.XCTMetric_Clock.time.monotonic": + self = .ClockMonotonicTime + case "com.apple.dt.XCTMetric_CPU.cycles": + self = .CPUCycles + case "com.apple.dt.XCTMetric_CPU.instructions_retired": + self = .CPUInstructionsRetired + case "com.apple.dt.XCTMetric_CPU.time": + self = .CPUTime + case "com.apple.dt.XCTMetric_Disk.logical.writes": + self = .DiskLogicalWrites + case "com.apple.dt.XCTMetric_Memory.physical": + self = .MemoryPhysical + case "com.apple.dt.XCTMetric_Memory.physical-peak": + self = .MemoryPhysicalPeak + default: + self = .Unknown(name: name) + } + } +} + + open class ActionTestPerformanceMetricSummary : Codable { public let displayName: String public let unitOfMeasurement: String @@ -20,6 +54,12 @@ open class ActionTestPerformanceMetricSummary : Codable { public let maxRegression: Double? public let maxStandardDeviation: Double? + // Derived + public var metricType : ActionTestPerformanceMetric { + let identifierString = identifier ?? "Identifier Missing" + return ActionTestPerformanceMetric(stringLiteral: identifierString) + } + enum ActionTestPerformanceMetricSummaryCodingKeys: String, CodingKey { case displayName case unitOfMeasurement diff --git a/Sources/XCParseCore/XCPResultDecoding.swift b/Sources/XCParseCore/XCPResultDecoding.swift index c211b9d..f38348d 100644 --- a/Sources/XCParseCore/XCPResultDecoding.swift +++ b/Sources/XCParseCore/XCPResultDecoding.swift @@ -350,6 +350,11 @@ extension KeyedDecodingContainer { let resultObj = try container.decode(XCResultObject.self) if let type = resultObj.type.getType() as? T.Type { list.append(try tmpContainer.decode(type)) + } else if let type = resultObj.type.getType() as? XCResultValueType.Type { + let decodedValue = try tmpContainer.decode(type) + if let value = decodedValue.getValue() as? T { + list.append(value) + } } } return list diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== b/Tests/Resources/testMetrics.xcresult/Data/data.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== new file mode 100644 index 0000000..1593e55 --- /dev/null +++ b/Tests/Resources/testMetrics.xcresult/Data/data.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== @@ -0,0 +1 @@ +[{"name":"SearchMetricsTests-E9678AD1-865C-4FED-A207-7B7691D31172","type":2},{"name":"scheduling.log","type":1}] \ No newline at end of file diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~5KVP6nYPs-Yr5hFGnDRK2hXaIBRQORPEoS8i6apIBA1mqvol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== b/Tests/Resources/testMetrics.xcresult/Data/data.0~5KVP6nYPs-Yr5hFGnDRK2hXaIBRQORPEoS8i6apIBA1mqvol-_b54VklZ55B31c6T0Z4L_QuRmAyWzEIR7hFew== new file mode 100644 index 0000000000000000000000000000000000000000..4f00d8c1a5b45717b2fdb2b523c1702aa0e5fce8 GIT binary patch literal 1558 zcmV+x2I=`IwJ-euNNq3x>RfaXD&VYW2Afn7nWWY?5PnV0R4F+CGa)?;X@Q|hlB8T0 z3Wt1n!VKfZK!XDS0sR2^0MJt>hY5*(=&93#P9Omxv7kZ9=gujYktsB%2widReB6Jr zSBhxc9O=&ZrwD(Wc|0GAw1WEDNmolTrqO+=ZSB9zO5cCz#okD@G*8DW$j~$=|IiOg zrS;B>1O;VLaqj$yjB6>MCnV#~UC|iOk0)e#%lNZ{p>W1e(Xggm=h@HaJ2UP9IOER^ zK@9`?Go2AFOUwgo}+^WD1z4;?5&YeHe?#&6T6`KbY zYme6+%lom0^oBEM0eM1yn{jvL{dmf}f0=E8oB4=Rv_q@Sw%UlcI2M9b^z(PZ^P_&i z_Q(@@ffdg9DJssLj~m!h2X^SqA2lAL4{YT4$2yLTOJ{wo1K-CI2aC>Pdke1T@3jbJ zW3Pb>zU5XwRO*TCTgT4+k8H{-6B;`^6oc>b9dT4)23G?k-4 zm^={O0XAQa*AN{VO?1~_uYnEc9H4tZ&^W54c{&u5qz1=BPn{eb_XLRl4zSN8be9b_2cUNA~5Bw7}FU<&mGAdvFsFvnQFaPv&=Tm3K{TCW+G5CAR z7rJpzc~{yD&u8Z)jIUGsLgT*^MCYWvE16z2gERizuAk47^B4yjK!So=QbO3CdJsOR zqFYVVFsIma(7j3KUW^jD$0%2WQ91};l#98hanPKwBs$p?Tro1$8o5?v&!dyFfzml- z4U~*IgAz(_O^i@J(=PZ51*KZ3q2k>66Yl=i-mP8;I3Yre3 zSV&ngePC~?#yM+JHTW~V3>umarC0@R!Svxeph^;f$bh$~VVyDzIWrLukR}Llpdx?~ zk}3`oNHAz1NKq6lEd1 zplc;45uYZr-m^92rxK~cG*Kw?1{YmfV*qg-y-3`~*mN!spOA|W zl4s{!vI!5CxEVAHseI7&dFAed?R!;BY5dKt>F7q1h}3Bnn&kW`dUG%!U3vAm4bfa^;GrJP3Cl&kT|0QXYQdmbXx&E{ULZYN%cx%&_y^d IjCKyBRfP8L%K!iX literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~5s3-5BV1jxEIk5Ihk_mH_4P2XK0oAdk2T7zGhK1j6tmio55-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== b/Tests/Resources/testMetrics.xcresult/Data/data.0~5s3-5BV1jxEIk5Ihk_mH_4P2XK0oAdk2T7zGhK1j6tmio55-EWaQICMM-GbLKyF2uCRiVjHuqFJeDPL6hgszbA== new file mode 100644 index 0000000000000000000000000000000000000000..6f88dd282e24daeb58b24fe6d543cf389e8e67fe GIT binary patch literal 1037 zcmV+o1oHbRwJ-euNF^Wu);qW;;LOYb5Pol;NDO$yde#(Nf~k*)(sXajC5qlbwx+Ve9lT7!dR{=)4al8x#~x>e;`2vNuk@ zLpGbvj^QY(bS{`$n8m%EFlz8O*W6-n+;8yHWDbKNIw@xHPRqaju{5ph1G(QQ0QY>e zVF15$g9i-ZeTumea~Opbi}aZV`$~H=iTk;XZeM{pK7{hd5GFD#<#%3%wk{pmItzl5(0d zx_5%4lnRL_#VlF2w{M$>VQGt>AN%c(<+QSlVipg_*B*)+Un`U52XfDST*en3juQ;c zaGVejPzfAFf??B0>6$o|vI-;{2$6|Yw#QK55N*olnn68}OLBRJNmz*s8F8UK9F&JG zl7J9v!-epO5ECMzbnT&%o(+eQ_dzuwvAi6nR_5F1+B1IPoAGOu6H6)(u-SBWY}BB} zKUV>f-Jq!C)66P-NOl3^$PZQHsT?1qlCI1_Lsxkg4yw}`%UMWkHR?o8(DJ=KM-asMh3vJ&Smm>ABxP3(ox<$v@E*1;+C-PV-!gDYn32QX}bD;9VC3ak|Qf?=dSRL3|ZYu?S zugawgzn&HBw5Nsw7QJFjOpn{4irJ52?Tv0gcqx8X({rV08aW3@$G~3t)bJF37)cDv z1PU;ul7v!AncNmG(TTtynRBYj000QL>NQ27LcLZ{_NltS_Al^0E7U402Pnzi!n?@oH-BVBPzLbW&l7$z4V{UohF}Ylkw*PobfwwwKqQ_qF(xs z%Qlhh&Ch-7tDPws)9ke;S4-&HQ_EvBOhlYH^PvaJWZ+PmY^K*D@#xGsbEP-q2LhJs zOFSq%^gu0y&C*K_Uc(V*&gIf5vOF2TLz--^1kN;r6mjN29FWkPO}GSJu2#_H1HoDP z=&uFSkDPU;cH#{rmr5j>pP#UqLa#Y=tZ=;ouDRC?aj|{G!80D)I*gDRnb(vxsR-4QLQxPNtzf7N}Zr4;Xb2DJ?vHF%k4Cpgqw!ckakkX*MxkF3sHn@GqGv#~T6~FUEGYCF zi_4v&XFQNOu{Q%kAzR7fOgnSJCGf8m^w=6y&UI7JWv|9C6?0MZwm9 z;m`IqEFfC#WI|X_ur+Ym2NY*fGRnbr(6xH8-%`wj{Z#DNJTgl$$ePC+vFg!i7$^B_ z^Div0G}&AOV5k8R6c~n>Ll6ik2$MnpZ~_R1Y|a1@NI;MzNKptv0D&L|5n4q`2l@KRtmp~HRiliKs#}~IS zb^U3*=A`wGk{pWGQ$@HE3Hf9Pri{@cZ;Sbc_n@hPYF6~N&z3r601n;jDq+`b<#u8I z`<)%Sx)>Pz$ nDp@gUZWAR<(j-XIiKZ!NWb|{Oh|a`6$|wW^0Dy#n<|)D%f5JH% literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~TzjIxWffpqTF_0tq-Raw3jYnVXJg0VaagPf4NtKkQgd9P14Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== b/Tests/Resources/testMetrics.xcresult/Data/data.0~TzjIxWffpqTF_0tq-Raw3jYnVXJg0VaagPf4NtKkQgd9P14Kxd9-JISi0sxw7_4vXxbHOPBcxdCEj2EeyB4vtA== new file mode 100644 index 0000000000000000000000000000000000000000..6aa24592265b1cb3aab9415db48adef3b67fcb0b GIT binary patch literal 34767 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 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~Xp8XnaKg1YV96SY8RgA0ohH5zVbTGR8uijnn57TAYoNs7XLu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== b/Tests/Resources/testMetrics.xcresult/Data/data.0~Xp8XnaKg1YV96SY8RgA0ohH5zVbTGR8uijnn57TAYoNs7XLu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== new file mode 100644 index 0000000..9534ca0 --- /dev/null +++ b/Tests/Resources/testMetrics.xcresult/Data/data.0~Xp8XnaKg1YV96SY8RgA0ohH5zVbTGR8uijnn57TAYoNs7XLu2nRh6PDiF3i626eJhB8G4H1cvD8oUPCm22cVPg== @@ -0,0 +1 @@ +[{"name":"remote-container","type":2}] \ No newline at end of file diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== b/Tests/Resources/testMetrics.xcresult/Data/data.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== new file mode 100644 index 0000000000000000000000000000000000000000..b8a73940737f5b76c49d72a84c5703fce07978d5 GIT binary patch literal 299 zcmV+`0o48|wJ-euNEHbH785=sFsbMP1gdbWoQY|QJlzu4gmMRC^|fEcaj5zzcimTb zQcx%uG5|CHF#r!vq|=|)RnG%maYjeJDgvDa6Y0-Q<38;{ex~@_A*VmbX_1X8r+-ZB z(;!l^?L{7ulu56qW?TrU(doCNij;e5sz|vjQ>QmII{mhouDHRpnx;iFQs*iwjcP*rW$Q^ z73(_oU=X(G07VK!B7z_T(-w;aBRz%#qd>Tbc_4-(N$y$aC?vR4SjQfO?)fLGDOYtF xd+@qE9Cir~08u;8Hr#<`Y{X{e%)7vJsbULcTq_;mIMTt3%!t(Be9h}&fq$>XPMxE$S1vkx6AMD`McmfMv6eb-}mqOecl#IXLP@bH$ zwF+K*)|TuPu}-nmxQUNTU0H!rAOK?8_84__8~*we+`rzqliK$M#I)^^nfFks{b-#s zYf!d=?AkY#I09rFs{PR=^gCJ}lx(raibL{X2jf#Gdav6DXZY&VI%A?GW{z4DJ4wEH zOlsd3jRS}E(DI0)dP&n{=S4l~oj@=ECU%lMQr_!xR*{=qeSiGx&#XZy(M}CKMWUU# z_(*9W!EO;*cv>rN8kCZG%UT$RX_kA;FpIJprE#M;Z!wJ-$rj@mpZnD%x7BTz0xKX; zLQ_}{^B|RT%sq=N9wn%@OKFw3b;?M?=$b&fJ^bJ(^k@sbB(`SB%`t&MELvyCfB@ko zIiSW7tVIR+?(6~}O9T38asvlxgJn!BT&M(HGWDA9H-{KbAh`e=Jb$@FP*hjLCYXB8 J);EpJkO3dV+u;BJ literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== b/Tests/Resources/testMetrics.xcresult/Data/data.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== new file mode 100644 index 0000000..f1c0725 --- /dev/null +++ b/Tests/Resources/testMetrics.xcresult/Data/data.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== @@ -0,0 +1 @@ +[{"name":"B2B474B5-EBE3-41D5-866E-11B9061A59E7","type":2}] \ No newline at end of file diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== b/Tests/Resources/testMetrics.xcresult/Data/data.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== new file mode 100644 index 0000000..9a0adba --- /dev/null +++ b/Tests/Resources/testMetrics.xcresult/Data/data.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== @@ -0,0 +1 @@ +[{"name":"testmanagerd.log","type":1}] \ No newline at end of file diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~flnPvaRumYUD0EyzIpFDpfKglmVoGNF7vtb3u_adZPQwR_EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== b/Tests/Resources/testMetrics.xcresult/Data/data.0~flnPvaRumYUD0EyzIpFDpfKglmVoGNF7vtb3u_adZPQwR_EutrRNTL_18lgv3Kck0hTxc8wxYCxrln5J3QhR9A== new file mode 100644 index 0000000000000000000000000000000000000000..c0f974ecbcee2448ba6300c3b76433fed0ae4b8a GIT binary patch literal 3226 zcmV;L3}y2uwJ-euNR4Cws;VR&EzoR;X1i1onG)WpalTHDQiWjXWH^rx`9*AtR;r33 zb6t?zz%K4#l+qes#st~{)dAT7PK_dZfd>p8KuCbld26XvWcth~f}S*YKJKsB3sGp> z%+Q_jM-lw(#pC%8L#L;&mFQ|I#*}g&YFqm&bJF)6TCta*TAF8L8{{XN68~r^skGi1 zApijqGimPphKg$?pQj_^&;7tKpdU|%a+dMuh9cpNKN1&9t@CW>^PL&D0XXB&{X7W< z^k*71bjBYEK!Ef#{t2d)N;Cw`{z>kK<{EXT(*d{Mi%VLp0}vqLj6ZjcZrj|FO7DdJ zGIVl2HxEIjo$*H;5A-C{2ra2}($r`+XeKhZK*!{Bs;LLu(3{`Eq`C7O+MW3UN-fd7 zv{*a1Tt!fh7;rvkN_oi?gi(uf=PO26?!o4g-=DbFfs_^=3|4y$i>VYp&xdRc%(b^- zi!mz57Eez}*nlDAf?Ny1bifuYs?n zKB}d8-pG*k@|3J`86x&F}8mK_X1z{wW-rOMHLlu!qC&fC_ z6@;ml=H?qDwn0Uv6`Gp_2~`6XLN3TdlhtRlMnw#imTp6?jgQFMj-kc>Ed*SZB zVp6ad?hfCQ7E^E~<(@Cexu?*a92ns81=mvWDOXK3=W1~)v85as924^)29zqUrMv@o zcUPF`#WNdMKlUagBzzJvkkx6ssV+OXgfg5`BQyBly2uo?aW1B|BrL#J=f$w97 z##($W%&DiGJI9s>*>dr%=TuYeP^cwr=SnY>t(E9!R_^CYdtyG+KgpdR|81N5pNLr< znt5o(t>wk$Y>`}>?pG*}8x0BNJZag`TqosmJM@{Ao}F!NOk05`m7pb+-i*6iitkri zf%DF^Pl8qef@W$k$ASxsD?H|k;Sv@FMqIoxmWz+kn!;<31+h^r&9k8o1SK^7acZQ{ z!1pVix!R_2XQlCZR_KKq2=qTrjT9Ol^gjWN1YeNQoJwHej6c%QjBS-n`eK~KJXF&G(tq>=GQ8dzc*EXVLeXa0v%Cxv1g z*(#NRQzwOD9geYooEk+iCR_|64oX272%5=$wG)UkBvHga8aOwRV=qI)d1$22fB=F_ zBRne-6)V9FMTMPIn_ogwY4BvsJRi13I9osz6xDVOqEB|Oz+<7Bt1F4#thxO2%9bZjnpSK11k&&@*=U!(Q}jsHduof7Rm$uvSQaK@jzwevY@o?@W^ z2ta_OAbgLx#>*KbIUQ& z3;a)0;b;d2M}+juhDz*{CNO<0r&4Ub7)%j=rq_XfWmK~G@%xDYfsFgRdbQhTbs zrjmood0O04EqP}wTZ?kFmSrWjoUcW_#iBD9m-||advfV(SxmW7@hMjebM8>NixD<=PcGF` zkl^ub8iH(0K?3O+f0hu!EV1HF3MImFfiM!POd~8~dr2+FM9by*VlYM7mdIeDr9+^&7mTP6+pNGw+-@2xv6qKU6}-g*`WtEK__W(!fKq z^_2PGp^C`ozfHA`d#rPWK7c7YDIUew-1&oEqAY);nHO7LaVu8%4VVy$=kq7_)00;me@q_>v#hg>DOa~HZ zFi0Q=LJ)*O6v99V!!Q7Y7y}4Xz!+cz1R-#ejX?l%_dv|Qa*GQ>#MKAW-kg z+^7wz2$n}~LW@Q7U71hCyjXf+#x=+zaxRV)t`P<{w*%oDAod^)Z8CzUiA)DUj~Fcm z>(O_{x@2(@PCXA%dWgt)Sj1QjQB>ZT7j7Pw==+1kXh7>EMUt9cO?`_@i%u54Ty)FB zS--UbQaMhS3mV$xM^N<^TbylZ@f8YR$f3T*5Bg$wE%e7^JGCX^yh15XeU4sLIK3kp zDe7d?c4}SUN>hX$|=#W0EXDl!Th zwaZKj+gMX-ZCJVg`;x*$(7JS-@3 zvr4p-a2LX2cA&T@ENR|gT`4Ei;!h4iE zL5jP`Z6?@U&motfe4URxEV* z;FPSiyAYQO<}*_ZK7;`L_y`Ll)DOn$ zZK7Y@sYzkCpek0{|0oruLHjwplHZQA0{%J7l-ATiHDgkLs6II=89#>^iUkg-&?H=yq$t&!%E@G4g zfWmB7Fof#RSrA_*ITr$=+3i{QCrE42_7shX03lYhEXr;Msu35}FkcdLN{Y*rD#5#U z5=8~g$I1kg#;Ym9*{hAn40qBWl)9S;|pyw zlnvzX1|gc6OO_N43dipo6YYupK<+@8u z0#Hq$1|?#yFA^&ZT*bw)WUpg)(^b literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~gdTzDhB6AbcSixtsM_nZ8JKBA68_i2TxaykVzdv767DUIuKE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== b/Tests/Resources/testMetrics.xcresult/Data/data.0~gdTzDhB6AbcSixtsM_nZ8JKBA68_i2TxaykVzdv767DUIuKE3_IPo5g4W7wjipiyNYSkf0q-9EFsHpMQv-K1Rw== new file mode 100644 index 0000000000000000000000000000000000000000..08f36028868bcbdc754ea8659a56e5bdba80ddcc GIT binary patch literal 1430 zcmV;H1!?*ywJ-euNNp?tx?s2zNRV7{0wkq1RpjdLqKh!At3)6HN>??AWPLRM-c$Al z%)iMrWH)C#wEePW)t&REV90hKTW5%NxV;sC38?-P6jB6e+jf_b6gB}D0Ym}#_NQv5 zOTARhboY8LY5tEpo%frYNvFB1<;yriQ&Z!e;F2c(&BN)8mo$@BojO;Sc<0}PGScgO zKF2wpODZ`%QT6hRQAO8}>U3wHK2mT=UdK&3%^jEd?Dc51qu=%5DGc~ zWT3#0PtWDqA@JaKIZsu;o^IIqsU1D@=U7CgK+!ZnK+j#WT6>yqoQ~@X&HUe=7;ik6 zEW%@DeRwb5MJ|0s_0s;r?e}F~x$#R%r7kj^tX+M8b zaLJv{oj)$=X{Sg(BcC|;tTPb$o&R{yC2_|#zSDX4@y{HdkxyKvO8a>o?-X2;$MH7$ zo$9{E%iMYHxR2lQ?)Pqo8C;V8R?m!)IE~kKI&+?vI{w{BUZCJc>7xPIJd- z+Esi2RnaU1qYf^~cd63I)HC{1wxmBzt=5Dt`K87&((|M}nsK;(s#y1?gG+Y)-M}S- zF3HQh`!9W|F}hRT{-!^3m}gVyk~+EMHSAR7^=#b^g7S0pp!Nj_ahIdN##+Jq+WO8~+&7U{o|a@*t~q z&>+h|#DV6aM)bjhYy(jdhYuZyHf*SM*kD8Y5R3h3YPA;Q`*p@$r)6woU+g>f<=u1%x^wfUp&YAuF`u z98eAz2ZRH@0o{OYKsMkSPz{I%JOh>i$ADtMFyI$Z3aAA90m1;AKp0p6Ov4JpqQXkT z^1<3HC{_s;jRk>qS!-5YR#jF`Rz_AkR=gF|s>CY9YQaienXz8%6x+n2c4tS6!YbJ$ z>%kV;3if3Y*dFV$R5_05G8f zyD9eDc;~WGY=193-}knd(Iv;*3aT12ko-2*Y3^mV{h7mET^escm!vUcN-7-yU k5X#Mko%eNd0RU(8u^eG!%|vP(2t0gVaOrjDL;`YE6b_Th+W-In literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~hcPYoefObdz7yoOUvXm9kC5KK4C2yxaL3FpH2ucu0PAjdHyNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== b/Tests/Resources/testMetrics.xcresult/Data/data.0~hcPYoefObdz7yoOUvXm9kC5KK4C2yxaL3FpH2ucu0PAjdHyNGKlkIDCDO-VLyqSqPyD6nq57xVwcb3JEtOwghw== new file mode 100644 index 0000000000000000000000000000000000000000..8d551ed2141407df93428f41a9873412a441398f GIT binary patch literal 264 zcmV+j0r&nWwJ-euNc{%@<`6a_Kxr!gLk7xZB@>a2>fCTCuZPFOPOO%8Afy)?SS-En;+Hik- zYrn3*dt_R}w{pVT8en{kjkbb?gwNAx?K&s3?@mJrn^g)*P=~}MSoR*{ooo)VUHf$x za)2SmM$>)g8m)BSP5Nx@*S%AhfmwM6q;CTZ08h(svBWhPlV~;*fVe@7h;_w?O01U$zV~h8fd&fS*b6@0B?mnOye?u&2c9lw1lE^VL6ehpW* zKR6eZ%|b+A!WrkW4tO9c>#1xW$Ihsu$trkBs7NT>?j9Ek#KHstRxe$I*&WJ2a*!=r zrkR<|VX#3WK9A>MIG}Zu+L_=ib2VVsq<*KH2*LPY&cGl^q_>13Z zeO*pU2Ml0DoTY%&UFLw6WDyz&>km{Q8p{JhLR=FMFW7qogawI2V(>tDm~djeLv?mO9fHR;Yey|Yd~CBg{lr*a&_Cyn#nwmLN_#%22y zobRqScQ8cbe79wI6fOATaW+&M0=M%HoVjeD!u{?xEn8W&Ir9aaw0fL3+jZ(wvrS*j zAqD5VE52L519zNDaMJgpCji2zm?EDdhp#e4sCv+gFM1V!SBFd5tzeJg_r;`Gb~}tu z*X~G-&p)EW!@@kaF;PIkcnox;3kBiP?_LlB&;s*J2~HN6W`Q%eM9NGwwOXErfB_3W z;1EGn3iPnw#h~)AWikak5Qm7$b?vOv7na=);}A|taYw;5n{53RoMpT)5n8j62@}T? zFnH(?94wb&b5O(h@dKwgE8`(2I54zAZQoP1~PFV z503-1G$tt0livEbSCe9o{af2WlL}U z+aH`%+so~bM9^Mtzvk4Wl;V814N>EAX4hu;}q9z`}=Mz$N0|O6?+9I zwKbCXL|jhrMd)|Upsd=vw+v+rQ4#uJ8FO(5*{WT|XWLd4TDC4FNQEJLENfm(YHQ@W z1Pdr=Yvg)`Wh;9uYrdGYdQIinI^lkzpUW1*#LB9@nw+>IZ*{@|of>Ne{UoRqqW z=dzW^eq%`DxokmL?G`+W_|9&#PE86OZro+7+pJfUz9)HP>0CU{jUgUg4G{$?`JGhT38d!1yL&CY}NWz3TSX>C|u2|i#IfOEj3JHH#hfCMy>edb+ z1H%j~yIsR2$kDYT!AZCNietEHTDD&Mjnz)UNhy`2B7%ua;d&(%5!5-t2~Ni~!AU8- z6s|`)KhB%&Qt=A#ssjoFNJvm26%lk9p$dAOH`|K=sJDQOM1gz@$Ve1SZvh#Jf=E`7 zk;op)5deuQ5lICPKF*uT^#`+@8!lb)QBsU*RWTWgdeKT#WMPa{1z{$duu5X8x2RS6 zldc9yYFzcHf|JrpQZe#L|NdaA<|7#L5%M108?1^*2}zK~5H?7OYH$C>zNMpXvRaH3J_MYFjxC=rEkn`M literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~kkcINcZfK36jjcB3irAf-rcOctqnCDZ38gCg_RC5n7z73Ny-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== b/Tests/Resources/testMetrics.xcresult/Data/data.0~kkcINcZfK36jjcB3irAf-rcOctqnCDZ38gCg_RC5n7z73Ny-0B7g5XvecLf10lT1858DGr0wa1K2kZawAK7hZg== new file mode 100644 index 0000000000000000000000000000000000000000..5ba79b15b8552009b0f6e4be18440cdf63efa59d GIT binary patch literal 132 zcmV-~0DJ!^wJ-euNZkVf@`f25P>UU7Fh~l}MJQfw&IpZT(@+$Iymb@SkeQi}4~J)b z(y}}7BH(BAbMU&o*j^p!Q;BIv&dsH%2DGL mQI8V3v-7w(TceD!qD6HW0tNtDnS&;=z%M+Z08ly56zU0j?mS2U literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== b/Tests/Resources/testMetrics.xcresult/Data/data.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== new file mode 100644 index 0000000000000000000000000000000000000000..baeb294b731ddc7892b10fc4518a2b6ce163459f GIT binary patch literal 136 zcmV;30C)c=wJ-euNc{r<;)fa>V2K+AD-Z*lT%D!vJxmPUO5l`QY2k^7z|+bBDILx| z$9UrN;APfq_abHE+gG?p`Mpa3;k1tQK`KZ|S(xCP_MG?dj`TswceXXNXuOGj%zKv? q5Z6+QB|~HiL7O!Ut}q2ikX%Tj3I+fn`@j>r1m&8rLlqq^juXsW!9R@v literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/data.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== b/Tests/Resources/testMetrics.xcresult/Data/data.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== new file mode 100644 index 0000000000000000000000000000000000000000..b87e1d9207e9ba7419223f6759c2f1828043c7e1 GIT binary patch literal 8442 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 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~2cZk-rcfcJyIr0RMyhHn8Y66wRloJpYYpy_Uso1cGuGFqXcMufCktonXe3E1AW5WcRtngECJpQzAmjP8NIUSRA== new file mode 100644 index 0000000000000000000000000000000000000000..6a4ac164b3a042102e9985ae7bfab85e8966eb0c GIT binary patch literal 133 zcmV;00DAudK>(6R2sOrED}JMmz;}wUANscra@wZ|Hh1y>p#2cJpS=6r+`iBr;N^SX zaJTi+RQ2;buVqg~QmP=gw{1`^tlqy?MQmE=ntaw#yca+*(K4 n=PuCjBXoR?7^!3+FoQegOUk6GKOp*^u6xB?9B*<&wCo^!Gw8WK2u>?)gkOOH0}M=cgNyA1hqr3M|a?tN>5r8VvS1V{J*D|y8% z=0I1P#ZP|<96%C)-airVNE}}?A~Zn&Yqe#Xt~6@=$8YhQ5;3S^JXVnWDX{!D0 zzPivj`hK}U7(bPjf?r3ljGSP;6e^k-)w=9@Le>e;*a2)jK>)w4Wi1EhMjr5=rXfP7 z_ED?yCeYEDypEcPaKDR2zu!Ft6*=PEIjMAI1F@NCL6$32&f&^9~St0k;y18*DTA+3=Eq1Ft`eWbtb$70uiG>#)=!;)LJw52Khk ZTf8HRn6fp5q<>1j^g(PMlMuh+wMR4hAzuIh literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~AJwN_W4l3bSyi3kQ5xNhx0ikEYLjYplHuUMwritsZdoPEU5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~AJwN_W4l3bSyi3kQ5xNhx0ikEYLjYplHuUMwritsZdoPEU5cgY6GYklyxUr_5Bl3XAoezt3XPt4PTgROJog5AQ== new file mode 100644 index 0000000000000000000000000000000000000000..cfd9079e1a8160afc17a438eaeee586693691b7e GIT binary patch literal 67 zcmV-J0KESJK>+e~K%YkW5dAfjF^3*{J?{iAHnn7co~xy}z<;+T2cHyed!auRf=3(b ZMLxv+$2w&EgNg|Pq)gQE_<7VYJ1ybr9*_V4 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~CJsaEjh-7Cqbe0uPNuxHLRY3uwz5cqUGHbDufWuCpTXt_QRH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~CJsaEjh-7Cqbe0uPNuxHLRY3uwz5cqUGHbDufWuCpTXt_QRH-AErecUs5kBXmsVPfwocQBKA3j8R70gcXzMiNA== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~Im6O2_22kPqRqFNNNQHHe0d_c7-dv40dnbFjdE4nVm36dm2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~Im6O2_22kPqRqFNNNQHHe0d_c7-dv40dnbFjdE4nVm36dm2NS0n0mi2hdOIfzHqVgITYeCwgzlNsYfus6WVr3A== new file mode 100644 index 0000000000000000000000000000000000000000..1eff73c23a3d4ccc0cd506df8b889ffde4fcac61 GIT binary patch literal 133 zcmV;00DAudK>*ptWcs%saGZ#*L`=#N=kboZ!5L^KmKdim)Uu6S8sUYhcMQ4kq_&CI zdvP@ZZdP#{XMjM7r3}EDGyF7#5=21&e`fnbDhBXST8w{~?>@&qTgwAI(m&0!*1P1C nrYM}SgZKCGJ6ZzMc4z@p4gGE<-L$fcc@XClVaG_M5rX4lnMb)pFs>_XW!euBPF#VGhGI!_ Z#Y+F=8FyR?9?sp@KHd*b1WqQ1IRU}M8~^|S literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~ZS9GwKLMs_kNALoVF28EiGp3T6kWdB2UBNFoQ0TBVfcjtTg1U6lORkeIDGbvqSsQVDyrfUNpLHZUEnmo6vc_KA== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~a7Vlmq47u0Lpm69gGieHPOAknsRn1Qsaaar97b660Dj6frlAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~a7Vlmq47u0Lpm69gGieHPOAknsRn1Qsaaar97b660Dj6frlAGD-VlYJfR7CMnGC-FCqaGdW67HpC1gnQ2AFsPA== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~eV158v50XP6T425WfLN6MWQwxBe-OSVRQ8o2VgL9DCjoO9xHvf7rRb5YsJGXQa26AToX1MEIK6l3nW-qVpZWrA== new file mode 100644 index 0000000000000000000000000000000000000000..480d245ff748e7ed98e7c0809556c834a3aea499 GIT binary patch literal 67 zcmV-J0KESJK>%K#7oDP@)rEcOCOk#}G@=pt%~sPHA1;bH=jXJ*VuNh$a_-u6Vd(JU Z7kIkcr-_6g2H<^Mygw*V@TS{m6+Si(Avyp6 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~f2b7QyoG8FBajH-Y7z7HPlvLAz3SP82z1rvklKYonLCD9_fxO1oC03ZpS5D-rR9-K2qwziOkHyIvJx-gp3JBRw== new file mode 100644 index 0000000000000000000000000000000000000000..4328f2e9f347fb7a11d576119187c0d57aff2f38 GIT binary patch literal 67 zcmV-J0KESJK>)H>pi*TT2U^baq<>u!;rRq!L-J5~&jZBL$Wg?3wc}BJ_@+Scbe^sb Zy{MbMTq?f-$>8W+5>{^S*Pj}Zuyk|C4%hyR22T&*Yp*)~tS#)Pe7>e-^Bo_-N#kRT%r z_-4y1A$GVVVpcKks8U`G^7@7gGi*TsB5sb`{kD+$k*HHmH37$aM}Kp_oxhD8ov~wd zPA67v`gU!NOG)&aEunPcAIy4{fP~n1EFjKPY+?JX>1Au&K>$xU$i-*hrliIHOKSNR zu--N&RdQg_R+@nK_%_m{LI-_6UJAwEek6pV(#&x0{x4q^$2jm@#n6P0VIIgHFSJ1b zWiLj+qRg}T4FI|o7jFcJYIjem7IYny1kq?iM8Q?}Begg+Q>jiyM~Dn&@2M*gR6MJF zLuo8_R1$fp>i0h=K>&VP&%LB>nS}$;OtT`9L#6VdmSt!d(R;qu_q+C;Wb`mc@h-Ns dO-#S_@>nn2rzFx8@pH^EU@U8veo5U3QS^&GOdGh{rT>g{eZdQD=dNE`$#23CfB~e4lHdX@t3@GS3+(*6s>qWj; zu#uNRt-1j^7u3NBE2(##Z>m<7R;)n)xCb+qVav`2{oO-35PA3OB>L0$mUm6seDbO? z(Xvc7#{KMnxfrojjL{H3D{F!{ycX?Rgs{|u2g98d%EC(HK>*~XPwI9Lv*s)25k{Oe zO4=3LAQVtJ6U3n}BI&9~1Px}Y`X&4J`Qce5XP!adS2|BdcrWxWMqn~qF$hPvMSIT$ BUljlV literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~slegUmUaB1rO86R_XRLh-QReQ_JQeM8DxNLIUcR5teNRffimQPB0nq4OvaibvlwqvwHJ4OhgvwvNoVhgsGIoCw== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~uAczlmHLzgb93UM5EHn36yT60_eWd03afPKqMtGyTDbG_ex_uRixVIzRED8ra4I4vBbtWoSw1IMHw50UysJK4w== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Data/refs.0~v61lLQfmRh7wn6YhQqf2UavyJtDRmbyOmojlb0QewIBAHO9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== b/Tests/Resources/testMetrics.xcresult/Data/refs.0~v61lLQfmRh7wn6YhQqf2UavyJtDRmbyOmojlb0QewIBAHO9CUUs-tyrHsIO9vtln-oCM0puwMX_g2BUDLQRI6A== new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/Tests/Resources/testMetrics.xcresult/Info.plist b/Tests/Resources/testMetrics.xcresult/Info.plist new file mode 100644 index 0000000..a3e8d39 --- /dev/null +++ b/Tests/Resources/testMetrics.xcresult/Info.plist @@ -0,0 +1,29 @@ + + + + + dateCreated + 2020-08-24T22:35:35Z + externalLocations + + rootId + + hash + 0~k19jmlIfY6-T69UZzxSgz-dohjtf-XoZrqgF06fevp05vGd92yV7we2bNn83ct1Ble8J48QfQJby9Hp2CdXL7g== + + storage + + backend + fileBacked2 + compression + standard + + version + + major + 3 + minor + 24 + + + diff --git a/Tests/xcparseTests/xcparseTests.swift b/Tests/xcparseTests/xcparseTests.swift index b3574fc..c9b9430 100644 --- a/Tests/xcparseTests/xcparseTests.swift +++ b/Tests/xcparseTests/xcparseTests.swift @@ -50,6 +50,9 @@ final class xcparseTests: XCTestCase { ("testDivideAttachmentsWithUTIFlags",testDivideAttachmentsWithUTIFlags), ("testAttachmentsHEIC",testAttachmentsHEIC), ("testAttachmentsMissingInput",testAttachmentsMissingInput), + ("testPerfomanceMetrics",testPerformanceMetricsCategorySearch), + ("testPerformanceMetricsSearchAlongTheRoad",testPerformanceMetricsSearchAlongTheRoad), + ("testPerformanceMetricsUsualSearch",testPerformanceMetricsUsualSearch), ] func runAndWaitForXCParseProcess() throws { @@ -64,6 +67,143 @@ final class xcparseTests: XCTestCase { super.tearDown() } + // MARK: - Metrics - + + func testPerformanceMetricsCategorySearch() throws { + let file = try Resource(name: "testMetrics", type: "xcresult") + let xcresultPath = file.url.path + + var xcresult = XCResult(path: xcresultPath) + guard let invocationRecord = xcresult.invocationRecord else { return } + + guard let action = invocationRecord.actions.filter({ $0.actionResult.testsRef != nil }).first else { return } + + guard let testPlanRunSummaries: ActionTestPlanRunSummaries = action.actionResult.testsRef!.modelFromReference(withXCResult: xcresult) else { return } + + let testableSummaries = testPlanRunSummaries.summaries[0].testableSummaries + + let testSummaries = testableSummaries[0].flattenedTestSummaryMap(withXCResult: xcresult).map({ $0.testSummary }) + let categorySearch = testSummaries.filter { + guard let testName = $0.name else { + return false + } + + return testName == "testCategorySearch()" + } + + for testSummary in categorySearch { + for metric in testSummary.performanceMetrics { + let perfMetricMeasurements = metric.measurements + + switch metric.metricType { + case .ClockMonotonicTime: + XCTAssertEqual(perfMetricMeasurements, [6.109e-06, 6.273000000000001e-06, 6.314e-06, 4.633e-06, 6.15e-06]) + break + case .CPUCycles: + XCTAssertEqual(perfMetricMeasurements, [1965.018, 2366.559, 2923.601, 2114.557, 3463.443]) + break + case .CPUInstructionsRetired: + XCTAssertEqual(perfMetricMeasurements, [3262.079, 3518.519, 3657.059, 3185.146, 4164.798]) + break + case .CPUTime: + XCTAssertEqual(perfMetricMeasurements, [0.001053659, 0.00140999, 0.0016860430000000001, 0.0012279090000000001, 0.002028352]) + break + case .DiskLogicalWrites: + XCTAssertEqual(perfMetricMeasurements, [0.0, 0.0, 49.152, 0.0, 0.0]) + break + case .MemoryPhysical: + XCTAssertEqual(perfMetricMeasurements, [32.768, 81.92, 98.304, 32.768, 32.768]) + break + case .MemoryPhysicalPeak: + XCTAssertEqual(perfMetricMeasurements, [0.0, 0.0, 0.0, 0.0, 0.0]) + break + default: + break + } + } + } + } + + func testPerformanceMetricsSearchAlongTheRoad() throws { + let file = try Resource(name: "testMetrics", type: "xcresult") + let xcresultPath = file.url.path + + var xcresult = XCResult(path: xcresultPath) + guard let invocationRecord = xcresult.invocationRecord else { return } + + guard let action = invocationRecord.actions.filter({ $0.actionResult.testsRef != nil }).first else { return } + + guard let testPlanRunSummaries: ActionTestPlanRunSummaries = action.actionResult.testsRef!.modelFromReference(withXCResult: xcresult) else { return } + + let testableSummaries = testPlanRunSummaries.summaries[0].testableSummaries + + let testSummaries = testableSummaries[0].flattenedTestSummaryMap(withXCResult: xcresult).map({ $0.testSummary }) + let categorySearch = testSummaries.filter { + guard let testName = $0.name else { + return false + } + + return testName == "testSearchAlongTheRoad()" + } + + for testSummary in categorySearch { + for metric in testSummary.performanceMetrics { + let perfMetricMeasurements = metric.measurements + + switch metric.metricType { + case .MemoryPhysical: + XCTAssertEqual(perfMetricMeasurements, [0.0, 16.384, 0.0, 0.0, 0.0]) + break + case .MemoryPhysicalPeak: + XCTAssertEqual(perfMetricMeasurements, [0.0, 0.0, 0.0, 0.0, 0.0]) + break + default: + break + } + } + } + } + + func testPerformanceMetricsUsualSearch() throws { + let file = try Resource(name: "testMetrics", type: "xcresult") + let xcresultPath = file.url.path + + var xcresult = XCResult(path: xcresultPath) + guard let invocationRecord = xcresult.invocationRecord else { return } + + guard let action = invocationRecord.actions.filter({ $0.actionResult.testsRef != nil }).first else { return } + + guard let testPlanRunSummaries: ActionTestPlanRunSummaries = action.actionResult.testsRef!.modelFromReference(withXCResult: xcresult) else { return } + + let testableSummaries = testPlanRunSummaries.summaries[0].testableSummaries + + let testSummaries = testableSummaries[0].flattenedTestSummaryMap(withXCResult: xcresult).map({ $0.testSummary }) + let categorySearch = testSummaries.filter { + guard let testName = $0.name else { + return false + } + + return testName == "testUsualSearch()" + } + + for testSummary in categorySearch { + for metric in testSummary.performanceMetrics { + let perfMetricMeasurements = metric.measurements + + switch metric.metricType { + case .MemoryPhysical: + XCTAssertEqual(perfMetricMeasurements, [0.0, 16.384, 147.456, 32.768, 65.536]) + break + case .MemoryPhysicalPeak: + XCTAssertEqual(perfMetricMeasurements, [0.0, 0.0, 0.0, 0.0, 0.0]) + break + default: + break + } + } + } + } + // MARK: - Command - Screenshots func testScreenshots() throws {