@testable import SwiftLintBuiltInRules import TestHelpers final class GenericTypeNameRuleTests: SwiftLintTestCase { func testGenericTypeNameWithExcluded() { let baseDescription = GenericTypeNameRule.description let nonTriggeringExamples = baseDescription.nonTriggeringExamples + [ Example("func foo {}"), Example("func foo {}"), Example("func foo {}"), ] let triggeringExamples = baseDescription.triggeringExamples + [ Example("func foo {}"), Example("func foo {}"), ] let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples, triggeringExamples: triggeringExamples) verifyRule(description, ruleConfiguration: ["excluded": ["apple", "some.*", ".*st\\d+.*"]]) } func testGenericTypeNameWithAllowedSymbols() { let baseDescription = GenericTypeNameRule.description let nonTriggeringExamples = baseDescription.nonTriggeringExamples + [ Example("func foo() {}"), Example("func foo(param: U%) -> T$ {}"), Example("typealias StringDictionary = Dictionary"), Example("class Foo {}"), Example("struct Foo {}"), Example("enum Foo {}"), ] let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples) verifyRule(description, ruleConfiguration: ["allowed_symbols": ["$", "%"]]) } func testGenericTypeNameWithAllowedSymbolsAndViolation() { let baseDescription = GenericTypeNameRule.description let triggeringExamples = [ Example("func foo<↓T_$>() {}") ] let description = baseDescription.with(triggeringExamples: triggeringExamples) verifyRule(description, ruleConfiguration: ["allowed_symbols": ["$", "%"]]) } func testGenericTypeNameWithIgnoreStartWithLowercase() { let baseDescription = GenericTypeNameRule.description let triggeringExamplesToRemove = [ Example("func foo<↓type>() {}"), Example("class Foo<↓type> {}"), Example("struct Foo<↓type> {}"), Example("enum Foo<↓type> {}"), ] let nonTriggeringExamples = baseDescription.nonTriggeringExamples + triggeringExamplesToRemove.removingViolationMarkers() let triggeringExamples = baseDescription.triggeringExamples .filter { !triggeringExamplesToRemove.contains($0) } let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples) .with(triggeringExamples: triggeringExamples) verifyRule(description, ruleConfiguration: ["validates_start_with_lowercase": "off"]) } }