blob: e927dcbfb418e1dcb9f5bd0e4a64ceedea35f237 [file] [log] [blame]
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=INITIALIZER | %FileCheck %s --check-prefix=INITIALIZER
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=METHOD | %FileCheck %s --check-prefix=METHOD
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=AVAILABILITY | %FileCheck %s --check-prefix=AVAILABILITY
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=STATIC | %FileCheck %s --check-prefix=STATIC
protocol MyProtocol {
init(init1: Int)
init(init2: Int)
func method(method1: Int)
func method(method2: Int)
}
extension MyProtocol {
init(init2: Int) { self.init(init1: init2) }
init(init3: Int) { self.init(init1: init3) }
func method(method2: Int) {}
func method(method3: Int) {}
}
class Base {
init(init4: Int) { }
func method(method4: Int) {}
}
class MyClass: Base, MyProtocol {
required init(init1: Int) { super.init(init4: init1) }
required init(init2: Int) { super.init(init4: init1) }
init(init3: Int) { super.init(init4: init1) }
override init(init4: Int) { super.init(init4: init1) }
func method(method1: Int)
func method(method2: Int) {}
func method(method3: Int) {}
override func method(method4: Int) {}
}
func testConstructer() {
MyClass(#^INITIALIZER^#)
// INITIALIZER: Begin completions, 4 items
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init1: Int#}[')'][#MyClass#];
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init2: Int#}[')'][#MyClass#];
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init3: Int#}[')'][#MyClass#];
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init4: Int#}[')'][#MyClass#];
// INITIALIZER: End completions
}
func testMethod(obj: MyClass) {
obj.method(#^METHOD^#)
// METHOD: Begin completions, 4 items
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method1: Int#}[')'][#Void#];
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method2: Int#}[')'][#Void#];
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method3: Int#}[')'][#Void#];
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method4: Int#}[')'][#Void#];
// METHOD: End completions
}
protocol HasUnavailable {}
extension HasUnavailable {
func method(method1: Int) {}
@available(*, unavailable)
func method(method2: Int) {}
}
struct MyStruct: HasUnavailable {
@available(*, unavailable)
func method(method1: Int) {}
func method(method2: Int) {}
}
func testUnavailable(val: MyStruct) {
val.method(#^AVAILABILITY^#)
// AVAILABILITY: Begin completions, 2 items
// AVAILABILITY-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method2: Int#}[')'][#Void#];
// AVAILABILITY-DAG: Decl[InstanceMethod]/Super: ['(']{#method1: Int#}[')'][#Void#];
// AVAILABILITY: End completions
}
struct TestStatic {
static func method(_ self: TestStatic) -> () -> Void {}
func method() -> Void {}
}
func testStaticFunc() {
TestStatic.method(#^STATIC^#)
// STATIC: Begin completions
// STATIC-DAG: Decl[StaticMethod]/CurrNominal: ['(']{#(self): TestStatic#}[')'][#() -> Void#];
// STATIC-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#(self): TestStatic#}[')'][#() -> Void#];
// STATIC: End completions
}