Notcurses-Native.git | xt/ | 16-direct-exhaustive.rakutest edit
use Test;
use lib 'lib';
use lib 't/lib';
use TestHelper;
use NativeCall;
use Notcurses::Native::Types;
use Notcurses::Native::Direct;
plan 8;
my $ncd = do { my ($n, $) = test-init-direct(); $n };
unless $ncd.defined {
skip 'No direct mode', 8;
exit 0;
}
LEAVE { ncdirect_stop($ncd) if $ncd.defined }
subtest 'All capability queries return defined values' => {
plan 14;
ok ncdirect_cantruecolor($ncd).defined, 'cantruecolor is defined';
ok ncdirect_canchangecolor($ncd).defined, 'canchangecolor is defined';
ok ncdirect_canfade($ncd).defined, 'canfade is defined';
ok ncdirect_canhalfblock($ncd).defined, 'canhalfblock is defined';
ok ncdirect_canquadrant($ncd).defined, 'canquadrant is defined';
ok ncdirect_cansextant($ncd).defined, 'cansextant is defined';
ok ncdirect_canoctant($ncd).defined, 'canoctant is defined';
ok ncdirect_canbraille($ncd).defined, 'canbraille is defined';
ok ncdirect_canget_cursor($ncd).defined, 'canget_cursor is defined';
ok ncdirect_canutf8($ncd).defined, 'canutf8 is defined';
ok ncdirect_canopen_images($ncd).defined, 'canopen_images is defined';
ok ncdirect_canopen_videos($ncd).defined, 'canopen_videos is defined';
my $pixel = ncdirect_check_pixel_support($ncd);
ok $pixel.defined, "check_pixel_support returned $pixel";
my $term = ncdirect_detected_terminal($ncd);
ok $term.defined, "detected_terminal: $term";
};
subtest 'Color set/reset roundtrips' => {
plan 8;
is ncdirect_set_fg_rgb($ncd, 0xFF0000), 0, 'set_fg_rgb red returns 0';
is ncdirect_set_bg_rgb($ncd, 0x0000FF), 0, 'set_bg_rgb blue returns 0';
is ncdirect_set_fg_rgb8($ncd, 0, 255, 0), 0, 'set_fg_rgb8 green returns 0';
is ncdirect_set_bg_rgb8($ncd, 128, 128, 128), 0, 'set_bg_rgb8 gray returns 0';
is ncdirect_set_fg_palindex($ncd, 1), 0, 'set_fg_palindex(1) returns 0';
is ncdirect_set_bg_palindex($ncd, 2), 0, 'set_bg_palindex(2) returns 0';
is ncdirect_set_fg_default($ncd), 0, 'set_fg_default returns 0';
is ncdirect_set_bg_default($ncd), 0, 'set_bg_default returns 0';
};
subtest 'Cursor movement operations' => {
plan 9;
is ncdirect_cursor_move_yx($ncd, 0, 0), 0, 'move_yx(0,0) returns 0';
is ncdirect_cursor_down($ncd, 1), 0, 'cursor_down(1) returns 0';
is ncdirect_cursor_up($ncd, 1), 0, 'cursor_up(1) returns 0';
is ncdirect_cursor_right($ncd, 2), 0, 'cursor_right(2) returns 0';
is ncdirect_cursor_left($ncd, 2), 0, 'cursor_left(2) returns 0';
is ncdirect_cursor_enable($ncd), 0, 'cursor_enable returns 0';
is ncdirect_cursor_disable($ncd), 0, 'cursor_disable returns 0';
is ncdirect_cursor_push($ncd), 0, 'cursor_push returns 0';
is ncdirect_cursor_pop($ncd), 0, 'cursor_pop returns 0';
};
subtest 'Box drawing functions' => {
plan 5;
# All box functions: (handle, ul, ur, ll, lr, ylen, xlen, ctlword)
# Use 0 for all channel params (default colors), 3 rows x 6 cols, ctlword 0
is ncdirect_rounded_box($ncd, 0, 0, 0, 0, 3, 6, 0), 0, 'rounded_box returns 0';
is ncdirect_double_box($ncd, 0, 0, 0, 0, 3, 6, 0), 0, 'double_box returns 0';
is ncdirect_light_box($ncd, 0, 0, 0, 0, 3, 6, 0), 0, 'light_box returns 0';
is ncdirect_heavy_box($ncd, 0, 0, 0, 0, 3, 6, 0), 0, 'heavy_box returns 0';
is ncdirect_ascii_box($ncd, 0, 0, 0, 0, 3, 6, 0), 0, 'ascii_box returns 0';
};
subtest 'Clear screen' => {
plan 1;
is ncdirect_clear($ncd), 0, 'clear returns 0';
};
subtest 'putegc outputs a character' => {
plan 2;
my int32 $sbytes = 0;
my $rc = ncdirect_putegc($ncd, 0, "A", $sbytes);
ok $rc > 0, "putegc returned $rc columns (> 0)";
is $sbytes, 1, 'putegc reports 1 byte consumed for "A"';
};
subtest 'Capabilities struct fields' => {
plan 3;
my $caps = ncdirect_capabilities($ncd);
ok $caps.defined, 'ncdirect_capabilities returns defined struct';
ok $caps.colors > 0, "colors = {$caps.colors} (> 0)";
ok $caps.utf8.defined, "utf8 field is defined = {$caps.utf8}";
};
subtest 'Input ready file descriptor' => {
plan 1;
my $fd = ncdirect_inputready_fd($ncd);
ok $fd >= 0, "inputready_fd returned valid fd ($fd)";
};
done-testing;