use assert_cmd::Command; use std::{fmt::Display, path::PathBuf}; const NB_ISSUES: usize = 26; #[derive(Debug, Clone, Copy)] enum Binary { Sonar, Codeclimate, } impl Display for Binary { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Binary::Sonar => write!(f, "cargo-sonar"), Binary::Codeclimate => write!(f, "cargo-codeclimate"), } } } fn run_binary(binary: Binary) -> tempfile::NamedTempFile { let output_tempfile = tempfile::NamedTempFile::new().unwrap(); let output_path = output_tempfile.path(); let output_arg = match binary { Binary::Sonar => "--sonar-path", Binary::Codeclimate => "--codeclimate-path", }; Command::cargo_bin(binary.to_string()) .unwrap() .current_dir( PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()) .join("tests") .join("fixtures"), ) .arg("--audit") .arg("--clippy") .arg("--deny") .arg("--outdated") .arg("--udeps") .arg(output_arg) .arg(output_path) .assert() .success(); output_tempfile } #[test] fn cargo_sonar() { let output_path = run_binary(Binary::Sonar); let issues: cargo_sonar::sonar::Issues = serde_json::from_reader(std::fs::File::open(output_path).unwrap()).unwrap(); assert_eq!(issues.len(), NB_ISSUES); } #[test] fn cargo_codeclimate() { let output_path = run_binary(Binary::Codeclimate); let issues: cargo_sonar::codeclimate::Issues = serde_json::from_reader(std::fs::File::open(output_path).unwrap()).unwrap(); assert_eq!(issues.len(), NB_ISSUES); }