107 lines
4.2 KiB
Swift
107 lines
4.2 KiB
Swift
import XCTest
|
|
@testable import TranslatorPlugin
|
|
|
|
@MainActor
|
|
final class TranslatorPanelPresentationTests: XCTestCase {
|
|
func testMissingSelectionUsesCompactEmptySourceAndTipCard() {
|
|
let snapshot = TranslatorPanelSnapshot(
|
|
phase: .error(.missingSelection),
|
|
sourceText: nil,
|
|
languageSelection: nil,
|
|
translation: nil,
|
|
providerResults: [
|
|
TranslatorProviderResult(
|
|
id: "openai",
|
|
providerTitle: "OpenAI 翻译",
|
|
phase: .waiting,
|
|
translation: nil,
|
|
errorMessage: nil
|
|
),
|
|
TranslatorProviderResult(
|
|
id: "deepseek",
|
|
providerTitle: "DeepSeek 翻译",
|
|
phase: .waiting,
|
|
translation: nil,
|
|
errorMessage: nil
|
|
),
|
|
TranslatorProviderResult(
|
|
id: "fireworks",
|
|
providerTitle: "Fireworks",
|
|
phase: .waiting,
|
|
translation: nil,
|
|
errorMessage: nil
|
|
),
|
|
],
|
|
errorMessage: "未找到选中文本",
|
|
querySource: .selectedText,
|
|
captureStage: nil
|
|
)
|
|
|
|
let presentation = TranslatorPanelPresentation(snapshot: snapshot)
|
|
|
|
XCTAssertEqual(presentation.sourceText, "")
|
|
XCTAssertTrue(presentation.usesSourceCaretPlaceholder)
|
|
XCTAssertEqual(presentation.sourceLanguageTitle, "自动检测")
|
|
XCTAssertEqual(presentation.targetLanguageTitle, "自动选择")
|
|
XCTAssertEqual(presentation.tip?.title, "提示")
|
|
XCTAssertEqual(presentation.tip?.message, "划词翻译没有获取到文本")
|
|
XCTAssertEqual(presentation.tip?.actionTitle, "如何解决")
|
|
XCTAssertEqual(presentation.providerRows.map(\.title), ["OpenAI 翻译", "DeepSeek 翻译", "Fireworks"])
|
|
XCTAssertTrue(presentation.providerRows.allSatisfy { !$0.isExpanded })
|
|
}
|
|
|
|
func testSuccessExpandsFirstProviderWithTranslatedText() {
|
|
let selection = TranslatorLanguageSelection(source: .english, target: .simplifiedChinese)
|
|
let firstResult = TranslationResult(
|
|
providerTitle: "OpenAI 翻译",
|
|
text: "你好",
|
|
sourceText: "hello",
|
|
languageSelection: selection
|
|
)
|
|
let secondResult = TranslationResult(
|
|
providerTitle: "DeepSeek 翻译",
|
|
text: "您好",
|
|
sourceText: "hello",
|
|
languageSelection: selection
|
|
)
|
|
let snapshot = TranslatorPanelSnapshot(
|
|
phase: .success,
|
|
sourceText: "hello",
|
|
languageSelection: selection,
|
|
translation: firstResult,
|
|
providerResults: [
|
|
TranslatorProviderResult(
|
|
id: "openai",
|
|
providerTitle: "OpenAI 翻译",
|
|
phase: .success,
|
|
translation: firstResult,
|
|
errorMessage: nil
|
|
),
|
|
TranslatorProviderResult(
|
|
id: "deepseek",
|
|
providerTitle: "DeepSeek 翻译",
|
|
phase: .success,
|
|
translation: secondResult,
|
|
errorMessage: nil
|
|
),
|
|
],
|
|
errorMessage: nil,
|
|
querySource: .selectedText,
|
|
captureStage: nil
|
|
)
|
|
|
|
let presentation = TranslatorPanelPresentation(snapshot: snapshot)
|
|
|
|
XCTAssertEqual(presentation.sourceText, "hello")
|
|
XCTAssertFalse(presentation.usesSourceCaretPlaceholder)
|
|
XCTAssertNil(presentation.tip)
|
|
XCTAssertEqual(presentation.sourceLanguageTitle, "英语")
|
|
XCTAssertEqual(presentation.targetLanguageTitle, "简体中文")
|
|
XCTAssertEqual(presentation.providerRows.map(\.title), ["OpenAI 翻译", "DeepSeek 翻译"])
|
|
XCTAssertEqual(presentation.providerRows[0].bodyText, "你好")
|
|
XCTAssertTrue(presentation.providerRows[0].isExpanded)
|
|
XCTAssertEqual(presentation.providerRows[1].bodyText, "您好")
|
|
XCTAssertFalse(presentation.providerRows[1].isExpanded)
|
|
}
|
|
}
|