1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for Swift project authors
//
@testable @_spi(Experimental) @_spi(ForToolsIntegrationOnly) import Testing
@Suite("Parallelization Trait Tests", .tags(.traitRelated))
struct ParallelizationTraitTests {
@Test(".serialized trait is recursively applied")
func serializedTrait() async {
var configuration = Configuration()
configuration.isParallelizationEnabled = true
let plan = await Runner.Plan(selecting: OuterSuite.self, configuration: configuration)
for step in plan.steps {
#expect(step.action.isParallelizationEnabled == false, "Step \(step) should have had parallelization disabled")
}
}
@Test(".serialized trait serializes parameterized test")
func serializesParameterizedTestFunction() async {
var configuration = Configuration()
configuration.isParallelizationEnabled = true
let indicesRecorded = Locked<[Int]>(rawValue: [])
configuration.eventHandler = { event, _ in
if case let .issueRecorded(issue) = event.kind,
let comment = issue.comments.first,
comment.rawValue.hasPrefix("PARAMETERIZED") {
// Silly hack: only letters before the index, so just scrape off all
// leading letters and what's left will be the index as a string. No
// need for sscanf() or similar.
if let index = Int(String(comment.rawValue.drop(while: \.isLetter))) {
indicesRecorded.withLock { indicesRecorded in
indicesRecorded.append(index)
}
}
}
}
let plan = await Runner.Plan(selecting: OuterSuite.self, configuration: configuration)
let runner = Runner(plan: plan, configuration: configuration)
await runner.run()
let indicesRecordedValue = indicesRecorded.rawValue
#expect(indicesRecordedValue.count == 10_000)
let isSorted = indicesRecordedValue == indicesRecordedValue.sorted()
#expect(isSorted)
}
}
// MARK: - Fixtures
@Suite(.hidden, .serialized)
private struct OuterSuite {
/* This @Suite intentionally left blank */ struct IntermediateSuite {
@Suite(.hidden)
struct InnerSuite {
@Test(.hidden) func example() {}
@Test(.hidden, arguments: 0 ..< 10_000) func parameterized(i: Int) async throws {
Issue.record("PARAMETERIZED\(i)")
}
}
}
}
|