Packages
Terminal emulation and driver infrastructure for Raxol. ANSI parsing, screen buffers, command processing, cursor management, input handling, session management, and termbox2 NIF integration.
Current section
Files
Jump to
Current section
Files
lib/termbox2_nif/c_src/termbox2/tests/test_prepend.php
<?php
declare(strict_types=1);
$test = new class() {
public object $ffi;
public array $defines = [];
private string $test_log;
public function __construct() {
setlocale(LC_ALL, '');
$this->ffi = $this->makeFfi();
$this->test_log = $GLOBALS['argv'][1] ?? '';
}
private function makeFfi(): object {
// Make FFI
[ $ffi, $defines ] = require __DIR__ . '/test_ffi.php';
$this->defines = $defines;
// Return wrapper that logs FFI calls
return new class($ffi, $this) {
private FFI $ffi;
private object $test;
private bool $quiet;
public function __construct($ffi, $test) {
$this->ffi = $ffi;
$this->test = $test;
$this->quiet = false;
}
public function quiet($on_off) {
$this->quiet = $on_off;
}
public function __call(string $name, array $args) {
if (!$this->quiet) {
$this->test->log("ffi $name " . json_encode($args));
}
return $this->ffi->$name(...$args);
}
};
}
public function xvkbd(string $xvkbd_cmd): int {
$this->log("xvkbd $xvkbd_cmd");
$cmd = sprintf(
"DISPLAY=:1000 xvkbd -remote-display :1000 -window xterm -text %s",
escapeshellarg($xvkbd_cmd)
);
$sh_cmd = sprintf(
'sh -c %s >/dev/null 2>&1',
escapeshellarg($cmd)
);
$output = [];
$exit_code = 1;
exec($sh_cmd, $output, $exit_code);
return $exit_code;
}
public function log(string $str): void {
if (!$this->test_log) {
return;
}
$lines = explode("\n", $str);
foreach ($lines as $line) {
file_put_contents($this->test_log, " $line\n", FILE_APPEND);
}
}
public function screencap(): void {
$this->log('screencap');
sleep(PHP_INT_MAX);
}
public function skip(): void {
$this->log('skip');
sleep(PHP_INT_MAX);
}
};