@@ -22,7 +22,7 @@ import Foundation
2222///
2323/// Implement this protocol instead of inheriting the ``Mock``
2424/// base class, to save some code for every mock you create.
25- public protocol Mockable {
25+ public protocol Mockable : Sendable {
2626
2727 typealias Function = Any
2828
@@ -38,41 +38,55 @@ extension Mockable {
3838 _ call: MockCall < Arguments , Result > ,
3939 for ref: MockReference < Arguments , Result >
4040 ) {
41- let calls = mock. registeredCalls [ ref. id] ?? [ ]
42- mock. registeredCalls [ ref. id] = calls + [ call]
41+ mock. registeredCallsLock. withLock {
42+ let calls = mock. registeredCalls [ ref. id] ?? [ ]
43+ mock. registeredCalls [ ref. id] = calls + [ call]
44+ }
4345 }
4446
4547 func registerCall< Arguments, Result> (
4648 _ call: MockCall < Arguments , Result > ,
4749 for ref: AsyncMockReference < Arguments , Result >
4850 ) {
49- let calls = mock. registeredCalls [ ref. id] ?? [ ]
50- mock. registeredCalls [ ref. id] = calls + [ call]
51+ mock. registeredCallsLock. withLock {
52+ let calls = mock. registeredCalls [ ref. id] ?? [ ]
53+ mock. registeredCalls [ ref. id] = calls + [ call]
54+ }
5155 }
5256
5357 func registeredCalls< Arguments, Result> (
5458 for ref: MockReference < Arguments , Result >
5559 ) -> [ MockCall < Arguments , Result > ] {
56- let calls = mock. registeredCalls [ ref. id]
57- return ( calls as? [ MockCall < Arguments , Result > ] ) ?? [ ]
60+ mock. registeredCallsLock. withLock {
61+ let calls = mock. registeredCalls [ ref. id]
62+ return ( calls as? [ MockCall < Arguments , Result > ] ) ?? [ ]
63+ }
5864 }
5965
6066 func registeredCalls< Arguments, Result> (
6167 for ref: AsyncMockReference < Arguments , Result >
6268 ) -> [ MockCall < Arguments , Result > ] {
63- let calls = mock. registeredCalls [ ref. id]
64- return ( calls as? [ MockCall < Arguments , Result > ] ) ?? [ ]
69+ mock. registeredCallsLock. withLock {
70+ let calls = mock. registeredCalls [ ref. id]
71+ return ( calls as? [ MockCall < Arguments , Result > ] ) ?? [ ]
72+ }
6573 }
6674
6775 func registeredResult< Arguments, Result> (
6876 for ref: MockReference < Arguments , Result >
6977 ) -> ( ( Arguments ) throws -> Result ) ? {
70- mock. registeredResults [ ref. id] as? ( Arguments ) throws -> Result
78+ mock. registeredCallsLock. withLock {
79+ let result = mock. registeredResults [ ref. id] as? ( Arguments ) throws -> Result
80+ return result
81+ }
7182 }
7283
7384 func registeredResult< Arguments, Result> (
7485 for ref: AsyncMockReference < Arguments , Result >
7586 ) -> ( ( Arguments ) async throws -> Result ) ? {
76- mock. registeredResults [ ref. id] as? ( Arguments ) async throws -> Result
87+ mock. registeredCallsLock. withLock {
88+ let result = mock. registeredResults [ ref. id] as? ( Arguments ) async throws -> Result
89+ return result
90+ }
7791 }
7892}
0 commit comments