2023-07-08 14:43:11 +02:00
|
|
|
//! # common macros for `libpt`
|
|
|
|
//!
|
|
|
|
//! This module implements macros for use with `libpt`.
|
|
|
|
|
|
|
|
//// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// we want docs
|
|
|
|
#![warn(missing_docs)]
|
|
|
|
#![warn(rustdoc::missing_crate_level_docs)]
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// we want Debug everywhere.
|
|
|
|
#![warn(missing_debug_implementations)]
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// enable clippy's extra lints, the pedantic version
|
|
|
|
#![warn(clippy::pedantic)]
|
|
|
|
|
|
|
|
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
pub use crate::get_stdout_for;
|
|
|
|
|
|
|
|
//// CONSTANTS /////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// STATICS ///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// MACROS ////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/// ## catches what the expression would write to the `stdout`
|
|
|
|
///
|
|
|
|
/// This macro takes an expression, executes it, and catches what it would write to the stdout.
|
|
|
|
/// The buffer of the stdout will then be returned for further use.
|
|
|
|
///
|
|
|
|
/// This is especially useful when testing loggers or other frontend CLI functions.
|
|
|
|
///
|
2023-07-08 15:42:28 +02:00
|
|
|
/// Inspiration: [users.rust-lang.org](https://users.rust-lang.org/t/how-to-test-functions-that-use-println/67188/5)
|
2023-07-08 14:43:11 +02:00
|
|
|
#[macro_export]
|
|
|
|
macro_rules! get_stdout_for {
|
|
|
|
($test:expr) => {{
|
|
|
|
use gag::BufferRedirect;
|
|
|
|
use std::io::Read;
|
|
|
|
|
|
|
|
let mut buf = BufferRedirect::stdout().unwrap();
|
|
|
|
|
|
|
|
$test;
|
|
|
|
|
|
|
|
let mut output = String::new();
|
|
|
|
buf.read_to_string(&mut output).unwrap();
|
|
|
|
drop(buf);
|
|
|
|
|
|
|
|
output
|
|
|
|
}};
|
|
|
|
}
|
|
|
|
|
|
|
|
//// ENUMS /////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// STRUCTS ///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
|