kosi-libs / MocKMP

A mocking processor for Kotlin Multiplatform
https://kosi-libs.org/mockmp
MIT License
184 stars 12 forks source link

Issues with typealias for functions #15

Closed ankushg closed 2 years ago

ankushg commented 2 years ago

I have some code like

public typealias HttpResponseCallback = (HttpResponse) -> Unit
public typealias HttpFailureCallback = (Failure) -> Unit

public interface HttpClient {

    /**
     * Make a [Request], and complete with a [HttpResult]
     *
     * @param request The request details
     * @param completion: The closure to call when the request is complete
     */
    public fun submit(
        request: Request,
        onResponse: HttpResponseCallback,
        onFailure: HttpFailureCallback
    ): RequestDisposable
}

When I try to mock it, MocKMP generates this, which fails to compile:

internal class MockHttpClient(
  private val mocker: Mocker
) : HttpClient {
  public override fun submit(
    request: Request,
    onResponse: HttpResponseCallback<HttpResponse, Unit>,
    onFailure: HttpFailureCallback<Failure, Unit>
  ): RequestDisposable = this.mocker.register(this,
      "submit(com.quizlet.shared.httpclient.Request, ?, ?)", request, onResponse, onFailure)

  public override fun toString(): String = this.mocker.register(this, "toString()", default = {
      super.toString() })
}

It looks like it's using my typealias names in place of Function1.

If I inline my typealiases, MocKMP generates this, which compiles fine:


internal class MockHttpClient(
  private val mocker: Mocker
) : HttpClient {
  public override fun submit(
    request: Request,
    onResponse: Function1<HttpResponse, Unit>,
    onFailure: Function1<Failure, Unit>
  ): RequestDisposable = this.mocker.register(this,
      "submit(com.quizlet.shared.httpclient.Request, kotlin.Function1, kotlin.Function1)", request,
      onResponse, onFailure)

  public override fun toString(): String = this.mocker.register(this, "toString()", default = {
      super.toString() })
}
SalomonBrys commented 2 years ago

Fixed in 1.5.0 : https://github.com/Kodein-Framework/MocKMP/releases/tag/v1.5.0