aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/util/silencer_test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/tests/util/silencer_test.rs')
-rw-r--r--crates/shirabe/tests/util/silencer_test.rs44
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());
+}