Files
SwiftLint/Tests/SwiftLintFrameworkTests/SourceKitCrashTests.swift
2024-04-27 18:43:08 +02:00

62 lines
2.5 KiB
Swift

@testable import SwiftLintCore
import XCTest
final class SourceKitCrashTests: SwiftLintTestCase {
func testAssertHandlerIsNotCalledOnNormalFile() {
let file = SwiftLintFile(contents: "A file didn't crash SourceKitService")
file.sourcekitdFailed = false
var assertHandlerCalled = false
file.assertHandler = { assertHandlerCalled = true }
_ = file.syntaxMap
XCTAssertFalse(assertHandlerCalled,
"Expects assert handler was not called on accessing SwiftLintFile.syntaxMap")
assertHandlerCalled = false
_ = file.syntaxKindsByLines
XCTAssertFalse(assertHandlerCalled,
"Expects assert handler was not called on accessing SwiftLintFile.syntaxKindsByLines")
assertHandlerCalled = false
_ = file.syntaxTokensByLines
XCTAssertFalse(assertHandlerCalled,
"Expects assert handler was not called on accessing SwiftLintFile.syntaxTokensByLines")
}
func testAssertHandlerIsCalledOnFileThatCrashedSourceKitService() {
let file = SwiftLintFile(contents: "A file crashed SourceKitService")
file.sourcekitdFailed = true
var assertHandlerCalled = false
file.assertHandler = { assertHandlerCalled = true }
_ = file.syntaxMap
XCTAssertTrue(assertHandlerCalled,
"Expects assert handler was called on accessing SwiftLintFile.syntaxMap")
assertHandlerCalled = false
_ = file.syntaxKindsByLines
XCTAssertTrue(assertHandlerCalled,
"Expects assert handler was called on accessing SwiftLintFile.syntaxKindsByLines")
assertHandlerCalled = false
_ = file.syntaxTokensByLines
XCTAssertTrue(assertHandlerCalled,
"Expects assert handler was not called on accessing SwiftLintFile.syntaxTokensByLines")
}
func testRulesWithFileThatCrashedSourceKitService() throws {
let file = try XCTUnwrap(SwiftLintFile(path: "\(TestResources.path)/ProjectMock/Level0.swift"))
file.sourcekitdFailed = true
file.assertHandler = {
XCTFail("If this called, rule's SourceKitFreeRule is not properly configured")
}
let configuration = Configuration(rulesMode: .only(allRuleIdentifiers))
let storage = RuleStorage()
_ = Linter(file: file, configuration: configuration).collect(into: storage).styleViolations(using: storage)
file.sourcekitdFailed = false
file.assertHandler = nil
}
}