feat(RES-34): Fix plist font filename (#14)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good
Reviewed-on: #14
This commit is contained in:
@ -84,7 +84,7 @@ final class AnalyticsDefinitionTests: XCTestCase {
|
||||
name: "Ecran un",
|
||||
action: "",
|
||||
category: "",
|
||||
params: []
|
||||
params: [:]
|
||||
)
|
||||
}
|
||||
"""
|
||||
@ -127,7 +127,7 @@ final class AnalyticsDefinitionTests: XCTestCase {
|
||||
name: "Ecran un",
|
||||
action: "",
|
||||
category: "",
|
||||
params: []
|
||||
params: [:]
|
||||
)
|
||||
}
|
||||
"""
|
||||
|
@ -5,6 +5,8 @@
|
||||
// Created by Thibaut Schmitt on 06/09/2022.
|
||||
//
|
||||
|
||||
// CPD-OFF
|
||||
|
||||
import Foundation
|
||||
import XCTest
|
||||
import ToolCore
|
||||
@ -51,20 +53,24 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
]
|
||||
|
||||
// When
|
||||
AnalyticsGenerator.targets = [TrackerType.firebase]
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics")
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(
|
||||
targets: [TrackerType.firebase],
|
||||
sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics"
|
||||
)
|
||||
|
||||
// Expect Analytics
|
||||
let expect = """
|
||||
// Generated by ResgenSwift.Analytics 1.2
|
||||
// Generated by ResgenSwift.Analytics \(ResgenSwiftVersion)
|
||||
|
||||
import Firebase
|
||||
import FirebaseAnalytics
|
||||
|
||||
// MARK: - Protocol
|
||||
|
||||
protocol AnalyticsManagerProtocol {
|
||||
|
||||
func logScreen(name: String, path: String)
|
||||
func logEvent(
|
||||
name: String,
|
||||
@ -77,9 +83,10 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Firebase
|
||||
|
||||
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
|
||||
|
||||
func logScreen(name: String, path: String) {
|
||||
var parameters = [
|
||||
AnalyticsParameterScreenName: name
|
||||
AnalyticsParameterScreenName: name as NSObject
|
||||
]
|
||||
|
||||
Analytics.logEvent(
|
||||
@ -94,19 +101,25 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
category: String,
|
||||
params: [String: Any]?
|
||||
) {
|
||||
var parameters: [String:Any] = [
|
||||
"action": action,
|
||||
"category": category,
|
||||
var parameters: [String:NSObject] = [
|
||||
"action": action as NSObject,
|
||||
"category": category as NSObject,
|
||||
]
|
||||
|
||||
if let supplementaryParameters = params {
|
||||
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
|
||||
return origin
|
||||
for (newKey, newValue) in supplementaryParameters {
|
||||
if parameters.contains(where: { (key: String, value: NSObject) in
|
||||
key == newKey
|
||||
}) {
|
||||
continue
|
||||
}
|
||||
|
||||
parameters[newKey] = newValue as? NSObject
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Analytics.logEvent(
|
||||
name,
|
||||
name.replacingOccurrences(of: [" "], with: "_"),
|
||||
parameters: parameters
|
||||
)
|
||||
}
|
||||
@ -115,8 +128,9 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Manager
|
||||
|
||||
class AnalyticsManager {
|
||||
|
||||
static var shared = AnalyticsManager()
|
||||
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
var managers: [AnalyticsManagerProtocol] = []
|
||||
@ -132,15 +146,15 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
func configure() {
|
||||
managers.append(FirebaseAnalyticsManager())
|
||||
}
|
||||
|
||||
|
||||
private func logScreen(name: String, path: String) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
|
||||
managers.forEach { manager in
|
||||
manager.logScreen(name: name, path: path)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func logEvent(
|
||||
name: String,
|
||||
action: String,
|
||||
@ -148,7 +162,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
|
||||
managers.forEach { manager in
|
||||
manager.logEvent(
|
||||
name: name,
|
||||
@ -173,7 +187,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
name: "s1 def two",
|
||||
action: "",
|
||||
category: "",
|
||||
params: []
|
||||
params: [:]
|
||||
)
|
||||
}
|
||||
|
||||
@ -216,20 +230,23 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
]
|
||||
|
||||
// When
|
||||
AnalyticsGenerator.targets = [TrackerType.matomo]
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics")
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(
|
||||
targets: [TrackerType.matomo],
|
||||
sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics"
|
||||
)
|
||||
// Expect Analytics
|
||||
let expect = """
|
||||
// Generated by ResgenSwift.Analytics 1.2
|
||||
// Generated by ResgenSwift.Analytics \(ResgenSwiftVersion)
|
||||
|
||||
import MatomoTracker
|
||||
|
||||
// MARK: - Protocol
|
||||
|
||||
protocol AnalyticsManagerProtocol {
|
||||
|
||||
func logScreen(name: String, path: String)
|
||||
func logEvent(
|
||||
name: String,
|
||||
@ -242,7 +259,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Matomo
|
||||
|
||||
class MatomoAnalyticsManager: AnalyticsManagerProtocol {
|
||||
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private var tracker: MatomoTracker
|
||||
@ -256,11 +273,11 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
siteId: siteId,
|
||||
baseURL: URL(string: url)!
|
||||
)
|
||||
|
||||
|
||||
#if DEBUG
|
||||
tracker.dispatchInterval = 5
|
||||
#endif
|
||||
|
||||
|
||||
#if DEBUG
|
||||
tracker.logger = DefaultLogger(minLevel: .verbose)
|
||||
#endif
|
||||
@ -268,7 +285,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
debugPrint("[Matomo service] Configured with content base: \\(tracker.contentBase?.absoluteString ?? "-")")
|
||||
debugPrint("[Matomo service] Opt out: \\(tracker.isOptedOut)")
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Methods
|
||||
|
||||
func logScreen(name: String, path: String) {
|
||||
@ -289,7 +306,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard !tracker.isOptedOut else { return }
|
||||
|
||||
|
||||
tracker.track(
|
||||
eventWithCategory: category,
|
||||
action: action,
|
||||
@ -303,8 +320,9 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Manager
|
||||
|
||||
class AnalyticsManager {
|
||||
|
||||
static var shared = AnalyticsManager()
|
||||
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
var managers: [AnalyticsManagerProtocol] = []
|
||||
@ -325,15 +343,15 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
private func logScreen(name: String, path: String) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
|
||||
managers.forEach { manager in
|
||||
manager.logScreen(name: name, path: path)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func logEvent(
|
||||
name: String,
|
||||
action: String,
|
||||
@ -341,7 +359,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
|
||||
managers.forEach { manager in
|
||||
manager.logEvent(
|
||||
name: name,
|
||||
@ -366,7 +384,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
name: "s1 def two",
|
||||
action: "test",
|
||||
category: "test",
|
||||
params: []
|
||||
params: [:]
|
||||
)
|
||||
}
|
||||
|
||||
@ -379,7 +397,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"""
|
||||
|
||||
if extensionContent != expect {
|
||||
@ -409,21 +427,25 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
]
|
||||
|
||||
// When
|
||||
AnalyticsGenerator.targets = [TrackerType.matomo, TrackerType.firebase]
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics")
|
||||
let extensionContent = AnalyticsGenerator.getExtensionContent(
|
||||
targets: [TrackerType.matomo, TrackerType.firebase],
|
||||
sections: [sectionOne, sectionTwo, sectionThree],
|
||||
tags: ["ios", "iosonly"],
|
||||
staticVar: false,
|
||||
extensionName: "GenAnalytics"
|
||||
)
|
||||
|
||||
// Expect Analytics
|
||||
let expect = """
|
||||
// Generated by ResgenSwift.Analytics 1.2
|
||||
// Generated by ResgenSwift.Analytics \(ResgenSwiftVersion)
|
||||
|
||||
import MatomoTracker
|
||||
import Firebase
|
||||
import FirebaseAnalytics
|
||||
|
||||
// MARK: - Protocol
|
||||
|
||||
protocol AnalyticsManagerProtocol {
|
||||
|
||||
func logScreen(name: String, path: String)
|
||||
func logEvent(
|
||||
name: String,
|
||||
@ -436,7 +458,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Matomo
|
||||
|
||||
class MatomoAnalyticsManager: AnalyticsManagerProtocol {
|
||||
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
private var tracker: MatomoTracker
|
||||
@ -450,11 +472,11 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
siteId: siteId,
|
||||
baseURL: URL(string: url)!
|
||||
)
|
||||
|
||||
|
||||
#if DEBUG
|
||||
tracker.dispatchInterval = 5
|
||||
#endif
|
||||
|
||||
|
||||
#if DEBUG
|
||||
tracker.logger = DefaultLogger(minLevel: .verbose)
|
||||
#endif
|
||||
@ -462,13 +484,13 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
debugPrint("[Matomo service] Configured with content base: \\(tracker.contentBase?.absoluteString ?? "-")")
|
||||
debugPrint("[Matomo service] Opt out: \\(tracker.isOptedOut)")
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Methods
|
||||
|
||||
func logScreen(name: String, path: String) {
|
||||
guard !tracker.isOptedOut else { return }
|
||||
guard let trackerUrl = tracker.contentBase?.absoluteString else { return }
|
||||
|
||||
|
||||
let urlString = URL(string: "\\(trackerUrl)" + "/" + "\\(path)" + "iOS")
|
||||
tracker.track(
|
||||
view: [name],
|
||||
@ -483,7 +505,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard !tracker.isOptedOut else { return }
|
||||
|
||||
|
||||
tracker.track(
|
||||
eventWithCategory: category,
|
||||
action: action,
|
||||
@ -493,13 +515,13 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Firebase
|
||||
|
||||
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
|
||||
func logScreen(name: String, path: String) {
|
||||
var parameters = [
|
||||
AnalyticsParameterScreenName: name
|
||||
AnalyticsParameterScreenName: name as NSObject
|
||||
]
|
||||
|
||||
Analytics.logEvent(
|
||||
@ -514,19 +536,25 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
category: String,
|
||||
params: [String: Any]?
|
||||
) {
|
||||
var parameters: [String:Any] = [
|
||||
"action": action,
|
||||
"category": category,
|
||||
var parameters: [String:NSObject] = [
|
||||
"action": action as NSObject,
|
||||
"category": category as NSObject,
|
||||
]
|
||||
|
||||
if let supplementaryParameters = params {
|
||||
parameters.merge(supplementaryParameters) { (origin, new) -> Any in
|
||||
return origin
|
||||
for (newKey, newValue) in supplementaryParameters {
|
||||
if parameters.contains(where: { (key: String, value: NSObject) in
|
||||
key == newKey
|
||||
}) {
|
||||
continue
|
||||
}
|
||||
|
||||
parameters[newKey] = newValue as? NSObject
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Analytics.logEvent(
|
||||
name,
|
||||
name.replacingOccurrences(of: [" "], with: "_"),
|
||||
parameters: parameters
|
||||
)
|
||||
}
|
||||
@ -535,8 +563,9 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
// MARK: - Manager
|
||||
|
||||
class AnalyticsManager {
|
||||
|
||||
static var shared = AnalyticsManager()
|
||||
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
var managers: [AnalyticsManagerProtocol] = []
|
||||
@ -558,7 +587,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
)
|
||||
managers.append(FirebaseAnalyticsManager())
|
||||
}
|
||||
|
||||
|
||||
private func logScreen(name: String, path: String) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
@ -566,7 +595,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
manager.logScreen(name: name, path: path)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func logEvent(
|
||||
name: String,
|
||||
action: String,
|
||||
@ -574,7 +603,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
params: [String: Any]?
|
||||
) {
|
||||
guard isEnabled else { return }
|
||||
|
||||
|
||||
managers.forEach { manager in
|
||||
manager.logEvent(
|
||||
name: name,
|
||||
@ -599,7 +628,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
name: "s1 def two",
|
||||
action: "test",
|
||||
category: "test",
|
||||
params: []
|
||||
params: [:]
|
||||
)
|
||||
}
|
||||
|
||||
@ -612,7 +641,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"""
|
||||
|
||||
if extensionContent != expect {
|
||||
@ -621,3 +650,5 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
||||
XCTAssertEqual(extensionContent.adaptForXCTest(), expect.adaptForXCTest())
|
||||
}
|
||||
}
|
||||
|
||||
// CPD-ON
|
||||
|
@ -16,8 +16,8 @@ final class FontExtensionGeneratorTests: XCTestCase {
|
||||
func test_uiKit_GeneratedExtensionContent() {
|
||||
// Given
|
||||
let fontNames: [FontName] = [
|
||||
"CircularStd-Regular",
|
||||
"CircularStd-Bold"
|
||||
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
|
||||
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
|
||||
]
|
||||
|
||||
// When
|
||||
@ -59,8 +59,8 @@ final class FontExtensionGeneratorTests: XCTestCase {
|
||||
func test_swiftUI_GeneratedExtensionContent() {
|
||||
// Given
|
||||
let fontNames: [FontName] = [
|
||||
"CircularStd-Regular",
|
||||
"CircularStd-Bold"
|
||||
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
|
||||
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
|
||||
]
|
||||
|
||||
// When
|
||||
|
@ -14,8 +14,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_uiKit_GeneratedProperty_noForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "CircularStdBold"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "CircularStdBold",
|
||||
filename: "CircularStd-Bold",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: true, isSwiftUI: false)
|
||||
|
||||
@ -31,7 +35,11 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_uiKit_GeneratedProperty_withForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "[Circular_Std+Bold-Underline]"
|
||||
let fontName = FontName(
|
||||
postscriptName: "[Circular_Std+Bold-Underline]",
|
||||
filename: "Circular_Std+Bold-Underline",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: true, isSwiftUI: false)
|
||||
@ -48,8 +56,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_uiKit_GeneratedMethod_noForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "CircularStdBold"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "CircularStdBold",
|
||||
filename: "CircularStd-Bold",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: false, isSwiftUI: false)
|
||||
|
||||
@ -65,8 +77,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_uiKit_GeneratedMethod_withForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "[Circular_Std+Bold-Underline]"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "[Circular_Std+Bold-Underline]",
|
||||
filename: "Circular_Std+Bold-Underline",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: false, isSwiftUI: false)
|
||||
|
||||
@ -82,8 +98,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_swiftUI_GeneratedProperty_noForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "CircularStdBold"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "CircularStdBold",
|
||||
filename: "CircularStd-Bold",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: true, isSwiftUI: true)
|
||||
|
||||
@ -99,8 +119,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_swiftUI_GeneratedProperty_withForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "[Circular_Std+Bold-Underline]"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "[Circular_Std+Bold-Underline]",
|
||||
filename: "Circular_Std+Bold-Underline",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: true, isSwiftUI: true)
|
||||
|
||||
@ -116,8 +140,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_swiftUI_GeneratedMethod_noForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "CircularStdBold"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "CircularStdBold",
|
||||
filename: "CircularStd-Bold",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: false, isSwiftUI: true)
|
||||
|
||||
@ -133,8 +161,12 @@ final class FontNameTests: XCTestCase {
|
||||
|
||||
func test_swiftUI_GeneratedMethod_withForbiddenCharacter() {
|
||||
// Given
|
||||
let fontName: FontName = "[Circular_Std+Bold-Underline]"
|
||||
|
||||
let fontName = FontName(
|
||||
postscriptName: "[Circular_Std+Bold-Underline]",
|
||||
filename: "Circular_Std+Bold-Underline",
|
||||
fileExtension: "ttf"
|
||||
)
|
||||
|
||||
// When
|
||||
let property = fontName.getProperty(isStatic: false, isSwiftUI: true)
|
||||
|
||||
|
@ -14,8 +14,8 @@ final class FontPlistGeneratorTests: XCTestCase {
|
||||
func testGeneratedPlist() {
|
||||
// Given
|
||||
let fontNames: [FontName] = [
|
||||
"CircularStd-Regular",
|
||||
"CircularStd-Bold"
|
||||
FontName(postscriptName: "CircularStd-Regular", filename: "CircularStd-Regular", fileExtension: "ttf"),
|
||||
FontName(postscriptName: "CircularStd-Bold", filename: "CircularStd-Bold", fileExtension: "ttf")
|
||||
]
|
||||
|
||||
// When
|
||||
@ -25,8 +25,8 @@ final class FontPlistGeneratorTests: XCTestCase {
|
||||
let expect = """
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>CircularStd-Regular</string>
|
||||
<string>CircularStd-Bold</string>
|
||||
<string>CircularStd-Regular.ttf</string>
|
||||
<string>CircularStd-Bold.ttf</string>
|
||||
</array>
|
||||
"""
|
||||
|
||||
|
@ -14,9 +14,8 @@ final class ResgenCLITests: XCTestCase {
|
||||
return
|
||||
}
|
||||
|
||||
// Mac Catalyst won't have `Process`, but it is supported for executables.
|
||||
#if !targetEnvironment(macCatalyst)
|
||||
|
||||
// Process available on Mac only
|
||||
#if os(macOS)
|
||||
let fooBinary = productsDirectory.appendingPathComponent("ResgenSwift")
|
||||
|
||||
let process = Process()
|
||||
|
@ -5,6 +5,8 @@
|
||||
// Created by Thibaut Schmitt on 06/09/2022.
|
||||
//
|
||||
|
||||
// CPD-OFF
|
||||
|
||||
import Foundation
|
||||
import XCTest
|
||||
|
||||
@ -872,3 +874,5 @@ final class DefinitionTests: XCTestCase {
|
||||
XCTAssertEqual(propertyEnUs.adaptForXCTest(), expectEnUs.adaptForXCTest())
|
||||
}
|
||||
}
|
||||
|
||||
// CPD-ON
|
||||
|
@ -0,0 +1,51 @@
|
||||
//
|
||||
// StringsFileGenerator+OldStringsFile.swift
|
||||
// ResgenSwift
|
||||
//
|
||||
// Created by Thibaut Schmitt on 30/04/2025.
|
||||
//
|
||||
|
||||
import ToolCore
|
||||
|
||||
extension StringsFileGeneratorTests {
|
||||
|
||||
static let appleStringsFileExpectationFr = """
|
||||
/**
|
||||
* Apple Strings File
|
||||
* Generated by ResgenSwift \(ResgenSwiftVersion)
|
||||
* Language: fr
|
||||
*/
|
||||
|
||||
/********** section_one **********/
|
||||
|
||||
"s1_def_one" = "Section Un - Definition Un";
|
||||
|
||||
"s1_def_two" = "Section Un - Definition Deux";
|
||||
|
||||
/********** section_two **********/
|
||||
|
||||
"s2_def_one" = "Section Deux - Definition Un";
|
||||
|
||||
"s2_def_two" = "Section Deux - Definition Deux";
|
||||
"""
|
||||
|
||||
static let appleStringsFileExpectationEn = """
|
||||
/**
|
||||
* Apple Strings File
|
||||
* Generated by ResgenSwift \(ResgenSwiftVersion)
|
||||
* Language: en
|
||||
*/
|
||||
|
||||
/********** section_one **********/
|
||||
|
||||
"s1_def_one" = "Section One - Definition One";
|
||||
|
||||
"s1_def_two" = "Section One - Definition Two";
|
||||
|
||||
/********** section_two **********/
|
||||
|
||||
"s2_def_one" = "Section Two - Definition One";
|
||||
|
||||
"s2_def_two" = "Section Deux - Definition Deux";
|
||||
"""
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
//
|
||||
// StringsFileGenerator+R2ExtensionsExpectation.swift
|
||||
// ResgenSwift
|
||||
//
|
||||
// Created by Thibaut Schmitt on 30/04/2025.
|
||||
//
|
||||
|
||||
@testable import ResgenSwift
|
||||
import ToolCore
|
||||
|
||||
extension StringsFileGeneratorTests {
|
||||
|
||||
static func getExtensionContentExpectation(
|
||||
staticVar: Bool,
|
||||
s1DefOneFr: String = "Section Un - Definition Un",
|
||||
s1DefOneComment: String = "",
|
||||
s1DefTwoFr: String = "Section Un - Definition Deux",
|
||||
s1DefTwoComment: String = "",
|
||||
s2DefOneFr: String = "Section Deux - Definition Un",
|
||||
s2DefOneComment: String = "",
|
||||
s2DefTwoFr: String = "Section Deux - Definition Deux",
|
||||
s2DefTwoComment: String = "",
|
||||
) -> String {
|
||||
"""
|
||||
// Generated by ResgenSwift.Strings.Stringium \(ResgenSwiftVersion)
|
||||
|
||||
import UIKit
|
||||
|
||||
fileprivate let kStringsFileName = "myInputFilename"
|
||||
|
||||
extension GenStrings {
|
||||
|
||||
enum KeyStrings: String {
|
||||
case s1_def_one = "s1_def_one"
|
||||
case s1_def_two = "s1_def_two"
|
||||
case s2_def_one = "s2_def_one"
|
||||
case s2_def_two = "s2_def_two"
|
||||
|
||||
var keyPath: KeyPath<GenStrings, String> {
|
||||
switch self {
|
||||
case .s1_def_one: return \\GenStrings.s1_def_one
|
||||
case .s1_def_two: return \\GenStrings.s1_def_two
|
||||
case .s2_def_one: return \\GenStrings.s2_def_one
|
||||
case .s2_def_two: return \\GenStrings.s2_def_two
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - section_one
|
||||
|
||||
/// Translation in fr :
|
||||
/// \(s1DefOneFr)
|
||||
///
|
||||
/// Comment :
|
||||
/// \(s1DefOneComment.isEmpty ? "No comment" : s1DefOneComment)
|
||||
\(staticVar ? "static " : "")var s1_def_one: String {
|
||||
NSLocalizedString("s1_def_one", tableName: kStringsFileName, bundle: Bundle.main, value: "Section Un - Definition Un", comment: "\(s1DefOneComment)")
|
||||
}
|
||||
|
||||
/// Translation in fr :
|
||||
/// \(s1DefTwoFr)
|
||||
///
|
||||
/// Comment :
|
||||
/// \(s1DefTwoComment.isEmpty ? "No comment" : s1DefTwoComment)
|
||||
\(staticVar ? "static " : "")var s1_def_two: String {
|
||||
NSLocalizedString("s1_def_two", tableName: kStringsFileName, bundle: Bundle.main, value: "Section Un - Definition Deux", comment: "\(s1DefTwoComment)")
|
||||
}
|
||||
|
||||
// MARK: - section_two
|
||||
|
||||
/// Translation in fr :
|
||||
/// \(s2DefOneFr)
|
||||
///
|
||||
/// Comment :
|
||||
/// \(s2DefOneComment.isEmpty ? "No comment" : s2DefOneComment)
|
||||
\(staticVar ? "static " : "")var s2_def_one: String {
|
||||
NSLocalizedString("s2_def_one", tableName: kStringsFileName, bundle: Bundle.main, value: "Section Deux - Definition Un", comment: "\(s2DefOneComment)")
|
||||
}
|
||||
|
||||
/// Translation in fr :
|
||||
/// \(s2DefTwoFr)
|
||||
///
|
||||
/// Comment :
|
||||
/// \(s2DefTwoComment.isEmpty ? "No comment" : s2DefTwoComment)
|
||||
\(staticVar ? "static " : "")var s2_def_two: String {
|
||||
NSLocalizedString("s2_def_two", tableName: kStringsFileName, bundle: Bundle.main, value: "Section Deux - Definition Deux", comment: "\(s2DefTwoComment)")
|
||||
}
|
||||
}
|
||||
"""
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
//
|
||||
// StringsFileGenerator+XCStringsExpectation.swift
|
||||
// ResgenSwift
|
||||
//
|
||||
// Created by Thibaut Schmitt on 30/04/2025.
|
||||
//
|
||||
|
||||
@testable import ResgenSwift
|
||||
|
||||
extension XCStringDefinition {
|
||||
|
||||
enum Mock {
|
||||
|
||||
static func getDefinitionSectionOne(
|
||||
defOneFr: String = "Section Un - Definition Un",
|
||||
defOneEn: String = "Section One - Definition One",
|
||||
defOneComment: String? = nil,
|
||||
defTwoFr: String = "Section Un - Definition Deux",
|
||||
defTwoEn: String = "Section One - Definition Two",
|
||||
defTwoComment: String? = nil
|
||||
) -> [XCStringDefinition] {
|
||||
[
|
||||
XCStringDefinition(
|
||||
title: "s1_def_one",
|
||||
content: XCStringDefinitionContent(
|
||||
comment: defOneComment,
|
||||
extractionState: "manual",
|
||||
localizations: XCStringLocalizationContainer(
|
||||
localizations: getXCStringLocalization(
|
||||
defFr: defOneFr,
|
||||
defEn: defOneEn
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
XCStringDefinition(
|
||||
title: "s1_def_two",
|
||||
content: XCStringDefinitionContent(
|
||||
comment: defTwoComment,
|
||||
extractionState: "manual",
|
||||
localizations: XCStringLocalizationContainer(
|
||||
localizations: getXCStringLocalization(
|
||||
defFr: defTwoFr,
|
||||
defEn: defTwoEn
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
}
|
||||
|
||||
static func getDefinitionSectionTwo(
|
||||
defOneFr: String = "Section Deux - Definition Un",
|
||||
defOneEn: String = "Section Two - Definition One",
|
||||
defOneComment: String? = nil,
|
||||
defTwoFr: String = "Section Deux - Definition Deux",
|
||||
defTwoEn: String? = nil,
|
||||
defTwoComment: String? = nil
|
||||
) -> [XCStringDefinition] {
|
||||
[
|
||||
XCStringDefinition(
|
||||
title: "s2_def_one",
|
||||
content: XCStringDefinitionContent(
|
||||
comment: defOneComment,
|
||||
extractionState: "manual",
|
||||
localizations: XCStringLocalizationContainer(
|
||||
localizations: getXCStringLocalization(
|
||||
defFr: defOneFr,
|
||||
defEn: defOneEn
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
XCStringDefinition(
|
||||
title: "s2_def_two",
|
||||
content: XCStringDefinitionContent(
|
||||
comment: defTwoComment,
|
||||
extractionState: "manual",
|
||||
localizations: XCStringLocalizationContainer(
|
||||
localizations: getXCStringLocalization(
|
||||
defFr: defTwoFr,
|
||||
defEn: defTwoEn ?? ""
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
}
|
||||
|
||||
// MARK: - Private methods
|
||||
|
||||
private static func getXCStringLocalization(
|
||||
defFr: String,
|
||||
defEn: String
|
||||
) -> [XCStringLocalization] {
|
||||
var localizations = [XCStringLocalization]()
|
||||
|
||||
if defFr.isEmpty == false {
|
||||
localizations.append(
|
||||
XCStringLocalization(
|
||||
lang: "fr",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: defFr
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if defEn.isEmpty == false {
|
||||
localizations.append(
|
||||
XCStringLocalization(
|
||||
lang: "en",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: defEn
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
return localizations
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
//
|
||||
// Section+Mock.swift
|
||||
// ResgenSwift
|
||||
//
|
||||
// Created by Thibaut Schmitt on 30/04/2025.
|
||||
//
|
||||
|
||||
@testable import ResgenSwift
|
||||
|
||||
extension Section {
|
||||
|
||||
enum Mock {
|
||||
|
||||
static func getSectionOne(
|
||||
defOneFr: String = "Section Un - Definition Un",
|
||||
defOneEn: String = "Section One - Definition One",
|
||||
defOneComment: String? = nil,
|
||||
defOneTag: [String] = ["ios","iosonly"],
|
||||
defTwoFr: String = "Section Un - Definition Deux",
|
||||
defTwoEn: String = "Section One - Definition Two",
|
||||
defTwoComment: String? = nil,
|
||||
defTwoTag: [String] = ["ios","iosonly"]
|
||||
) -> Section {
|
||||
let section = Section(name: "section_one")
|
||||
section.definitions = [
|
||||
Self.getDefinition(
|
||||
name: "s1_def_one",
|
||||
translations: ["fr": defOneFr,
|
||||
"en": defOneEn],
|
||||
tags: defOneTag,
|
||||
comment: defOneComment
|
||||
),
|
||||
Self.getDefinition(
|
||||
name: "s1_def_two",
|
||||
translations: ["fr": defTwoFr,
|
||||
"en": defTwoEn],
|
||||
tags: defTwoTag,
|
||||
comment: defTwoComment
|
||||
)
|
||||
]
|
||||
return section
|
||||
}
|
||||
|
||||
static func getSectionTwo(
|
||||
defOneFr: String = "Section Deux - Definition Un",
|
||||
defOneEn: String = "Section Two - Definition One",
|
||||
defOneComment: String? = nil,
|
||||
defOneTag: [String] = ["ios","iosonly"],
|
||||
defTwoFr: String = "Section Deux - Definition Deux",
|
||||
defTwoEn: String? = nil,
|
||||
defTwoComment: String? = nil,
|
||||
defTwoTag: [String] = ["notranslation"]
|
||||
) -> Section {
|
||||
let section = Section(name: "section_two")
|
||||
let defTwoTranslations: [String: String] = {
|
||||
var translations = ["fr": "Section Deux - Definition Deux"]
|
||||
if let defTwoEn {
|
||||
translations["en"] = defTwoEn
|
||||
}
|
||||
return translations
|
||||
}()
|
||||
section.definitions = [
|
||||
Self.getDefinition(
|
||||
name: "s2_def_one",
|
||||
translations: ["fr": defOneFr,
|
||||
"en": defOneEn],
|
||||
tags: defOneTag,
|
||||
comment: defOneComment
|
||||
),
|
||||
Self.getDefinition(
|
||||
name: "s2_def_two",
|
||||
translations: defTwoTranslations,
|
||||
tags: defTwoTag,
|
||||
comment: defTwoComment
|
||||
)
|
||||
]
|
||||
return section
|
||||
}
|
||||
|
||||
// MARK: - Private methods
|
||||
|
||||
private static func getDefinition(
|
||||
name: String,
|
||||
translations: [String: String],
|
||||
tags: [String],
|
||||
comment: String? = nil
|
||||
) -> Definition {
|
||||
let definition = Definition(name: name)
|
||||
definition.tags = tags
|
||||
definition.translations = translations
|
||||
definition.comment = comment
|
||||
return definition
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,491 @@
|
||||
//
|
||||
// StringsFileGeneratorTests.swift
|
||||
//
|
||||
//
|
||||
// Created by Thibaut Schmitt on 06/09/2022.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import XCTest
|
||||
import ToolCore
|
||||
|
||||
@testable import ResgenSwift
|
||||
|
||||
final class StringsFileGeneratorTests: XCTestCase {
|
||||
|
||||
// MARK: - Strings File Content
|
||||
|
||||
func testGenerateStringsFileContent() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne()
|
||||
let sectionTwo = Section.Mock.getSectionTwo()
|
||||
|
||||
// When - CPD-OFF
|
||||
let stringsFileContentFr = StringsFileGenerator.generateStringsFileContent(
|
||||
lang: "fr",
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
sections: [sectionOne, sectionTwo]
|
||||
)
|
||||
let stringsFileContentEn = StringsFileGenerator.generateStringsFileContent(
|
||||
lang: "en",
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
sections: [sectionOne, sectionTwo]
|
||||
)
|
||||
// CPD-ON
|
||||
|
||||
// Expect
|
||||
XCTAssertEqual(
|
||||
stringsFileContentFr.adaptForXCTest(),
|
||||
Self.appleStringsFileExpectationFr.adaptForXCTest()
|
||||
)
|
||||
XCTAssertEqual(
|
||||
stringsFileContentEn.adaptForXCTest(),
|
||||
Self.appleStringsFileExpectationEn.adaptForXCTest()
|
||||
)
|
||||
}
|
||||
|
||||
func testGenerateStringsFileContentWithComment() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
|
||||
// When - CPD-OFF
|
||||
let stringsFileContentFr = StringsFileGenerator.generateStringsFileContent(
|
||||
lang: "fr",
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
sections: [sectionOne, sectionTwo]
|
||||
)
|
||||
let stringsFileContentEn = StringsFileGenerator.generateStringsFileContent(
|
||||
lang: "en",
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
sections: [sectionOne, sectionTwo]
|
||||
)
|
||||
// CPD-ON
|
||||
|
||||
// Expect
|
||||
XCTAssertEqual(
|
||||
stringsFileContentFr.adaptForXCTest(),
|
||||
Self.appleStringsFileExpectationFr.adaptForXCTest()
|
||||
)
|
||||
XCTAssertEqual(
|
||||
stringsFileContentEn.adaptForXCTest(),
|
||||
Self.appleStringsFileExpectationEn.adaptForXCTest()
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - XcString File Content
|
||||
|
||||
func testGenerateXcStringsRootObject() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne()
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defTwoEn: "Section Two - Definition Two"
|
||||
)
|
||||
|
||||
// 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(
|
||||
extractionState: "manual",
|
||||
localizations: XCStringLocalizationContainer(
|
||||
localizations: [
|
||||
XCStringLocalization(
|
||||
lang: "en",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: "Section One - Definition One"
|
||||
)
|
||||
)
|
||||
),
|
||||
XCStringLocalization(
|
||||
lang: "fr",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: "Section Un - Definition Un"
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
),
|
||||
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"
|
||||
)
|
||||
)
|
||||
),
|
||||
XCStringLocalization(
|
||||
lang: "fr",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: "Section Un - Definition Deux"
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
),
|
||||
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"
|
||||
)
|
||||
)
|
||||
),
|
||||
XCStringLocalization(
|
||||
lang: "fr",
|
||||
content: XCStringLocalizationLangContent(
|
||||
stringUnit: DefaultStringUnit(
|
||||
state: "translated",
|
||||
value: "Section Deux - Definition Un"
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
),
|
||||
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 Two - Definition Two"
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
)
|
||||
]
|
||||
),
|
||||
version: "1.0"
|
||||
)
|
||||
|
||||
XCTAssertEqual(rootObject, expect)
|
||||
}
|
||||
|
||||
func testGenerateXcStringsRootObjectWithEmptyTranslations() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneFr: "",
|
||||
defTwoFr: ""
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defOneFr: "",
|
||||
defTwoFr: "",
|
||||
defTwoEn: "Section Two - Definition Two"
|
||||
)
|
||||
// By default Section2.s2_def_two has a fr value => remove it
|
||||
sectionTwo.definitions
|
||||
.first { def in
|
||||
def.name == "s2_def_two"
|
||||
}?
|
||||
.translations.removeValue(forKey: "fr")
|
||||
|
||||
// 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.Mock.getDefinitionSectionOne(
|
||||
defOneFr: "",
|
||||
defTwoFr: "",
|
||||
),
|
||||
XCStringDefinition.Mock.getDefinitionSectionTwo(
|
||||
defOneFr: "",
|
||||
defTwoFr: "Section Two - Definition Two",
|
||||
defTwoEn: "Section Two - Definition Two",
|
||||
)
|
||||
]
|
||||
.flatMap { $0 }
|
||||
),
|
||||
version: "1.0"
|
||||
)
|
||||
|
||||
XCTAssertEqual(rootObject, expect)
|
||||
}
|
||||
|
||||
func testGenerateXcStringsRootObjectWithNoTranslations() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneFr: "",
|
||||
defOneEn: "",
|
||||
defTwoFr: "",
|
||||
defTwoEn : ""
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defOneFr: "",
|
||||
defOneEn: "",
|
||||
defTwoFr: "",
|
||||
defTwoEn : ""
|
||||
)
|
||||
|
||||
// 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.Mock.getDefinitionSectionOne(
|
||||
defOneFr: "",
|
||||
defOneEn: "",
|
||||
defTwoFr: "",
|
||||
defTwoEn : ""
|
||||
),
|
||||
XCStringDefinition.Mock.getDefinitionSectionTwo(
|
||||
defOneFr: "",
|
||||
defOneEn: "",
|
||||
defTwoFr: "",
|
||||
defTwoEn : ""
|
||||
)
|
||||
]
|
||||
.flatMap { $0 }
|
||||
),
|
||||
version: "1.0"
|
||||
)
|
||||
|
||||
XCTAssertEqual(rootObject, expect)
|
||||
}
|
||||
|
||||
func testGenerateXcStringsRootObjectWithComments() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneComment: "Comment 1",
|
||||
defTwoComment: "Comment 2"
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo()
|
||||
|
||||
// When
|
||||
let rootObject = StringsFileGenerator.generateRootObject(
|
||||
langs: ["fr", "en"],
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
sections: [sectionOne, sectionTwo]
|
||||
)
|
||||
|
||||
// Expect
|
||||
let expect =
|
||||
Root(
|
||||
sourceLanguage: "fr",
|
||||
strings: XCStringDefinitionContainer(
|
||||
strings: [
|
||||
XCStringDefinition.Mock.getDefinitionSectionOne(
|
||||
defOneComment: "Comment 1",
|
||||
defTwoComment: "Comment 2"
|
||||
),
|
||||
XCStringDefinition.Mock.getDefinitionSectionTwo(
|
||||
// SourceLanguage is frn en definition should the same as fr
|
||||
defTwoEn: "Section Deux - Definition Deux"
|
||||
)
|
||||
]
|
||||
.flatMap { $0 }
|
||||
),
|
||||
version: "1.0"
|
||||
)
|
||||
|
||||
XCTAssertEqual(rootObject, expect)
|
||||
}
|
||||
|
||||
// MARK: - Extension Content
|
||||
|
||||
func testGeneratedExtensionContent() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne()
|
||||
let sectionTwo = Section.Mock.getSectionTwo()
|
||||
|
||||
// When
|
||||
let extensionContent = StringsFileGenerator.getExtensionContent(sections: [sectionOne, sectionTwo],
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
staticVar: false,
|
||||
inputFilename: "myInputFilename",
|
||||
extensionName: "GenStrings",
|
||||
extensionSuffix: "strings")
|
||||
|
||||
// Expect
|
||||
let expect = Self.getExtensionContentExpectation(
|
||||
staticVar: false
|
||||
)
|
||||
|
||||
if extensionContent != expect {
|
||||
print(prettyFirstDifferenceBetweenStrings(s1: extensionContent, s2: expect))
|
||||
}
|
||||
XCTAssertEqual(extensionContent.adaptForXCTest(), expect.adaptForXCTest())
|
||||
}
|
||||
|
||||
func testGeneratedExtensionContentWithComment() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
|
||||
// When
|
||||
let extensionContent = StringsFileGenerator.getExtensionContent(sections: [sectionOne, sectionTwo],
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
staticVar: false,
|
||||
inputFilename: "myInputFilename",
|
||||
extensionName: "GenStrings",
|
||||
extensionSuffix: "strings")
|
||||
|
||||
// Expect
|
||||
let expect = Self.getExtensionContentExpectation(
|
||||
staticVar: false,
|
||||
s1DefOneComment: "This is a comment",
|
||||
s1DefTwoComment: "This is a comment",
|
||||
s2DefOneComment: "This is a comment",
|
||||
s2DefTwoComment: "This is a comment",
|
||||
)
|
||||
|
||||
if extensionContent != expect {
|
||||
print(prettyFirstDifferenceBetweenStrings(s1: extensionContent, s2: expect))
|
||||
}
|
||||
XCTAssertEqual(extensionContent.adaptForXCTest(), expect.adaptForXCTest())
|
||||
}
|
||||
|
||||
// MARK: - Extension Content Static
|
||||
func testGeneratedExtensionContentWithStaticVar() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne()
|
||||
let sectionTwo = Section.Mock.getSectionTwo()
|
||||
|
||||
// When
|
||||
let extensionContent = StringsFileGenerator.getExtensionContent(sections: [sectionOne, sectionTwo],
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
staticVar: true,
|
||||
inputFilename: "myInputFilename",
|
||||
extensionName: "GenStrings",
|
||||
extensionSuffix: "strings")
|
||||
|
||||
// Expect
|
||||
let expect = Self.getExtensionContentExpectation(
|
||||
staticVar: true
|
||||
)
|
||||
|
||||
if extensionContent != expect {
|
||||
print(prettyFirstDifferenceBetweenStrings(s1: extensionContent, s2: expect))
|
||||
}
|
||||
XCTAssertEqual(extensionContent.adaptForXCTest(), expect.adaptForXCTest())
|
||||
}
|
||||
|
||||
func testGeneratedExtensionContentWithStaticVarWithComment() {
|
||||
// Given
|
||||
let sectionOne = Section.Mock.getSectionOne(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
let sectionTwo = Section.Mock.getSectionTwo(
|
||||
defOneComment: "This is a comment",
|
||||
defTwoComment: "This is a comment"
|
||||
)
|
||||
|
||||
// When
|
||||
let extensionContent = StringsFileGenerator.getExtensionContent(sections: [sectionOne, sectionTwo],
|
||||
defaultLang: "fr",
|
||||
tags: ["ios", "iosonly", "notranslation"],
|
||||
staticVar: true,
|
||||
inputFilename: "myInputFilename",
|
||||
extensionName: "GenStrings",
|
||||
extensionSuffix: "strings")
|
||||
|
||||
// Expect
|
||||
let expect = Self.getExtensionContentExpectation(
|
||||
staticVar: true,
|
||||
s1DefOneComment: "This is a comment",
|
||||
s1DefTwoComment: "This is a comment",
|
||||
s2DefOneComment: "This is a comment",
|
||||
s2DefTwoComment: "This is a comment",
|
||||
)
|
||||
|
||||
if extensionContent != expect {
|
||||
print(prettyFirstDifferenceBetweenStrings(s1: extensionContent, s2: expect))
|
||||
}
|
||||
XCTAssertEqual(extensionContent.adaptForXCTest(), expect.adaptForXCTest())
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -57,12 +57,18 @@ final class TagsGeneratorTests: XCTestCase {
|
||||
|
||||
/// Translation in ium :
|
||||
/// Some translation
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
var s1_def_one: String {
|
||||
"Some translation"
|
||||
}
|
||||
|
||||
/// Translation in ium :
|
||||
/// Some translation
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
var s1_def_two: String {
|
||||
"Some translation"
|
||||
}
|
||||
@ -71,6 +77,9 @@ final class TagsGeneratorTests: XCTestCase {
|
||||
|
||||
/// Translation in ium :
|
||||
/// Some translation
|
||||
///
|
||||
/// Comment :
|
||||
/// No comment
|
||||
var s2_def_one: String {
|
||||
"Some translation"
|
||||
}
|
||||
|
Reference in New Issue
Block a user