From 209ba49e3f802d31e9830af4176c6859b35ed9a0 Mon Sep 17 00:00:00 2001 From: Quentin Bandera Date: Fri, 12 Apr 2024 17:15:15 +0200 Subject: [PATCH] Gestion des commentaires --- .../Generator/StringsFileGenerator.swift | 4 +- .../ResgenSwift/Strings/Model/XcString.swift | 7 + .../Strings/StringsFileGeneratorTests.swift | 285 +++++++++++++++++- 3 files changed, 288 insertions(+), 8 deletions(-) diff --git a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift index b6786c5..c067387 100644 --- a/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift +++ b/Sources/ResgenSwift/Strings/Generator/StringsFileGenerator.swift @@ -166,7 +166,8 @@ class StringsFileGenerator { } if !skipDefinition { - for (lang, value) in definition.translations { + for (lang, value) in definition.translations where !value.isEmpty { + let localization = XCStringLocalization( lang: lang, content: XCStringLocalizationLangContent( @@ -180,6 +181,7 @@ class StringsFileGenerator { let xcStringDefinition = XCStringDefinition( title: definition.name, content: XCStringDefinitionContent( + comment: definition.comment, extractionState: "manual", localizations: XCStringLocalizationContainer( localizations: localizationTab diff --git a/Sources/ResgenSwift/Strings/Model/XcString.swift b/Sources/ResgenSwift/Strings/Model/XcString.swift index c80ad7a..b30396c 100644 --- a/Sources/ResgenSwift/Strings/Model/XcString.swift +++ b/Sources/ResgenSwift/Strings/Model/XcString.swift @@ -50,8 +50,15 @@ struct XCStringDefinition: Codable, Equatable { } struct XCStringDefinitionContent: Codable, Equatable { + let comment: String? let extractionState: String var localizations: XCStringLocalizationContainer + + init(comment: String? = nil, extractionState: String, localizations: XCStringLocalizationContainer) { + self.comment = comment + self.extractionState = extractionState + self.localizations = localizations + } } struct XCStringLocalizationContainer: Codable, Equatable { diff --git a/Tests/ResgenSwiftTests/Strings/StringsFileGeneratorTests.swift b/Tests/ResgenSwiftTests/Strings/StringsFileGeneratorTests.swift index 6c4d758..3520710 100644 --- a/Tests/ResgenSwiftTests/Strings/StringsFileGeneratorTests.swift +++ b/Tests/ResgenSwiftTests/Strings/StringsFileGeneratorTests.swift @@ -460,7 +460,7 @@ final class StringsFileGeneratorTests: XCTestCase { "en": "Section One - Definition One"], tags: ["ios","iosonly"]), getDefinition(name: "s1_def_two", - translations: ["fr": "Section Un - Definition Deux", + translations: ["fr": "", "en": "Section One - Definition Two"], tags: ["ios","iosonly"]) ] @@ -472,7 +472,8 @@ final class StringsFileGeneratorTests: XCTestCase { "en": "Section Two - Definition One"], tags: ["ios","iosonly"]), getDefinition(name: "s2_def_two", - translations: ["fr": "Section Deux - Definition Deux"], + translations: ["fr": "Section Deux - Definition Deux", + "en": "Section Two - Definition Two"], tags: ["notranslation"]) ] @@ -486,19 +487,19 @@ final class StringsFileGeneratorTests: XCTestCase { // [[section_one]] // [s1_def_one] - // fr = Section Un - Definition Un + // fr = // en = Section One - Definition One // tags = ios,iosonly // comments = // [s1_def_two] - // fr = Section Un - Definition Deux + // fr = // en = Section One - Definition Two // tags = ios,iosonly // comments = // // [[section_two] // [s2_def_one] - // fr = Section Deux - Definition Un + // fr = // en = Section Two - Definition One // tags = ios,iosonly // comments = @@ -517,6 +518,276 @@ final class StringsFileGeneratorTests: XCTestCase { XCStringDefinition( title: "s1_def_one", content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [ + XCStringLocalization( + lang: "en", + content: XCStringLocalizationLangContent( + stringUnit: DefaultStringUnit( + state: "translated", + value: "Section One - Definition One" + ) + ) + ) + ] + ) + ) + ), + XCStringDefinition( + title: "s1_def_two", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [ + XCStringLocalization( + lang: "en", + content: XCStringLocalizationLangContent( + stringUnit: DefaultStringUnit( + state: "translated", + value: "Section One - Definition Two" + ) + ) + ) + ] + ) + ) + ), + XCStringDefinition( + title: "s2_def_one", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [ + XCStringLocalization( + lang: "en", + content: XCStringLocalizationLangContent( + stringUnit: DefaultStringUnit( + state: "translated", + value: "Section Two - Definition One" + ) + ) + ) + ] + ) + ) + ), + XCStringDefinition( + title: "s2_def_two", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [ + XCStringLocalization( + lang: "en", + content: XCStringLocalizationLangContent( + stringUnit: DefaultStringUnit( + state: "translated", + value: "Section Two - Definition Two" + ) + ) + ), + XCStringLocalization( + lang: "fr", + content: XCStringLocalizationLangContent( + stringUnit: DefaultStringUnit( + state: "translated", + value: "Section Deux - Definition Deux" + ) + ) + ) + ] + ) + ) + ) + ] + ), + version: "1.0" + ) + + XCTAssertEqual(rootObject, expect) + } + + func testGenerateXcStringsRootObjectWithNoTranslations() { + // Given + let sectionOne = Section(name: "section_one") + sectionOne.definitions = [ + getDefinition(name: "s1_def_one", + translations: ["fr": "", + "en": ""], + tags: ["ios","iosonly"]), + getDefinition(name: "s1_def_two", + translations: ["fr": "", + "en": ""], + tags: ["ios","iosonly"]) + ] + + let sectionTwo = Section(name: "section_two") + sectionTwo.definitions = [ + getDefinition(name: "s2_def_one", + translations: ["fr": "", + "en": ""], + tags: ["ios","iosonly"]), + getDefinition(name: "s2_def_two", + translations: ["fr": "", + "en": ""], + tags: ["notranslation"]) + ] + + // When + let rootObject = StringsFileGenerator.generateRootObject( + langs: ["fr", "en"], + defaultLang: "en", + tags: ["ios", "iosonly", "notranslation"], + sections: [sectionOne, sectionTwo] + ) + + // [[section_one]] + // [s1_def_one] + // fr = + // en = + // tags = ios,iosonly + // comments = + // [s1_def_two] + // fr = + // en = + // tags = ios,iosonly + // comments = + // + // [[section_two] + // [s2_def_one] + // fr = + // en = + // tags = ios,iosonly + // comments = + // [s2_def_two] + // fr = + // en = + // tags = ios,iosonly + // comments = + + // Expect + let expect = + Root( + sourceLanguage: "en", + strings: XCStringDefinitionContainer( + strings: [ + XCStringDefinition( + title: "s1_def_one", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [] + ) + ) + ), + XCStringDefinition( + title: "s1_def_two", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [] + ) + ) + ), + XCStringDefinition( + title: "s2_def_one", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [] + ) + ) + ), + XCStringDefinition( + title: "s2_def_two", + content: XCStringDefinitionContent( + extractionState: "manual", + localizations: XCStringLocalizationContainer( + localizations: [] + ) + ) + ) + ] + ), + version: "1.0" + ) + + XCTAssertEqual(rootObject, expect) + } + + func testGenerateXcStringsRootObjectWithComments() { + // Given + + // [[section_one]] + // [s1_def_one] + // fr = Section Un - Definition Un + // en = Section One - Definition One + // tags = ios,iosonly + // comments = Comment 1 + // [s1_def_two] + // fr = Section Un - Definition Deux + // en = Section One - Definition Two + // tags = ios,iosonly + // comments = Comment 2 + // + // [[section_two] + // [s2_def_one] + // fr = Section Deux - Definition Un + // en = Section Two - Definition One + // tags = ios,iosonly + // comments = + // [s2_def_two] + // fr = Section Deux - Definition deux + // en = Section Two - Definition Two + // tags = ios,iosonly + // comments = + + + let sectionOne = Section(name: "section_one") + sectionOne.definitions = [ + getDefinition(name: "s1_def_one", + translations: ["fr": "Section Un - Definition Un", + "en": "Section One - Definition One"], + tags: ["ios","iosonly"], + comment: "Comment 1"), + getDefinition(name: "s1_def_two", + translations: ["fr": "Section Un - Definition Deux", + "en": "Section One - Definition Two"], + tags: ["ios","iosonly"], + comment: "Comment 2") + ] + + let sectionTwo = Section(name: "section_two") + sectionTwo.definitions = [ + getDefinition(name: "s2_def_one", + translations: ["fr": "Section Deux - Definition Un", + "en": "Section Two - Definition One"], + tags: ["ios","iosonly"]), + getDefinition(name: "s2_def_two", + translations: ["fr": "Section Deux - Definition Deux", + "en": "Section Two - Definition Two"], + tags: ["notranslation"]) + ] + + // When + let rootObject = StringsFileGenerator.generateRootObject( + langs: ["fr", "en"], + defaultLang: "en", + tags: ["ios", "iosonly", "notranslation"], + sections: [sectionOne, sectionTwo] + ) + + // Expect + let expect = + Root( + sourceLanguage: "en", + strings: XCStringDefinitionContainer( + strings: [ + XCStringDefinition( + title: "s1_def_one", + content: XCStringDefinitionContent( + comment: "Comment 1", extractionState: "manual", localizations: XCStringLocalizationContainer( localizations: [ @@ -545,6 +816,7 @@ final class StringsFileGeneratorTests: XCTestCase { XCStringDefinition( title: "s1_def_two", content: XCStringDefinitionContent( + comment: "Comment 2", extractionState: "manual", localizations: XCStringLocalizationContainer( localizations: [ @@ -590,7 +862,7 @@ final class StringsFileGeneratorTests: XCTestCase { content: XCStringLocalizationLangContent( stringUnit: DefaultStringUnit( state: "translated", - value: "Section Two - Definition Un" + value: "Section Deux - Definition Un" ) ) ) @@ -707,7 +979,6 @@ final class StringsFileGeneratorTests: XCTestCase { // "version" : "1.0" // } // """ - XCTAssertEqual(rootObject, expect) }