diff options
Diffstat (limited to 'crates/shirabe/tests/util/silencer_test.rs')
| -rw-r--r-- | crates/shirabe/tests/util/silencer_test.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/crates/shirabe/tests/util/silencer_test.rs b/crates/shirabe/tests/util/silencer_test.rs index 8152b6e..42d0be4 100644 --- a/crates/shirabe/tests/util/silencer_test.rs +++ b/crates/shirabe/tests/util/silencer_test.rs @@ -1 +1,45 @@ //! ref: composer/tests/Composer/Test/Util/SilencerTest.php + +use shirabe::util::silencer::Silencer; +use shirabe_php_shim::{E_USER_WARNING, RuntimeException, error_reporting, microtime, trigger_error}; + +/// Test succeeds when no warnings are emitted externally, and original level is restored. +#[test] +#[ignore = "trigger_error is todo!() in the php-shim"] +fn test_silencer() { + let before = error_reporting(None); + + // Check warnings are suppressed correctly + Silencer::suppress(None); + trigger_error("Test", E_USER_WARNING); + Silencer::restore(); + + // Check all parameters and return values are passed correctly in a silenced call. + let result = Silencer::call(|| { + trigger_error("Test", E_USER_WARNING); + + let (a, b, c) = (2, 3, 4); + Ok(a * b * c) + }) + .unwrap(); + assert_eq!(24, result); + + // Check the error reporting setting was restored correctly + assert_eq!(before, error_reporting(None)); +} + +/// Test whether exception from silent callbacks are correctly forwarded. +#[test] +#[ignore = "microtime is todo!() in the php-shim"] +fn test_silenced_exception() { + let verification = format!("{}", microtime(false)); + let err = Silencer::call(|| -> anyhow::Result<()> { + Err(RuntimeException { + message: verification.clone(), + code: 0, + } + .into()) + }) + .unwrap_err(); + assert_eq!(verification, err.to_string()); +} |
