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) throws -> [StyleViolation] { let file = File(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 { 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 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) } 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 ) } }