blob: 015c6ab61277f805f7fc9b73791c48ee9e10c4a3 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import Flutter
import XCTest
@testable import test_plugin
class MockHostSmallApi: HostSmallApi {
var output: String?
func echo(aString: String, completion: @escaping (Result<String, Error>) -> Void) {
completion(.success(output!))
}
func voidVoid(completion: @escaping (Result<Void, Error>) -> Void) {
completion(.success(()))
}
}
class AsyncHandlersTest: XCTestCase {
func testAsyncHost2Flutter() throws {
let value = "Test"
let binaryMessenger = MockBinaryMessenger<String>(codec: FlutterIntegrationCoreApiCodec.shared)
binaryMessenger.result = value
let flutterApi = FlutterIntegrationCoreApi(binaryMessenger: binaryMessenger)
let expectation = XCTestExpectation(description: "callback")
flutterApi.echo(value) { output in
XCTAssertEqual(output, value)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
}
func testAsyncFlutter2HostVoidVoid() throws {
let binaryMessenger = MockBinaryMessenger<String>(codec: FlutterStandardMessageCodec.sharedInstance())
let mockHostSmallApi = MockHostSmallApi()
HostSmallApiSetup.setUp(binaryMessenger: binaryMessenger, api: mockHostSmallApi)
let channelName = "dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.voidVoid"
XCTAssertNotNil(binaryMessenger.handlers[channelName])
let expectation = XCTestExpectation(description: "voidvoid callback")
binaryMessenger.handlers[channelName]?(nil) { data in
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertEqual(outputList?.first as! NSNull, NSNull())
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
}
func testAsyncFlutter2Host() throws {
let binaryMessenger = MockBinaryMessenger<String>(codec: FlutterStandardMessageCodec.sharedInstance())
let mockHostSmallApi = MockHostSmallApi()
let value = "Test"
mockHostSmallApi.output = value
HostSmallApiSetup.setUp(binaryMessenger: binaryMessenger, api: mockHostSmallApi)
let channelName = "dev.flutter.pigeon.pigeon_integration_tests.HostSmallApi.echo"
XCTAssertNotNil(binaryMessenger.handlers[channelName])
let inputEncoded = binaryMessenger.codec.encode([value])
let expectation = XCTestExpectation(description: "echo callback")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputList = binaryMessenger.codec.decode(data) as? [Any]
let output = outputList?.first as? String
XCTAssertEqual(output, value)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
}
}