mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
117 lines
4.1 KiB
Swift
117 lines
4.1 KiB
Swift
//
|
|
// CustomRulesTests.swift
|
|
// SwiftLint
|
|
//
|
|
// Created by Scott Hoyt on 1/21/16.
|
|
// Copyright © 2016 Realm. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import XCTest
|
|
@testable import SwiftLintFramework
|
|
import SourceKittenFramework
|
|
|
|
class CustomRulesTests: XCTestCase {
|
|
|
|
func testCustomRuleConfigurationSetsCorrectly() {
|
|
let configDict = ["my_custom_rule": ["name": "MyCustomRule",
|
|
"message": "Message",
|
|
"regex": "regex",
|
|
"match_kinds": "comment",
|
|
"severity": "error"]]
|
|
var comp = RegexConfiguration(identifier: "my_custom_rule")
|
|
comp.name = "MyCustomRule"
|
|
comp.message = "Message"
|
|
comp.regex = .forcePattern("regex")
|
|
comp.severityConfiguration = SeverityConfiguration(.error)
|
|
comp.matchKinds = Set([SyntaxKind.comment])
|
|
var compRules = CustomRulesConfiguration()
|
|
compRules.customRuleConfigurations = [comp]
|
|
do {
|
|
var configuration = CustomRulesConfiguration()
|
|
try configuration.applyConfiguration(configDict)
|
|
XCTAssertEqual(configuration, compRules)
|
|
} catch {
|
|
XCTFail("Did not configure correctly")
|
|
}
|
|
}
|
|
|
|
func testCustomRuleConfigurationThrows() {
|
|
let config = 17
|
|
var customRulesConfig = CustomRulesConfiguration()
|
|
checkError(ConfigurationError.unknownConfiguration) {
|
|
try customRulesConfig.applyConfiguration(config)
|
|
}
|
|
}
|
|
|
|
func testCustomRules() {
|
|
let (regexConfig, customRules) = getCustomRules()
|
|
|
|
let file = File(contents: "// My file with\n// a pattern")
|
|
XCTAssertEqual(customRules.validateFile(file),
|
|
[StyleViolation(ruleDescription: regexConfig.description,
|
|
severity: .warning,
|
|
location: Location(file: nil, line: 2, character: 6),
|
|
reason: regexConfig.message)])
|
|
}
|
|
|
|
func testLocalDisableCustomRule() {
|
|
let (_, customRules) = getCustomRules()
|
|
let file = File(contents: "//swiftlint:disable custom \n// file with a pattern")
|
|
XCTAssertEqual(customRules.validateFile(file), [])
|
|
}
|
|
|
|
func testCustomRulesIncludedDefault() {
|
|
// Violation detected when included is omitted.
|
|
let (_, customRules) = getCustomRules()
|
|
let violations = customRules.validateFile(getTestTextFile())
|
|
XCTAssertEqual(violations.count, 1)
|
|
}
|
|
|
|
func testCustomRulesIncludedExcludesFile() {
|
|
var (regexConfig, customRules) = getCustomRules(["included": "\\.yml$"])
|
|
|
|
var customRuleConfiguration = CustomRulesConfiguration()
|
|
customRuleConfiguration.customRuleConfigurations = [regexConfig]
|
|
customRules.configuration = customRuleConfiguration
|
|
|
|
let violations = customRules.validateFile(getTestTextFile())
|
|
XCTAssertEqual(violations.count, 0)
|
|
}
|
|
|
|
func getCustomRules(_ extraConfig: [String:String] = [:]) -> (RegexConfiguration, CustomRules) {
|
|
var config = ["regex": "pattern",
|
|
"match_kinds": "comment"]
|
|
extraConfig.forEach { config[$0] = $1 }
|
|
|
|
var regexConfig = RegexConfiguration(identifier: "custom")
|
|
do {
|
|
try regexConfig.applyConfiguration(config)
|
|
} catch {
|
|
XCTFail("Failed regex config")
|
|
}
|
|
|
|
var customRuleConfiguration = CustomRulesConfiguration()
|
|
customRuleConfiguration.customRuleConfigurations = [regexConfig]
|
|
|
|
var customRules = CustomRules()
|
|
customRules.configuration = customRuleConfiguration
|
|
return (regexConfig, customRules)
|
|
}
|
|
|
|
func getTestTextFile() -> File {
|
|
#if SWIFT_PACKAGE
|
|
let path: String = "Tests/SwiftLintFrameworkTests/Resources/test.txt"
|
|
.absolutePathRepresentation()
|
|
return File(path: path)!
|
|
#else
|
|
let testBundle = Bundle(for: type(of: self))
|
|
let path: String? = testBundle.path(forResource: "test", ofType: "txt")
|
|
if path != nil {
|
|
return File(path: path!)!
|
|
}
|
|
#endif
|
|
fatalError("Could not load test.txt")
|
|
}
|
|
}
|