77 lines
2.0 KiB
Rust
77 lines
2.0 KiB
Rust
|
extern crate brev;
|
||
|
extern crate executable_path;
|
||
|
extern crate target;
|
||
|
extern crate tempdir;
|
||
|
|
||
|
use executable_path::executable_path;
|
||
|
use std::process;
|
||
|
use std::str;
|
||
|
use std::path::Path;
|
||
|
use tempdir::TempDir;
|
||
|
|
||
|
#[cfg(unix)]
|
||
|
fn to_shell_path(path: &Path) -> String {
|
||
|
use std::fs;
|
||
|
fs::canonicalize(path).expect("canonicalize failed")
|
||
|
.to_str().map(str::to_string).expect("unicode decode failed")
|
||
|
}
|
||
|
|
||
|
#[cfg(windows)]
|
||
|
fn to_shell_path(path: &Path) -> String {
|
||
|
// Translate path from windows style to unix style
|
||
|
let mut cygpath = process::Command::new("cygpath");
|
||
|
cygpath.arg("--unix");
|
||
|
cygpath.arg(path);
|
||
|
brev::output(cygpath).expect("converting cygwin path failed")
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_invocation_directory() {
|
||
|
let tmp = TempDir::new("just-integration")
|
||
|
.unwrap_or_else(
|
||
|
|err| panic!("integration test: failed to create temporary directory: {}", err));
|
||
|
|
||
|
let mut justfile_path = tmp.path().to_path_buf();
|
||
|
justfile_path.push("justfile");
|
||
|
brev::dump(justfile_path, "default:\n @cd {{invocation_directory()}}\n @echo {{invocation_directory()}}");
|
||
|
|
||
|
let mut subdir = tmp.path().to_path_buf();
|
||
|
subdir.push("subdir");
|
||
|
brev::mkdir(&subdir);
|
||
|
|
||
|
let output = process::Command::new(&executable_path("just"))
|
||
|
.current_dir(&subdir)
|
||
|
.args(&["--shell", "sh"])
|
||
|
.output()
|
||
|
.expect("just invocation failed");
|
||
|
|
||
|
let mut failure = false;
|
||
|
|
||
|
let expected_status = 0;
|
||
|
let expected_stdout =
|
||
|
to_shell_path(&subdir) + "\n";
|
||
|
let expected_stderr = "";
|
||
|
|
||
|
let status = output.status.code().unwrap();
|
||
|
if status != expected_status {
|
||
|
println!("bad status: {} != {}", status, expected_status);
|
||
|
failure = true;
|
||
|
}
|
||
|
|
||
|
let stdout = str::from_utf8(&output.stdout).unwrap();
|
||
|
if stdout != expected_stdout {
|
||
|
println!("bad stdout:\ngot:\n{:?}\n\nexpected:\n{:?}", stdout, expected_stdout);
|
||
|
failure = true;
|
||
|
}
|
||
|
|
||
|
let stderr = str::from_utf8(&output.stderr).unwrap();
|
||
|
if stderr != expected_stderr {
|
||
|
println!("bad stderr:\ngot:\n{:?}\n\nexpected:\n{:?}", stderr, expected_stderr);
|
||
|
failure = true;
|
||
|
}
|
||
|
|
||
|
if failure {
|
||
|
panic!("test failed");
|
||
|
}
|
||
|
}
|