File size: 2,498 Bytes
b8370f5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #if os(iOS)
import Testing
import UIKit
@testable import OpenClawChatUI
@Suite
@MainActor
struct ChatComposerTextViewIOSTests {
@Test func configuredComposerUsesNativeMultilineInput() {
let textView = ChatComposerTextViewIOSFactory.makeConfiguredTextView()
#expect(textView.isEditable)
#expect(textView.isSelectable)
#expect(!textView.allowsEditingTextAttributes)
#expect(textView.returnKeyType == .default)
#expect(textView.textContainerInset == .zero)
#expect(textView.textContainer.lineFragmentPadding == 0)
#expect(textView.accessibilityIdentifier == "chat-message-input")
}
@Test func returnInsertionRespectsCaretAndSelection() {
let textView = ChatComposerTextViewIOSFactory.makeConfiguredTextView()
textView.text = "firstsecond"
textView.selectedRange = NSRange(location: 5, length: 0)
textView.insertText("\n")
#expect(textView.text == "first\nsecond")
#expect(textView.selectedRange == NSRange(location: 6, length: 0))
textView.selectedRange = NSRange(location: 0, length: 5)
textView.insertText("\n")
#expect(textView.text == "\n\nsecond")
#expect(textView.selectedRange == NSRange(location: 1, length: 0))
}
@Test func physicalArrowKeysRouteThroughTheFocusedEditor() {
let textView = ChatComposerTextViewIOSFactory.makeConfiguredTextView()
var upContexts: [Bool] = []
var downCalls = 0
textView.onHistoryUp = { caretOnFirstLine in
upContexts.append(caretOnFirstLine)
return true
}
textView.onHistoryDown = {
downCalls += 1
return true
}
textView.text = "first\nsecond"
textView.selectedRange = NSRange(location: 2, length: 0)
#expect(textView.handleHardwareKey(.keyboardUpArrow, modifierFlags: []))
textView.selectedRange = NSRange(location: 8, length: 0)
#expect(textView.handleHardwareKey(.keyboardUpArrow, modifierFlags: []))
#expect(textView.handleHardwareKey(.keyboardDownArrow, modifierFlags: []))
#expect(upContexts == [true, false])
#expect(downCalls == 1)
#expect(!textView.handleHardwareKey(.keyboardUpArrow, modifierFlags: .shift))
#expect(textView.handleHardwareKey(.keyboardUpArrow, modifierFlags: .alphaShift))
#expect(!textView.handleHardwareKey(.keyboardReturnOrEnter, modifierFlags: []))
}
}
#endif
|