Enhance XCUI demo text editing and host bridge
This commit is contained in:
@@ -38,11 +38,21 @@ UIInputEvent MakeCharacterEvent(std::uint32_t character) {
|
||||
return event;
|
||||
}
|
||||
|
||||
UIInputEvent MakeKeyDownEvent(XCEngine::Input::KeyCode keyCode, bool repeat = false) {
|
||||
UIInputEvent MakeKeyDownEvent(
|
||||
XCEngine::Input::KeyCode keyCode,
|
||||
bool repeat = false,
|
||||
bool shift = false,
|
||||
bool control = false,
|
||||
bool alt = false,
|
||||
bool super = false) {
|
||||
UIInputEvent event = {};
|
||||
event.type = UIInputEventType::KeyDown;
|
||||
event.keyCode = static_cast<std::int32_t>(keyCode);
|
||||
event.repeat = repeat;
|
||||
event.modifiers.shift = shift;
|
||||
event.modifiers.control = control;
|
||||
event.modifiers.alt = alt;
|
||||
event.modifiers.super = super;
|
||||
return event;
|
||||
}
|
||||
|
||||
@@ -372,17 +382,43 @@ TEST(NewEditorXCUIDemoRuntimeTest, TextAreaAcceptsMultilineInputAndCaretMovement
|
||||
ASSERT_TRUE(typedFrame.stats.documentsReady);
|
||||
EXPECT_EQ(typedFrame.stats.focusedElementId, "sessionNotes");
|
||||
EXPECT_EQ(typedFrame.stats.lastCommandId, "demo.text.edit.sessionNotes");
|
||||
EXPECT_NE(FindTextCommand(typedFrame.drawData, "1"), nullptr);
|
||||
EXPECT_NE(FindTextCommand(typedFrame.drawData, "2"), nullptr);
|
||||
EXPECT_NE(FindTextCommand(typedFrame.drawData, "OK"), nullptr);
|
||||
EXPECT_NE(FindTextCommand(typedFrame.drawData, "X"), nullptr);
|
||||
|
||||
XCEngine::Editor::XCUIBackend::XCUIDemoInputState tabInput = BuildInputState();
|
||||
tabInput.events.push_back(MakeKeyDownEvent(XCEngine::Input::KeyCode::Home));
|
||||
tabInput.events.push_back(MakeKeyDownEvent(XCEngine::Input::KeyCode::Tab));
|
||||
const auto& indentedFrame = runtime.Update(tabInput);
|
||||
|
||||
ASSERT_TRUE(indentedFrame.stats.documentsReady);
|
||||
EXPECT_EQ(indentedFrame.stats.focusedElementId, "sessionNotes");
|
||||
EXPECT_EQ(indentedFrame.stats.lastCommandId, "demo.text.edit.sessionNotes");
|
||||
|
||||
const XCEngine::UI::UIPoint firstLineStart(
|
||||
notesRect.x + 8.0f,
|
||||
notesRect.y + 10.0f);
|
||||
|
||||
XCEngine::Editor::XCUIBackend::XCUIDemoInputState caretPressed = BuildInputState();
|
||||
caretPressed.pointerPosition = firstLineStart;
|
||||
caretPressed.pointerPressed = true;
|
||||
caretPressed.pointerDown = true;
|
||||
runtime.Update(caretPressed);
|
||||
|
||||
XCEngine::Editor::XCUIBackend::XCUIDemoInputState caretReleased = BuildInputState();
|
||||
caretReleased.pointerPosition = firstLineStart;
|
||||
caretReleased.pointerReleased = true;
|
||||
const auto& caretFrame = runtime.Update(caretReleased);
|
||||
|
||||
ASSERT_TRUE(caretFrame.stats.documentsReady);
|
||||
EXPECT_EQ(caretFrame.stats.focusedElementId, "sessionNotes");
|
||||
|
||||
XCEngine::Editor::XCUIBackend::XCUIDemoInputState caretInput = BuildInputState();
|
||||
caretInput.events.push_back(MakeKeyDownEvent(XCEngine::Input::KeyCode::Up));
|
||||
caretInput.events.push_back(MakeKeyDownEvent(XCEngine::Input::KeyCode::End));
|
||||
caretInput.events.push_back(MakeCharacterEvent('!'));
|
||||
const auto& editedFrame = runtime.Update(caretInput);
|
||||
|
||||
ASSERT_TRUE(editedFrame.stats.documentsReady);
|
||||
EXPECT_NE(FindTextCommand(editedFrame.drawData, "OK!"), nullptr);
|
||||
EXPECT_NE(FindTextCommand(editedFrame.drawData, "X"), nullptr);
|
||||
EXPECT_NE(FindTextCommand(editedFrame.drawData, "!OK"), nullptr);
|
||||
EXPECT_EQ(editedFrame.stats.focusedElementId, "sessionNotes");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user