Files
SwiftLint/Tests/SwiftLintFrameworkTests/LineLengthRuleTests.swift
T
Zev Eisenberg fcf848608e Add Inline test failure messages (#3040)
* Add Example wrapper in order to display test failures inline when running in Xcode.
* Stop using Swift 5.1-only features so we can compile on Xcode 10.2.
* Wrap strings in Example.
* Add Changelog entry.
* Wrap all examples in Example struct.
* Better and more complete capturing of line numbers.
* Fix broken test.
* Better test traceability.
* Address or disable linting warnings.
* Add documentation comments.
* Disable linter for a few cases.
* Limit mutability and add copy-and-mutate utility functions.
* Limit scope of mutability.
2020-02-02 10:35:37 +02:00

96 lines
5.0 KiB
Swift

@testable import SwiftLintFramework
import XCTest
class LineLengthRuleTests: XCTestCase {
private let longFunctionDeclarations = [
Example("public func superDuperLongFunctionDeclaration(a: String, b: String, " +
"c: String, d: String, e: String, f: String, g: String, h: String, i: String, " +
"j: String, k: String, l: String, m: String, n: String, o: String, p: String, " +
"q: String, r: String, s: String, t: String, u: String, v: String, w: String, " +
"x: String, y: String, z: String) {\n"),
Example("func superDuperLongFunctionDeclaration(a: String, b: String, " +
"c: String, d: String, e: String, f: String, g: String, h: String, i: String, " +
"j: String, k: String, l: String, m: String, n: String, o: String, p: String, " +
"q: String, r: String, s: String, t: String, u: String, v: String, w: String, " +
"x: String, y: String, z: String) {\n")
]
private let longComment = Example(String(repeating: "/", count: 121) + "\n")
private let longBlockComment = Example("/*" + String(repeating: " ", count: 121) + "*/\n")
private let declarationWithTrailingLongComment = Example("let foo = 1 " + String(repeating: "/", count: 121) + "\n")
private let interpolatedString = Example("print(\"\\(value)" + String(repeating: "A", count: 113) + "\" )\n")
private let plainString = Example("print(\"" + String(repeating: "A", count: 121) + ")\"\n")
func testLineLength() {
verifyRule(LineLengthRule.description, commentDoesntViolate: false, stringDoesntViolate: false)
}
func testLineLengthWithIgnoreFunctionDeclarationsEnabled() {
let baseDescription = LineLengthRule.description
let nonTriggeringExamples = baseDescription.nonTriggeringExamples + longFunctionDeclarations
let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples)
verifyRule(description, ruleConfiguration: ["ignores_function_declarations": true],
commentDoesntViolate: false, stringDoesntViolate: false)
}
func testLineLengthWithIgnoreCommentsEnabled() {
let baseDescription = LineLengthRule.description
let triggeringExamples = longFunctionDeclarations + [declarationWithTrailingLongComment]
let nonTriggeringExamples = [longComment, longBlockComment]
let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples)
.with(triggeringExamples: triggeringExamples)
verifyRule(description, ruleConfiguration: ["ignores_comments": true],
commentDoesntViolate: false, stringDoesntViolate: false, skipCommentTests: true)
}
func testLineLengthWithIgnoreURLsEnabled() {
let url = "https://github.com/realm/SwiftLint"
let triggeringLines = [Example(String(repeating: "/", count: 121) + "\(url)\n")]
let nonTriggeringLines = [
Example("\(url) " + String(repeating: "/", count: 118) + " \(url)\n"),
Example("\(url)/" + String(repeating: "a", count: 120))
]
let baseDescription = LineLengthRule.description
let nonTriggeringExamples = baseDescription.nonTriggeringExamples + nonTriggeringLines
let triggeringExamples = baseDescription.triggeringExamples + triggeringLines
let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples)
.with(triggeringExamples: triggeringExamples)
verifyRule(description, ruleConfiguration: ["ignores_urls": true],
commentDoesntViolate: false, stringDoesntViolate: false)
}
func testLineLengthWithIgnoreInterpolatedStringsTrue() {
let triggeringLines = [plainString]
let nonTriggeringLines = [interpolatedString]
let baseDescription = LineLengthRule.description
let nonTriggeringExamples = baseDescription.nonTriggeringExamples + nonTriggeringLines
let triggeringExamples = baseDescription.triggeringExamples + triggeringLines
let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples)
.with(triggeringExamples: triggeringExamples)
verifyRule(description, ruleConfiguration: ["ignores_interpolated_strings": true],
commentDoesntViolate: false, stringDoesntViolate: false)
}
func testLineLengthWithIgnoreInterpolatedStringsFalse() {
let triggeringLines = [plainString, interpolatedString]
let baseDescription = LineLengthRule.description
let nonTriggeringExamples = baseDescription.nonTriggeringExamples
let triggeringExamples = baseDescription.triggeringExamples + triggeringLines
let description = baseDescription.with(nonTriggeringExamples: nonTriggeringExamples)
.with(triggeringExamples: triggeringExamples)
verifyRule(description, ruleConfiguration: ["ignores_interpolated_strings": false],
commentDoesntViolate: false, stringDoesntViolate: false)
}
}