From 087278c0524932ad86d3bc2e76f7c62b669ffbde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danny=20M=C3=B6sch?= Date: Thu, 4 Sep 2025 20:56:51 +0200 Subject: [PATCH] Introduce new CoreTests module (#6233) It's supposed to test code from SwiftLintCore. --- Package.swift | 11 +++++++ Tests/BUILD | 29 +++++++++++++++++++ .../AccessControlLevelTests.swift | 1 + .../CodeIndentingRewriterTests.swift | 0 .../CommentLinesVisitorTests.swift | 0 .../ConditionallySourceKitFreeTests.swift | 1 - .../DisableAllTests.swift | 3 +- .../ExampleTests.swift | 3 +- .../ExtendedNSStringTests.swift | 1 + .../ExtendedStringTests.swift | 1 + .../LineEndingTests.swift | 3 +- .../RegexConfigurationTests.swift | 1 + .../RegionTests.swift | 1 + .../Resources/test.yml | 0 .../RuleConfigurationDescriptionTests.swift | 0 .../RuleTests.swift | 19 +----------- .../SeverityLevelsConfigurationTests.swift | 0 .../StringExtensionTests.swift | 1 + .../SwiftLintFileTests.swift | 1 + .../YamlSwiftLintTests.swift | 1 + Tests/FrameworkTests/CommandTests.swift | 1 + .../ConfigurationAliasesTests.swift | 1 + .../ConfigurationTests+Mock.swift | 1 + Tests/FrameworkTests/ConfigurationTests.swift | 1 + Tests/FrameworkTests/EmptyFileTests.swift | 1 + Tests/FrameworkTests/Exports.swift | 3 -- Tests/FrameworkTests/LinterCacheTests.swift | 1 + Tests/FrameworkTests/ModifierOrderTests.swift | 2 +- .../ParserDiagnosticsTests.swift | 1 + .../RuleConfigurationTests.swift | 1 + Tests/FrameworkTests/RulesTests.swift | 1 + .../FrameworkTests/SourceKitCrashTests.swift | 1 + .../StringViewExtensionTests.swift | 1 + Tests/FrameworkTests/SwiftVersionTests.swift | 1 + Tests/FrameworkTests/YamlParserTests.swift | 1 + Tests/TestHelpers/RuleMock.swift | 18 ++++++++++++ 36 files changed, 87 insertions(+), 26 deletions(-) rename Tests/{FrameworkTests => CoreTests}/AccessControlLevelTests.swift (98%) rename Tests/{FrameworkTests => CoreTests}/CodeIndentingRewriterTests.swift (100%) rename Tests/{FrameworkTests => CoreTests}/CommentLinesVisitorTests.swift (100%) rename Tests/{FrameworkTests => CoreTests}/ConditionallySourceKitFreeTests.swift (98%) rename Tests/{FrameworkTests => CoreTests}/DisableAllTests.swift (99%) rename Tests/{FrameworkTests => CoreTests}/ExampleTests.swift (98%) rename Tests/{FrameworkTests => CoreTests}/ExtendedNSStringTests.swift (98%) rename Tests/{FrameworkTests => CoreTests}/ExtendedStringTests.swift (93%) rename Tests/{FrameworkTests => CoreTests}/LineEndingTests.swift (90%) rename Tests/{FrameworkTests => CoreTests}/RegexConfigurationTests.swift (99%) rename Tests/{FrameworkTests => CoreTests}/RegionTests.swift (99%) rename Tests/{FrameworkTests => CoreTests}/Resources/test.yml (100%) rename Tests/{FrameworkTests => CoreTests}/RuleConfigurationDescriptionTests.swift (100%) rename Tests/{FrameworkTests => CoreTests}/RuleTests.swift (86%) rename Tests/{FrameworkTests => CoreTests}/SeverityLevelsConfigurationTests.swift (100%) rename Tests/{FrameworkTests => CoreTests}/StringExtensionTests.swift (99%) rename Tests/{FrameworkTests => CoreTests}/SwiftLintFileTests.swift (99%) rename Tests/{FrameworkTests => CoreTests}/YamlSwiftLintTests.swift (99%) delete mode 100644 Tests/FrameworkTests/Exports.swift diff --git a/Package.swift b/Package.swift index 05a21d569..924e5a317 100644 --- a/Package.swift +++ b/Package.swift @@ -146,6 +146,17 @@ let package = Package( ], swiftSettings: swiftFeatures + strictConcurrency ), + .testTarget( + name: "CoreTests", + dependencies: [ + "SwiftLintCore", + "TestHelpers", + ], + exclude: [ + "Resources", + ], + swiftSettings: swiftFeatures + strictConcurrency + ), .testTarget( name: "ExtraRulesTests", dependencies: [ diff --git a/Tests/BUILD b/Tests/BUILD index 7ce41c9df..4e1157789 100644 --- a/Tests/BUILD +++ b/Tests/BUILD @@ -114,6 +114,35 @@ swift_test( deps = [":BuiltInRulesTests.library"], ) +# CoreTests + +swift_library( + name = "CoreTests.library", + package_name = "SwiftLint", + testonly = True, + srcs = glob( + ["CoreTests/**/*.swift"], + exclude = [ + "CoreTests/Resources/**", + ], + ), + copts = copts + strict_concurrency_copts, + module_name = "CoreTests", + deps = [ + ":TestHelpers", + ], +) + +swift_test( + name = "CoreTests", + data = glob( + ["CoreTests/Resources/**"], + allow_empty = True, + ), + visibility = ["//visibility:public"], + deps = [":CoreTests.library"], +) + # FrameworkTests swift_library( diff --git a/Tests/FrameworkTests/AccessControlLevelTests.swift b/Tests/CoreTests/AccessControlLevelTests.swift similarity index 98% rename from Tests/FrameworkTests/AccessControlLevelTests.swift rename to Tests/CoreTests/AccessControlLevelTests.swift index ac1efded9..5c41080f2 100644 --- a/Tests/FrameworkTests/AccessControlLevelTests.swift +++ b/Tests/CoreTests/AccessControlLevelTests.swift @@ -1,4 +1,5 @@ import SwiftLintCore +import TestHelpers import XCTest final class AccessControlLevelTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/CodeIndentingRewriterTests.swift b/Tests/CoreTests/CodeIndentingRewriterTests.swift similarity index 100% rename from Tests/FrameworkTests/CodeIndentingRewriterTests.swift rename to Tests/CoreTests/CodeIndentingRewriterTests.swift diff --git a/Tests/FrameworkTests/CommentLinesVisitorTests.swift b/Tests/CoreTests/CommentLinesVisitorTests.swift similarity index 100% rename from Tests/FrameworkTests/CommentLinesVisitorTests.swift rename to Tests/CoreTests/CommentLinesVisitorTests.swift diff --git a/Tests/FrameworkTests/ConditionallySourceKitFreeTests.swift b/Tests/CoreTests/ConditionallySourceKitFreeTests.swift similarity index 98% rename from Tests/FrameworkTests/ConditionallySourceKitFreeTests.swift rename to Tests/CoreTests/ConditionallySourceKitFreeTests.swift index 1d69eb140..6ba7aa806 100644 --- a/Tests/FrameworkTests/ConditionallySourceKitFreeTests.swift +++ b/Tests/CoreTests/ConditionallySourceKitFreeTests.swift @@ -1,5 +1,4 @@ @testable import SwiftLintCore -@testable import SwiftLintFramework import XCTest final class ConditionallySourceKitFreeTests: XCTestCase { diff --git a/Tests/FrameworkTests/DisableAllTests.swift b/Tests/CoreTests/DisableAllTests.swift similarity index 99% rename from Tests/FrameworkTests/DisableAllTests.swift rename to Tests/CoreTests/DisableAllTests.swift index a435b8fba..83b6c36ed 100644 --- a/Tests/FrameworkTests/DisableAllTests.swift +++ b/Tests/CoreTests/DisableAllTests.swift @@ -1,4 +1,5 @@ -import SwiftLintFramework +import SwiftLintCore +import TestHelpers import XCTest final class DisableAllTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/ExampleTests.swift b/Tests/CoreTests/ExampleTests.swift similarity index 98% rename from Tests/FrameworkTests/ExampleTests.swift rename to Tests/CoreTests/ExampleTests.swift index fda1b3f6e..9053fb970 100644 --- a/Tests/FrameworkTests/ExampleTests.swift +++ b/Tests/CoreTests/ExampleTests.swift @@ -1,4 +1,5 @@ -import SwiftLintFramework +import SwiftLintCore +import TestHelpers import XCTest final class ExampleTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/ExtendedNSStringTests.swift b/Tests/CoreTests/ExtendedNSStringTests.swift similarity index 98% rename from Tests/FrameworkTests/ExtendedNSStringTests.swift rename to Tests/CoreTests/ExtendedNSStringTests.swift index 66ec4b833..8deb6609a 100644 --- a/Tests/FrameworkTests/ExtendedNSStringTests.swift +++ b/Tests/CoreTests/ExtendedNSStringTests.swift @@ -1,4 +1,5 @@ import SourceKittenFramework +import TestHelpers import XCTest final class ExtendedNSStringTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/ExtendedStringTests.swift b/Tests/CoreTests/ExtendedStringTests.swift similarity index 93% rename from Tests/FrameworkTests/ExtendedStringTests.swift rename to Tests/CoreTests/ExtendedStringTests.swift index d504d3f4d..16c28ca70 100644 --- a/Tests/FrameworkTests/ExtendedStringTests.swift +++ b/Tests/CoreTests/ExtendedStringTests.swift @@ -1,3 +1,4 @@ +import TestHelpers import XCTest final class ExtendedStringTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/LineEndingTests.swift b/Tests/CoreTests/LineEndingTests.swift similarity index 90% rename from Tests/FrameworkTests/LineEndingTests.swift rename to Tests/CoreTests/LineEndingTests.swift index 8a1caa3a0..7cf2cbaa7 100644 --- a/Tests/FrameworkTests/LineEndingTests.swift +++ b/Tests/CoreTests/LineEndingTests.swift @@ -1,4 +1,5 @@ -@testable import SwiftLintBuiltInRules +import SwiftLintCore +import TestHelpers import XCTest final class LineEndingTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/RegexConfigurationTests.swift b/Tests/CoreTests/RegexConfigurationTests.swift similarity index 99% rename from Tests/FrameworkTests/RegexConfigurationTests.swift rename to Tests/CoreTests/RegexConfigurationTests.swift index 5da2c0875..75f38d109 100644 --- a/Tests/FrameworkTests/RegexConfigurationTests.swift +++ b/Tests/CoreTests/RegexConfigurationTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintCore +import TestHelpers import XCTest final class RegexConfigurationTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/RegionTests.swift b/Tests/CoreTests/RegionTests.swift similarity index 99% rename from Tests/FrameworkTests/RegionTests.swift rename to Tests/CoreTests/RegionTests.swift index 8b29b9a42..7eb84cb52 100644 --- a/Tests/FrameworkTests/RegionTests.swift +++ b/Tests/CoreTests/RegionTests.swift @@ -1,4 +1,5 @@ import SwiftLintCore +import TestHelpers import XCTest final class RegionTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/Resources/test.yml b/Tests/CoreTests/Resources/test.yml similarity index 100% rename from Tests/FrameworkTests/Resources/test.yml rename to Tests/CoreTests/Resources/test.yml diff --git a/Tests/FrameworkTests/RuleConfigurationDescriptionTests.swift b/Tests/CoreTests/RuleConfigurationDescriptionTests.swift similarity index 100% rename from Tests/FrameworkTests/RuleConfigurationDescriptionTests.swift rename to Tests/CoreTests/RuleConfigurationDescriptionTests.swift diff --git a/Tests/FrameworkTests/RuleTests.swift b/Tests/CoreTests/RuleTests.swift similarity index 86% rename from Tests/FrameworkTests/RuleTests.swift rename to Tests/CoreTests/RuleTests.swift index a6b018293..79c930c42 100644 --- a/Tests/FrameworkTests/RuleTests.swift +++ b/Tests/CoreTests/RuleTests.swift @@ -1,24 +1,7 @@ import SwiftLintCore +import TestHelpers import XCTest -struct RuleWithLevelsMock: Rule { - var configuration = SeverityLevelsConfiguration(warning: 2, error: 3) - - static let description = RuleDescription(identifier: "severity_level_mock", - name: "", - description: "", - kind: .style, - deprecatedAliases: ["mock"]) - - init() { /* conformance for test */ } - init(configuration: Any) throws { - self.init() - try self.configuration.apply(configuration: configuration) - } - - func validate(file _: SwiftLintFile) -> [StyleViolation] { [] } -} - final class RuleTests: SwiftLintTestCase { fileprivate struct RuleMock1: Rule { var configuration = SeverityConfiguration(.warning) diff --git a/Tests/FrameworkTests/SeverityLevelsConfigurationTests.swift b/Tests/CoreTests/SeverityLevelsConfigurationTests.swift similarity index 100% rename from Tests/FrameworkTests/SeverityLevelsConfigurationTests.swift rename to Tests/CoreTests/SeverityLevelsConfigurationTests.swift diff --git a/Tests/FrameworkTests/StringExtensionTests.swift b/Tests/CoreTests/StringExtensionTests.swift similarity index 99% rename from Tests/FrameworkTests/StringExtensionTests.swift rename to Tests/CoreTests/StringExtensionTests.swift index d7b394fd6..8a093fac6 100644 --- a/Tests/FrameworkTests/StringExtensionTests.swift +++ b/Tests/CoreTests/StringExtensionTests.swift @@ -1,3 +1,4 @@ +import TestHelpers import XCTest final class StringExtensionTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/SwiftLintFileTests.swift b/Tests/CoreTests/SwiftLintFileTests.swift similarity index 99% rename from Tests/FrameworkTests/SwiftLintFileTests.swift rename to Tests/CoreTests/SwiftLintFileTests.swift index 989b126e6..e08ee5175 100644 --- a/Tests/FrameworkTests/SwiftLintFileTests.swift +++ b/Tests/CoreTests/SwiftLintFileTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintCore +import TestHelpers import XCTest final class SwiftLintFileTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/YamlSwiftLintTests.swift b/Tests/CoreTests/YamlSwiftLintTests.swift similarity index 99% rename from Tests/FrameworkTests/YamlSwiftLintTests.swift rename to Tests/CoreTests/YamlSwiftLintTests.swift index 23d9bfb2f..0cfce0f32 100644 --- a/Tests/FrameworkTests/YamlSwiftLintTests.swift +++ b/Tests/CoreTests/YamlSwiftLintTests.swift @@ -1,4 +1,5 @@ import Foundation +import TestHelpers import XCTest import Yams diff --git a/Tests/FrameworkTests/CommandTests.swift b/Tests/FrameworkTests/CommandTests.swift index 964641e72..9e7fc7ae4 100644 --- a/Tests/FrameworkTests/CommandTests.swift +++ b/Tests/FrameworkTests/CommandTests.swift @@ -3,6 +3,7 @@ import Foundation import SourceKittenFramework @testable import SwiftLintBuiltInRules @testable import SwiftLintFramework +import TestHelpers import XCTest private extension Command { diff --git a/Tests/FrameworkTests/ConfigurationAliasesTests.swift b/Tests/FrameworkTests/ConfigurationAliasesTests.swift index a684fd68d..083b5f647 100644 --- a/Tests/FrameworkTests/ConfigurationAliasesTests.swift +++ b/Tests/FrameworkTests/ConfigurationAliasesTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintFramework +import TestHelpers import XCTest final class ConfigurationAliasesTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/ConfigurationTests+Mock.swift b/Tests/FrameworkTests/ConfigurationTests+Mock.swift index 212a5391c..e4b6cfce4 100644 --- a/Tests/FrameworkTests/ConfigurationTests+Mock.swift +++ b/Tests/FrameworkTests/ConfigurationTests+Mock.swift @@ -1,4 +1,5 @@ import SwiftLintFramework +import TestHelpers // swiftlint:disable:next blanket_disable_command // swiftlint:disable nesting identifier_name diff --git a/Tests/FrameworkTests/ConfigurationTests.swift b/Tests/FrameworkTests/ConfigurationTests.swift index f88852c94..05fef8c12 100644 --- a/Tests/FrameworkTests/ConfigurationTests.swift +++ b/Tests/FrameworkTests/ConfigurationTests.swift @@ -1,6 +1,7 @@ import Foundation import SourceKittenFramework @testable import SwiftLintFramework +import TestHelpers import XCTest // swiftlint:disable file_length diff --git a/Tests/FrameworkTests/EmptyFileTests.swift b/Tests/FrameworkTests/EmptyFileTests.swift index feee49af3..b83502fba 100644 --- a/Tests/FrameworkTests/EmptyFileTests.swift +++ b/Tests/FrameworkTests/EmptyFileTests.swift @@ -1,4 +1,5 @@ import SwiftLintFramework +import TestHelpers import XCTest // swiftlint:disable:next balanced_xctest_lifecycle diff --git a/Tests/FrameworkTests/Exports.swift b/Tests/FrameworkTests/Exports.swift deleted file mode 100644 index f1bf033a9..000000000 --- a/Tests/FrameworkTests/Exports.swift +++ /dev/null @@ -1,3 +0,0 @@ -// These imports are re-exported to make them available implicitly to all files. -// swiftlint:disable:next unused_import -@_exported import TestHelpers diff --git a/Tests/FrameworkTests/LinterCacheTests.swift b/Tests/FrameworkTests/LinterCacheTests.swift index 8abbff656..66c2cb6bd 100644 --- a/Tests/FrameworkTests/LinterCacheTests.swift +++ b/Tests/FrameworkTests/LinterCacheTests.swift @@ -1,5 +1,6 @@ import Foundation @testable import SwiftLintFramework +import TestHelpers import XCTest private struct CacheTestHelper { diff --git a/Tests/FrameworkTests/ModifierOrderTests.swift b/Tests/FrameworkTests/ModifierOrderTests.swift index fdcff1f16..74fdd9200 100644 --- a/Tests/FrameworkTests/ModifierOrderTests.swift +++ b/Tests/FrameworkTests/ModifierOrderTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintBuiltInRules +import TestHelpers import XCTest final class ModifierOrderTests: SwiftLintTestCase { @@ -388,7 +389,6 @@ final class ModifierOrderTests: SwiftLintTestCase { XCTFail("Failed to create configuration") return } - let allViolations = violations(Example("final public var foo: String"), config: config) let modifierOrderRuleViolation = allViolations.first { $0.ruleIdentifier == ruleID } if let violation = modifierOrderRuleViolation { diff --git a/Tests/FrameworkTests/ParserDiagnosticsTests.swift b/Tests/FrameworkTests/ParserDiagnosticsTests.swift index 86fba1b7b..8d1d4bec0 100644 --- a/Tests/FrameworkTests/ParserDiagnosticsTests.swift +++ b/Tests/FrameworkTests/ParserDiagnosticsTests.swift @@ -1,5 +1,6 @@ @testable import SwiftLintBuiltInRules @testable import SwiftLintCore +import TestHelpers import XCTest final class ParserDiagnosticsTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/RuleConfigurationTests.swift b/Tests/FrameworkTests/RuleConfigurationTests.swift index f86fca1e2..4ac11de6c 100644 --- a/Tests/FrameworkTests/RuleConfigurationTests.swift +++ b/Tests/FrameworkTests/RuleConfigurationTests.swift @@ -1,6 +1,7 @@ import SourceKittenFramework @testable import SwiftLintBuiltInRules @testable import SwiftLintCore +import TestHelpers import XCTest final class RuleConfigurationTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/RulesTests.swift b/Tests/FrameworkTests/RulesTests.swift index ef4748f06..4a236fa60 100644 --- a/Tests/FrameworkTests/RulesTests.swift +++ b/Tests/FrameworkTests/RulesTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintBuiltInRules +import TestHelpers final class RulesTests: SwiftLintTestCase { func testLeadingWhitespace() { diff --git a/Tests/FrameworkTests/SourceKitCrashTests.swift b/Tests/FrameworkTests/SourceKitCrashTests.swift index bd6bfb415..c207eac07 100644 --- a/Tests/FrameworkTests/SourceKitCrashTests.swift +++ b/Tests/FrameworkTests/SourceKitCrashTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintFramework +import TestHelpers import XCTest final class SourceKitCrashTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/StringViewExtensionTests.swift b/Tests/FrameworkTests/StringViewExtensionTests.swift index 414e78255..ad7c1b176 100644 --- a/Tests/FrameworkTests/StringViewExtensionTests.swift +++ b/Tests/FrameworkTests/StringViewExtensionTests.swift @@ -1,4 +1,5 @@ import SourceKittenFramework +import TestHelpers import XCTest final class StringViewExtensionTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/SwiftVersionTests.swift b/Tests/FrameworkTests/SwiftVersionTests.swift index c62735fa2..a27312e35 100644 --- a/Tests/FrameworkTests/SwiftVersionTests.swift +++ b/Tests/FrameworkTests/SwiftVersionTests.swift @@ -1,4 +1,5 @@ import SwiftLintFramework +import TestHelpers import XCTest final class SwiftVersionTests: SwiftLintTestCase { diff --git a/Tests/FrameworkTests/YamlParserTests.swift b/Tests/FrameworkTests/YamlParserTests.swift index 066d7610e..0d8145fa7 100644 --- a/Tests/FrameworkTests/YamlParserTests.swift +++ b/Tests/FrameworkTests/YamlParserTests.swift @@ -1,4 +1,5 @@ @testable import SwiftLintFramework +import TestHelpers import XCTest final class YamlParserTests: SwiftLintTestCase { diff --git a/Tests/TestHelpers/RuleMock.swift b/Tests/TestHelpers/RuleMock.swift index b1b15d131..acb00ef15 100644 --- a/Tests/TestHelpers/RuleMock.swift +++ b/Tests/TestHelpers/RuleMock.swift @@ -17,3 +17,21 @@ public struct RuleMock: Rule { public func validate(file _: SwiftLintFile) -> [StyleViolation] { [] } } + +public struct RuleWithLevelsMock: Rule { + public var configuration = SeverityLevelsConfiguration(warning: 2, error: 3) + + public static let description = RuleDescription(identifier: "severity_level_mock", + name: "", + description: "", + kind: .style, + deprecatedAliases: ["mock"]) + + public init() { /* conformance for test */ } + public init(configuration: Any) throws { + self.init() + try self.configuration.apply(configuration: configuration) + } + + public func validate(file _: SwiftLintFile) -> [StyleViolation] { [] } +}