subweight_core/
testing.rs

1use semver::Version;
2use std::{
3	ops::{Deref, DerefMut},
4	path::PathBuf,
5	process::Child,
6};
7
8pub fn root_dir() -> PathBuf {
9	PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("..")
10}
11
12pub fn assert_version(raw: &str, name: &str) {
13	let split = raw.split(' ').collect::<Vec<_>>();
14	assert_eq!(split.len(), 2);
15	let version = split[1];
16
17	assert_eq!(split[0], name);
18	assert!(Version::parse(version).is_ok(), "Version should be a valid Semver");
19	assert_eq!(version, &*crate::VERSION, "Wrong version string");
20}
21
22/// Asserts that the command output is successful.
23// TODO: Could be done as extension trait.
24pub fn succeeds(output: &std::process::Output) {
25	if !output.status.success() {
26		panic!("{}", String::from_utf8_lossy(&output.stderr));
27	}
28}
29
30pub fn assert_contains(output: &str, pattern: &str) {
31	if !output.contains(pattern) {
32		panic!("\nThe output:\n{:?}\nDid not contain the pattern:\n{:?}", output, pattern);
33	}
34}
35
36pub fn assert_not_contains(output: &str, pattern: &str) {
37	if output.contains(pattern) {
38		panic!("\nThe output:\n{:?}\nDid contain the pattern:\n{:?}", output, pattern);
39	}
40}
41
42pub struct KillChildOnDrop(pub Child);
43
44impl Drop for KillChildOnDrop {
45	fn drop(&mut self) {
46		let _ = self.0.kill();
47	}
48}
49
50impl Deref for KillChildOnDrop {
51	type Target = Child;
52
53	fn deref(&self) -> &Self::Target {
54		&self.0
55	}
56}
57
58impl DerefMut for KillChildOnDrop {
59	fn deref_mut(&mut self) -> &mut Self::Target {
60		&mut self.0
61	}
62}