Explorar o código

Fix/release builds (#1812)

Signed-off-by: salaheldinsoliman <salaheldin_sameh@aucegypt.edu>
Signed-off-by: Sean Young <sean@mess.org>
Co-authored-by: Sean Young <sean@mess.org>
salaheldinsoliman hai 5 meses
pai
achega
d1ab5d1351
Modificáronse 1 ficheiros con 16 adicións e 7 borrados
  1. 16 7
      fmt/src/buffer.rs

+ 16 - 7
fmt/src/buffer.rs

@@ -94,8 +94,15 @@ impl<W> FormatBuffer<W> {
             .extend(std::iter::repeat_n(IndentGroup::default(), delta));
     }
 
-    /// Dedent the buffer by delta
+    /// Dedent the buffer by `delta` levels. Panics if `delta` is too large.
     pub fn dedent(&mut self, delta: usize) {
+        if delta > self.indents.len() {
+            panic!(
+                "Cannot dedent by {} levels: only {} levels present",
+                delta,
+                self.indents.len()
+            );
+        }
         self.indents.truncate(self.indents.len() - delta);
     }
 
@@ -336,11 +343,12 @@ impl<W: Write> Write for FormatBuffer<W> {
 #[cfg(test)]
 mod tests {
     use super::*;
+    use std::panic::{catch_unwind, AssertUnwindSafe};
 
     const TAB_WIDTH: usize = 4;
 
     #[test]
-    fn test_buffer_indents() -> std::fmt::Result {
+    fn test_buffer_indents() {
         let delta = 1;
 
         let mut buf = FormatBuffer::new(String::new(), TAB_WIDTH);
@@ -366,11 +374,12 @@ mod tests {
         assert_eq!(buf.level(), 0);
         assert_eq!(buf.current_indent_len(), 0);
 
-        // panics on extra dedent
-        let res = std::panic::catch_unwind(|| buf.clone().dedent(delta));
-        assert!(res.is_err());
-
-        Ok(())
+        // should panic on extra dedent
+        let res = catch_unwind(AssertUnwindSafe(|| {
+            let mut buf = buf.clone();
+            buf.dedent(delta);
+        }));
+        assert!(res.is_err(), "Expected panic on extra dedent, but did not get one");
     }
 
     #[test]