Files
swift-mirror/test/IDE/complete_then_stmt.swift
Daniel Rodríguez Troitiño ba68faaed5 [test] Mark tests that use experimental/upcoming features as such
Find all the usages of `--enable-experimental-feature` or
`--enable-upcoming-feature` in the tests and replace some of the
`REQUIRES: asserts` to use `REQUIRES: swift-feature-Foo` instead, which
should correctly apply to depending on the asserts/noasserts mode of the
toolchain for each feature.

Remove some comments that talked about enabling asserts since they don't
apply anymore (but I might had miss some).

All this was done with an automated script, so some formatting weirdness
might happen, but I hope I fixed most of those.

There might be some tests that were `REQUIRES: asserts` that might run
in `noasserts` toolchains now. This will normally be because their
feature went from experimental to upcoming/base and the tests were not
updated.
2024-11-02 11:46:46 -07:00

83 lines
1.8 KiB
Swift

// RUN: %batch-code-completion -enable-experimental-feature ThenStatements -debug-forbid-typecheck-prefix FORBIDDEN
// REQUIRES: swift_feature_ThenStatements
enum E {
case e
case f(Int)
}
struct NO {
// Triggering interface type computation of this will cause an assert to fire,
// ensuring we don't attempt to type-check any references to it.
static var TYPECHECK = FORBIDDEN
}
func testThenStmt1() -> E {
if .random() {
()
then .#^DOT1?check=DOT^#
} else {
.e
}
}
func testThenStmt2() -> E {
switch Bool.random() {
case true:
.e
case false:
()
then .#^DOT2?check=DOT^#
}
}
func testThenStmt3() throws -> E {
switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
()
then .#^DOT3?check=DOT^#
}
}
func testThenStmt4() throws -> E {
switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
then #^NODOT1?check=NODOT^#
}
}
// NODOT: Begin completions
// NODOT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: .e[#E#]; name=e
// NODOT-DAG: Decl[EnumElement]/CurrNominal/TypeRelation[Convertible]: .f({#Int#})[#E#]; name=f()
struct S {
var e: E
}
func testThenStmt5() throws -> E {
let x = switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
let s = S(e: .e)
then s.#^SDOT1?check=SDOT^#
}
return x
}
// SDOT: Begin completions, 2 items
// SDOT-DAG: Keyword[self]/CurrNominal: self[#S#]; name=self
// SDOT-DAG: Decl[InstanceVar]/CurrNominal: e[#E#]; name=e
// DOT: Begin completions, 2 items
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: e[#E#]; name=e
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: f({#Int#})[#E#]; name=f()