diff --git a/Sources/XcbeautifyLib/CaptureGroups.swift b/Sources/XcbeautifyLib/CaptureGroups.swift index b94c6812..8c5eb719 100644 --- a/Sources/XcbeautifyLib/CaptureGroups.swift +++ b/Sources/XcbeautifyLib/CaptureGroups.swift @@ -725,6 +725,26 @@ struct RestartingTestCaptureGroup: CaptureGroup { } } +struct GenerateAssetSymbolsCaptureGroup: CaptureGroup { + static var outputType: OutputType = .task + + static let regex = XCRegex(pattern: #"^GenerateAssetSymbols (.+) \(in target '(.+)' from project '(.+)'\)$"#) + + let filePath: String + let filename: String + let target: String + let project: String + + init?(groups: [String]) { + assert(groups.count == 3) + guard let filePath = groups[safe: 0], let target = groups[safe: 1], let project = groups[safe: 2] else { return nil } + self.filePath = filePath + filename = filePath.lastPathComponent + self.target = target + self.project = project + } +} + struct GenerateCoverageDataCaptureGroup: CaptureGroup { static let outputType: OutputType = .task diff --git a/Sources/XcbeautifyLib/Formatter.swift b/Sources/XcbeautifyLib/Formatter.swift index 36eba9a0..a32cd826 100644 --- a/Sources/XcbeautifyLib/Formatter.swift +++ b/Sources/XcbeautifyLib/Formatter.swift @@ -106,6 +106,8 @@ package struct Formatter { return renderer.formatError(group: group) case let group as FileMissingErrorCaptureGroup: return renderer.formatFileMissingError(group: group) + case let group as GenerateAssetSymbolsCaptureGroup: + return renderer.formatGenerateAssetSymbols(group: group) case let group as GenerateCoverageDataCaptureGroup: return renderer.formatGenerateCoverageData(group: group) case let group as GeneratedCoverageReportCaptureGroup: diff --git a/Sources/XcbeautifyLib/Parser.swift b/Sources/XcbeautifyLib/Parser.swift index 3f939127..eb1a3662 100644 --- a/Sources/XcbeautifyLib/Parser.swift +++ b/Sources/XcbeautifyLib/Parser.swift @@ -34,6 +34,7 @@ package final class Parser { FailingTestCaptureGroup.self, UIFailingTestCaptureGroup.self, RestartingTestCaptureGroup.self, + GenerateAssetSymbolsCaptureGroup.self, GenerateCoverageDataCaptureGroup.self, GeneratedCoverageReportCaptureGroup.self, GenerateDSYMCaptureGroup.self, diff --git a/Sources/XcbeautifyLib/Renderers/OutputRendering.swift b/Sources/XcbeautifyLib/Renderers/OutputRendering.swift index 763154c3..cbf9a771 100644 --- a/Sources/XcbeautifyLib/Renderers/OutputRendering.swift +++ b/Sources/XcbeautifyLib/Renderers/OutputRendering.swift @@ -37,6 +37,7 @@ protocol OutputRendering { func formatExplicitDependencyCaptureGroup(group: ExplicitDependencyCaptureGroup) -> String? func formatFailingTest(group: FailingTestCaptureGroup) -> String func formatFileMissingError(group: FileMissingErrorCaptureGroup) -> String + func formatGenerateAssetSymbols(group: GenerateAssetSymbolsCaptureGroup) -> String func formatGenerateCoverageData(group: GenerateCoverageDataCaptureGroup) -> String func formatGenerateDsym(group: GenerateDSYMCaptureGroup) -> String func formatLdWarning(group: LDWarningCaptureGroup) -> String @@ -227,6 +228,12 @@ extension OutputRendering { nil } + func formatGenerateAssetSymbols(group: GenerateAssetSymbolsCaptureGroup) -> String { + let filename = group.filename + let target = group.target + return colored ? "[\(target.f.Cyan)] \("Generate Asset Symbols".s.Bold) \(filename)" : "[\(target)] Generate Asset Symbols \(filename)" + } + func formatGenerateDsym(group: GenerateDSYMCaptureGroup) -> String { let dsym = group.dsym let target = group.target diff --git a/Tests/XcbeautifyLibTests/CaptureGroupTests.swift b/Tests/XcbeautifyLibTests/CaptureGroupTests.swift index 156e88ca..44c97a33 100644 --- a/Tests/XcbeautifyLibTests/CaptureGroupTests.swift +++ b/Tests/XcbeautifyLibTests/CaptureGroupTests.swift @@ -73,6 +73,15 @@ final class CaptureGroupTests: XCTestCase { XCTAssertEqual(groups[5], "BackyardBirdsUI") } + func testMatchGenerateAssetSymbols() throws { + let input = #"GenerateAssetSymbols /Backyard-Birds/Widgets/Assets.xcassets (in target 'Widgets' from project 'Backyard Birds')"# + let groups = try XCTUnwrap(GenerateAssetSymbolsCaptureGroup.regex.captureGroups(for: input)) + XCTAssertEqual(groups.count, 3) + XCTAssertEqual(groups[0], "/Backyard-Birds/Widgets/Assets.xcassets") + XCTAssertEqual(groups[1], "Widgets") + XCTAssertEqual(groups[2], "Backyard Birds") + } + #if os(macOS) func testMatchLdCaptureGroup() throws { let input = #"Ld /path/to/output/DerivedData/Build/Products/Debug-iphonesimulator/output.o normal (in target 'Target' from project 'Project')"# diff --git a/Tests/XcbeautifyLibTests/ParserTests.swift b/Tests/XcbeautifyLibTests/ParserTests.swift index 89bf169e..0414b919 100644 --- a/Tests/XcbeautifyLibTests/ParserTests.swift +++ b/Tests/XcbeautifyLibTests/ParserTests.swift @@ -86,6 +86,15 @@ final class ParserTests: XCTestCase { XCTAssertEqual(captureGroup.project, "BackyardBirdsUI") } + func testGenerateAssetSymbols() throws { + let input = #"GenerateAssetSymbols /Backyard-Birds/Widgets/An-Asset_Catalog.xcassets (in target 'Some Target' from project 'A_Project')"# + let captureGroup = try XCTUnwrap(parser.parse(line: input) as? GenerateAssetSymbolsCaptureGroup) + XCTAssertEqual(captureGroup.filePath, "/Backyard-Birds/Widgets/An-Asset_Catalog.xcassets") + XCTAssertEqual(captureGroup.filename, "An-Asset_Catalog.xcassets") + XCTAssertEqual(captureGroup.target, "Some Target") + XCTAssertEqual(captureGroup.project, "A_Project") + } + #if os(macOS) func testMatchLdCommandObjectWithoutArch() throws { let input = #"Ld /Backyard-Birds/Build/Intermediates.noindex/BackyardBirdsData.build/Debug/BackyardBirdsData.build/Objects-normal/x86_64/Binary/BackyardBirdsData.o normal (in target 'BackyardBirdsDataTarget' from project 'BackyardBirdsDataProject')"# diff --git a/Tests/XcbeautifyLibTests/ParsingTests.swift b/Tests/XcbeautifyLibTests/ParsingTests.swift index 32051692..dafa1775 100644 --- a/Tests/XcbeautifyLibTests/ParsingTests.swift +++ b/Tests/XcbeautifyLibTests/ParsingTests.swift @@ -26,9 +26,9 @@ final class ParsingTests: XCTestCase { // Update this magic number whenever `uncapturedOutput` is less than the current magic number. // There's a regression whenever `uncapturedOutput` is greater than the current magic number. #if os(macOS) - XCTAssertEqual(uncapturedOutput, 63) + XCTAssertEqual(uncapturedOutput, 58) #else - XCTAssertEqual(uncapturedOutput, 79) + XCTAssertEqual(uncapturedOutput, 74) #endif } @@ -56,9 +56,9 @@ final class ParsingTests: XCTestCase { // Update this magic number whenever `uncapturedOutput` is less than the current magic number. // There's a regression whenever `uncapturedOutput` is greater than the current magic number. #if os(macOS) - XCTAssertEqual(uncapturedOutput, 2100) + XCTAssertEqual(uncapturedOutput, 1924) #else - XCTAssertEqual(uncapturedOutput, 2668) + XCTAssertEqual(uncapturedOutput, 2492) #endif } diff --git a/Tests/XcbeautifyLibTests/RendererTests/AzureDevOpsPipelinesRendererTests.swift b/Tests/XcbeautifyLibTests/RendererTests/AzureDevOpsPipelinesRendererTests.swift index 27a96473..f496f2da 100644 --- a/Tests/XcbeautifyLibTests/RendererTests/AzureDevOpsPipelinesRendererTests.swift +++ b/Tests/XcbeautifyLibTests/RendererTests/AzureDevOpsPipelinesRendererTests.swift @@ -268,6 +268,11 @@ final class AzureDevOpsPipelinesRendererTests: XCTestCase { XCTAssertEqual(logFormatted(input), output) } + func testGenerateAssetSymbols() { + let formatted = logFormatted("GenerateAssetSymbols /Backyard-Birds/Multiplatform/An_Asset_Catalog.xcassets (in target 'Backyard Birds' from project 'Backyard Birds')") + XCTAssertEqual(formatted, "[Backyard Birds] Generate Asset Symbols An_Asset_Catalog.xcassets") + } + func testGenerateCoverageData() { let formatted = logFormatted("Generating coverage data...") XCTAssertEqual(formatted, "Generating code coverage data...") diff --git a/Tests/XcbeautifyLibTests/RendererTests/GitHubActionsRendererTests.swift b/Tests/XcbeautifyLibTests/RendererTests/GitHubActionsRendererTests.swift index b52eda19..2155239c 100644 --- a/Tests/XcbeautifyLibTests/RendererTests/GitHubActionsRendererTests.swift +++ b/Tests/XcbeautifyLibTests/RendererTests/GitHubActionsRendererTests.swift @@ -265,6 +265,11 @@ final class GitHubActionsRendererTests: XCTestCase { XCTAssertEqual(logFormatted(input), output) } + func testGenerateAssetSymbols() { + let formatted = logFormatted("GenerateAssetSymbols /Backyard-Birds/LayeredArtworkLibrary/Assets-Catalog.xcassets (in target 'LayeredArtworkLibrary' from project 'LayeredArtworkLibrary')") + XCTAssertEqual(formatted, "[LayeredArtworkLibrary] Generate Asset Symbols Assets-Catalog.xcassets") + } + func testGenerateCoverageData() { let formatted = logFormatted("Generating coverage data...") XCTAssertEqual(formatted, "Generating code coverage data...") diff --git a/Tests/XcbeautifyLibTests/RendererTests/TeamCityRendererTests.swift b/Tests/XcbeautifyLibTests/RendererTests/TeamCityRendererTests.swift index 4a9e4f14..b0096a38 100644 --- a/Tests/XcbeautifyLibTests/RendererTests/TeamCityRendererTests.swift +++ b/Tests/XcbeautifyLibTests/RendererTests/TeamCityRendererTests.swift @@ -259,6 +259,11 @@ final class TeamCityRendererTests: XCTestCase { XCTAssertEqual(noColoredFormatted(input), output) } + func testGenerateAssetSymbols() { + let formatted = noColoredFormatted("GenerateAssetSymbols /Backyard-Birds/BackyardBirdsUI/SomeAssets.xcassets (in target 'BackyardBirdsUI' from project 'BackyardBirdsUI')") + XCTAssertEqual(formatted, "[BackyardBirdsUI] Generate Asset Symbols SomeAssets.xcassets") + } + func testGenerateCoverageData() { let formatted = noColoredFormatted("Generating coverage data...") XCTAssertEqual(formatted, "Generating code coverage data...") diff --git a/Tests/XcbeautifyLibTests/RendererTests/TerminalRendererTests.swift b/Tests/XcbeautifyLibTests/RendererTests/TerminalRendererTests.swift index 6b5dd918..a5095226 100644 --- a/Tests/XcbeautifyLibTests/RendererTests/TerminalRendererTests.swift +++ b/Tests/XcbeautifyLibTests/RendererTests/TerminalRendererTests.swift @@ -256,6 +256,11 @@ final class TerminalRendererTests: XCTestCase { XCTAssertEqual(noColoredFormatted(input), output) } + func testGenerateAssetSymbols() { + let formatted = noColoredFormatted("GenerateAssetSymbols /Backyard-Birds/BackyardBirdsData/Assets.xcassets (in target 'BackyardBirdsData' from project 'BackyardBirdsData')") + XCTAssertEqual(formatted, "[BackyardBirdsData] Generate Asset Symbols Assets.xcassets") + } + func testGenerateCoverageData() { let formatted = noColoredFormatted("Generating coverage data...") XCTAssertEqual(formatted, "Generating code coverage data...")