From 089c649ee3e9b219ff90d88a2aad95e730507410 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 10 Mar 2021 00:17:44 +0100 Subject: Create tests windows --- src/testbench.rs | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/testbench.rs (limited to 'src/testbench.rs') diff --git a/src/testbench.rs b/src/testbench.rs new file mode 100644 index 0000000..ed0a2c1 --- /dev/null +++ b/src/testbench.rs @@ -0,0 +1,100 @@ +use std::fs; +use std::io; +use std::option::Option; +use std::path::{Path, PathBuf}; +use std::ffi::OsStr; + +use imgui; +use rlua::Lua; + +#[derive(Default, PartialEq)] +pub struct Test { + pub path: PathBuf, +} + +#[derive(Default)] +pub struct Bench { + lua: Lua, + tests: Vec, + selected_test: Option, +} + +impl Bench { + pub fn new() -> Bench { + let mut b = Bench { + lua: Lua::new(), + tests: Vec::new(), + selected_test: None, + }; + + // TODO: set graphically and use RV + b.load_tests("lua"); + + return b; + } + + pub fn load_tests

(&mut self, path: P) -> io::Result<()> + where + P: AsRef, + { + let entries: Result, io::Error> = fs::read_dir(path)? + .into_iter() + .map(|r| r.map(|f| f.path())) + .collect(); + + match entries { + Ok(files) => { + self.tests = files + .into_iter() + .filter(|f| f.is_file()) + .filter(|f| f.extension().unwrap_or(OsStr::new("")) == "lua") + .map(|f| Test { path: f }) + .collect(); + + return Ok(()); + } + Err(e) => return Err(e), + } + } + + pub fn draw(&mut self, _: &mut bool, ui: &mut imgui::Ui) { + use imgui::*; + + let win = Window::new(im_str!("Testbench")) + .size([400., 500.], Condition::Appearing) + .position([20., 20.], Condition::Appearing); + + win.build(&ui, || { + for (index, test) in self.tests.iter().enumerate() { + if let Some(test_name) = test.path.to_str() { + let test_name: ImString = test_name.to_string().into(); + let selected = matches!(self.selected_test, Some(i) if i == index); + + if Selectable::new(&test_name).selected(selected).build(ui) { + self.selected_test = Some(index) + } + } + } + + ui.separator(); + if let Some(index) = self.selected_test { + if let Some(test_name) = self.tests[index].path.to_str() { + let imstr: ImString = + format!("Selected Test: {}", test_name).to_string().into(); + ui.text_wrapped(&imstr); + ui.same_line(0.); + if ui.button(im_str!("Run"), [0., 0.]) { + } + ui.same_line(0.); + if ui.button(im_str!("Show"), [0., 0.]) {} + } + } + }); + } + + fn run_test(&self, index: usize) { + self.lua.context(|context| { + + }); + } +} -- cgit v1.2.1