cli-test: Improve testing framework logging
Show which file is being run.
This commit is contained in:
parent
f8aa1daedb
commit
b33fb2a33d
|
|
@ -41,6 +41,8 @@ pub struct Test {
|
||||||
/// An assertion is a command to run with an expected output.
|
/// An assertion is a command to run with an expected output.
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub struct Assertion {
|
pub struct Assertion {
|
||||||
|
/// The test file that contains this assertion.
|
||||||
|
path: PathBuf,
|
||||||
/// Name of command to run, eg. `git`.
|
/// Name of command to run, eg. `git`.
|
||||||
command: String,
|
command: String,
|
||||||
/// Command arguments, eg. `["push"]`.
|
/// Command arguments, eg. `["push"]`.
|
||||||
|
|
@ -102,10 +104,10 @@ impl TestFormula {
|
||||||
}
|
}
|
||||||
Err(err) => return Err(err.into()),
|
Err(err) => return Err(err.into()),
|
||||||
};
|
};
|
||||||
self.read(io::Cursor::new(contents))
|
self.read(path, io::Cursor::new(contents))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read(&mut self, r: impl io::BufRead) -> Result<&mut Self, Error> {
|
pub fn read(&mut self, path: &Path, r: impl io::BufRead) -> Result<&mut Self, Error> {
|
||||||
let mut test = Test::default();
|
let mut test = Test::default();
|
||||||
let mut fenced = false; // Whether we're inside a fenced code block.
|
let mut fenced = false; // Whether we're inside a fenced code block.
|
||||||
|
|
||||||
|
|
@ -129,6 +131,7 @@ impl TestFormula {
|
||||||
let (cmd, args) = parts.split_first().ok_or(Error::Parse)?;
|
let (cmd, args) = parts.split_first().ok_or(Error::Parse)?;
|
||||||
|
|
||||||
test.assertions.push(Assertion {
|
test.assertions.push(Assertion {
|
||||||
|
path: path.to_path_buf(),
|
||||||
command: cmd.to_owned(),
|
command: cmd.to_owned(),
|
||||||
args: args.to_owned(),
|
args: args.to_owned(),
|
||||||
expected: String::new(),
|
expected: String::new(),
|
||||||
|
|
@ -167,6 +170,11 @@ impl TestFormula {
|
||||||
|
|
||||||
for test in &self.tests {
|
for test in &self.tests {
|
||||||
for assertion in &test.assertions {
|
for assertion in &test.assertions {
|
||||||
|
let path = assertion
|
||||||
|
.path
|
||||||
|
.file_name()
|
||||||
|
.map(|f| f.to_string_lossy().to_string())
|
||||||
|
.unwrap_or(String::from("<none>"));
|
||||||
let cmd = if assertion.command == "rad" {
|
let cmd = if assertion.command == "rad" {
|
||||||
snapbox::cmd::cargo_bin("rad")
|
snapbox::cmd::cargo_bin("rad")
|
||||||
} else if assertion.command == "cd" {
|
} else if assertion.command == "cd" {
|
||||||
|
|
@ -188,10 +196,10 @@ impl TestFormula {
|
||||||
} else {
|
} else {
|
||||||
PathBuf::from(&assertion.command)
|
PathBuf::from(&assertion.command)
|
||||||
};
|
};
|
||||||
log::debug!(target: "test", "Running `{}` in `{}`..", cmd.display(), self.cwd.display());
|
log::debug!(target: "test", "{path}: Running `{}` in `{}`..", cmd.display(), self.cwd.display());
|
||||||
|
|
||||||
if !self.cwd.exists() {
|
if !self.cwd.exists() {
|
||||||
log::error!(target: "test", "Directory {} does not exist..", self.cwd.display());
|
log::error!(target: "test", "{path}: Directory {} does not exist..", self.cwd.display());
|
||||||
}
|
}
|
||||||
let result = Command::new(cmd.clone())
|
let result = Command::new(cmd.clone())
|
||||||
.env_clear()
|
.env_clear()
|
||||||
|
|
@ -216,11 +224,11 @@ impl TestFormula {
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if err.kind() == io::ErrorKind::NotFound {
|
if err.kind() == io::ErrorKind::NotFound {
|
||||||
log::error!(target: "test", "Command `{}` does not exist..", cmd.display());
|
log::error!(target: "test", "{path}: Command `{}` does not exist..", cmd.display());
|
||||||
}
|
}
|
||||||
return Err(io::Error::new(
|
return Err(io::Error::new(
|
||||||
err.kind(),
|
err.kind(),
|
||||||
format!("{err}: `{}`", cmd.display()),
|
format!("{path}: {err}: `{}`", cmd.display()),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -259,8 +267,9 @@ $ rad sync
|
||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
let mut actual = TestFormula::new();
|
let mut actual = TestFormula::new();
|
||||||
|
let path = Path::new("test.md").to_path_buf();
|
||||||
actual
|
actual
|
||||||
.read(io::BufReader::new(io::Cursor::new(input)))
|
.read(path.as_path(), io::BufReader::new(io::Cursor::new(input)))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let expected = TestFormula {
|
let expected = TestFormula {
|
||||||
|
|
@ -272,6 +281,7 @@ $ rad sync
|
||||||
context: vec![String::from("Let's try to track @dave and @sean:")],
|
context: vec![String::from("Let's try to track @dave and @sean:")],
|
||||||
assertions: vec![
|
assertions: vec![
|
||||||
Assertion {
|
Assertion {
|
||||||
|
path: path.clone(),
|
||||||
command: String::from("rad"),
|
command: String::from("rad"),
|
||||||
args: vec![String::from("track"), String::from("@dave")],
|
args: vec![String::from("track"), String::from("@dave")],
|
||||||
expected: String::from(
|
expected: String::from(
|
||||||
|
|
@ -280,6 +290,7 @@ $ rad sync
|
||||||
exit: ExitStatus::Success,
|
exit: ExitStatus::Success,
|
||||||
},
|
},
|
||||||
Assertion {
|
Assertion {
|
||||||
|
path: path.clone(),
|
||||||
command: String::from("rad"),
|
command: String::from("rad"),
|
||||||
args: vec![String::from("track"), String::from("@sean")],
|
args: vec![String::from("track"), String::from("@sean")],
|
||||||
expected: String::from(
|
expected: String::from(
|
||||||
|
|
@ -292,6 +303,7 @@ $ rad sync
|
||||||
Test {
|
Test {
|
||||||
context: vec![String::from("Super, now let's move on to the next step.")],
|
context: vec![String::from("Super, now let's move on to the next step.")],
|
||||||
assertions: vec![Assertion {
|
assertions: vec![Assertion {
|
||||||
|
path: path.clone(),
|
||||||
command: String::from("rad"),
|
command: String::from("rad"),
|
||||||
args: vec![String::from("sync")],
|
args: vec![String::from("sync")],
|
||||||
expected: String::new(),
|
expected: String::new(),
|
||||||
|
|
@ -321,7 +333,10 @@ name = "radicle-cli-test"
|
||||||
let mut formula = TestFormula::new();
|
let mut formula = TestFormula::new();
|
||||||
formula
|
formula
|
||||||
.cwd(env!("CARGO_MANIFEST_DIR"))
|
.cwd(env!("CARGO_MANIFEST_DIR"))
|
||||||
.read(io::BufReader::new(io::Cursor::new(input)))
|
.read(
|
||||||
|
Path::new("test.md"),
|
||||||
|
io::BufReader::new(io::Cursor::new(input)),
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
formula.run().unwrap();
|
formula.run().unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,6 @@ fn rad_issue() {
|
||||||
|
|
||||||
// Setup a test repository.
|
// Setup a test repository.
|
||||||
fixtures::repository(&working);
|
fixtures::repository(&working);
|
||||||
// Set a fixed commit time.
|
|
||||||
env::set_var(radicle_cob::git::RAD_COMMIT_TIME, "1671125284");
|
|
||||||
|
|
||||||
test("examples/rad-init.md", &working, Some(home), []).unwrap();
|
test("examples/rad-init.md", &working, Some(home), []).unwrap();
|
||||||
test("examples/rad-issue.md", &working, Some(home), []).unwrap();
|
test("examples/rad-issue.md", &working, Some(home), []).unwrap();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue