Files
ichmagmaus111andClaude Opus 5.5 0622057a4f Ghostgram: open-source release
Ghostgram for iOS, rebuilt from scratch on Telegram iOS 13.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 17:57:09 +01:00

46 lines
2.1 KiB
Swift

import XCTest
import TelegramCore
import TextFormat
import RichTextEditorCore
@testable import RichTextEditorMessageConversion
/// The full send -> edit round-trip for a code block's language: the editor's Document becomes a message
/// (text + entities), the message becomes the composer's chat string, and that becomes ChatInputContent
/// again. The language must survive every hop.
final class CodeLanguageRoundTripTests: XCTestCase {
private func sentMessage(language: String?) -> (text: String, entities: [MessageTextEntity]) {
return buildEntityMessage(from: [
.code(CodeBlock(id: BlockID("c"), language: language, runs: [TextRun(text: "let x = 1")]))
])
}
func testSendEmitsAPreEntityCarryingTheLanguage() {
let message = sentMessage(language: "Swift")
XCTAssertEqual(message.text, "let x = 1")
let languages: [String?] = message.entities.compactMap { entity in
if case let .Pre(language) = entity.type { return language }
return nil
}
XCTAssertEqual(languages.count, 1, "exactly one .Pre entity")
XCTAssertEqual(languages[0], "Swift")
}
func testEditingASentCodeBlockRecoversItsLanguage() {
let message = sentMessage(language: "Swift")
let attributed = chatInputStateStringWithAppliedEntities(message.text, entities: message.entities)
let content = chatInputContent(from: attributed)
guard case let .code(code) = content.blocks.first else {
return XCTFail("expected a code block, got \(String(describing: content.blocks.first))")
}
XCTAssertEqual(code.language, "Swift")
XCTAssertEqual(code.runs.map(\.text).joined(), "let x = 1")
}
func testALanguagelessCodeBlockStaysLanguageless() {
let message = sentMessage(language: nil)
let content = chatInputContent(from: chatInputStateStringWithAppliedEntities(message.text, entities: message.entities))
guard case let .code(code) = content.blocks.first else { return XCTFail("expected a code block") }
XCTAssertNil(code.language)
}
}