oficina / docs Public

Clone
git clone https://amadan.net/oficina/docs

Plain git — no account needed to clone.

Download

Download this file

1import XCTest
2@testable import DocsKit
3
4final class DocumentPublicationTests: XCTestCase {
5 @MainActor func testConcurrentRequestsCannotRetireAnUnpublishedSource() async {
6 let publication = DocumentPublication()
7 var release: CheckedContinuation<Void, Never>?
8 var calls = 0, inside = 0, maximum = 0
9 let first = Task { @MainActor in
10 await publication.run {
11 calls += 1; inside += 1; maximum = max(maximum, inside)
12 if calls == 1 { await withCheckedContinuation { release = $0 } }
13 inside -= 1
14 }
15 }
16 while release == nil { await Task.yield() }
17 let second = Task { @MainActor in await publication.run { inside += 1; maximum = max(maximum, inside); inside -= 1 } }
18 await second.value
19 XCTAssertEqual(maximum, 1)
20 XCTAssertEqual(calls, 1)
21 release?.resume()
22 await first.value
23 XCTAssertEqual(maximum, 1)
24 XCTAssertEqual(calls, 2, "A request arriving while awaiting must publish fresh state afterward")
25 }
26}
27