Files
SwiftLint/Tests/FileSystemAccessTests/SourceKitCrashTests.swift

47 lines
1.8 KiB
Swift

import Foundation
import TestHelpers
import Testing
@testable import SwiftLintFramework
@Suite(.rulesRegistered)
struct SourceKitCrashTests {
@Test(.sourceKitRequestsWithoutRule)
func assertHandlerIsNotCalledOnNormalFile() {
let file = SwiftLintFile(contents: "A file didn't crash SourceKitService")
file.sourcekitdFailed = false
var assertHandlerCalled = false
file.assertHandler = { assertHandlerCalled = true }
_ = file.syntaxMap
#expect(!assertHandlerCalled, "Expects assert handler was not called on accessing SwiftLintFile.syntaxMap")
}
@Test(.sourceKitRequestsWithoutRule)
func assertHandlerIsCalledOnFileThatCrashedSourceKitService() {
let file = SwiftLintFile(contents: "A file crashed SourceKitService")
file.sourcekitdFailed = true
var assertHandlerCalled = false
file.assertHandler = { assertHandlerCalled = true }
_ = file.syntaxMap
#expect(assertHandlerCalled, "Expects assert handler was called on accessing SwiftLintFile.syntaxMap")
}
@Test(.sourceKitRequestsWithoutRule, .workingDirectory(Constants.Dir.level0))
func rulesWithFileThatCrashedSourceKitService() throws {
let file = try #require(SwiftLintFile(path: "Level0.swift".url()))
file.sourcekitdFailed = true
file.assertHandler = {
Issue.record("If this called, rule's SourceKitFreeRule is not properly configured")
}
let configuration = Configuration(rulesMode: .onlyConfiguration(allRuleIdentifiers))
let storage = RuleStorage()
_ = Linter(file: file, configuration: configuration).collect(into: storage).styleViolations(using: storage)
file.sourcekitdFailed = false
file.assertHandler = nil
}
}