Skip to content

Commit

Permalink
Compilation fix for a mock where the return type of a closure is an o…
Browse files Browse the repository at this point in the history
…paque type (#259)

* fix and tests added

* fix for the case when the text some exists in the returning type
  • Loading branch information
omarzl committed May 2, 2024
1 parent 43c7ec5 commit dff67bf
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Sources/MockoloFramework/Utils/TypeParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,9 @@ public final class `Type` {
var ret = typeName
if let closureRng = closureRng {
let left = ret[ret.startIndex..<closureRng.lowerBound]
let right = ret[closureRng.lowerBound..<ret.endIndex]
ret = left + right.replacingOccurrences(of: "\(String.some) ", with: "\(String.any) ")

for item in typeParamList {
if isEscaping, left.literalComponents.contains(item) {
ret = String.anyType
Expand Down
29 changes: 29 additions & 0 deletions Tests/TestFuncs/TestOpaqueTypeFuncs/FixtureOpaqueTypeFunc.swift
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,33 @@ public class OpaqueTypeWithMultiTypeProtocolMock: OpaqueTypeWithMultiTypeProtoco
}
"""

let closureReturningSomeType = """
/// \(String.mockAnnotation)
protocol ProtocolReturningOpaqueTypeInClosureProtocol {
func register(router: @autoclosure @escaping () -> (some MyAwesomeType))
}
"""


let closureReturningSomeTypeMock = """
class ProtocolReturningOpaqueTypeInClosureProtocolMock: ProtocolReturningOpaqueTypeInClosureProtocol {
init() { }
private(set) var registerCallCount = 0
var registerHandler: ((@autoclosure @escaping () -> (any MyAwesomeType)) -> ())?
func register(router: @autoclosure @escaping () -> (some MyAwesomeType)) {
registerCallCount += 1
if let registerHandler = registerHandler {
registerHandler(router())
}
}
}
"""
5 changes: 5 additions & 0 deletions Tests/TestFuncs/TestOpaqueTypeFuncs/OpaqueTypeFuncTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,9 @@ class OpaqueTypeFuncTests: MockoloTestCase {
verify(srcContent: someMultiParameterOptionalType,
dstContent: someMultiParameterOptionalTypeMock)
}

func testOpaqueTypeAsReturnTypeFuncs() {
verify(srcContent: closureReturningSomeType,
dstContent: closureReturningSomeTypeMock)
}
}

0 comments on commit dff67bf

Please sign in to comment.