Files
letro-ios/Tools/Sources/Commands/CI/UnitTests.swift
Doug a3bb30bc3d Upgrade the project to use Xcode 26.4 (and the 26.4 simulator for tests). (#5375)
* Upgrade the project to use Xcode 26.4 (and iOS 26.4 when running tests).

* Update the test OS assertions.

* updated preview tests

# Conflicts:
#	PreviewTests/Sources/__Snapshots__/PreviewTests/homeScreenInviteCell.iPhone-en-GB-0.png
#	PreviewTests/Sources/__Snapshots__/PreviewTests/homeScreenInviteCell.iPhone-pseudo-0.png

* update compound preview tests

---------

Co-authored-by: Mauro Romito <mauro.romito@element.io>
2026-04-16 14:33:20 +02:00

73 lines
2.8 KiB
Swift

import ArgumentParser
import Foundation
struct UnitTests: AsyncParsableCommand {
static let configuration = CommandConfiguration(commandName: "unit-tests",
abstract: "Runs the unit test CI workflow: lint, unit tests, preview tests, and result collection.")
@Option(help: "Device name for unit tests.")
var device = "iPhone 17"
@Option(help: "iOS version for the simulator.")
var osVersion = "26.4"
@Flag(help: "Skip preview tests")
var skipPreviews = false
func run() async throws {
try await CI.lint()
var failures: [String] = []
// Run unit tests
do {
logger.info("\n🧪 Running unit tests…\n")
try await RunTests.parse([
"--scheme", "UnitTests",
"--device", device,
"--os-version", osVersion,
"--retries", "3"
]).run()
} catch {
failures.append("Unit tests failed: \(error)")
logger.error("\n❌ Unit tests failed. \(error)\n")
}
if !skipPreviews {
// Run preview tests on a smaller device
do {
logger.info("\n🧪 Running preview tests…\n")
try await RunTests.parse([
"--scheme", "PreviewTests",
"--device", "iPhone SE (3rd generation)",
"--os-version", osVersion,
"--create-simulator-name", "iPhone SE (3rd generation)",
"--create-simulator-type", "com.apple.CoreSimulator.SimDeviceType.iPhone-SE-3rd-generation"
]).run()
} catch {
failures.append("Preview tests failed: \(error)")
logger.error("\n❌ Preview tests failed.\n")
}
}
// Zip results (best-effort, useful for CI artifact uploads)
await CI.zipResults(bundles: ["UnitTests.xcresult", "PreviewTests.xcresult"],
outputName: "UnitTests.zip")
// Collect coverage reports
await CI.collectCoverage(resultBundle: "UnitTests.xcresult", outputName: "unit-cobertura.xml")
await CI.collectCoverage(resultBundle: "PreviewTests.xcresult", outputName: "preview-cobertura.xml")
// Collect JUnit test results
await CI.collectTestResults(resultBundle: "UnitTests.xcresult", outputName: "unit-junit.xml")
await CI.collectTestResults(resultBundle: "PreviewTests.xcresult", outputName: "preview-junit.xml")
if !failures.isEmpty {
logger.error("\n\(failures.count) test suite(s) failed.\n")
throw ExitCode.failure
}
logger.info("\n✅ All unit test suites passed.\n")
}
}