Skip to content

Commit 234cc32

Browse files
Merge pull request #1420 from musiienko/update-automockable-any-generation
Fix AutoMockable Generation for a couple of cases with existential any
2 parents d5a605b + 58625e4 commit 234cc32

5 files changed

Lines changed: 220 additions & 18 deletions

File tree

Templates/Templates/AutoMockable.stencil

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,11 @@ import {{ import }}
233233
{% macro existentialVariableTypeName typeName isNotAllowedToBeImplicitlyUnwrappedOptional -%}
234234
{%- if typeName|contains:"<" and typeName|contains:">" -%}
235235
{{ typeName }}
236+
{%- elif typeName|contains:"[" and typeName|contains:"]" -%}
237+
{{ typeName }}
236238
{%- elif typeName|contains:"any " and typeName|contains:"!" -%}
237239
{{ typeName | replace:"any","(any" | replace:"!",")!" }}
238-
{%- elif typeName|contains:"any " and typeName.isOptional -%}
240+
{%- elif typeName|contains:"any " and typeName.isOptional and not typeName|contains:"(" -%}
239241
{{ typeName | replace:"any","(any" | replace:"?",")?" }}
240242
{%- elif typeName|contains:"any " and typeName.isClosure and typeName|contains:"?" -%}
241243
({{ typeName | replace:"any","(any" | replace:"?",")?" }})
@@ -262,7 +264,9 @@ import {{ import }}
262264
{{ typeName | replace:"inout ","" }}
263265
{%- endif -%}
264266
{% endset %}
265-
{%- if typeName|contains:"any " and typeName|contains:"!" -%}
267+
{%- if typeName|contains:"[" and typeName|contains:"]" -%}
268+
{{ name }}
269+
{%- elif typeName|contains:"any " and typeName|contains:"!" -%}
266270
{{ name | replace:"any","(any" | replace:"!",")?" }}
267271
{%- elif typeName|contains:"any " and typeName.isOptional and typeName.isClosure -%}
268272
({{ typeName.unwrappedTypeName| replace:"inout ","" | replace:"any","(any" | replace:"?",")?" }})?
@@ -295,7 +299,9 @@ import {{ import }}
295299
{{ typeName | replace:"inout ","" }}
296300
{%- endif -%}
297301
{% endset %}
298-
{%- if typeName|contains:"any " and typeName|contains:"!" -%}
302+
{%- if typeName|contains:"[" and typeName|contains:"]" -%}
303+
{{ name }}
304+
{%- elif typeName|contains:"any " and typeName|contains:"!" -%}
299305
{{ name | replace:"any","(any" | replace:"!",")?" }}
300306
{%- elif typeName|contains:"any " and typeName.isOptional and typeName.isClosure -%}
301307
({{ typeName.unwrappedTypeName| replace:"inout ","" | replace:"any","(any" | replace:"?",")?" }})?
@@ -316,7 +322,9 @@ import {{ import }}
316322
{%- endif -%}
317323
{%- endmacro %}
318324
{% macro existentialParameterTypeName typeName isVariadic -%}
319-
{%- if typeName|contains:"any " and typeName|contains:"?," and typeName|contains:">?" -%}
325+
{%- if typeName|contains:"[" and typeName|contains:"]" -%}
326+
{{ typeName }}
327+
{%- elif typeName|contains:"any " and typeName|contains:"?," and typeName|contains:">?" -%}
320328
{{ typeName | replace:"any","(any" | replace:"?,",")?," }}
321329
{%- elif typeName|contains:"any " and typeName|contains:"!" -%}
322330
{{ typeName | replace:"any","(any" | replace:"!",")!" }}

Templates/Tests/Context/AutoMockable.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,19 @@ protocol AnyProtocol: AutoMockable {
219219
func z() -> any StubProtocol & CustomStringConvertible
220220
}
221221

222+
protocol AnyProtocolWithOptionals: AutoMockable {
223+
var a: [any StubProtocol]? { get }
224+
var b: [Result<Void, any Error>] { get }
225+
var c: (Int, [(any StubProtocol)?])? { get }
226+
var d: (Int, (any StubProtocol)?) { get }
227+
var e: (Int, (any StubProtocol)?)? { get }
228+
var f: (Int, [any StubProtocol]?)? { get }
229+
func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool
230+
func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool
231+
func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool
232+
var j: (anyInteger: Int, anyArray: [any StubProtocol]?)? { get }
233+
}
234+
222235
protocol SomeProtocol: AutoMockable {
223236
func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol)
224237
func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String

Templates/Tests/Context_Linux/AutoMockable.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,19 @@ protocol AnyProtocol: AutoMockable {
220220
func z() -> any StubProtocol & CustomStringConvertible
221221
}
222222

223+
protocol AnyProtocolWithOptionals: AutoMockable {
224+
var a: [any StubProtocol]? { get }
225+
var b: [Result<Void, any Error>] { get }
226+
var c: (Int, [(any StubProtocol)?])? { get }
227+
var d: (Int, (any StubProtocol)?) { get }
228+
var e: (Int, (any StubProtocol)?)? { get }
229+
var f: (Int, [any StubProtocol]?)? { get }
230+
func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool
231+
func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool
232+
func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool
233+
var j: (anyInteger: Int, anyArray: [any StubProtocol]?)? { get }
234+
}
235+
223236
protocol SomeProtocol: AutoMockable {
224237
func a(_ x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol)
225238
func b(x: (some StubProtocol)?, y: (some StubProtocol)!, z: some StubProtocol) async -> String

Templates/Tests/Expected/AutoMockable.expected

Lines changed: 91 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery
1+
// Generated using Sourcery 2.2.7 — https://github.com/krzysztofzablocki/Sourcery
22
// DO NOT EDIT
33
// swiftlint:disable line_length
44
// swiftlint:disable variable_name
@@ -423,6 +423,90 @@ class AnyProtocolMock: AnyProtocol {
423423
}
424424

425425

426+
}
427+
class AnyProtocolWithOptionalsMock: AnyProtocolWithOptionals {
428+
429+
430+
var a: [any StubProtocol]?
431+
var b: [Result<Void, any Error>] = []
432+
var c: (Int, [(any StubProtocol)?])?
433+
var d: (Int, (any StubProtocol)?) {
434+
get { return underlyingD }
435+
set(value) { underlyingD = value }
436+
}
437+
var underlyingD: ((Int, (any StubProtocol)?))!
438+
var e: (Int, (any StubProtocol)?)?
439+
var f: (Int, [any StubProtocol]?)?
440+
var j: (anyInteger: Int, anyArray: [any StubProtocol]?)?
441+
442+
443+
//MARK: - g
444+
445+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0
446+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {
447+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0
448+
}
449+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (g: String, handler: ([any StubProtocol]?) -> Void)?
450+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(g: String, handler: ([any StubProtocol]?) -> Void)] = []
451+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!
452+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([any StubProtocol]?) -> Void) -> Bool)?
453+
454+
func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool {
455+
gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1
456+
gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (g: g, handler: handler)
457+
gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((g: g, handler: handler))
458+
if let gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure = gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure {
459+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure(g, handler)
460+
} else {
461+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue
462+
}
463+
}
464+
465+
//MARK: - h
466+
467+
var hHStringHandlerEscapingStubProtocolVoidBoolCallsCount = 0
468+
var hHStringHandlerEscapingStubProtocolVoidBoolCalled: Bool {
469+
return hHStringHandlerEscapingStubProtocolVoidBoolCallsCount > 0
470+
}
471+
var hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments: (h: String, handler: ([StubProtocol]) -> Void)?
472+
var hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations: [(h: String, handler: ([StubProtocol]) -> Void)] = []
473+
var hHStringHandlerEscapingStubProtocolVoidBoolReturnValue: Bool!
474+
var hHStringHandlerEscapingStubProtocolVoidBoolClosure: ((String, @escaping ([StubProtocol]) -> Void) -> Bool)?
475+
476+
func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool {
477+
hHStringHandlerEscapingStubProtocolVoidBoolCallsCount += 1
478+
hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments = (h: h, handler: handler)
479+
hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations.append((h: h, handler: handler))
480+
if let hHStringHandlerEscapingStubProtocolVoidBoolClosure = hHStringHandlerEscapingStubProtocolVoidBoolClosure {
481+
return hHStringHandlerEscapingStubProtocolVoidBoolClosure(h, handler)
482+
} else {
483+
return hHStringHandlerEscapingStubProtocolVoidBoolReturnValue
484+
}
485+
}
486+
487+
//MARK: - i
488+
489+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0
490+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {
491+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0
492+
}
493+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (i: String, handler: ([(any StubProtocol)?]) -> Void)?
494+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(i: String, handler: ([(any StubProtocol)?]) -> Void)] = []
495+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!
496+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([(any StubProtocol)?]) -> Void) -> Bool)?
497+
498+
func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool {
499+
iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1
500+
iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (i: i, handler: handler)
501+
iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((i: i, handler: handler))
502+
if let iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure = iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure {
503+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure(i, handler)
504+
} else {
505+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue
506+
}
507+
}
508+
509+
426510
}
427511
class AsyncProtocolMock: AsyncProtocol {
428512

@@ -1422,10 +1506,10 @@ public class ProtocolWithOverridesMock: ProtocolWithOverrides {
14221506
}
14231507
public var doSomethingDataString_IntStringVoidReceivedData: (String)?
14241508
public var doSomethingDataString_IntStringVoidReceivedInvocations: [(String)] = []
1425-
public var doSomethingDataString_IntStringVoidReturnValue: ((([Int], [String]) -> Void))!
1426-
public var doSomethingDataString_IntStringVoidClosure: ((String) -> (([Int], [String]) -> Void))?
1509+
public var doSomethingDataString_IntStringVoidReturnValue: (([Int], [String]) -> Void)!
1510+
public var doSomethingDataString_IntStringVoidClosure: ((String) -> ([Int], [String]) -> Void)?
14271511

1428-
public func doSomething(_ data: String) -> (([Int], [String]) -> Void) {
1512+
public func doSomething(_ data: String) -> ([Int], [String]) -> Void {
14291513
doSomethingDataString_IntStringVoidCallsCount += 1
14301514
doSomethingDataString_IntStringVoidReceivedData = data
14311515
doSomethingDataString_IntStringVoidReceivedInvocations.append(data)
@@ -1445,10 +1529,10 @@ public class ProtocolWithOverridesMock: ProtocolWithOverrides {
14451529
}
14461530
public var doSomethingDataString_IntAnyVoidReceivedData: (String)?
14471531
public var doSomethingDataString_IntAnyVoidReceivedInvocations: [(String)] = []
1448-
public var doSomethingDataString_IntAnyVoidReturnValue: ((([Int], [Any]) -> Void))!
1449-
public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> (([Int], [Any]) -> Void))?
1532+
public var doSomethingDataString_IntAnyVoidReturnValue: (([Int], [Any]) -> Void)!
1533+
public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> ([Int], [Any]) -> Void)?
14501534

1451-
public func doSomething(_ data: String) throws -> (([Int], [Any]) -> Void) {
1535+
public func doSomething(_ data: String) throws -> ([Int], [Any]) -> Void {
14521536
doSomethingDataString_IntAnyVoidCallsCount += 1
14531537
doSomethingDataString_IntAnyVoidReceivedData = data
14541538
doSomethingDataString_IntAnyVoidReceivedInvocations.append(data)

Templates/Tests/Generated/AutoMockable.generated.swift

Lines changed: 91 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated using Sourcery 2.2.6 — https://github.com/krzysztofzablocki/Sourcery
1+
// Generated using Sourcery 2.2.7 — https://github.com/krzysztofzablocki/Sourcery
22
// DO NOT EDIT
33
// swiftlint:disable line_length
44
// swiftlint:disable variable_name
@@ -423,6 +423,90 @@ class AnyProtocolMock: AnyProtocol {
423423
}
424424

425425

426+
}
427+
class AnyProtocolWithOptionalsMock: AnyProtocolWithOptionals {
428+
429+
430+
var a: [any StubProtocol]?
431+
var b: [Result<Void, any Error>] = []
432+
var c: (Int, [(any StubProtocol)?])?
433+
var d: (Int, (any StubProtocol)?) {
434+
get { return underlyingD }
435+
set(value) { underlyingD = value }
436+
}
437+
var underlyingD: ((Int, (any StubProtocol)?))!
438+
var e: (Int, (any StubProtocol)?)?
439+
var f: (Int, [any StubProtocol]?)?
440+
var j: (anyInteger: Int, anyArray: [any StubProtocol]?)?
441+
442+
443+
//MARK: - g
444+
445+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0
446+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {
447+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0
448+
}
449+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (g: String, handler: ([any StubProtocol]?) -> Void)?
450+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(g: String, handler: ([any StubProtocol]?) -> Void)] = []
451+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!
452+
var gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([any StubProtocol]?) -> Void) -> Bool)?
453+
454+
func g(_ g: String, handler: @escaping ([any StubProtocol]?) -> Void) -> Bool {
455+
gGStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1
456+
gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (g: g, handler: handler)
457+
gGStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((g: g, handler: handler))
458+
if let gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure = gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure {
459+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolClosure(g, handler)
460+
} else {
461+
return gGStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue
462+
}
463+
}
464+
465+
//MARK: - h
466+
467+
var hHStringHandlerEscapingStubProtocolVoidBoolCallsCount = 0
468+
var hHStringHandlerEscapingStubProtocolVoidBoolCalled: Bool {
469+
return hHStringHandlerEscapingStubProtocolVoidBoolCallsCount > 0
470+
}
471+
var hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments: (h: String, handler: ([StubProtocol]) -> Void)?
472+
var hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations: [(h: String, handler: ([StubProtocol]) -> Void)] = []
473+
var hHStringHandlerEscapingStubProtocolVoidBoolReturnValue: Bool!
474+
var hHStringHandlerEscapingStubProtocolVoidBoolClosure: ((String, @escaping ([StubProtocol]) -> Void) -> Bool)?
475+
476+
func h(_ h: String, handler: @escaping ([StubProtocol]) -> Void) -> Bool {
477+
hHStringHandlerEscapingStubProtocolVoidBoolCallsCount += 1
478+
hHStringHandlerEscapingStubProtocolVoidBoolReceivedArguments = (h: h, handler: handler)
479+
hHStringHandlerEscapingStubProtocolVoidBoolReceivedInvocations.append((h: h, handler: handler))
480+
if let hHStringHandlerEscapingStubProtocolVoidBoolClosure = hHStringHandlerEscapingStubProtocolVoidBoolClosure {
481+
return hHStringHandlerEscapingStubProtocolVoidBoolClosure(h, handler)
482+
} else {
483+
return hHStringHandlerEscapingStubProtocolVoidBoolReturnValue
484+
}
485+
}
486+
487+
//MARK: - i
488+
489+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount = 0
490+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolCalled: Bool {
491+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount > 0
492+
}
493+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments: (i: String, handler: ([(any StubProtocol)?]) -> Void)?
494+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations: [(i: String, handler: ([(any StubProtocol)?]) -> Void)] = []
495+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue: Bool!
496+
var iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure: ((String, @escaping ([(any StubProtocol)?]) -> Void) -> Bool)?
497+
498+
func i(_ i: String, handler: @escaping ([(any StubProtocol)?]) -> Void) -> Bool {
499+
iIStringHandlerEscapingAnyStubProtocolVoidBoolCallsCount += 1
500+
iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedArguments = (i: i, handler: handler)
501+
iIStringHandlerEscapingAnyStubProtocolVoidBoolReceivedInvocations.append((i: i, handler: handler))
502+
if let iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure = iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure {
503+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolClosure(i, handler)
504+
} else {
505+
return iIStringHandlerEscapingAnyStubProtocolVoidBoolReturnValue
506+
}
507+
}
508+
509+
426510
}
427511
class AsyncProtocolMock: AsyncProtocol {
428512

@@ -1422,10 +1506,10 @@ public class ProtocolWithOverridesMock: ProtocolWithOverrides {
14221506
}
14231507
public var doSomethingDataString_IntStringVoidReceivedData: (String)?
14241508
public var doSomethingDataString_IntStringVoidReceivedInvocations: [(String)] = []
1425-
public var doSomethingDataString_IntStringVoidReturnValue: ((([Int], [String]) -> Void))!
1426-
public var doSomethingDataString_IntStringVoidClosure: ((String) -> (([Int], [String]) -> Void))?
1509+
public var doSomethingDataString_IntStringVoidReturnValue: (([Int], [String]) -> Void)!
1510+
public var doSomethingDataString_IntStringVoidClosure: ((String) -> ([Int], [String]) -> Void)?
14271511

1428-
public func doSomething(_ data: String) -> (([Int], [String]) -> Void) {
1512+
public func doSomething(_ data: String) -> ([Int], [String]) -> Void {
14291513
doSomethingDataString_IntStringVoidCallsCount += 1
14301514
doSomethingDataString_IntStringVoidReceivedData = data
14311515
doSomethingDataString_IntStringVoidReceivedInvocations.append(data)
@@ -1445,10 +1529,10 @@ public class ProtocolWithOverridesMock: ProtocolWithOverrides {
14451529
}
14461530
public var doSomethingDataString_IntAnyVoidReceivedData: (String)?
14471531
public var doSomethingDataString_IntAnyVoidReceivedInvocations: [(String)] = []
1448-
public var doSomethingDataString_IntAnyVoidReturnValue: ((([Int], [Any]) -> Void))!
1449-
public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> (([Int], [Any]) -> Void))?
1532+
public var doSomethingDataString_IntAnyVoidReturnValue: (([Int], [Any]) -> Void)!
1533+
public var doSomethingDataString_IntAnyVoidClosure: ((String) throws -> ([Int], [Any]) -> Void)?
14501534

1451-
public func doSomething(_ data: String) throws -> (([Int], [Any]) -> Void) {
1535+
public func doSomething(_ data: String) throws -> ([Int], [Any]) -> Void {
14521536
doSomethingDataString_IntAnyVoidCallsCount += 1
14531537
doSomethingDataString_IntAnyVoidReceivedData = data
14541538
doSomethingDataString_IntAnyVoidReceivedInvocations.append(data)

0 commit comments

Comments
 (0)