diff --git a/SwiftLint.xcodeproj/project.pbxproj b/SwiftLint.xcodeproj/project.pbxproj index 09d86f59c..e53819ae0 100644 --- a/SwiftLint.xcodeproj/project.pbxproj +++ b/SwiftLint.xcodeproj/project.pbxproj @@ -198,6 +198,7 @@ 8F6AA75D21190830009BA28A /* CompilerArgumentsExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F6AA75C21190830009BA28A /* CompilerArgumentsExtractor.swift */; }; 8F715B83213B528B00427BD9 /* UnusedImportRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F715B82213B528B00427BD9 /* UnusedImportRule.swift */; }; 8F8050821FFE0CBB006F5B93 /* Configuration+IndentationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F8050811FFE0CBB006F5B93 /* Configuration+IndentationStyle.swift */; }; + 8FBE99D024635B8500ABF078 /* SwiftVersionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FBE99CF24635B8500ABF078 /* SwiftVersionTests.swift */; }; 8FC1DFAC23FC7C9700F49E2C /* ImportUsage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC1DFAB23FC7C9700F49E2C /* ImportUsage.swift */; }; 8FC1DFAE23FC7D0400F49E2C /* UnusedImportConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC1DFAD23FC7D0400F49E2C /* UnusedImportConfiguration.swift */; }; 8FC8523B2117BDDE0015269B /* ExplicitSelfRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FC8523A2117BDDE0015269B /* ExplicitSelfRule.swift */; }; @@ -711,6 +712,7 @@ 8F6AA75C21190830009BA28A /* CompilerArgumentsExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompilerArgumentsExtractor.swift; sourceTree = ""; }; 8F715B82213B528B00427BD9 /* UnusedImportRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnusedImportRule.swift; sourceTree = ""; }; 8F8050811FFE0CBB006F5B93 /* Configuration+IndentationStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Configuration+IndentationStyle.swift"; sourceTree = ""; }; + 8FBE99CF24635B8500ABF078 /* SwiftVersionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftVersionTests.swift; sourceTree = ""; }; 8FC1DFAB23FC7C9700F49E2C /* ImportUsage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportUsage.swift; sourceTree = ""; }; 8FC1DFAD23FC7D0400F49E2C /* UnusedImportConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnusedImportConfiguration.swift; sourceTree = ""; }; 8FC8523A2117BDDE0015269B /* ExplicitSelfRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExplicitSelfRule.swift; sourceTree = ""; }; @@ -1561,11 +1563,12 @@ CCD8B87720559C4A00B75847 /* DisableAllTests.swift */, 62AF35D71F30B183009B11EE /* DiscouragedDirectInitRuleTests.swift */, D414D6AB21D0B77F00960935 /* DiscouragedObjectLiteralRuleTests.swift */, + 6A804EF423D8FA7900976471 /* EmptyCountRuleTests.swift */, 5B1701B823CEAF8C00CC7079 /* ExampleTests.swift */, + 224E7F9B235A5E4D0051368B /* ExpiringTodoRuleTests.swift */, 125CE52E20425EFD001635E5 /* ExplicitTypeInterfaceConfigurationTests.swift */, 12E3D4DB2042729300B3E30E /* ExplicitTypeInterfaceRuleTests.swift */, 02FD8AEE1BFC18D60014BFFB /* ExtendedNSStringTests.swift */, - 6A804EF423D8FA7900976471 /* EmptyCountRuleTests.swift */, D4998DE81DF194F20006E05D /* FileHeaderRuleTests.swift */, 29FFC37B1F157BA8007E4825 /* FileLengthRuleTests.swift */, 4100D7A123BEAB5A009464E0 /* FileNameNoSpaceRuleTests.swift */, @@ -1582,9 +1585,9 @@ B1FD3ABC238BC5FB00CE121E /* ImplicitReturnRuleTests.swift */, CC8C6D2122935F4E00A55D1A /* IndentationWidthRuleTests.swift */, E832F10C1B17E725003F265F /* IntegrationTests.swift */, + D4E4FB5123E7A1A300746FCD /* LineEndingTests.swift */, 3B63D46C1E1F05160057BE35 /* LineLengthConfigurationTests.swift */, 3B63D46E1E1F09DF0057BE35 /* LineLengthRuleTests.swift */, - D4E4FB5123E7A1A300746FCD /* LineEndingTests.swift */, D4C27BFF1E12DFF500DF713E /* LinterCacheTests.swift */, F90DBD802092EA81002CC310 /* MissingDocsRuleConfigurationTests.swift */, 1EB7C8521F0C45C2004BAD22 /* ModifierOrderTests.swift */, @@ -1605,10 +1608,10 @@ 6C7045431C6ADA450003F15A /* SourceKitCrashTests.swift */, D4F5851620E99B260085C6D8 /* StatementPositionRuleTests.swift */, D0D1217C19E87B05005E4BAA /* Supporting Files */, + 8FBE99CF24635B8500ABF078 /* SwiftVersionTests.swift */, 787CDE3A208F9C34005F3D2F /* SwitchCaseAlignmentRuleTests.swift */, E81224991B04F85B001783D2 /* TestHelpers.swift */, D4DB92241E628898005DE9C1 /* TodoRuleTests.swift */, - 224E7F9B235A5E4D0051368B /* ExpiringTodoRuleTests.swift */, D450D1E121F19B1E00E60010 /* TrailingClosureConfigurationTests.swift */, D450D1DE21F19A9400E60010 /* TrailingClosureRuleTests.swift */, C9802F2E1E0C8AEE008AB27F /* TrailingCommaRuleTests.swift */, @@ -2408,6 +2411,7 @@ 02FD8AEF1BFC18D60014BFFB /* ExtendedNSStringTests.swift in Sources */, 12E3D4DC2042729300B3E30E /* ExplicitTypeInterfaceRuleTests.swift in Sources */, D4CA758F1E2DEEA500A40E8A /* NumberSeparatorRuleTests.swift in Sources */, + 8FBE99D024635B8500ABF078 /* SwiftVersionTests.swift in Sources */, D4DB92251E628898005DE9C1 /* TodoRuleTests.swift in Sources */, D4348EEA1C46122C007707FB /* FunctionBodyLengthRuleTests.swift in Sources */, F480DC831F2609D700099465 /* ConfigurationTests+ProjectMock.swift in Sources */, diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift index 3672dec30..1c3634ea9 100644 --- a/Tests/LinuxMain.swift +++ b/Tests/LinuxMain.swift @@ -850,8 +850,7 @@ extension LinterCacheTests { ("testEnabledRulesChangedOrAddedOrRemovedCausesAllFilesToBeReLinted", testEnabledRulesChangedOrAddedOrRemovedCausesAllFilesToBeReLinted), ("testWhitelistRulesChangedOrAddedOrRemovedCausesAllFilesToBeReLinted", testWhitelistRulesChangedOrAddedOrRemovedCausesAllFilesToBeReLinted), ("testRuleConfigurationChangedOrAddedOrRemovedCausesAllFilesToBeReLinted", testRuleConfigurationChangedOrAddedOrRemovedCausesAllFilesToBeReLinted), - ("testSwiftVersionChangedRemovedCausesAllFilesToBeReLinted", testSwiftVersionChangedRemovedCausesAllFilesToBeReLinted), - ("testDetectSwiftVersion", testDetectSwiftVersion) + ("testSwiftVersionChangedRemovedCausesAllFilesToBeReLinted", testSwiftVersionChangedRemovedCausesAllFilesToBeReLinted) ] } @@ -1225,6 +1224,7 @@ extension ReporterTests { ("testXcodeReporter", testXcodeReporter), ("testEmojiReporter", testEmojiReporter), ("testGitHubActionsLoggingReporter", testGitHubActionsLoggingReporter), + ("testGitLabJUnitReporter", testGitLabJUnitReporter), ("testJSONReporter", testJSONReporter), ("testCSVReporter", testCSVReporter), ("testCheckstyleReporter", testCheckstyleReporter), @@ -1378,6 +1378,12 @@ extension StrongIBOutletRuleTests { ] } +extension SwiftVersionTests { + static var allTests: [(String, (SwiftVersionTests) -> () throws -> Void)] = [ + ("testDetectSwiftVersion", testDetectSwiftVersion) + ] +} + extension SwitchCaseAlignmentRuleTests { static var allTests: [(String, (SwitchCaseAlignmentRuleTests) -> () throws -> Void)] = [ ("testWithDefaultConfiguration", testWithDefaultConfiguration), @@ -1832,6 +1838,7 @@ XCTMain([ testCase(StaticOperatorRuleTests.allTests), testCase(StrictFilePrivateRuleTests.allTests), testCase(StrongIBOutletRuleTests.allTests), + testCase(SwiftVersionTests.allTests), testCase(SwitchCaseAlignmentRuleTests.allTests), testCase(SwitchCaseOnNewlineRuleTests.allTests), testCase(SyntacticSugarRuleTests.allTests), diff --git a/Tests/SwiftLintFrameworkTests/LinterCacheTests.swift b/Tests/SwiftLintFrameworkTests/LinterCacheTests.swift index af9517598..eaf7e8fde 100644 --- a/Tests/SwiftLintFrameworkTests/LinterCacheTests.swift +++ b/Tests/SwiftLintFrameworkTests/LinterCacheTests.swift @@ -298,62 +298,4 @@ class LinterCacheTests: XCTestCase { XCTAssertNotNil(thisSwiftVersionCache.violations(forFile: file, configuration: helper.configuration)) XCTAssertNil(cache.violations(forFile: file, configuration: helper.configuration)) } - - // swiftlint:disable:next function_body_length - func testDetectSwiftVersion() { - #if compiler(>=5.2.1) - let version = "5.2.1" - #elseif compiler(>=5.2.0) - let version = "5.2.0" - #elseif compiler(>=5.1.5) - let version = "5.1.5" - #elseif compiler(>=5.1.4) - let version = "5.1.4" - #elseif compiler(>=5.1.3) - let version = "5.1.3" - #elseif compiler(>=5.1.2) - let version = "5.1.2" - #elseif compiler(>=5.1.1) - let version = "5.1.1" - #elseif compiler(>=5.1.0) - let version = "5.1.0" - #elseif compiler(>=5.0.0) - let version = "5.0.0" - #elseif swift(>=4.2.0) - let version = "4.2.0" - #elseif swift(>=4.1.50) - let version = "4.2.0" // Since we can't pass SWIFT_VERSION=4 to sourcekit, it returns 4.2.0 - #elseif swift(>=4.1.2) - let version = "4.1.2" - #elseif swift(>=4.1.1) - let version = "4.1.1" - #elseif swift(>=4.1.0) - let version = "4.1.0" - #elseif swift(>=4.0.3) - let version = "4.0.3" - #elseif swift(>=4.0.2) - let version = "4.0.2" - #elseif swift(>=4.0.1) - let version = "4.0.1" - #elseif swift(>=4.0.0) - let version = "4.0.0" - #elseif swift(>=3.4.0) - let version = "4.2.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.2.0 - #elseif swift(>=3.3.2) - let version = "4.1.2" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.2 - #elseif swift(>=3.3.1) - let version = "4.1.1" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.1 - #elseif swift(>=3.3.0) - let version = "4.1.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.0 - #elseif swift(>=3.2.3) - let version = "4.0.3" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.3 - #elseif swift(>=3.2.2) - let version = "4.0.2" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.2 - #elseif swift(>=3.2.1) - let version = "4.0.1" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.1 - #else // if swift(>=3.2.0) - let version = "4.0.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.0 - #endif - XCTAssertEqual(SwiftVersion.current.rawValue, version) - } } diff --git a/Tests/SwiftLintFrameworkTests/SwiftVersionTests.swift b/Tests/SwiftLintFrameworkTests/SwiftVersionTests.swift new file mode 100644 index 000000000..f09fcc151 --- /dev/null +++ b/Tests/SwiftLintFrameworkTests/SwiftVersionTests.swift @@ -0,0 +1,66 @@ +import SwiftLintFramework +import XCTest + +final class SwiftVersionTests: XCTestCase { + // swiftlint:disable:next function_body_length + func testDetectSwiftVersion() { + #if compiler(>=5.2.3) + let version = "5.2.3" + #elseif compiler(>=5.2.2) + let version = "5.2.2" + #elseif compiler(>=5.2.1) + let version = "5.2.1" + #elseif compiler(>=5.2.0) + let version = "5.2.0" + #elseif compiler(>=5.1.5) + let version = "5.1.5" + #elseif compiler(>=5.1.4) + let version = "5.1.4" + #elseif compiler(>=5.1.3) + let version = "5.1.3" + #elseif compiler(>=5.1.2) + let version = "5.1.2" + #elseif compiler(>=5.1.1) + let version = "5.1.1" + #elseif compiler(>=5.1.0) + let version = "5.1.0" + #elseif compiler(>=5.0.0) + let version = "5.0.0" + #elseif swift(>=4.2.0) + let version = "4.2.0" + #elseif swift(>=4.1.50) + let version = "4.2.0" // Since we can't pass SWIFT_VERSION=4 to sourcekit, it returns 4.2.0 + #elseif swift(>=4.1.2) + let version = "4.1.2" + #elseif swift(>=4.1.1) + let version = "4.1.1" + #elseif swift(>=4.1.0) + let version = "4.1.0" + #elseif swift(>=4.0.3) + let version = "4.0.3" + #elseif swift(>=4.0.2) + let version = "4.0.2" + #elseif swift(>=4.0.1) + let version = "4.0.1" + #elseif swift(>=4.0.0) + let version = "4.0.0" + #elseif swift(>=3.4.0) + let version = "4.2.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.2.0 + #elseif swift(>=3.3.2) + let version = "4.1.2" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.2 + #elseif swift(>=3.3.1) + let version = "4.1.1" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.1 + #elseif swift(>=3.3.0) + let version = "4.1.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.1.0 + #elseif swift(>=3.2.3) + let version = "4.0.3" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.3 + #elseif swift(>=3.2.2) + let version = "4.0.2" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.2 + #elseif swift(>=3.2.1) + let version = "4.0.1" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.1 + #else // if swift(>=3.2.0) + let version = "4.0.0" // Since we can't pass SWIFT_VERSION=3 to sourcekit, it returns 4.0.0 + #endif + XCTAssertEqual(SwiftVersion.current.rawValue, version) + } +} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7a5398757..03502be81 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -10,9 +10,8 @@ jobs: matrix: swift51: containerImage: swift:5.1 - # https://bugs.swift.org/browse/SR-12500 - # swift52: - # containerImage: swift:5.2 + swift52: + containerImage: swift:5.2 container: $[ variables['containerImage'] ] steps: - script: swift test --parallel