From b76e38be6c37fffa82e9d7c46810f22da78c2a7d Mon Sep 17 00:00:00 2001 From: Igor Savelev Date: Fri, 22 Dec 2023 15:50:14 +0000 Subject: [PATCH] Fixes for subscripts support in AutoMockable template --- Templates/Templates/AutoMockable.stencil | 7 ++++--- Templates/Tests/Context/AutoMockable.swift | 3 ++- .../Tests/Expected/AutoMockable.expected | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Templates/Templates/AutoMockable.stencil b/Templates/Templates/AutoMockable.stencil index ca6eb6c1d..71f2a3c63 100755 --- a/Templates/Templates/AutoMockable.stencil +++ b/Templates/Templates/AutoMockable.stencil @@ -120,8 +120,9 @@ import {{ import }} {% endif %} {% endmacro %} -{% macro mockSubscript subscript %} - {% call accessLevel variable.readAccess %}{{ 'final ' if subscript.isFinal }}subscript{% if subscript.isGeneric %}<{% for genericParameter in subscript.genericParameters %}{{ genericParameter.name }}{% if genericParameter.typeName %}: {{ genericParameter.typeName.name }}{% endif %}{{ ', ' if not forloop.last }}{% endfor %}>{% endif %}({% for parameters in subscript.parameters }{{ parameter.asSource }}{{ ', ' if not forloop.last }}{% endfor %}) -> {{ subscript.returnTypeName.name }}{% if subscript.genericRequirements|count != 0 %} where {% for requirement in subscript.genericRequirements %}{{ requirement.leftType.name }} {{ requirement.relationshipSyntax }} {{ requirement.rightType.typeName.name }}{{ ', ' if not forloop.last }}{% endfor %}{% endif %} { +{% macro mockSubscript subscript index %} + //MARK: - Subscript #{{ index }} + {% call accessLevel variable.readAccess %}subscript{% if subscript.isGeneric %}<{% for genericParameter in subscript.genericParameters %}{{ genericParameter.name }}{% if genericParameter.inheritedTypeName %}: {{ genericParameter.inheritedTypeName.name }}{% endif %}{{ ', ' if not forloop.last }}{% endfor %}>{% endif %}({% for parameter in subscript.parameters %}{{ parameter.asSource }}{{ ', ' if not forloop.last }}{% endfor %}) -> {{ subscript.returnTypeName.name }}{% if subscript.genericRequirements|count != 0 %} where {% for requirement in subscript.genericRequirements %}{{ requirement.leftType.name }} {{ requirement.relationshipSyntax }} {{ requirement.rightType.typeName.name }}{{ ', ' if not forloop.last }}{% endfor %}{% endif %} { {% if subscript.readAccess %} get { fatalError("Subscripts are not fully supported yet") }{% endif %} {% if subscript.writeAccess %} set { fatalError("Subscripts are not fully supported yet") }{% endif %} } @@ -296,7 +297,7 @@ import {{ import }} {% endfor %} {% for subscript in type.allSubscripts|!definedInExtension %} - {% call mockSubscript subscript %} + {% call mockSubscript subscript forloop.counter %} {% endfor %} } {% endif %}{% endfor %} diff --git a/Templates/Tests/Context/AutoMockable.swift b/Templates/Tests/Context/AutoMockable.swift index c0a91a03c..f2b63c530 100644 --- a/Templates/Tests/Context/AutoMockable.swift +++ b/Templates/Tests/Context/AutoMockable.swift @@ -227,7 +227,8 @@ public protocol ProtocolWithOverrides { func doSomething(_ data: String) throws -> (([Int], [Any]) -> Void) } -protocol SubscriptProtocol: AutoMockable { +// sourcery: AutoMockable +protocol SubscriptProtocol { subscript(arg: Int) -> String { get set } subscript(arg: T) -> Int { get } subscript(arg: T) -> T? { get set } diff --git a/Templates/Tests/Expected/AutoMockable.expected b/Templates/Tests/Expected/AutoMockable.expected index 184edc634..af41ce38e 100644 --- a/Templates/Tests/Expected/AutoMockable.expected +++ b/Templates/Tests/Expected/AutoMockable.expected @@ -1391,6 +1391,26 @@ class StaticMethodProtocolMock: StaticMethodProtocol { } } +class SubscriptProtocolMock: SubscriptProtocol { + //MARK: - Subscript #1 + subscript(arg: Int) -> String { + get { fatalError("Subscripts are not fully supported yet") } + set { fatalError("Subscripts are not fully supported yet") } + } + //MARK: - Subscript #2 + subscript(arg: T) -> Int { + get { fatalError("Subscripts are not fully supported yet") } + } + //MARK: - Subscript #3 + subscript(arg: T) -> T? { + get { fatalError("Subscripts are not fully supported yet") } + set { fatalError("Subscripts are not fully supported yet") } + } + //MARK: - Subscript #4 + subscript(arg: String) -> T? where T : Cancellable { + get { fatalError("Subscripts are not fully supported yet") } + } +} class ThrowableProtocolMock: ThrowableProtocol {