blob: 53b44185d2fd68e276aeb95054624dd59bf2355c [file] [log] [blame]
// RUN: not %target-build-swift -typecheck %s 2>&1 | %FileCheck -check-prefix=CHECK-%target-os -check-prefix=CHECK-BOTH %s
// REQUIRES: executable_test
struct IntWrapper {
let value: Int
}
class IBActionWrapperTy {
@IBAction func nullary() {}
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-1]]
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: @IBAction methods must have a single argument
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-3]]
@IBAction func reqReq(_: AnyObject, _: AnyObject) {}
@IBAction func reqOpt(_: AnyObject, _: AnyObject?) {}
@IBAction func reqImp(_: AnyObject, _: AnyObject!) {}
@IBAction func optReq(_: AnyObject?, _: AnyObject) {}
@IBAction func optOpt(_: AnyObject?, _: AnyObject?) {}
@IBAction func optImp(_: AnyObject?, _: AnyObject!) {}
@IBAction func impReq(_: AnyObject!, _: AnyObject) {}
@IBAction func impOpt(_: AnyObject!, _: AnyObject?) {}
@IBAction func impImp(_: AnyObject!, _: AnyObject!) {}
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-9]]
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-18]]:18: error: @IBAction methods must have a single argument
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
// CHECK-watchos-NOT: attr_ibaction_ios.swift:[[@LINE-27]]
@IBAction func reqBad(_: AnyObject, _: IBActionWrapperTy) {}
// CHECK-ios: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: argument to @IBAction method cannot have non-'@objc' class type
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: @IBAction methods must have a single argument
// CHECK-watch: attr_ibaction_ios.swift:[[@LINE-3]]:18: error: argument to @IBAction method cannot have non-'@objc' class type
@IBAction func badReq(_: Int, _: AnyObject) {}
// CHECK-ios: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: argument to @IBAction method cannot have non-object type
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: @IBAction methods must have a single argument
@IBAction func badBad(_: Int, _: IBActionWrapperTy) {}
// CHECK-ios: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: argument to @IBAction method cannot have non-object type
// CHECK-ios: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: argument to @IBAction method cannot have non-'@objc' class type
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-3]]:18: error: @IBAction methods must have a single argument
@IBAction func tooManyArgs(_: AnyObject, _: AnyObject, _: AnyObject) {}
// CHECK-ios: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: @IBAction methods can only have up to 2 arguments
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: @IBAction methods must have a single argument
@IBAction func watchKitLike(_: Int) {}
// CHECK-ios-NOT: attr_ibaction_ios.swift:[[@LINE-1]]
// CHECK-macosx: attr_ibaction_ios.swift:[[@LINE-2]]:18: error: argument to @IBAction method cannot have non-object type
@IBAction func watchKitLikeBad(_: IntWrapper) {}
// CHECK-BOTH: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: argument to @IBAction method cannot have non-object type
@IBAction func watchKitLikeOpt(_: Int?) {}
// CHECK-BOTH: attr_ibaction_ios.swift:[[@LINE-1]]:18: error: argument to @IBAction method cannot have non-object type
}