mirror of
https://github.com/steredbits/pelagia.git
synced 2026-10-19 01:02:22 +02:00
83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Copyright (C) 2026 steredbits and Pelagia contributors
|
|
// Tests of the focus logic (list, grid, rows) and scrolling.
|
|
|
|
#include "test_framework.h"
|
|
#include "ui/focus.h"
|
|
|
|
using ui::Dir;
|
|
|
|
static void test_list() {
|
|
ui::ListFocus l;
|
|
CHECK(!l.move(Dir::Down)); // liste vide
|
|
l.set_count(3);
|
|
CHECK(!l.move(Dir::Up)); // no wrapping
|
|
CHECK(l.move(Dir::Down) && l.move(Dir::Down));
|
|
CHECK(!l.move(Dir::Down));
|
|
CHECK_EQ(l.index(), 2);
|
|
CHECK(!l.move(Dir::Left));
|
|
l.set_count(1); // shortened list: focus brought back
|
|
CHECK_EQ(l.index(), 0);
|
|
l.set_count(10);
|
|
l.set_index(7);
|
|
CHECK_EQ(l.scroll_top(4), 4); // 7 visible at the bottom of the window
|
|
l.set_index(5);
|
|
CHECK_EQ(l.scroll_top(4), 4); // already visible: no jump
|
|
l.set_index(1);
|
|
CHECK_EQ(l.scroll_top(4), 1);
|
|
}
|
|
|
|
static void test_grid() {
|
|
ui::GridFocus g(7);
|
|
g.set_count(16); // rows of 7, 7, 2
|
|
CHECK_EQ(g.rows(), 3);
|
|
CHECK(!g.move(Dir::Left) && !g.move(Dir::Up));
|
|
g.set_index(6);
|
|
CHECK(!g.move(Dir::Right)); // bord droit
|
|
CHECK(g.move(Dir::Down));
|
|
CHECK_EQ(g.index(), 13);
|
|
CHECK(g.move(Dir::Down)); // incomplete last row: last element
|
|
CHECK_EQ(g.index(), 15);
|
|
CHECK(!g.move(Dir::Down));
|
|
CHECK(!g.move(Dir::Right)); // no element to the right
|
|
CHECK(g.move(Dir::Up));
|
|
CHECK_EQ(g.index(), 8);
|
|
CHECK_EQ(g.scroll_row(2), 0);
|
|
g.set_index(15);
|
|
CHECK_EQ(g.scroll_row(2), 1);
|
|
g.set_index(0);
|
|
CHECK_EQ(g.scroll_row(2), 0);
|
|
g.set_count(3);
|
|
CHECK(!g.move(Dir::Down)); // a single row
|
|
}
|
|
|
|
static void test_rows() {
|
|
ui::RowsFocus r;
|
|
r.set_rows({3, 0, 5});
|
|
CHECK_EQ(r.row(), 0);
|
|
CHECK(r.move(Dir::Down)); // empty row skipped
|
|
CHECK_EQ(r.row(), 2);
|
|
CHECK(r.move(Dir::Right) && r.move(Dir::Right));
|
|
CHECK(r.move(Dir::Up));
|
|
CHECK_EQ(r.index(), 0);
|
|
CHECK(r.move(Dir::Down));
|
|
CHECK_EQ(r.index(), 2); // remembered position
|
|
CHECK(!r.move(Dir::Down));
|
|
r.set_rows({0, 0, 5}); // current row kept
|
|
CHECK_EQ(r.row(), 2);
|
|
r.set_rows({0, 4}); // row disappeared: first non-empty one
|
|
CHECK_EQ(r.row(), 1);
|
|
r.set_rows({20});
|
|
r.set_position(0, 12);
|
|
CHECK_EQ(r.scroll_in(0, 7), 6);
|
|
r.set_rows({});
|
|
CHECK(!r.move(Dir::Down));
|
|
}
|
|
|
|
int main() {
|
|
test_list();
|
|
test_grid();
|
|
test_rows();
|
|
return testfw::test_failures();
|
|
}
|