diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_tui.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/test_tui.c b/tests/test_tui.c index 15a44c7..a024e27 100644 --- a/tests/test_tui.c +++ b/tests/test_tui.c @@ -433,6 +433,67 @@ static void test_form_actions(void) CHECK(tui_form_act_step(1, 0, ACTS, 6, -1) == 5); } +static void test_form_focus(void) +{ + const int nf = 3; + + /* start focus: a remembered row is kept, out of range clamps to the + nearest end, fields are always selectable */ + CHECK(tui_form_focus_clamp(0, nf, ACTS, 6) == 0); + CHECK(tui_form_focus_clamp(2, nf, ACTS, 6) == 2); + CHECK(tui_form_focus_clamp(4, nf, ACTS, 6) == 4); + CHECK(tui_form_focus_clamp(6, nf, ACTS, 6) == 6); /* dimmed, selectable */ + CHECK(tui_form_focus_clamp(8, nf, ACTS, 6) == 8); + CHECK(tui_form_focus_clamp(-1, nf, ACTS, 6) == 0); + CHECK(tui_form_focus_clamp(99, nf, ACTS, 6) == 8); + + /* a heading row snaps forward (and wraps) to a selectable one */ + CHECK(tui_form_focus_clamp(3, nf, ACTS, 6) == 4); /* action 0 is head */ + CHECK(tui_form_focus_clamp(7, nf, ACTS, 6) == 8); /* action 4 is head */ + CHECK(tui_form_focus_clamp(0, 0, ACTS, 6) == 1); /* fields gone */ + static const struct tui_form_action WRAP[2] = { + { "Ã…rsredovisning (K2)", 1, NULL }, + { "rubrik", -1, NULL }, + }; + CHECK(tui_form_focus_clamp(1, 0, WRAP, 2) == 0); /* wraps to the top */ + static const struct tui_form_action HEADS[2] = { + { "rubrik", -1, NULL }, + { "rubrik", -1, NULL }, + }; + CHECK(tui_form_focus_clamp(0, 0, HEADS, 2) == -1); + CHECK(tui_form_focus_clamp(-1, 0, HEADS, 2) == -1); + + /* every return writes the current row back; NULL stores nothing */ + int focus = 0; + CHECK(tui_form_focus_store(&focus, 4, TUI_FORM_BACK) == TUI_FORM_BACK); + CHECK(focus == 4); + CHECK(tui_form_focus_store(&focus, 5, TUI_FORM_REFRESH) == + TUI_FORM_REFRESH); + CHECK(focus == 5); + CHECK(tui_form_focus_store(&focus, 6, TUI_FORM_SUBMIT) == TUI_FORM_SUBMIT); + CHECK(focus == 6); + CHECK(tui_form_focus_store(&focus, 8, TUI_FORM_ACTION + 1) == + TUI_FORM_ACTION + 1); + CHECK(focus == 8); + CHECK(tui_form_focus_store(&focus, 1, 1) == 1 && focus == 1); + CHECK(tui_form_focus_store(&focus, -1, TUI_FORM_BACK) == TUI_FORM_BACK); + CHECK(focus == -1); + CHECK(tui_form_focus_store(NULL, 4, TUI_FORM_BACK) == TUI_FORM_BACK); + + /* two runs in a row, like the hub: walk to an action and choose it, the + next run starts on the same row */ + focus = tui_form_focus_clamp(0, nf, ACTS, 6); + CHECK(focus == 0); + focus = tui_form_act_key(focus, nf, ACTS, 6, '\t'); + focus = tui_form_act_key(focus, nf, ACTS, 6, '\t'); + focus = tui_form_act_key(focus, nf, ACTS, 6, '\t'); + CHECK(focus == 4); /* Ã…rsredovisning (K2) */ + CHECK(tui_form_focus_store(&focus, focus, TUI_FORM_ACTION + 1) == + TUI_FORM_ACTION + 1); + CHECK(tui_form_focus_clamp(focus, nf, ACTS, 6) == 4); + CHECK(tui_form_focus_store(&focus, focus, TUI_FORM_BACK) == TUI_FORM_BACK); + CHECK(tui_form_focus_clamp(focus, nf, ACTS, 6) == 4); +} static char rt_cells[8][3][64]; static void rt_cb(void *ud, int row, int col, char **buf, size_t *cap) @@ -617,6 +678,7 @@ int main(void) test_nav_sections(); test_form_nav(); test_form_actions(); + test_form_focus(); test_rowtable(); test_rt_fields(); test_rt_focus(); |
