use std::cell::RefCell;
use std::rc::Rc;
use egui_kittest::Harness;
use egui_kittest::kittest::Queryable;
use rsplot::MaskToolsWidget;
use rsplot::egui;
fn temp_h5(tag: &str) -> std::path::PathBuf {
let mut path = std::env::temp_dir();
path.push(format!(
"rsplot_h5_picker_{}_{}.h5",
tag,
std::process::id()
));
let _ = std::fs::remove_file(&path);
path
}
#[test]
fn load_modal_loads_the_chosen_dataset() {
let path = temp_h5("load");
let mut seed = MaskToolsWidget::new(2, 2);
seed.mask = vec![1, 2, 3, 4];
seed.save_h5(&path).expect("write mask dataset");
seed.mask = vec![9, 9, 9, 9];
seed.save_h5_dataset(&path, "other")
.expect("write other dataset");
let widget = Rc::new(RefCell::new(MaskToolsWidget::new(2, 2)));
widget
.borrow_mut()
.begin_h5_load(path.clone())
.expect("begin load");
let widget_ui = widget.clone();
let mut harness = Harness::builder()
.with_size(egui::vec2(1000.0, 400.0))
.with_pixels_per_point(1.0)
.build_ui(move |ui| {
widget_ui.borrow_mut().show_toolbar(ui);
});
harness.step();
harness.step();
let _ = harness.get_by_label("Select a dataset");
let _ = harness.get_by_label("other");
harness.get_by_label("other").click();
harness.step();
harness.get_by_label("OK").click();
harness.step();
harness.step();
assert_eq!(
widget.borrow().mask,
vec![9, 9, 9, 9],
"the modal's dataset choice must drive which dataset is read"
);
let _ = std::fs::remove_file(&path);
}
#[test]
fn save_modal_writes_the_named_dataset() {
let path = temp_h5("save");
let mut seed = MaskToolsWidget::new(2, 2);
seed.mask = vec![1, 1, 1, 1];
seed.save_h5(&path).expect("seed mask dataset");
let widget = Rc::new(RefCell::new(MaskToolsWidget::new(2, 2)));
widget.borrow_mut().mask = vec![5, 6, 7, 8];
widget
.borrow_mut()
.begin_h5_save(path.clone())
.expect("begin save");
let widget_ui = widget.clone();
let mut harness = Harness::builder()
.with_size(egui::vec2(1000.0, 400.0))
.with_pixels_per_point(1.0)
.build_ui(move |ui| {
widget_ui.borrow_mut().show_toolbar(ui);
});
harness.step();
harness.step();
let _ = harness.get_by_label("Select a dataset or type a new dataset name");
harness.get_by_label("OK").click();
harness.step();
harness.step();
let mut reader = MaskToolsWidget::new(2, 2);
reader.load_h5(&path).expect("load saved mask");
assert_eq!(
reader.mask,
vec![5, 6, 7, 8],
"the save modal must write the current mask to the chosen dataset"
);
let _ = std::fs::remove_file(&path);
}