1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
import _SwiftFormatTestSupport
@_spi(Rules) import SwiftFormat
class FullyIndirectEnumTests: LintOrFormatRuleTestCase {
func testAllIndirectCases() {
assertFormatting(
FullyIndirectEnum.self,
input: """
// Comment 1
public 1️⃣enum DependencyGraphNode {
internal 2️⃣indirect case userDefined(dependencies: [DependencyGraphNode])
// Comment 2
3️⃣indirect case synthesized(dependencies: [DependencyGraphNode])
4️⃣indirect case other(dependencies: [DependencyGraphNode])
var x: Int
}
""",
expected: """
// Comment 1
public indirect enum DependencyGraphNode {
internal case userDefined(dependencies: [DependencyGraphNode])
// Comment 2
case synthesized(dependencies: [DependencyGraphNode])
case other(dependencies: [DependencyGraphNode])
var x: Int
}
""",
findings: [
FindingSpec(
"1️⃣",
message: "declare enum 'DependencyGraphNode' itself as indirect when all cases are indirect",
notes: [
NoteSpec("2️⃣", message: "remove 'indirect' here"),
NoteSpec("3️⃣", message: "remove 'indirect' here"),
NoteSpec("4️⃣", message: "remove 'indirect' here"),
]
),
]
)
}
func testAllIndirectCasesWithAttributes() {
assertFormatting(
FullyIndirectEnum.self,
input: """
// Comment 1
public 1️⃣enum DependencyGraphNode {
@someAttr internal 2️⃣indirect case userDefined(dependencies: [DependencyGraphNode])
// Comment 2
@someAttr 3️⃣indirect case synthesized(dependencies: [DependencyGraphNode])
@someAttr 4️⃣indirect case other(dependencies: [DependencyGraphNode])
var x: Int
}
""",
expected: """
// Comment 1
public indirect enum DependencyGraphNode {
@someAttr internal case userDefined(dependencies: [DependencyGraphNode])
// Comment 2
@someAttr case synthesized(dependencies: [DependencyGraphNode])
@someAttr case other(dependencies: [DependencyGraphNode])
var x: Int
}
""",
findings: [
FindingSpec(
"1️⃣",
message: "declare enum 'DependencyGraphNode' itself as indirect when all cases are indirect",
notes: [
NoteSpec("2️⃣", message: "remove 'indirect' here"),
NoteSpec("3️⃣", message: "remove 'indirect' here"),
NoteSpec("4️⃣", message: "remove 'indirect' here"),
]
),
]
)
}
func testNotAllIndirectCases() {
let input = """
public enum CompassPoint {
case north
indirect case south
case east
case west
}
"""
assertFormatting(FullyIndirectEnum.self, input: input, expected: input, findings: [])
}
func testAlreadyIndirectEnum() {
let input = """
indirect enum CompassPoint {
case north
case south
case east
case west
}
"""
assertFormatting(FullyIndirectEnum.self, input: input, expected: input, findings: [])
}
func testCaselessEnum() {
let input = """
public enum Constants {
public static let foo = 5
public static let bar = "bar"
}
"""
assertFormatting(FullyIndirectEnum.self, input: input, expected: input, findings: [])
}
}
|