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}