notcurses/tests/cell.cpp

118 lines
3.7 KiB
C++
Raw Normal View History

#include "main.h"
#include "egcpool.h"
2020-06-03 08:25:31 +00:00
TEST_CASE("Cell") {
if(!enforce_utf8()){
return;
}
// common initialization
TestOptions nopts{};
struct notcurses* nc_ = notcurses_init(&nopts, nullptr);
if(!nc_){
return;
}
struct ncplane* n_ = notcurses_stdplane(nc_);
REQUIRE(nullptr != n_);
SUBCASE("LoadSimple") {
cell c = CELL_TRIVIAL_INITIALIZER;
REQUIRE(1 == cell_load(n_, &c, " "));
CHECK(cell_simple_p(&c));
cell_release(n_, &c);
}
2020-06-03 08:25:31 +00:00
SUBCASE("MultibyteWidth") {
CHECK(0 == mbswidth("")); // zero bytes, zero columns
CHECK(-1 == mbswidth("\x7")); // single byte, non-printable
CHECK(1 == mbswidth(" ")); // single byte, one column
CHECK(5 == mbswidth("abcde")); // single byte, one column
CHECK(1 == mbswidth("µ")); // two bytes, one column
CHECK(1 <= mbswidth("\xf0\x9f\xa6\xb2")); // four bytes, two columns
CHECK(3 <= mbswidth("平仮名")); // nine bytes, six columns
CHECK(1 == mbswidth("\ufdfd")); // three bytes, ? columns, wcwidth() returns 1
}
SUBCASE("SetItalic") {
cell c = CELL_TRIVIAL_INITIALIZER;
int dimy, dimx;
notcurses_term_dim_yx(nc_, &dimy, &dimx);
2020-02-02 08:14:45 +00:00
cell_styles_set(&c, NCSTYLE_ITALIC);
REQUIRE(1 == cell_load(n_, &c, "i"));
cell_set_fg_rgb(&c, 255, 255, 255);
ncplane_set_base_cell(n_, &c);
cell_release(n_, &c);
CHECK(0 == notcurses_render(nc_));
2020-02-02 08:14:45 +00:00
cell_styles_off(&c, NCSTYLE_ITALIC);
}
2019-12-10 13:50:32 +00:00
SUBCASE("SetBold") {
cell c = CELL_TRIVIAL_INITIALIZER;
int dimy, dimx;
notcurses_term_dim_yx(nc_, &dimy, &dimx);
2020-02-02 08:14:45 +00:00
cell_styles_set(&c, NCSTYLE_BOLD);
REQUIRE(1 == cell_load(n_, &c, "b"));
cell_set_fg_rgb(&c, 255, 255, 255);
ncplane_set_base_cell(n_, &c);
cell_release(n_, &c);
CHECK(0 == notcurses_render(nc_));
2020-02-02 08:14:45 +00:00
cell_styles_off(&c, NCSTYLE_BOLD);
}
2019-12-10 13:50:32 +00:00
SUBCASE("SetUnderline") {
cell c = CELL_TRIVIAL_INITIALIZER;
int dimy, dimx;
notcurses_term_dim_yx(nc_, &dimy, &dimx);
2020-02-02 08:14:45 +00:00
cell_styles_set(&c, NCSTYLE_UNDERLINE);
REQUIRE(1 == cell_load(n_, &c, "u"));
cell_set_fg_rgb(&c, 255, 255, 255);
ncplane_set_base_cell(n_, &c);
cell_release(n_, &c);
CHECK(0 == notcurses_render(nc_));
2020-02-02 08:14:45 +00:00
cell_styles_off(&c, NCSTYLE_UNDERLINE);
}
/* SUBCASE("CellLoadTamil") {
const char zerodeg[] = "\u0bb8\u0bc0\u0bb0\u0bc7\u0bb3\u0b95\u0bbf\u0b95\u0bbf\u0bb0\u0bbf";
cell c = CELL_TRIVIAL_INITIALIZER;
size_t ulen = cell_load(n_, &c, zerodeg);
// First have U+0BB8 TAMIL LETTER SA U+0BC0 TAMIL VOWEL SIGN II
// // e0 ae b8 e0 af 80
REQUIRE(6 == ulen);
ulen = cell_load(n_, &c, zerodeg + ulen);
// U+0BB0 TAMIL LETTER RA U+0BCB TAMIL VOWEL SIGN OO
// e0 ae b0 e0 af 8b
REQUIRE(6 == ulen);
// FIXME
}*/
SUBCASE("CellSetFGAlpha"){
cell c = CELL_TRIVIAL_INITIALIZER;
CHECK(0 > cell_set_fg_alpha(&c, -1));
CHECK(0 > cell_set_fg_alpha(&c, 4));
CHECK(0 == cell_set_fg_alpha(&c, CELL_ALPHA_OPAQUE));
CHECK(cell_fg_default_p(&c));
CHECK(cell_bg_default_p(&c));
2019-12-30 04:47:42 +00:00
CHECK(CELL_ALPHA_OPAQUE == cell_fg_alpha(&c));
CHECK(0 == cell_set_fg_alpha(&c, CELL_ALPHA_HIGHCONTRAST));
2019-12-30 04:47:42 +00:00
CHECK(CELL_ALPHA_HIGHCONTRAST == cell_fg_alpha(&c));
CHECK(!cell_fg_default_p(&c));
CHECK(cell_bg_default_p(&c));
}
SUBCASE("CellSetBGAlpha"){
cell c = CELL_TRIVIAL_INITIALIZER;
CHECK(0 > cell_set_bg_alpha(&c, -1));
CHECK(0 > cell_set_bg_alpha(&c, 4));
CHECK(0 == cell_set_bg_alpha(&c, CELL_ALPHA_OPAQUE));
2019-12-30 04:47:42 +00:00
CHECK(CELL_ALPHA_OPAQUE == cell_bg_alpha(&c));
CHECK(0 != cell_set_bg_alpha(&c, CELL_ALPHA_HIGHCONTRAST));
CHECK(0 == cell_set_bg_alpha(&c, CELL_ALPHA_TRANSPARENT));
2019-12-30 04:47:42 +00:00
CHECK(CELL_ALPHA_TRANSPARENT == cell_bg_alpha(&c));
CHECK(cell_fg_default_p(&c));
CHECK(!cell_bg_default_p(&c));
}
// common teardown
CHECK(0 == notcurses_stop(nc_));
}