Skip to main content

rvlib/
test_helpers.rs

1use std::{
2    fs,
3    path::{Path, PathBuf},
4    process::{Child, Command, Stdio},
5    thread,
6    time::Duration,
7};
8
9use crate::{
10    ToolsDataMap, control::Control, defer_file_removal, tracing_setup::init_tracing_for_tests,
11};
12
13pub fn get_ctrl() -> Control {
14    let mut ctrl = Control::default();
15    ctrl.cfg.usr.home_folder = Some(ctrl.cfg.tmpdir().to_string());
16    ctrl
17}
18
19pub fn tmp_copy(src: &Path) -> PathBuf {
20    let tmp_file_stem = src.file_stem().unwrap().to_str().unwrap();
21    let tmp_file = get_test_folder().join(format!("tmp-{tmp_file_stem}"));
22    tracing::debug!("Copying {src:?} to {tmp_file:?}");
23    fs::copy(src, &tmp_file).unwrap();
24    tmp_file
25}
26
27pub fn get_test_folder() -> PathBuf {
28    PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("resources/test_data")
29}
30pub fn prj_load(file: &str) -> ToolsDataMap {
31    init_tracing_for_tests();
32    let mut ctrl = get_ctrl();
33    let test_file_src = get_test_folder().join(get_test_folder().join(file));
34    let test_file = tmp_copy(&test_file_src);
35    defer_file_removal!(&test_file);
36    let mut tdm = ctrl.load(test_file.clone()).unwrap();
37    let pre_tdm = tdm.clone();
38    ctrl.import_annos(&test_file, &mut tdm).unwrap();
39    thread::sleep(Duration::from_millis(5));
40    assert_eq!(tdm, pre_tdm);
41    tdm
42}
43
44pub fn start_resttestserver() -> (String, Child) {
45    let manifestdir = env!("CARGO_MANIFEST_DIR").replace("\\", "/");
46    let child = if cfg!(target_os = "windows") {
47        let script_addr = format!("{manifestdir}/resources/test_data/scripts/start_restserver.bat");
48        Command::new(script_addr)
49            .arg(&manifestdir)
50            .stdout(Stdio::inherit())
51            .stderr(Stdio::inherit())
52            .spawn()
53            .expect("failed to start FastAPI server")
54    } else {
55        let script = format!(
56            r#"
57                export PYTHONPATH=../rvimage-py
58                cd {manifestdir}/../rest-testserver
59                uv run --no-cache fastapi run run.py&
60            "#
61        );
62
63        Command::new("bash")
64            .arg("-c")
65            .arg(script)
66            .stdout(Stdio::inherit())
67            .stderr(Stdio::inherit())
68            .spawn()
69            .expect("failed to start FastAPI server")
70    };
71    (manifestdir, child)
72}