mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[escher/test] Layout selection in layout_field
This commit is contained in:
@@ -86,6 +86,9 @@ escher_src += $(addprefix escher/src/,\
|
||||
window.cpp \
|
||||
)
|
||||
|
||||
tests_src += $(addprefix escher/test/,\
|
||||
layout_field.cpp\
|
||||
)
|
||||
|
||||
$(eval $(call rule_for, \
|
||||
HOSTCC, \
|
||||
|
||||
@@ -379,7 +379,7 @@ bool LayoutField::privateHandleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (isEditing() && m_delegate->layoutFieldShouldFinishEditing(this, event)) { //TODO use class method?
|
||||
if (isEditing() && m_delegate && m_delegate->layoutFieldShouldFinishEditing(this, event)) { //TODO use class method?
|
||||
setEditing(false);
|
||||
if (m_delegate->layoutFieldDidFinishEditing(this, layout(), event)) {
|
||||
// Reinit layout for next use
|
||||
|
||||
215
escher/test/layout_field.cpp
Normal file
215
escher/test/layout_field.cpp
Normal file
@@ -0,0 +1,215 @@
|
||||
#include <quiz.h>
|
||||
#include <escher.h>
|
||||
#include <assert.h>
|
||||
|
||||
void assert_events_lead_to_selection(const Ion::Events::Event * events, int numberOfEvents, const char * selectedParsedAndSerializedText) {
|
||||
LayoutField field = LayoutField(nullptr, nullptr);
|
||||
field.setEditing(true);
|
||||
for (int i = 0; i < numberOfEvents; i++) {
|
||||
field.handleEvent(events[i]);
|
||||
}
|
||||
Clipboard::sharedClipboard()->reset();
|
||||
field.handleEvent(Ion::Events::Copy);
|
||||
quiz_assert(strcmp(Clipboard::sharedClipboard()->storedText(), selectedParsedAndSerializedText) == 0);
|
||||
}
|
||||
|
||||
QUIZ_CASE(escher_layout_field_select_left_right) {
|
||||
// 123
|
||||
{
|
||||
// Select in a simple horizontal layout towards the left
|
||||
const int eventsCount = 6;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::ShiftLeft, Ion::Events::ShiftLeft, Ion::Events::ShiftLeft};
|
||||
assert_events_lead_to_selection(events, eventsCount - 2, "3");
|
||||
assert_events_lead_to_selection(events, eventsCount - 1, "23");
|
||||
assert_events_lead_to_selection(events, eventsCount, "123");
|
||||
}
|
||||
{
|
||||
// Select in a simple horizontal layout towards the right
|
||||
const int eventsCount = 9;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftRight, Ion::Events::ShiftRight};
|
||||
assert_events_lead_to_selection(events, eventsCount - 2, "1");
|
||||
assert_events_lead_to_selection(events, eventsCount - 1, "12");
|
||||
assert_events_lead_to_selection(events, eventsCount, "123");
|
||||
}
|
||||
{
|
||||
// Select in a simple horizontal layout left then right
|
||||
const int eventsCount = 7;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Left, Ion::Events::ShiftLeft, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftRight};
|
||||
assert_events_lead_to_selection(events, eventsCount, "2");
|
||||
}
|
||||
{
|
||||
/* Select in a simple horizontal layout towards the right and hit the end of
|
||||
* layout. */
|
||||
const int eventsCount = 11;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftRight, Ion::Events::ShiftRight,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftRight};
|
||||
assert_events_lead_to_selection(events, eventsCount, "123");
|
||||
}
|
||||
{
|
||||
/* Select in a simple horizontal layout towards the right, hit the end of
|
||||
* layout and select left. */
|
||||
const int eventsCount = 11;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftRight, Ion::Events::ShiftRight,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftLeft};
|
||||
assert_events_lead_to_selection(events, eventsCount, "12");
|
||||
}
|
||||
|
||||
/* g34
|
||||
* 1+---+78
|
||||
* h56 */
|
||||
{
|
||||
/* Select in a horizontal layout with a fraction, starting outside the
|
||||
* fraction. */
|
||||
const int eventsCount = 17;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Plus, Ion::Events::LowerG,
|
||||
Ion::Events::Three, Ion::Events::Four, Ion::Events::Division,
|
||||
Ion::Events::LowerH, Ion::Events::Five, Ion::Events::Six,
|
||||
Ion::Events::Right, Ion::Events::Plus, Ion::Events::Seven,
|
||||
Ion::Events::Eight, Ion::Events::ShiftLeft, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftLeft, Ion::Events::ShiftLeft};
|
||||
assert_events_lead_to_selection(events, eventsCount, "\x12\x12g34\x13/\x12h56\x13\x13+78");
|
||||
}
|
||||
{
|
||||
/* Select in a horizontal layout with a fraction, starting inside the
|
||||
* fraction. */
|
||||
const int eventsCount = 21;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Plus, Ion::Events::LowerG,
|
||||
Ion::Events::Three, Ion::Events::Four, Ion::Events::Division,
|
||||
Ion::Events::LowerH, Ion::Events::Five, Ion::Events::Six,
|
||||
Ion::Events::Right, Ion::Events::Plus, Ion::Events::Seven,
|
||||
Ion::Events::Eight, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::ShiftLeft, Ion::Events::ShiftLeft, Ion::Events::ShiftLeft,
|
||||
};
|
||||
assert_events_lead_to_selection(events, eventsCount, "g34/h56");
|
||||
}
|
||||
}
|
||||
|
||||
QUIZ_CASE(escher_layout_field_select_up_down) {
|
||||
// 12
|
||||
{
|
||||
// Select in a simple horizontal layout up
|
||||
const int eventsCount = 5;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftUp};
|
||||
assert_events_lead_to_selection(events, eventsCount, "2");
|
||||
}
|
||||
{
|
||||
// Select in a simple horizontal layout up
|
||||
const int eventsCount = 5;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftDown};
|
||||
assert_events_lead_to_selection(events, eventsCount, "2");
|
||||
}
|
||||
/* 123
|
||||
* ---
|
||||
* 456 */
|
||||
{
|
||||
// Select up in a fraction
|
||||
const int eventsCount = 11;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Division, Ion::Events::Four, Ion::Events::Five,
|
||||
Ion::Events::Six, Ion::Events::Left, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftUp, Ion::Events::ShiftRight};
|
||||
assert_events_lead_to_selection(events, eventsCount - 1, "123/456");
|
||||
assert_events_lead_to_selection(events, eventsCount, "");
|
||||
}
|
||||
{
|
||||
// Select down in a fraction
|
||||
const int eventsCount = 12;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Division, Ion::Events::Four, Ion::Events::Five,
|
||||
Ion::Events::Six, Ion::Events::Left, Ion::Events::Up,
|
||||
Ion::Events::ShiftLeft, Ion::Events::ShiftDown, Ion::Events::ShiftLeft};
|
||||
assert_events_lead_to_selection(events, eventsCount - 1, "123/456");
|
||||
assert_events_lead_to_selection(events, eventsCount, "");
|
||||
}
|
||||
/* 123
|
||||
* 89+---
|
||||
* 456 */
|
||||
{
|
||||
// Select up next to a fraction (cursor on fraction)
|
||||
const int eventsCount = 15;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::Eight, Ion::Events::Nine, Ion::Events::Plus,
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Division, Ion::Events::Four, Ion::Events::Five,
|
||||
Ion::Events::Six, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::ShiftUp};
|
||||
assert_events_lead_to_selection(events, eventsCount, "123/456");
|
||||
}
|
||||
{
|
||||
// Select down next to a fraction (cursor not on the fraction)
|
||||
const int eventsCount = 17;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::Eight, Ion::Events::Nine, Ion::Events::Plus,
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Division, Ion::Events::Four, Ion::Events::Five,
|
||||
Ion::Events::Six, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::Left, Ion::Events::Left, Ion::Events::Left,
|
||||
Ion::Events::Right, Ion::Events::ShiftDown};
|
||||
assert_events_lead_to_selection(events, eventsCount, "123/456");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QUIZ_CASE(escher_layout_field_unselect) {
|
||||
// 1234
|
||||
{
|
||||
// Move left after selecting
|
||||
const int eventsCount = 8;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Four, Ion::Events::ShiftLeft, Ion::Events::Left,
|
||||
Ion::Events::Left, Ion::Events::ShiftRight};
|
||||
assert_events_lead_to_selection(events, eventsCount, "3");
|
||||
}
|
||||
}
|
||||
|
||||
QUIZ_CASE(escher_layout_field_delete) {
|
||||
// 1234
|
||||
{
|
||||
// Delete the selection
|
||||
const int eventsCount = 17;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Four, Ion::Events::Left, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftLeft, Ion::Events::Backspace, Ion::Events::Left,
|
||||
Ion::Events::ShiftRight, Ion::Events::ShiftRight
|
||||
};
|
||||
assert_events_lead_to_selection(events, eventsCount, "14");
|
||||
}
|
||||
{
|
||||
// Delete the by adding text
|
||||
const int eventsCount = 19;
|
||||
Ion::Events::Event events[eventsCount] = {
|
||||
Ion::Events::One, Ion::Events::Two, Ion::Events::Three,
|
||||
Ion::Events::Four, Ion::Events::Left, Ion::Events::ShiftLeft,
|
||||
Ion::Events::ShiftLeft, Ion::Events::Zero, Ion::Events::Left,
|
||||
Ion::Events::Left, Ion::Events::ShiftRight, Ion::Events::ShiftRight,
|
||||
Ion::Events::ShiftRight
|
||||
};
|
||||
assert_events_lead_to_selection(events, eventsCount, "104");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user