diff --git a/SwiftLint.xcodeproj/project.pbxproj b/SwiftLint.xcodeproj/project.pbxproj index 0c1b97998..b06cda868 100644 --- a/SwiftLint.xcodeproj/project.pbxproj +++ b/SwiftLint.xcodeproj/project.pbxproj @@ -82,6 +82,7 @@ 78F032461D7C877E00BE709A /* OverriddenSuperCallRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F032441D7C877800BE709A /* OverriddenSuperCallRule.swift */; }; 78F032481D7D614300BE709A /* OverridenSuperCallConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F032471D7D614300BE709A /* OverridenSuperCallConfiguration.swift */; }; 7C0C2E7A1D2866CB0076435A /* ExplicitInitRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0C2E791D2866CB0076435A /* ExplicitInitRule.swift */; }; + 825F19D11EEFF19700969EF1 /* ObjectLiteralRuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825F19D01EEFF19700969EF1 /* ObjectLiteralRuleTests.swift */; }; 83894F221B0C928A006214E1 /* RulesCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83894F211B0C928A006214E1 /* RulesCommand.swift */; }; 83D71E281B131ECE000395DE /* RuleDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D71E261B131EB5000395DE /* RuleDescription.swift */; }; 85DA81321D6B471000951BC4 /* MarkRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 856651A61D6B395F005E6B29 /* MarkRule.swift */; }; @@ -363,6 +364,7 @@ 78F032441D7C877800BE709A /* OverriddenSuperCallRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OverriddenSuperCallRule.swift; sourceTree = ""; }; 78F032471D7D614300BE709A /* OverridenSuperCallConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OverridenSuperCallConfiguration.swift; sourceTree = ""; }; 7C0C2E791D2866CB0076435A /* ExplicitInitRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExplicitInitRule.swift; sourceTree = ""; }; + 825F19D01EEFF19700969EF1 /* ObjectLiteralRuleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectLiteralRuleTests.swift; sourceTree = ""; }; 83894F211B0C928A006214E1 /* RulesCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RulesCommand.swift; sourceTree = ""; }; 83D71E261B131EB5000395DE /* RuleDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuleDescription.swift; sourceTree = ""; }; 856651A61D6B395F005E6B29 /* MarkRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarkRule.swift; sourceTree = ""; }; @@ -800,6 +802,7 @@ 3B63D46E1E1F09DF0057BE35 /* LineLengthRuleTests.swift */, D4C27BFF1E12DFF500DF713E /* LinterCacheTests.swift */, D4CA758E1E2DEEA500A40E8A /* NumberSeparatorRuleTests.swift */, + 825F19D01EEFF19700969EF1 /* ObjectLiteralRuleTests.swift */, E81ADD711ED5ED9D000CD451 /* RegionTests.swift */, E86396C61BADAFE6002C9E88 /* ReporterTests.swift */, 3BCC04D31C502BAB006073C3 /* RuleConfigurationTests.swift */, @@ -1426,6 +1429,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 825F19D11EEFF19700969EF1 /* ObjectLiteralRuleTests.swift in Sources */, 3B12C9C31C320A53000B423F /* Yaml+SwiftLintTests.swift in Sources */, E832F10D1B17E725003F265F /* IntegrationTests.swift in Sources */, D4C27C001E12DFF500DF713E /* LinterCacheTests.swift in Sources */, diff --git a/Tests/SwiftLintFrameworkTests/ObjectLiteralRuleTests.swift b/Tests/SwiftLintFrameworkTests/ObjectLiteralRuleTests.swift new file mode 100644 index 000000000..251a79e42 --- /dev/null +++ b/Tests/SwiftLintFrameworkTests/ObjectLiteralRuleTests.swift @@ -0,0 +1,88 @@ +// +// ObjectLiteralRuleTests.swift +// SwiftLint +// +// Created by Cihat Gündüz on 06/13/17. +// Copyright © 2017 Realm. All rights reserved. +// + +import SwiftLintFramework +import XCTest + +class ObjectLiteralRuleTests: XCTestCase { + // MARK: - Instance Properties + private let imageLiteralTriggeringExamples = ["", ".init"].flatMap { (method: String) -> [String] in + ["UI", "NS"].flatMap { (prefix: String) -> [String] in + [ + "let image = ↓\(prefix)Image\(method)(named: \"foo\")" + ] + } + } + + private let colorLiteralTriggeringExamples = ["", ".init"].flatMap { (method: String) -> [String] in + ["UI", "NS"].flatMap { (prefix: String) -> [String] in + [ + "let color = ↓\(prefix)Color\(method)(red: 0.3, green: 0.3, blue: 0.3, alpha: 1)", + "let color = ↓\(prefix)Color\(method)(red: 100 / 255.0, green: 50 / 255.0, blue: 0, alpha: 1)", + "let color = ↓\(prefix)Color\(method)(white: 0.5, alpha: 1)" + ] + } + } + + private var allTriggeringExamples: [String] { + return imageLiteralTriggeringExamples + colorLiteralTriggeringExamples + } + + // MARK: - Test Methods + func testObjectLiteralWithDefaultConfiguration() { + verifyRule(ObjectLiteralRule.description) + } + + // swiftlint:disable:next function_body_length + func testObjectLiteralWithImageLiteral() { + // Verify ObjectLiteral rule for when image_literal is true. + let baseDescription = ObjectLiteralRule.description + + let description = RuleDescription( + identifier: baseDescription.identifier, + name: baseDescription.name, + description: baseDescription.description, + nonTriggeringExamples: baseDescription.nonTriggeringExamples + colorLiteralTriggeringExamples, + triggeringExamples: imageLiteralTriggeringExamples + ) + + verifyRule(description, ruleConfiguration: ["image_literal": true, "color_literal": false]) + } + + // swiftlint:disable:next function_body_length + func testObjectLiteralWithColorLiteral() { + // Verify ObjectLiteral rule for when color_literal is true. + let baseDescription = ObjectLiteralRule.description + + let description = RuleDescription( + identifier: baseDescription.identifier, + name: baseDescription.name, + description: baseDescription.description, + nonTriggeringExamples: baseDescription.nonTriggeringExamples + imageLiteralTriggeringExamples, + triggeringExamples: colorLiteralTriggeringExamples + ) + + verifyRule(description, ruleConfiguration: ["image_literal": false, "color_literal": true]) + } + + // swiftlint:disable:next function_body_length + func testObjectLiteralWithImageAndColorLiteral() { + // Verify ObjectLiteral rule for when image_literal & color_literal are true. + let baseDescription = ObjectLiteralRule.description + + let description = RuleDescription( + identifier: baseDescription.identifier, + name: baseDescription.name, + description: baseDescription.description, + nonTriggeringExamples: baseDescription.nonTriggeringExamples, + triggeringExamples: allTriggeringExamples + ) + + verifyRule(description, ruleConfiguration: ["image_literal": true, "color_literal": true]) + } +}