use assert_fs::TempDir;
use moonup::constant;
use std::ffi::OsStr;
use std::path::{Path, PathBuf};
use std::process::Command;
#[allow(unused)]
pub struct TestWorkspace {
tempdir: TempDir,
moonup_home: PathBuf,
moon_home: PathBuf,
project_path: PathBuf,
}
impl TestWorkspace {
pub fn new() -> Self {
let tempdir = assert_fs::TempDir::new().expect("should create tempdir");
let moonup_home = tempdir.path().join(".moonup");
let moon_home = tempdir.path().join(".moon");
let project_path = tempdir.path().join("my_moonbit_project");
std::fs::create_dir_all(&project_path).expect("should create project directory");
Self {
tempdir,
moonup_home,
moon_home,
project_path,
}
}
pub fn cmd<S>(&self, cmd: S) -> Command
where
S: AsRef<OsStr>,
{
let mut cli = Command::new(cmd);
cli.env(constant::ENVNAME_MOONUP_HOME, self.moonup_home.as_os_str());
cli.env(constant::ENVNAME_MOON_HOME, self.moon_home.as_os_str());
#[cfg(windows)]
{
cli.env("WT_SESSION", "1");
}
cli.current_dir(self.project_path.as_path());
cli
}
pub fn cli(&self) -> Command {
static TEST_DIST_SERVER: &str = "https://moonup.csu.moe/testing/v2";
let mut cmd = self.cmd(self.moonup().as_os_str());
cmd.env(constant::ENVNAME_MOONUP_DIST_SERVER, TEST_DIST_SERVER);
cmd
}
pub fn moonup(&self) -> PathBuf {
insta_cmd::get_cargo_bin("moonup")
}
#[allow(unused)]
pub fn moon_home(&self) -> &Path {
self.moon_home.as_path()
}
#[allow(unused)]
pub fn moonup_home(&self) -> &Path {
self.moonup_home.as_path()
}
#[allow(unused)]
pub fn tempdir(&self) -> &TempDir {
&self.tempdir
}
#[allow(unused)]
pub fn project_path(&self) -> &Path {
self.project_path.as_path()
}
}
#[allow(unused_macros)]
macro_rules! apply_common_filters {
{} => {
let mut settings = insta::Settings::clone_current();
settings.add_filter(r"Blocking waiting for file lock.*?\n", "");
settings.add_filter(r"\x1b(?:\[[0-9;?]*[A-Za-z]|\][^\x07]*\x07)", "");
settings.add_filter(r"(\b[A-Z]:)?[\\/].*?[\\/].moonup", "[MOONUP_HOME]");
settings.add_filter(r"~?(\b[A-Z]:)?[\\/].*?[\\/].moon", "[MOON_HOME]");
settings.add_filter(r"Updating moonup: ([\d.]+) -> ([\d.]+)", "Updating moonup: [MOONUP_VERSION] -> [MOONUP_VERSION]");
settings.add_filter(r"(/private)?/var/folders/\S+?/T/\S+", "[TEMP_FILE]");
settings.add_filter(r"/tmp/\.tmp\S+", "[TEMP_FILE]");
settings.add_filter(r"\b[A-Z]:\\.*\\Local\\Temp\\\S+", "[TEMP_FILE]");
settings.add_filter(r"\\\\?([\w\d.])", "/$1");
settings.add_filter(r"(moon.*)\.exe", "$1");
let _bound = settings.bind_to_scope();
}
}
#[allow(unused_imports)]
pub(crate) use apply_common_filters;