blob: 8856a9dfb9a3c9c447b57c71e9722a7a438f6c03 [file] [log] [blame]
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_1 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_2 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_3 | %FileCheck %s -check-prefix=ERROR_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_4 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_5 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_6 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_7 | %FileCheck %s -check-prefix=ERROR_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IN_CONSTRUCTOR_1 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IN_CONSTRUCTOR_2 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IN_DESTRUCTOR_1 | %FileCheck %s -check-prefix=FOO_STRUCT_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_2 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_3 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_4 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_IN_CONSTRUCTOR_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_VAR_IF_IN_DESTRUCTOR_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPR_POSTFIX_BEGIN_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPR_POSTFIX_BEGIN_2 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPR_POSTFIX_BEGIN_IN_CONSTRUCTOR_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPR_POSTFIX_BEGIN_IN_DESTRUCTOR_1 | %FileCheck %s -check-prefix=LOCALS_COMMON
struct FooStruct {
var instanceVar = 0
init(_ instanceVar: Int = 0) { }
func instanceFunc0() {}
func builderFunc1() -> FooStruct {
return self
}
func builderFunc2(_ a: Int) -> FooStruct {
return self
}
}
// FOO_STRUCT_COMMON: Begin completions
// FOO_STRUCT_COMMON-NEXT: Keyword[self]/CurrNominal: self[#FooStruct#]; name=self
// FOO_STRUCT_COMMON-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
// FOO_STRUCT_COMMON-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc0()[#Void#]{{; name=.+$}}
// FOO_STRUCT_COMMON-NEXT: Decl[InstanceMethod]/CurrNominal: builderFunc1()[#FooStruct#]{{; name=.+$}}
// FOO_STRUCT_COMMON-NEXT: Decl[InstanceMethod]/CurrNominal: builderFunc2({#(a): Int#})[#FooStruct#]{{; name=.+$}}
// FOO_STRUCT_COMMON-NEXT: End completions
// ERROR_COMMON: found code completion token
// ERROR_COMMON-NOT: Begin completions
// LOCALS_COMMON: Begin completions
// LOCALS_COMMON-DAG: Decl[LocalVar]/Local: localInt[#Int#]{{; name=.+$}}
// LOCALS_COMMON-DAG: Decl[LocalVar]/Local: localFooObject[#FooStruct#]{{; name=.+$}}
// LOCALS_COMMON: End completions
func testTypecheckVar1() {
var localFooObject = FooStruct()
localFooObject.#^TC_VAR_1^#
}
func testTypecheckVar2() {
var localFooObject = FooStruct(42)
localFooObject.#^TC_VAR_2^#
}
func testTypecheckVar3() {
// FIXME: We don't display any useful completions here, although we could --
// it is obvious that 'foo' could only have type 'FooStruct'.
//
// In any case, ensure that we don't crash.
var localFooObject = FooStruct(unknown_var)
localFooObject.#^TC_VAR_3^#
}
func testTypecheckVar4() {
var localInt = 42
var localFooObject = FooStruct(localInt)
localFooObject.#^TC_VAR_4^#
}
func testTypecheckVar5() {
var localInt = 42
FooStruct(localInt).#^TC_VAR_5^#
}
func testTypecheckVar6() {
var localInt = 42
FooStruct(localInt).builderFunc1().#^TC_VAR_6^#
}
func testTypecheckVar7() {
// FIXME: We don't display any useful completions here, although we could --
// it is obvious that the expression could only have type 'FooStruct'.
//
// In any case, ensure that we don't crash.
var localInt = 42
FooStruct(localInt).builderFunc2(unknown_var).#^TC_VAR_7^#
}
class TestTypeCheckVarInConstructor1 {
init() {
var localFooObject = FooStruct()
localFooObject.#^TC_VAR_IN_CONSTRUCTOR_1^#
}
}
class TestTypeCheckVarInConstructor2 {
init { // Missing parameters
var localFooObject = FooStruct()
localFooObject.#^TC_VAR_IN_CONSTRUCTOR_2^#
}
}
class TestTypeCheckVarInDestructor1 {
deinit {
var localFooObject = FooStruct()
localFooObject.#^TC_VAR_IN_DESTRUCTOR_1^#
}
}
func testTypecheckVarInIf1() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if true {
#^TC_VAR_IF_1^#
}
}
func testTypecheckVarInIf2() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if true {
} else {
#^TC_VAR_IF_2^#
}
}
func testTypecheckVarInIf3() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if {
#^TC_VAR_IF_3^#
}
}
func testTypecheckVarInIf4() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if {
} else {
#^TC_VAR_IF_4^#
}
}
class TestTypeCheckVarInIfInConstructor1 {
init() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if true {
#^TC_VAR_IF_IN_CONSTRUCTOR_1^#
}
}
}
class TestTypeCheckVarInIfInDestructor1 {
deinit {
var localInt = 42
var localFooObject = FooStruct(localInt)
if true {
#^TC_VAR_IF_IN_DESTRUCTOR_1^#
}
}
}
func testExprPostfixBegin1() {
var localInt = 42
var localFooObject = FooStruct(localInt)
#^EXPR_POSTFIX_BEGIN_1^#
}
func testExprPostfixBegin2() {
var localInt = 42
var localFooObject = FooStruct(localInt)
if true {}
#^EXPR_POSTFIX_BEGIN_2^#
}
class TestTypeCheckExprPostfixBeginInConstructor1 {
init() {
var localInt = 42
var localFooObject = FooStruct(localInt)
#^EXPR_POSTFIX_BEGIN_IN_CONSTRUCTOR_1^#
}
}
class TestTypeCheckExprPostfixBeginInDestructor1 {
deinit {
var localInt = 42
var localFooObject = FooStruct(localInt)
#^EXPR_POSTFIX_BEGIN_IN_DESTRUCTOR_1^#
}
}