SwiftLint/Tests/SwiftLintFrameworkTests/FileNameRuleTests.swift

107 lines
4.3 KiB
Swift

import SourceKittenFramework
import SwiftLintFramework
import XCTest
private let fixturesDirectory = #file.bridge()
.deletingLastPathComponent.bridge()
.appendingPathComponent("Resources/FileNameRuleFixtures")
class FileNameRuleTests: XCTestCase {
private func validate(fileName: String, excludedOverride: [String]? = nil,
prefixPattern: String? = nil, suffixPattern: String? = nil,
nestedTypeSeparator: String? = nil) throws -> [StyleViolation] {
let file = SwiftLintFile(path: fixturesDirectory.stringByAppendingPathComponent(fileName))!
let rule: FileNameRule
if let excluded = excludedOverride {
rule = try FileNameRule(configuration: ["excluded": excluded])
} else if let prefixPattern = prefixPattern, let suffixPattern = suffixPattern {
rule = try FileNameRule(configuration: ["prefix_pattern": prefixPattern, "suffix_pattern": suffixPattern])
} else if let prefixPattern = prefixPattern {
rule = try FileNameRule(configuration: ["prefix_pattern": prefixPattern])
} else if let suffixPattern = suffixPattern {
rule = try FileNameRule(configuration: ["suffix_pattern": suffixPattern])
} else if let nestedTypeSeparator = nestedTypeSeparator {
rule = try FileNameRule(configuration: ["nested_type_separator": nestedTypeSeparator])
} else {
rule = FileNameRule()
}
return rule.validate(file: file)
}
func testMainDoesntTrigger() {
XCTAssert(try validate(fileName: "main.swift").isEmpty)
}
func testLinuxMainDoesntTrigger() {
XCTAssert(try validate(fileName: "LinuxMain.swift").isEmpty)
}
func testClassNameDoesntTrigger() {
XCTAssert(try validate(fileName: "MyClass.swift").isEmpty)
}
func testStructNameDoesntTrigger() {
XCTAssert(try validate(fileName: "MyStruct.swift").isEmpty)
}
func testExtensionNameDoesntTrigger() {
XCTAssert(try validate(fileName: "NSString+Extension.swift").isEmpty)
}
func testNestedExtensionDoesntTrigger() {
XCTAssert(try validate(fileName: "Notification.Name+Extension.swift").isEmpty)
}
func testNestedTypeSeparatorDoesntTrigger() {
XCTAssert(try validate(fileName: "NotificationName+Extension.swift", nestedTypeSeparator: "").isEmpty)
XCTAssert(try validate(fileName: "Notification__Name+Extension.swift", nestedTypeSeparator: "__").isEmpty)
}
func testWrongNestedTypeSeparatorDoesTrigger() {
XCTAssert(try !validate(fileName: "Notification__Name+Extension.swift", nestedTypeSeparator: ".").isEmpty)
XCTAssert(try !validate(fileName: "NotificationName+Extension.swift", nestedTypeSeparator: "__").isEmpty)
}
func testMisspelledNameDoesTrigger() {
XCTAssertEqual(try validate(fileName: "MyStructf.swift").count, 1)
}
func testMisspelledNameDoesntTriggerWithOverride() {
XCTAssert(try validate(fileName: "MyStructf.swift", excludedOverride: ["MyStructf.swift"]).isEmpty)
}
func testMainDoesTriggerWithoutOverride() {
XCTAssertEqual(try validate(fileName: "main.swift", excludedOverride: []).count, 1)
}
func testCustomSuffixPattern() {
XCTAssert(try validate(fileName: "BoolExtension.swift", suffixPattern: "Extensions?").isEmpty)
XCTAssert(try validate(fileName: "BoolExtensions.swift", suffixPattern: "Extensions?").isEmpty)
XCTAssert(try validate(fileName: "BoolExtensionTests.swift", suffixPattern: "Extensions?|\\+.*").isEmpty)
}
func testCustomPrefixPattern() {
XCTAssert(try validate(fileName: "ExtensionBool.swift", prefixPattern: "Extensions?").isEmpty)
XCTAssert(try validate(fileName: "ExtensionsBool.swift", prefixPattern: "Extensions?").isEmpty)
}
func testCustomPrefixAndSuffixPatterns() {
XCTAssert(
try validate(
fileName: "SLBoolExtension.swift",
prefixPattern: "SL",
suffixPattern: "Extensions?|\\+.*"
).isEmpty
)
XCTAssert(
try validate(
fileName: "ExtensionBool+SwiftLint.swift",
prefixPattern: "Extensions?",
suffixPattern: "Extensions?|\\+.*"
).isEmpty
)
}
}