mockolo icon indicating copy to clipboard operation
mockolo copied to clipboard

Associated type protocol inheritance

Open kylejgabriel opened this issue 3 years ago • 0 comments

A protocol inheriting from a protocol with associated type will also inherit any configured typealias types for its generated mock, e.g.:

/// @mockable(typealias: ContextType = Int; ObjectType = String)
protocol ProtocolA {
    associatedtype ContextType
    associatedtype ObjectType

    func createObject(withContext context: ContextType) -> ObjectType?
}

/// @mockable
protocol ContextProtocol {}

/// @mockable
protocol ObjectProtocol {}

/// @mockable(typealias: ContextType = ContextProtocol; ObjectType = ObjectProtocol)
protocol ProtocolB: ProtocolA where ContextType: ContextProtocol, ObjectType: ObjectProtocol {}

——————

final class ProtocolAMock: ProtocolA {
    typealias ContextType = Int
    typealias ContextType = String

    // Mock implementation…
}

final class ProtocolBMock: ProtocolB {
    typealias ContextType = Int // Not the expected/desired ContextProtocol
    typealias ContextType = String // Not the expected/desired ObjectProtocol

    // Mock implementation…
}

kylejgabriel avatar Apr 13 '21 16:04 kylejgabriel