Files
swift-mirror/test/decl/protocol/req/subscript.swift
Dmitri Hrybenko 3b04d1b013 tests: reorganize tests so that they actually use the target platform
Most tests were using %swift or similar substitutions, which did not
include the target triple and SDK.  The driver was defaulting to the
host OS.  Thus, we could not run the tests when the standard library was
not built for OS X.

Swift SVN r24504
2015-01-19 06:52:49 +00:00

122 lines
3.6 KiB
Swift

// RUN: %target-parse-verify-swift
protocol P1 {
subscript (i: Int) -> Int { get } // expected-note{{protocol requires subscript with type '(Int) -> Int'}}
}
class C1 : P1 {
subscript (i: Int) -> Int {
get {
return i
}
set {}
}
}
struct S1 : P1 {
subscript (i: Int) -> Int {
get {
return i
}
set {}
}
}
struct S1Error : P1 { // expected-error{{type 'S1Error' does not conform to protocol 'P1'}}
subscript (i: Int) -> Double { // expected-note{{candidate has non-matching type '(Int) -> Double'}}
get {
return Double(i)
}
set {}
}
}
//===----------------------------------------------------------------------===//
// Get-only property requirements
//===----------------------------------------------------------------------===//
protocol PropertyGet {
var x : Int { get } // expected-note {{protocol requires property 'x' with type 'Int'}}
}
class PropertyGet_Stored : PropertyGet {
var x : Int = 0 // ok
}
class PropertyGet_Immutable : PropertyGet {
let x : Int = 0 // ok.
}
class PropertyGet_ComputedGetSet : PropertyGet {
var x : Int { get { return 0 } set {} } // ok
}
class PropertyGet_ComputedGet : PropertyGet {
var x : Int { return 0 } // ok
}
struct PropertyGet_StaticVar : PropertyGet { // expected-error {{type 'PropertyGet_StaticVar' does not conform to protocol 'PropertyGet'}}
static var x : Int = 42 // expected-note {{candidate operates on a type, not an instance as required}}
}
//===----------------------------------------------------------------------===//
// Get-Set property requirements
//===----------------------------------------------------------------------===//
protocol PropertyGetSet {
var x : Int { get set } // expected-note 2{{protocol requires property 'x' with type 'Int'}}
}
class PropertyGetSet_Stored : PropertyGetSet {
var x : Int = 0 // ok
}
class PropertyGetSet_Immutable : PropertyGetSet { // expected-error {{type 'PropertyGetSet_Immutable' does not conform to protocol 'PropertyGetSet'}}
let x : Int = 0 // expected-note {{candidate is not settable, but protocol requires it}}
}
class PropertyGetSet_ComputedGetSet : PropertyGetSet {
var x : Int { get { return 42 } set {} } // ok
}
class PropertyGetSet_ComputedGet : PropertyGetSet { // expected-error {{type 'PropertyGetSet_ComputedGet' does not conform to protocol 'PropertyGetSet'}}
var x : Int { return 42 } // expected-note {{candidate is not settable, but protocol requires it}}
}
//===----------------------------------------------------------------------===//
// Get-only subscript requirements
//===----------------------------------------------------------------------===//
protocol SubscriptGet {
subscript(a : Int) -> Int { get }
}
class SubscriptGet_Get : SubscriptGet {
subscript(a : Int) -> Int { return 0 } // ok
}
class SubscriptGet_GetSet : SubscriptGet {
subscript(a : Int) -> Int { get { return 42 } set {} } // ok
}
//===----------------------------------------------------------------------===//
// Get-set subscript requirements
//===----------------------------------------------------------------------===//
protocol SubscriptGetSet {
subscript(a : Int) -> Int { get set } // expected-note {{protocol requires subscript with type '(Int) -> Int'}}
}
class SubscriptGetSet_Get : SubscriptGetSet { // expected-error {{type 'SubscriptGetSet_Get' does not conform to protocol 'SubscriptGetSet'}}
subscript(a : Int) -> Int { return 0 } // expected-note {{candidate is not settable, but protocol requires it}}
}
class SubscriptGetSet_GetSet : SubscriptGetSet {
subscript(a : Int) -> Int { get { return 42 } set {} } // ok
}