| // 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 XCTest |
| @testable import test_plugin |
| |
| class MockApi2Host: Api2Host { |
| var output: Int32? |
| |
| func calculate(value: Value, completion: @escaping (Value) -> Void) { |
| completion(Value(number: output)) |
| } |
| |
| func voidVoid(completion: @escaping () -> Void) { |
| completion() |
| } |
| } |
| |
| class AsyncHandlersTest: XCTestCase { |
| |
| func testAsyncHost2Flutter() throws { |
| let binaryMessenger = MockBinaryMessenger<Value>(codec: Api2FlutterCodec.shared) |
| binaryMessenger.result = Value(number: 2) |
| let api2Flutter = Api2Flutter(binaryMessenger: binaryMessenger) |
| let input = Value(number: 1) |
| |
| let expectation = XCTestExpectation(description: "calculate callback") |
| api2Flutter.calculate(value: input) { output in |
| XCTAssertEqual(output.number, 2) |
| expectation.fulfill() |
| } |
| wait(for: [expectation], timeout: 1.0) |
| } |
| |
| func testAsyncFlutter2HostVoidVoid() throws { |
| let binaryMessenger = MockBinaryMessenger<Value>(codec: Api2HostCodec.shared) |
| let mockApi2Host = MockApi2Host() |
| mockApi2Host.output = 2 |
| Api2HostSetup.setUp(binaryMessenger: binaryMessenger, api: mockApi2Host) |
| let channelName = "dev.flutter.pigeon.Api2Host.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<Value>(codec: Api2HostCodec.shared) |
| let mockApi2Host = MockApi2Host() |
| mockApi2Host.output = 2 |
| Api2HostSetup.setUp(binaryMessenger: binaryMessenger, api: mockApi2Host) |
| let channelName = "dev.flutter.pigeon.Api2Host.calculate" |
| XCTAssertNotNil(binaryMessenger.handlers[channelName]) |
| |
| let input = Value(number: 1) |
| let inputEncoded = binaryMessenger.codec.encode([input]) |
| |
| let expectation = XCTestExpectation(description: "calculate callback") |
| binaryMessenger.handlers[channelName]?(inputEncoded) { data in |
| let outputList = binaryMessenger.codec.decode(data) as? [Any] |
| let output = outputList?.first as? Value |
| XCTAssertEqual(output?.number, 2) |
| expectation.fulfill() |
| } |
| wait(for: [expectation], timeout: 1.0) |
| } |
| } |