foundry_test_utils/lib.rs
1//! # foundry-test-utils
2//!
3//! Internal Foundry testing utilities.
4
5#![cfg_attr(not(test), warn(unused_crate_dependencies))]
6#![cfg_attr(docsrs, feature(doc_cfg))]
7// Shouldn't use sh_* macros here, as they don't get captured by the test runner.
8#![allow(clippy::disallowed_macros)]
9
10#[macro_use]
11extern crate tracing;
12
13// Macros useful for testing.
14#[macro_use]
15mod macros;
16
17pub mod rpc;
18
19pub mod fd_lock;
20
21mod filter;
22pub use filter::Filter;
23
24// Utilities for making it easier to handle tests.
25pub mod util;
26pub use util::{TestCommand, TestProject};
27
28mod script;
29pub use script::{ScriptOutcome, ScriptTester};
30
31pub mod ui_runner;
32
33// re-exports for convenience
34pub use foundry_compilers;
35
36pub use snapbox::{self, assert_data_eq, file, str};
37
38/// Initializes tracing for tests.
39pub fn init_tracing() {
40 use std::sync::Once;
41 static ONCE: Once = Once::new();
42 ONCE.call_once(|| {
43 if std::env::var_os("RUST_BACKTRACE").is_none() {
44 unsafe { std::env::set_var("RUST_BACKTRACE", "1") };
45 }
46 let _ = tracing_subscriber::FmtSubscriber::builder()
47 .with_env_filter(env_filter())
48 .with_test_writer()
49 .try_init();
50 let _ = ui_test::color_eyre::install();
51 });
52}
53
54fn env_filter() -> tracing_subscriber::EnvFilter {
55 const DEFAULT_DIRECTIVES: &[&str] = &include!("../../cli/src/utils/default_directives.txt");
56 let mut filter = tracing_subscriber::EnvFilter::builder()
57 .with_default_directive("foundry_test_utils=debug".parse().unwrap())
58 .from_env_lossy();
59 for &directive in DEFAULT_DIRECTIVES {
60 filter = filter.add_directive(directive.parse().unwrap());
61 }
62 filter
63}
64
65pub fn test_debug(args: std::fmt::Arguments<'_>) {
66 init_tracing();
67 debug!("{args}");
68}