File: OneCasePerLineTests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (131 lines) | stat: -rw-r--r-- 4,064 bytes parent folder | download
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import _SwiftFormatTestSupport

@_spi(Rules) import SwiftFormat

final class OneCasePerLineTests: LintOrFormatRuleTestCase {

  // The inconsistent leading whitespace in the expected text is intentional. This transform does
  // not attempt to preserve leading indentation since the pretty printer will correct it when
  // running the full formatter.

  func testInvalidCasesOnLine() {
    assertFormatting(
      OneCasePerLine.self,
      input: """
        public enum Token {
          case arrow
          case comma, 1️⃣identifier(String), semicolon, 2️⃣stringSegment(String)
          case period
          case 3️⃣ifKeyword(String), 4️⃣forKeyword(String)
          indirect case guardKeyword, elseKeyword, 5️⃣contextualKeyword(String)
          var x: Bool
          case leftParen, 6️⃣rightParen = ")", leftBrace, 7️⃣rightBrace = "}"
        }
        """,
      expected: """
        public enum Token {
          case arrow
          case comma
        case identifier(String)
        case semicolon
        case stringSegment(String)
          case period
          case ifKeyword(String)
        case forKeyword(String)
          indirect case guardKeyword, elseKeyword
        indirect case contextualKeyword(String)
          var x: Bool
          case leftParen
        case rightParen = ")"
        case leftBrace
        case rightBrace = "}"
        }
        """,
      findings: [
        FindingSpec("1️⃣", message: "move 'identifier' to its own 'case' declaration"),
        FindingSpec("2️⃣", message: "move 'stringSegment' to its own 'case' declaration"),
        FindingSpec("3️⃣", message: "move 'ifKeyword' to its own 'case' declaration"),
        FindingSpec("4️⃣", message: "move 'forKeyword' to its own 'case' declaration"),
        FindingSpec("5️⃣", message: "move 'contextualKeyword' to its own 'case' declaration"),
        FindingSpec("6️⃣", message: "move 'rightParen' to its own 'case' declaration"),
        FindingSpec("7️⃣", message: "move 'rightBrace' to its own 'case' declaration"),
      ]
    )
  }

  func testElementOrderIsPreserved() {
    assertFormatting(
      OneCasePerLine.self,
      input: """
        enum Foo: Int {
          case 1️⃣a = 0, b, c, d
        }
        """,
      expected: """
        enum Foo: Int {
          case a = 0
        case b, c, d
        }
        """,
      findings: [
        FindingSpec("1️⃣", message: "move 'a' to its own 'case' declaration"),
      ]
    )
  }

  func testCommentsAreNotRepeated() {
    assertFormatting(
      OneCasePerLine.self,
      input: """
        enum Foo: Int {
          /// This should only be above `a`.
          case 1️⃣a = 0, b, c, d
          // This should only be above `e`.
          case e, 2️⃣f = 100
        }
        """,
      expected: """
        enum Foo: Int {
          /// This should only be above `a`.
          case a = 0
        case b, c, d
          // This should only be above `e`.
          case e
        case f = 100
        }
        """,
      findings: [
        FindingSpec("1️⃣", message: "move 'a' to its own 'case' declaration"),
        FindingSpec("2️⃣", message: "move 'f' to its own 'case' declaration"),
      ]
    )
  }

  func testAttributesArePropagated() {
    assertFormatting(
      OneCasePerLine.self,
      input: """
        enum Foo {
          @someAttr case 1️⃣a(String), b, c, d
          case e, 2️⃣f(Int)
          @anotherAttr case g, 3️⃣h(Float)
        }
        """,
      expected: """
        enum Foo {
          @someAttr case a(String)
        @someAttr case b, c, d
          case e
        case f(Int)
          @anotherAttr case g
        @anotherAttr case h(Float)
        }
        """,
      findings: [
        FindingSpec("1️⃣", message: "move 'a' to its own 'case' declaration"),
        FindingSpec("2️⃣", message: "move 'f' to its own 'case' declaration"),
        FindingSpec("3️⃣", message: "move 'h' to its own 'case' declaration"),
      ]
    )
  }
}