Files
SwiftGen/Tests/SwiftGenTests/ConfigRunTests.swift
2022-07-30 20:47:39 +02:00

71 lines
2.5 KiB
Swift

//
// SwiftGen
// Copyright © 2022 SwiftGen
// MIT Licence
//
import PathKit
@testable import SwiftGenCLI
import TestUtils
import XCTest
import Yams
final class ConfigRunTests: XCTestCase {
private lazy var bundle = Bundle(for: type(of: self))
private func testRun(
fixture: String,
expected expectedLogs: [(LogLevel, String)],
unwanted unwantedLevels: Set<LogLevel> = [],
assertion assertionMessage: String,
file: StaticString = #file,
line: UInt = #line
) {
let configFile = Fixtures.config(for: fixture)
let logger = TestLogger(expectedLogs: expectedLogs, unwantedLevels: unwantedLevels, file: file, line: line)
do {
let config = try Config(file: configFile, logger: logger.log)
try configFile.parent().chdir {
try config.runCommands(modernSpacing: true, logLevel: .verbose, logger: logger.log)
}
} catch Config.Error.multipleErrors(let errors) {
errors.forEach(logger.handleError)
} catch let error {
logger.handleError(error)
}
logger.waitAndAssert(message: assertionMessage)
}
func testMultipleErrors() {
let logs: [(LogLevel, String)] = [
(.error, "Parser `bar` does not exist."),
(.error, "Parser `foo` does not exist.")
]
testRun(fixture: "config-invalid-parsers", expected: logs, assertion: "Run should fail for non-existing parsers.")
}
func testMultipleEntries() {
// swiftlint:disable line_length
let logs: [(LogLevel, String)] = [
(.info, " $ swiftgen xcassets --templateName swift5 --output Generated/assets-colors.swift Fixtures/XCAssets/Colors.xcassets"),
(.info, " $ swiftgen xcassets --templateName custom-swift5 --param enumName=Pics --output Generated/assets-images.swift Fixtures/XCAssets/Images.xcassets"),
(.info, " $ swiftgen strings --templatePath templates/custom-swift5 --param enumName=Loc --output Generated/strings.swift Fixtures/Strings/Localizable.strings"),
(.info, " $ swiftgen xcassets --templateName swift5 --output Generated/assets-all.swift Fixtures/XCAssets/Colors.xcassets Fixtures/XCAssets/Images.xcassets"),
(.error, "File Fixtures/Strings/Localizable.strings not found."),
(.error, "File Fixtures/XCAssets/Colors.xcassets not found."),
(.error, "File Fixtures/XCAssets/Images.xcassets not found."),
(.error, "File Fixtures/XCAssets/Colors.xcassets not found.")
]
// swiftlint:enable line_length
testRun(
fixture: "config-with-multi-entries",
expected: logs,
assertion: "Expect multiple errors and run information"
)
}
}