uber / mockolo

Efficient Mock Generator for Swift
Apache License 2.0
813 stars 86 forks source link

Uncompilable mock generated for NSObjectProtocol / @objc protocols #248

Open DJBen opened 11 months ago

DJBen commented 11 months ago

I wonder if there's a specific reason that @objc protocols are not supported?

/// @mockable(history: performRequest = true)
@objc public protocol SCCrashLoggerNetworkExecuting: NSObjectProtocol {
    @objc func performRequest(
        request: URLRequest,
        reportId: String,
        includeLogs: Bool,
        onSuccess: @escaping () -> Void,
        onPermanentFailure: @escaping (Error, String) -> Void
    ) -> String
}

Generated source:

import Foundation

public class SCCrashLoggerNetworkExecutingMock: SCCrashLoggerNetworkExecuting {
    public init() { }

    public private(set) var performRequestCallCount = 0
    public var performRequestArgValues = [(URLRequest, String, Bool)]()
    public var performRequestHandler: ((URLRequest, String, Bool, @escaping () -> Void, @escaping (Error, String) -> Void) -> (String))?
    public func performRequest(request: URLRequest, reportId: String, includeLogs: Bool, onSuccess: @escaping () -> Void, onPermanentFailure: @escaping (Error, String) -> Void) -> String {
        performRequestCallCount += 1
        performRequestArgValues.append((request, reportId, includeLogs))
        if let performRequestHandler = performRequestHandler {
            return performRequestHandler(request, reportId, includeLogs, onSuccess, onPermanentFailure)
        }
        return ""
    }
}

Expected source: