use ratatui::Terminal;
use ratatui::backend::TestBackend;
use ratatui::layout::Size;
use crate::ratatui::TerminalOptions;
use crate::terminal::{TerminalAdapter, TerminalError, TerminalResult};
pub struct TestTerminalAdapter {
terminal: Terminal<TestBackend>,
}
impl TestTerminalAdapter {
pub fn new(size: Size) -> TerminalResult<Self> {
Self::new_with_options(size, TerminalOptions::default())
}
pub fn new_with_options(size: Size, options: TerminalOptions) -> TerminalResult<Self> {
let backend = TestBackend::new(size.width, size.height);
let terminal = Terminal::with_options(backend, options)
.map_err(|_| TerminalError::Other("Failed creating terminal"))?;
Ok(Self { terminal })
}
}
impl TerminalAdapter for TestTerminalAdapter {
type Backend = TestBackend;
fn enable_raw_mode(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn disable_raw_mode(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn enter_alternate_screen(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn leave_alternate_screen(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn enable_mouse_capture(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn disable_mouse_capture(&mut self) -> TerminalResult<()> {
Err(TerminalError::Unsupported)
}
fn raw_mut(&mut self) -> &mut Terminal<ratatui::backend::TestBackend> {
&mut self.terminal
}
fn raw(&self) -> &Terminal<ratatui::backend::TestBackend> {
&self.terminal
}
}