1
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=CATCH1 | %FileCheck %s -check-prefix=CATCH1
2
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=THROW1 > %t.throw1
3
- // RUN: %FileCheck %s -check-prefix=THROW1 < %t.throw1
4
- // RUN: %FileCheck %s -check-prefix=THROW1-LOCAL < %t.throw1
5
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=CATCH2 | %FileCheck %s -check-prefix=CATCH2
6
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=THROW2 | %FileCheck %s -check-prefix=THROW2
7
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=CATCH3 | %FileCheck %s -check-prefix=CATCH3
8
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=THROW3 | %FileCheck %s -check-prefix=THROW3
9
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_CATCH1 | %FileCheck %s -check-prefix=CATCH1
10
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_THROW1 | %FileCheck %s -check-prefix=THROW1
11
-
12
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_CATCH2 | %FileCheck %s -check-prefix=CATCH2
13
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_THROW2 | %FileCheck %s -check-prefix=THROW2
14
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_THROW3 | %FileCheck %s -check-prefix=THROW3
15
-
16
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH1 > %t.inside_catch1
17
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch1
18
- // RUN: %FileCheck %s -check-prefix=IMPLICIT_ERROR < %t.inside_catch1
19
-
20
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH2 > %t.inside_catch2
21
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch2
22
- // RUN: %FileCheck %s -check-prefix=EXPLICIT_ERROR_E < %t.inside_catch2
23
-
24
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH3 > %t.inside_catch3
25
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch3
26
- // RUN: %FileCheck %s -check-prefix=EXPLICIT_NSERROR_E < %t.inside_catch3
27
-
28
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH4 > %t.inside_catch4
29
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch4
30
- // RUN: %FileCheck %s -check-prefix=EXPLICIT_ERROR_PAYLOAD_I < %t.inside_catch4
31
-
32
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH5 > %t.inside_catch5
33
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch5
34
- // RUN: %FileCheck %s -check-prefix=EXPLICIT_ERROR_E < %t.inside_catch5
35
- // RUN: %FileCheck %s -check-prefix=NO_ERROR_AND_A < %t.inside_catch5
36
-
37
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH6 > %t.inside_catch6
38
- // RUN: %FileCheck %s -check-prefix=STMT < %t.inside_catch6
39
- // RUN: %FileCheck %s -check-prefix=NO_E < %t.inside_catch6
40
- // RUN: %FileCheck %s -check-prefix=NO_ERROR_AND_A < %t.inside_catch6
41
-
42
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH_ERR_DOT1 | %FileCheck %s -check-prefix=ERROR_DOT
43
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH_ERR_DOT2 | %FileCheck %s -check-prefix=ERROR_DOT
44
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH_ERR_DOT3 | %FileCheck %s -check-prefix=NSERROR_DOT
45
- // RUNFIXME: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=INSIDE_CATCH_ERR_DOT4 | %FileCheck %s -check-prefix=INT_DOT
46
-
47
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_INSIDE_CATCH1 > %t.top_level_inside_catch1
48
- // RUN: %FileCheck %s -check-prefix=STMT < %t.top_level_inside_catch1
49
- // RUN: %FileCheck %s -check-prefix=IMPLICIT_ERROR < %t.top_level_inside_catch1
50
-
51
- // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_INSIDE_CATCH_ERR_DOT1 | %FileCheck %s -check-prefix=ERROR_DOT
1
+ // RUN: %empty-directory(%t/batch-code-completion)
2
+ // RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -batch-code-completion -source-filename %s -filecheck %raw-FileCheck -completion-output-dir %t/batch-code-completion
52
3
53
4
// REQUIRES: objc_interop
54
5
@@ -71,10 +22,10 @@ func getNSError() -> NSError { return NSError(domain: "", code: 1, userInfo: [:]
71
22
func test001( ) {
72
23
do { } catch #^CATCH1 ^#
73
24
74
- // CATCH1-DAG: Decl[Enum]/CurrModule: Error4[#Error4#]; name=Error4{{$}}
75
- // CATCH1-DAG: Decl[Class]/CurrModule: Error3[#Error3#]; name=Error3{{$}}
76
- // CATCH1-DAG: Decl[Class]/CurrModule: Error2[#Error2#]; name=Error2{{$}}
77
- // CATCH1-DAG: Decl[Class]/CurrModule: Error1[#Error1#]; name=Error1{{$}}
25
+ // CATCH1-DAG: Decl[Enum]/CurrModule/TypeRelation[Convertible]: Error4[#Error4#]; name=Error4{{$}}
26
+ // CATCH1-DAG: Decl[Class]/CurrModule/TypeRelation[Convertible]: Error3[#Error3#]; name=Error3{{$}}
27
+ // CATCH1-DAG: Decl[Class]/CurrModule/TypeRelation[Convertible]: Error2[#Error2#]; name=Error2{{$}}
28
+ // CATCH1-DAG: Decl[Class]/CurrModule/TypeRelation[Convertible]: Error1[#Error1#]; name=Error1{{$}}
78
29
// CATCH1-DAG: Keyword[let]/None: let{{; name=.+$}}
79
30
// CATCH1-DAG: Decl[Class]/CurrModule: NoneError1[#NoneError1#]; name=NoneError1{{$}}
80
31
// CATCH1-DAG: Decl[Class]/OtherModule[Foundation]/IsSystem: NSError[#NSError#]{{; name=.+$}}
@@ -84,7 +35,7 @@ func test002() {
84
35
let text = " NonError "
85
36
let e1 = Error1 ( )
86
37
let e2 = Error2 ( )
87
- throw #^THROW1 ^#
38
+ throw #^THROW1 ? check = THROW1 , THROW 1 - LOCAL ^#
88
39
89
40
// THROW1-DAG: Decl[Enum]/CurrModule/TypeRelation[Convertible]: Error4[#Error4#]; name=Error4{{$}}
90
41
// THROW1-DAG: Decl[Class]/CurrModule/TypeRelation[Convertible]: Error3[#Error3#]; name=Error3{{$}}
@@ -93,45 +44,42 @@ func test002() {
93
44
// THROW1-DAG: Decl[Protocol]/CurrModule/Flair[RareType]/TypeRelation[Convertible]: ErrorPro1[#ErrorPro1#]; name=ErrorPro1{{$}}
94
45
// THROW1-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Convertible]: getError1()[#Error1#]{{; name=.+$}}
95
46
// THROW1-DAG: Decl[FreeFunction]/CurrModule/TypeRelation[Convertible]: getNSError()[#NSError#]{{; name=.+$}}
47
+ // THROW1-DAG: Decl[Class]/CurrModule: NoneError1[#NoneError1#]; name=NoneError1{{$}}
96
48
97
- // If we could prove that there is no way to get to an Error value by
98
- // starting from these, we could remove them. But that may be infeasible in
99
- // the presence of overloaded operators.
100
- // THROW1-DAG: Decl[Class]/CurrModule: NoneError1[#NoneError1#]; name=NoneError1{{$}}
101
49
// THROW1-LOCAL-DAG: Decl[LocalVar]/Local: text[#String#]; name=text{{$}}
102
50
// THROW1-LOCAL-DAG: Decl[LocalVar]/Local/TypeRelation[Convertible]: e1[#Error1#]; name=e1{{$}}
103
51
// THROW1-LOCAL-DAG: Decl[LocalVar]/Local/TypeRelation[Convertible]: e2[#Error2#]; name=e2{{$}}
104
52
}
105
53
106
54
func test003( ) {
107
55
do { } catch Error4 . #^CATCH2 ^#
108
- // CATCH2: Decl[EnumElement]/CurrNominal: E1[#Error4#]{{; name=.+$}}
109
- // CATCH2: Decl[EnumElement]/CurrNominal: E2({#Int32#})[#Error4#]{{; name=.+$}}
56
+ // CATCH2-DAG : Decl[EnumElement]/CurrNominal: E1[#Error4#]{{; name=.+$}}
57
+ // CATCH2-DAG : Decl[EnumElement]/CurrNominal: E2({#Int32#})[#Error4#]{{; name=.+$}}
110
58
}
111
59
112
60
func test004( ) {
113
61
throw Error4. #^THROW2^#
114
- // THROW2: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E1[#Error4#]{{; name=.+$}}
115
- // THROW2: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E2({#Int32#})[#Error4#]{{; name=.+$}}
62
+ // THROW2-DAG : Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E1[#Error4#]{{; name=.+$}}
63
+ // THROW2-DAG : Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E2({#Int32#})[#Error4#]{{; name=.+$}}
116
64
}
117
65
118
66
func test005( ) {
119
67
do { } catch Error4 . E2# ^CATCH3 ^#
120
- // CATCH3: Pattern/CurrModule/Flair[ArgLabels]: ({#Int32#})[#Error4#]{{; name=.+$}}
68
+ // CATCH3-DAG : Pattern/CurrModule/Flair[ArgLabels]: ({#Int32#})[#Error4#]{{; name=.+$}}
121
69
}
122
70
123
71
func testInvalid( ) {
124
72
try throw Error4 . #^THROW3^#
125
- // THROW3: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E1[#Error4#]{{; name=.+$}}
126
- // THROW3: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E2({#Int32#})[#Error4#]{{; name=.+$}}
73
+ // THROW3-DAG : Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E1[#Error4#]{{; name=.+$}}
74
+ // THROW3-DAG : Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: E2({#Int32#})[#Error4#]{{; name=.+$}}
127
75
}
128
76
129
77
//===--- Top-level throw/catch
130
- do { } catch #^TOP_LEVEL_CATCH1 ^# { }
131
- throw #^TOP_LEVEL_THROW1 ^#
132
- do { } catch Error4 . #^TOP_LEVEL_CATCH2 ^# { }
133
- throw Error4. #^TOP_LEVEL_THROW2^#
134
- try throw Error4 . #^TOP_LEVEL_THROW3^#
78
+ do { } catch #^TOP_LEVEL_CATCH1? check = CATCH 1 ^# { }
79
+ throw #^TOP_LEVEL_THROW1 ? check = THROW1 ^#
80
+ do { } catch Error4 . #^TOP_LEVEL_CATCH2? check = CATCH 2 ^# { }
81
+ throw Error4. #^TOP_LEVEL_THROW2? check = THROW2 ^#
82
+ try throw Error4 . #^TOP_LEVEL_THROW3? check = THROW3 ^#
135
83
136
84
//===--- Inside catch body
137
85
@@ -145,38 +93,37 @@ try throw Error4.#^TOP_LEVEL_THROW3^#
145
93
func test006( ) {
146
94
do {
147
95
} catch {
148
- #^INSIDE_CATCH1 ^#
96
+ #^INSIDE_CATCH1 ? check = STMT , IMPLICIT_ERROR ^#
149
97
}
150
- // IMPLICIT_ERROR: Decl[LocalVar]/Local: error[#any Error#]; name=error
98
+ // IMPLICIT_ERROR-DAG : Decl[LocalVar]/Local: error[#any Error#]; name=error
151
99
}
152
100
func test007( ) {
153
101
do {
154
102
} catch let e {
155
- #^INSIDE_CATCH2 ^#
103
+ #^INSIDE_CATCH2 ? check = STMT , EXPLICIT_ERROR_E ^#
156
104
}
157
- // EXPLICIT_ERROR_E: Decl[LocalVar]/Local: e[#any Error#]; name=e
105
+ // EXPLICIT_ERROR_E-DAG : Decl[LocalVar]/Local: e[#any Error#]; name=e
158
106
}
159
107
func test008( ) {
160
108
do {
161
109
} catch let e as NSError {
162
- #^INSIDE_CATCH3 ^#
110
+ #^INSIDE_CATCH3 ? check = STMT , EXPLICIT_NSERROR_E ^#
163
111
}
164
- // EXPLICIT_NSERROR_E: Decl[LocalVar]/Local: e[#NSError#]; name=e
112
+ // EXPLICIT_NSERROR_E-DAG : Decl[LocalVar]/Local: e[#NSError#]; name=e
165
113
}
166
114
func test009( ) {
167
115
do {
168
116
} catch Error4 . E2( let i) {
169
- #^INSIDE_CATCH4 ^#
117
+ #^INSIDE_CATCH4 ? check = STMT , EXPLICIT_ERROR_PAYLOAD_I ^#
170
118
}
171
-
172
119
// FIXME: we're getting parentheses around the type when it's unnamed...
173
- // EXPLICIT_ERROR_PAYLOAD_I: Decl[LocalVar]/Local: i[#<<error type>> #]; name=i
120
+ // EXPLICIT_ERROR_PAYLOAD_I-DAG : Decl[LocalVar]/Local: i[#(Int32) #]; name=i
174
121
}
175
122
func test010( ) {
176
123
do {
177
124
} catch let awesomeError {
178
125
} catch let e {
179
- #^INSIDE_CATCH5 ^#
126
+ #^INSIDE_CATCH5 ? check = STMT , EXPLICIT_ERROR_E;check = NO_ERROR_AND_A ^#
180
127
} catch { }
181
128
// NO_ERROR_AND_A-NOT: awesomeError
182
129
// NO_ERROR_AND_A-NOT: Decl[LocalVar]/Local: error
@@ -186,26 +133,26 @@ func test011() {
186
133
} catch let awesomeError {
187
134
} catch let excellentError {
188
135
} catch { }
189
- #^INSIDE_CATCH6 ^#
136
+ #^INSIDE_CATCH6 ? check = STMT;check = NO_ERROR_AND_A , NO_E ^#
190
137
// NO_E-NOT: excellentError
191
138
}
192
139
func test012( ) {
193
140
do {
194
141
} catch {
195
- error. #^INSIDE_CATCH_ERR_DOT1^#
142
+ error. #^INSIDE_CATCH_ERR_DOT1? check = ERROR_DOT ^#
196
143
}
197
144
}
198
- // ERROR_DOT: Keyword[self]/CurrNominal: self[#any Error#]; name=self
145
+ // ERROR_DOT-DAG : Keyword[self]/CurrNominal: self[#any Error#]; name=self
199
146
func test013( ) {
200
147
do {
201
148
} catch let e {
202
- e. #^INSIDE_CATCH_ERR_DOT2^#
149
+ e. #^INSIDE_CATCH_ERR_DOT2? check = ERROR_DOT ^#
203
150
}
204
151
}
205
152
func test014( ) {
206
153
do {
207
154
} catch let e as NSError {
208
- e. #^INSIDE_CATCH_ERR_DOT3^#
155
+ e. #^INSIDE_CATCH_ERR_DOT3? check = NSERROR_DOT ^#
209
156
}
210
157
// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: domain[#String#]; name=domain
211
158
// NSERROR_DOT-DAG: Decl[InstanceVar]/CurrNominal/IsSystem: code[#Int#]; name=code
@@ -218,7 +165,7 @@ func test014() {
218
165
func test015( ) {
219
166
do {
220
167
} catch Error4 . E2( let i) where i == 2 {
221
- i. #^INSIDE_CATCH_ERR_DOT4^#
168
+ i. #^INSIDE_CATCH_ERR_DOT4? check = INT_DOT ^#
222
169
}
223
170
}
224
171
// Check that we can complete on the bound value; Not exhaustive..
@@ -228,9 +175,18 @@ func test015() {
228
175
//===--- Inside catch body top-level
229
176
do {
230
177
} catch {
231
- #^TOP_LEVEL_INSIDE_CATCH1 ^#
178
+ #^TOP_LEVEL_INSIDE_CATCH1? check = STMT , IMPLICIT _ERROR ^#
232
179
}
233
180
do {
234
181
} catch {
235
- error. #^TOP_LEVEL_INSIDE_CATCH_ERR_DOT1^#
182
+ error. #^TOP_LEVEL_INSIDE_CATCH_ERR_DOT1? check= ERROR_DOT^#
183
+ }
184
+
185
+ func canThrowError4( ) throws ( Error4) { }
186
+ func test016( ) {
187
+ do {
188
+ try canThrowError4 ( )
189
+ } catch . E2( let i) {
190
+ i. #^INSIDE_CATCH_TYPEDERR_DOT? check= INT_DOT^#
191
+ }
236
192
}
0 commit comments