feat: complete translation language controls and styling

This commit is contained in:
2026-10-17 23:49:36 +02:00
parent 038a5b78a0
commit 11e604e79e
9 changed files with 310 additions and 75 deletions
+13
View File
@@ -38,6 +38,19 @@ import Testing
#expect(translation == "こんにちは")
}
@Test func myMemoryRequestsReversePairAndOnlyUsesMatchingFallback() async throws {
let body = #"{"responseStatus":200,"responseData":{"translatedText":""},"matches":[{"segment":"おはよう","translation":"間違い","source":"en","target":"ja"},{"segment":"おはよう","translation":"bonjour","source":"ja","target":"fr"},{"segment":"おはようございます","translation":"Good morning!","source":"ja","target":"en"},{"segment":"おはよう","translation":"Good morning","source":"ja-JP","target":"en-GB"}]}"#
let translation = try await MyMemoryAPI.translate(
"おはよう", sourceLanguage: "ja", targetLanguage: "en"
) { request in
let items = try #require(URLComponents(url: request.url!, resolvingAgainstBaseURL: false)?.queryItems)
#expect(items.contains(URLQueryItem(name: "q", value: "おはよう")))
#expect(items.contains(URLQueryItem(name: "langpair", value: "ja|en")))
return (Data(body.utf8), HTTPURLResponse(url: request.url!, statusCode: 200, httpVersion: nil, headerFields: nil)!)
}
#expect(translation == "Good morning")
}
@Test func myMemoryNeverUsesMatchesToBypassFailureOrReplacePrimaryTranslation() async throws {
let matches = #""matches":[{"segment":"hello","translation":"こんにちは","source":"en","target":"ja"}]"#
for metadata in [#""responseStatus":403"#, #""responseStatus":200,"quotaFinished":true"#] {