use protoc_prebuilt::{ Error, init };
use std::{
env::{ set_var, temp_dir },
fs::{ create_dir_all, metadata, remove_dir_all, remove_file },
path::PathBuf
};
struct DirectoryPath(PathBuf);
impl Drop for DirectoryPath {
fn drop(&mut self) {
remove_dir_all(&self.0).unwrap();
}
}
#[test]
fn test_integration() {
let version = "22.0";
let result = init(version);
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), Error::VarError { .. }));
let out_dir = DirectoryPath(temp_dir().join("protoc-prebuilt-test").join("integration"));
remove_dir_all(&out_dir.0).ok();
create_dir_all(&out_dir.0).unwrap();
set_var("OUT_DIR", out_dir.0.to_str().unwrap());
let result = init(version);
assert!(result.is_ok());
let (protoc_bin, protoc_include) = result.unwrap();
assert!(metadata(&protoc_bin).is_ok());
assert!(metadata(protoc_include).is_ok());
remove_file(&protoc_bin).unwrap();
let result = init(version);
println!("{:?}", result);
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), Error::Io { .. }));
}