You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.9 KiB
C++
186 lines
5.9 KiB
C++
#include "main.h"
|
|
#include <notcurses/direct.h>
|
|
|
|
TEST_CASE("Direct") {
|
|
struct ncdirect* nc_ = ncdirect_init(NULL, stdout, 0);
|
|
if(!nc_){
|
|
return;
|
|
}
|
|
|
|
SUBCASE("SetItalic") {
|
|
unsigned styles = ncdirect_supported_styles(nc_);
|
|
if(styles & NCSTYLE_ITALIC){
|
|
CHECK(0 == ncdirect_set_styles(nc_, NCSTYLE_ITALIC));
|
|
}else{
|
|
CHECK(0 != ncdirect_set_styles(nc_, NCSTYLE_ITALIC));
|
|
}
|
|
printf("DirectMode *italic*!\n");
|
|
fflush(stdout);
|
|
if(styles & NCSTYLE_ITALIC){
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_ITALIC));
|
|
}else{
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_ITALIC));
|
|
}
|
|
}
|
|
|
|
SUBCASE("SetBold") {
|
|
unsigned styles = ncdirect_supported_styles(nc_);
|
|
if(styles & NCSTYLE_BOLD){
|
|
CHECK(0 == ncdirect_set_styles(nc_, NCSTYLE_BOLD));
|
|
printf("DirectMode *bold*!\n");
|
|
fflush(stdout);
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_BOLD));
|
|
}
|
|
}
|
|
|
|
SUBCASE("SetUnderline") {
|
|
unsigned styles = ncdirect_supported_styles(nc_);
|
|
if(styles & NCSTYLE_UNDERLINE){
|
|
CHECK(0 == ncdirect_set_styles(nc_, NCSTYLE_UNDERLINE));
|
|
printf("DirectMode *underline*!\n");
|
|
fflush(stdout);
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_UNDERLINE));
|
|
}
|
|
}
|
|
|
|
SUBCASE("SetUndercurl") {
|
|
unsigned styles = ncdirect_supported_styles(nc_);
|
|
if(styles & NCSTYLE_UNDERCURL){
|
|
CHECK(0 == ncdirect_set_styles(nc_, NCSTYLE_UNDERCURL));
|
|
printf("DirectMode *undercurl*!\n");
|
|
fflush(stdout);
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_UNDERCURL));
|
|
}
|
|
}
|
|
|
|
SUBCASE("SetStruck") {
|
|
unsigned styles = ncdirect_supported_styles(nc_);
|
|
if(styles & NCSTYLE_STRUCK){
|
|
CHECK(0 == ncdirect_set_styles(nc_, NCSTYLE_STRUCK));
|
|
printf("DirectMode *struck*!\n");
|
|
fflush(stdout);
|
|
CHECK(0 == ncdirect_off_styles(nc_, NCSTYLE_STRUCK));
|
|
}
|
|
}
|
|
|
|
SUBCASE("BoxDefault") {
|
|
uint64_t chans = NCCHANNELS_INITIALIZER(255, 0, 255, 0, 0, 0);
|
|
ncchannels_set_bg_default(&chans);
|
|
ncdirect_set_bg_rgb8(nc_, 0x88, 0x88, 0x88);
|
|
printf("test background\n");
|
|
for(unsigned r = 2 ; r < 8 ; ++r){
|
|
CHECK(0 == ncdirect_ascii_box(nc_, chans, chans, chans, chans, r, r, 0));
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
#ifndef NOTCURSES_USE_MULTIMEDIA
|
|
SUBCASE("VisualDisabled"){
|
|
CHECK(!ncdirect_canopen_images(nc_));
|
|
}
|
|
#else
|
|
SUBCASE("ImagesEnabled"){
|
|
CHECK(ncdirect_canopen_images(nc_));
|
|
}
|
|
|
|
SUBCASE("LoadImage") {
|
|
CHECK(0 == ncdirect_render_image(nc_, find_data("changes.jpg").get(), NCALIGN_LEFT, NCBLIT_1x1, NCSCALE_STRETCH));
|
|
CHECK(0 == ncdirect_render_image(nc_, find_data("worldmap.png").get(), NCALIGN_RIGHT, NCBLIT_1x1, NCSCALE_SCALE));
|
|
}
|
|
|
|
SUBCASE("LoadSprixel") {
|
|
if(ncdirect_check_pixel_support(nc_) > 0){
|
|
CHECK(0 == ncdirect_render_image(nc_, find_data("changes.jpg").get(), NCALIGN_LEFT, NCBLIT_PIXEL, NCSCALE_STRETCH));
|
|
CHECK(0 == ncdirect_render_image(nc_, find_data("worldmap.png").get(), NCALIGN_RIGHT, NCBLIT_PIXEL, NCSCALE_SCALE));
|
|
}
|
|
}
|
|
|
|
SUBCASE("ImageGeom") {
|
|
auto dirf = ncdirectf_from_file(nc_, find_data("worldmap.png").get());
|
|
REQUIRE(nullptr != dirf);
|
|
ncvgeom geom;
|
|
CHECK(0 == ncdirectf_geom(nc_, dirf, nullptr, &geom));
|
|
CHECK(475 == geom.pixy);
|
|
CHECK(860 == geom.pixx);
|
|
CHECK(NCBLIT_DEFAULT != geom.blitter);
|
|
auto ncdv = ncdirectf_render(nc_, dirf, nullptr);
|
|
CHECK(nullptr != ncdv);
|
|
CHECK(0 == ncdirect_raster_frame(nc_, ncdv, NCALIGN_LEFT));
|
|
ncdirectf_free(dirf);
|
|
}
|
|
|
|
SUBCASE("SprixelGeom") {
|
|
if(ncdirect_check_pixel_support(nc_) > 0){
|
|
auto dirf = ncdirectf_from_file(nc_, find_data("worldmap.png").get());
|
|
REQUIRE(nullptr != dirf);
|
|
struct ncvisual_options vopts{};
|
|
vopts.blitter = NCBLIT_PIXEL;
|
|
ncvgeom geom;
|
|
CHECK(0 == ncdirectf_geom(nc_, dirf, &vopts, &geom));
|
|
CHECK(475 == geom.pixy);
|
|
CHECK(860 == geom.pixx);
|
|
CHECK(NCBLIT_PIXEL == geom.blitter);
|
|
CHECK(geom.cdimy == geom.scaley);
|
|
CHECK(geom.cdimx == geom.scalex);
|
|
auto ncdv = ncdirectf_render(nc_, dirf, &vopts);
|
|
CHECK(nullptr != ncdv);
|
|
CHECK(0 == ncdirect_raster_frame(nc_, ncdv, NCALIGN_LEFT));
|
|
ncdirectf_free(dirf);
|
|
}
|
|
}
|
|
|
|
SUBCASE("CursorPostCellBlit") {
|
|
if(ncdirect_canget_cursor(nc_)){
|
|
auto dirf = ncdirectf_from_file(nc_, find_data("worldmap.png").get());
|
|
REQUIRE(nullptr != dirf);
|
|
struct ncvisual_options vopts{};
|
|
vopts.blitter = NCBLIT_1x1;
|
|
auto ncdv = ncdirectf_render(nc_, dirf, &vopts);
|
|
CHECK(nullptr != ncdv);
|
|
CHECK(0 == ncdirect_raster_frame(nc_, ncdv, NCALIGN_LEFT));
|
|
ncdirectf_free(dirf);
|
|
unsigned y, x;
|
|
// FIXME fails if u6 is reversed (on e.g. kmscon)
|
|
CHECK(0 == ncdirect_cursor_yx(nc_, &y, &x));
|
|
auto dimy = ncdirect_dim_y(nc_);
|
|
auto dimx = ncdirect_dim_x(nc_);
|
|
CHECK(dimy > y);
|
|
CHECK(dimx > x);
|
|
}
|
|
}
|
|
|
|
SUBCASE("CursorPostSprixel") {
|
|
if(ncdirect_canget_cursor(nc_)){
|
|
if(ncdirect_check_pixel_support(nc_) > 0){
|
|
auto dirf = ncdirectf_from_file(nc_, find_data("worldmap.png").get());
|
|
REQUIRE(nullptr != dirf);
|
|
struct ncvisual_options vopts{};
|
|
vopts.blitter = NCBLIT_PIXEL;
|
|
vopts.flags = NCVISUAL_OPTION_NODEGRADE;
|
|
auto ncdv = ncdirectf_render(nc_, dirf, &vopts);
|
|
CHECK(nullptr != ncdv);
|
|
CHECK(0 == ncdirect_raster_frame(nc_, ncdv, NCALIGN_LEFT));
|
|
ncdirectf_free(dirf);
|
|
unsigned y, x;
|
|
CHECK(0 == ncdirect_cursor_yx(nc_, &y, &x));
|
|
auto dimy = ncdirect_dim_y(nc_);
|
|
auto dimx = ncdirect_dim_x(nc_);
|
|
CHECK(dimy > y);
|
|
CHECK(dimx > x);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
CHECK(0 == ncdirect_stop(nc_));
|
|
|
|
// make sure that we can pass undefined flags and still create the ncdirect.
|
|
// we don't pass all 1s, or we turn on all logging, and run into trouble!
|
|
SUBCASE("FutureFlags") {
|
|
auto fnc = ncdirect_init(NULL, stdout, NCDIRECT_OPTION_VERY_VERBOSE << 1u);
|
|
REQUIRE(nullptr != fnc);
|
|
CHECK(0 == ncdirect_stop(fnc));
|
|
}
|
|
|
|
}
|