Files
SwiftLint/Tests/CLITests/RulesFilterTests.swift
Danny Mösch 47335d7f95 Remove tracking of correction positions (#5950)
Report number of corrections per file instead.
2025-04-05 06:04:37 -04:00

180 lines
5.1 KiB
Swift

import SwiftLintFramework
import XCTest
final class RulesFilterTests: XCTestCase {
func testRulesFilterExcludesEnabledRules() {
let allRules = RuleList(
rules: [
RuleMock1.self,
RuleMock2.self,
CorrectableRuleMock.self,
]
)
let enabledRules: [any Rule] = [
RuleMock1(),
CorrectableRuleMock(),
]
let rulesFilter = RulesFilter(
allRules: allRules,
enabledRules: enabledRules
)
let filteredRules = rulesFilter.getRules(excluding: [.enabled])
XCTAssertEqual(
Set(filteredRules.list.keys),
Set([RuleMock2.identifier])
)
}
func testRulesFilterExcludesDisabledRules() {
let allRules = RuleList(
rules: [
RuleMock1.self,
RuleMock2.self,
CorrectableRuleMock.self,
]
)
let enabledRules: [any Rule] = [
RuleMock1(),
CorrectableRuleMock(),
]
let rulesFilter = RulesFilter(
allRules: allRules,
enabledRules: enabledRules
)
let filteredRules = rulesFilter.getRules(excluding: [.disabled])
XCTAssertEqual(
Set(filteredRules.list.keys),
Set([RuleMock1.identifier, CorrectableRuleMock.identifier])
)
}
func testRulesFilterExcludesUncorrectableRules() {
let allRules = RuleList(
rules: [
RuleMock1.self,
RuleMock2.self,
CorrectableRuleMock.self,
]
)
let enabledRules: [any Rule] = [
RuleMock1(),
CorrectableRuleMock(),
]
let rulesFilter = RulesFilter(
allRules: allRules,
enabledRules: enabledRules
)
let filteredRules = rulesFilter.getRules(excluding: [.uncorrectable])
XCTAssertEqual(
Set(filteredRules.list.keys),
Set([CorrectableRuleMock.identifier])
)
}
func testRulesFilterExcludesUncorrectableDisabledRules() {
let allRules = RuleList(
rules: [
RuleMock1.self,
RuleMock2.self,
CorrectableRuleMock.self,
]
)
let enabledRules: [any Rule] = [
RuleMock1(),
CorrectableRuleMock(),
]
let rulesFilter = RulesFilter(
allRules: allRules,
enabledRules: enabledRules
)
let filteredRules = rulesFilter.getRules(excluding: [.disabled, .uncorrectable])
XCTAssertEqual(
Set(filteredRules.list.keys),
Set([CorrectableRuleMock.identifier])
)
}
func testRulesFilterExcludesUncorrectableEnabledRules() {
let allRules = RuleList(
rules: [
RuleMock1.self,
RuleMock2.self,
CorrectableRuleMock.self,
]
)
let enabledRules: [any Rule] = [
RuleMock1()
]
let rulesFilter = RulesFilter(
allRules: allRules,
enabledRules: enabledRules
)
let filteredRules = rulesFilter.getRules(excluding: [.enabled, .uncorrectable])
XCTAssertEqual(
Set(filteredRules.list.keys),
Set([CorrectableRuleMock.identifier])
)
}
}
// MARK: - Mocks
private struct RuleMock1: Rule {
var configuration = SeverityConfiguration<Self>(.warning)
var configurationDescription: some Documentable { RuleConfigurationOption.noOptions }
static let description = RuleDescription(identifier: "RuleMock1", name: "",
description: "", kind: .style)
init() { /* conformance for test */ }
init(configuration _: Any) throws { self.init() }
func validate(file _: SwiftLintFile) -> [StyleViolation] {
[]
}
}
private struct RuleMock2: Rule {
var configuration = SeverityConfiguration<Self>(.warning)
var configurationDescription: some Documentable { RuleConfigurationOption.noOptions }
static let description = RuleDescription(identifier: "RuleMock2", name: "",
description: "", kind: .style)
init() { /* conformance for test */ }
init(configuration _: Any) throws { self.init() }
func validate(file _: SwiftLintFile) -> [StyleViolation] {
[]
}
}
private struct CorrectableRuleMock: CorrectableRule {
var configuration = SeverityConfiguration<Self>(.warning)
var configurationDescription: some Documentable { RuleConfigurationOption.noOptions }
static let description = RuleDescription(identifier: "CorrectableRuleMock", name: "",
description: "", kind: .style)
init() { /* conformance for test */ }
init(configuration _: Any) throws { self.init() }
func validate(file _: SwiftLintFile) -> [StyleViolation] {
[]
}
func correct(file _: SwiftLintFile) -> Int {
0
}
}