1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-03 14:26:17 +03:00

include rendering in fuzzing tests

Этот коммит содержится в:
rhysd
2022-07-16 21:54:10 +09:00
родитель ac04feb5ea
Коммит b56f252f08
4 изменённых файлов: 27 добавлений и 4 удалений

Просмотреть файл

@@ -29,6 +29,7 @@ pub struct DummyBackend {
}
impl Default for DummyBackend {
#[inline]
fn default() -> Self {
Self {
width: 40,
@@ -39,6 +40,7 @@ impl Default for DummyBackend {
}
impl Backend for DummyBackend {
#[inline]
fn draw<'a, I>(&mut self, _content: I) -> Result<(), io::Error>
where
I: Iterator<Item = (u16, u16, &'a Cell)>,
@@ -46,27 +48,33 @@ impl Backend for DummyBackend {
Ok(())
}
#[inline]
fn hide_cursor(&mut self) -> Result<(), io::Error> {
Ok(())
}
#[inline]
fn show_cursor(&mut self) -> Result<(), io::Error> {
Ok(())
}
#[inline]
fn get_cursor(&mut self) -> Result<(u16, u16), io::Error> {
Ok(self.cursor)
}
#[inline]
fn set_cursor(&mut self, x: u16, y: u16) -> Result<(), io::Error> {
self.cursor = (x, y);
Ok(())
}
#[inline]
fn clear(&mut self) -> Result<(), io::Error> {
Ok(())
}
#[inline]
fn size(&self) -> Result<Rect, io::Error> {
Ok(Rect {
x: 0,
@@ -76,11 +84,13 @@ impl Backend for DummyBackend {
})
}
#[inline]
fn flush(&mut self) -> Result<(), io::Error> {
Ok(())
}
}
#[inline]
pub fn dummy_terminal() -> Terminal<DummyBackend> {
Terminal::new(DummyBackend::default()).unwrap()
}
@@ -90,6 +100,7 @@ pub trait TerminalExt {
}
impl TerminalExt for Terminal<DummyBackend> {
#[inline]
fn draw_textarea(&mut self, textarea: &TextArea<'_>) {
self.draw(|f| f.render_widget(textarea.widget(), f.size()))
.unwrap();

9
fuzz/Cargo.lock сгенерированный
Просмотреть файл

@@ -289,6 +289,14 @@ dependencies = [
"tui",
]
[[package]]
name = "tui-textarea-bench"
version = "0.0.0"
dependencies = [
"tui",
"tui-textarea",
]
[[package]]
name = "tui-textarea-fuzz"
version = "0.0.0"
@@ -296,6 +304,7 @@ dependencies = [
"arbitrary",
"libfuzzer-sys",
"tui-textarea",
"tui-textarea-bench",
]
[[package]]

Просмотреть файл

@@ -12,6 +12,7 @@ cargo-fuzz = true
libfuzzer-sys = "0.4"
arbitrary = "1"
tui-textarea = { path = "..", features = ["search", "arbitrary"] }
tui-textarea-bench = { path = "../bench" }
# Prevent this from interfering with workspaces
[workspace]

Просмотреть файл

@@ -5,17 +5,19 @@ use libfuzzer_sys::fuzz_target;
use std::iter;
use std::str;
use tui_textarea::{Input, TextArea};
use tui_textarea_bench::{dummy_terminal, TerminalExt};
fn fuzz(data: &[u8]) -> Result<()> {
let mut u = Unstructured::new(data);
let inputs: Vec<_> = iter::repeat_with(|| Input::arbitrary(&mut u))
let mut term = dummy_terminal();
let mut data = Unstructured::new(data);
let inputs: Vec<_> = iter::repeat_with(|| Input::arbitrary(&mut data))
.take(100)
.collect::<Result<_>>()?;
let text = <&str>::arbitrary(&mut u)?;
let text = <&str>::arbitrary(&mut data)?;
let mut textarea = TextArea::from(text.lines());
for input in inputs {
textarea.input(input);
let _ = textarea.widget();
term.draw_textarea(&mut textarea);
}
Ok(())
}