cargo-test-all 0.2.0

Cargo extension for running tests of the used dependencies
Documentation
use std::env::set_current_dir;

use crate::command::Crate;
use crate::error::{Error, ErrorKind, Result};
use crate::runners::traits::TestRunner;

pub struct LocalDependencyTestRunner {
    crate_name: String,
    sources_directory: String,
}

impl TestRunner for LocalDependencyTestRunner {
    fn new(dependency: &Crate) -> Self {
        LocalDependencyTestRunner {
            crate_name: dependency.get_name(),
            sources_directory: dependency.get_path(),
        }
    }

    fn setup(&self) -> Result<()> {
        set_current_dir(self.sources_directory.clone())?;
        Ok(())
    }

    fn run_tests(&self) -> Result<()> {
        let output = self.run_cargo_command("test")?;

        match output.status.success() {
            true => Ok(()),
            false => Err(Error::from(ErrorKind::TestsFailure {
                crate_name: self.crate_name.to_owned(),
                output: String::from_utf8_lossy(&output.stdout).to_string(),
            })),
        }
    }

    fn teardown(&self) -> Result<()> {
        Ok(())
    }
}