Files
SwiftLint/Tests/BuiltInRulesTests/PreferKeyPathRuleTests.swift
2025-08-15 00:30:10 +03:00

42 lines
1.7 KiB
Swift

@testable import SwiftLintBuiltInRules
import TestHelpers
import XCTest
final class PreferKeyPathRuleTests: SwiftLintTestCase {
private static let extendedMode = ["restrict_to_standard_functions": false]
private static let ignoreIdentity = ["ignore_identity_closures": true]
private static let extendedModeAndIgnoreIdentity = [
"restrict_to_standard_functions": false,
"ignore_identity_closures": true,
]
func testIdentityExpressionInSwift6() throws {
try XCTSkipIf(SwiftVersion.current < .six)
let description = PreferKeyPathRule.description
.with(nonTriggeringExamples: [
Example("f.filter { a in b }"),
Example("f.g { $1 }", configuration: Self.extendedMode),
Example("f { $0 }", configuration: Self.extendedModeAndIgnoreIdentity),
Example("f.map { $0 }", configuration: Self.ignoreIdentity),
])
.with(triggeringExamples: [
Example("f.compactMap ↓{ $0 }"),
Example("f.map ↓{ a in a }"),
Example("f.g { $0 }", configuration: Self.extendedMode),
])
.with(corrections: [
Example("f.map ↓{ $0 }"):
Example("f.map(\\.self)"),
Example("f.g { $0 }", configuration: Self.extendedMode):
Example("f.g(\\.self)"),
Example("f { $0 }", configuration: Self.extendedModeAndIgnoreIdentity): // no change with option enabled
Example("f { $0 }"),
Example("f.map { $0 }", configuration: Self.ignoreIdentity): // no change with option enabled
Example("f.map { $0 }"),
])
verifyRule(description)
}
}