import Flutter
import UIKit
import XCTest
{{#withPlatformChannelPluginHook}}

@testable import {{pluginProjectName}}

// This demonstrates a simple unit test of the Swift portion of this plugin's implementation.
//
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
{{/withPlatformChannelPluginHook}}

class RunnerTests: XCTestCase {

{{#withPlatformChannelPluginHook}}
  func testGetPlatformVersion() {
    let plugin = {{pluginClass}}()

    let call = FlutterMethodCall(methodName: "getPlatformVersion", arguments: [])

    let resultExpectation = expectation(description: "result block must be called.")
    plugin.handle(call) { result in
      XCTAssertEqual(result as! String, "iOS " + UIDevice.current.systemVersion)
      resultExpectation.fulfill()
    }
    waitForExpectations(timeout: 1)
  }
{{/withPlatformChannelPluginHook}}
{{^withPlatformChannelPluginHook}}
  func testExample() {
    // If you add code to the Runner application, consider adding tests here.
    // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
  }
{{/withPlatformChannelPluginHook}}

}
