Files
SwiftLint/Tests/BuiltInRulesTests/FunctionBodyLengthRuleTests.swift
2025-12-07 08:11:08 -05:00

74 lines
2.3 KiB
Swift

@testable import SwiftLintBuiltInRules
import TestHelpers
import XCTest
final class FunctionBodyLengthRuleTests: SwiftLintTestCase {
func testWarning() {
let example = Example("""
func f() {
let x = 0
let y = 1
let z = 2
}
""")
XCTAssertEqual(
violations(example, configuration: ["warning": 2, "error": 4]),
[
StyleViolation(
ruleDescription: FunctionBodyLengthRule.description,
severity: .warning,
location: Location(file: nil, line: 1, character: 1),
reason: """
Function body should span 2 lines or less excluding comments and \
whitespace: currently spans 3 lines
"""
),
]
)
}
func testError() {
let example = Example("""
func f() {
let x = 0
let y = 1
let z = 2
}
""")
XCTAssertEqual(
violations(example, configuration: ["warning": 1, "error": 2]),
[
StyleViolation(
ruleDescription: FunctionBodyLengthRule.description,
severity: .error,
location: Location(file: nil, line: 1, character: 1),
reason: """
Function body should span 2 lines or less excluding comments and \
whitespace: currently spans 3 lines
"""
),
]
)
}
func testViolationMessages() {
let types = FunctionBodyLengthRule.description.triggeringExamples.flatMap {
self.violations($0, configuration: ["warning": 2])
}.compactMap {
$0.reason.split(separator: " ", maxSplits: 1).first
}
XCTAssertEqual(
types,
["Function", "Deinitializer", "Initializer", "Subscript", "Accessor", "Accessor", "Accessor"]
)
}
private func violations(_ example: Example, configuration: Any? = nil) -> [StyleViolation] {
let config = makeConfig(configuration, FunctionBodyLengthRule.identifier)!
return TestHelpers.violations(example, config: config)
}
}