diff --git a/sailfish/src/runtime/buffer.rs b/sailfish/src/runtime/buffer.rs index 5969c91..52bc094 100644 --- a/sailfish/src/runtime/buffer.rs +++ b/sailfish/src/runtime/buffer.rs @@ -209,18 +209,29 @@ mod tests { fn test1() { let mut buffer = Buffer::new(); assert!(buffer.data.is_null()); - assert_eq!(buffer.len, 0); - assert_eq!(buffer.capacity, 0); + assert_eq!(buffer.len(), 0); + assert_eq!(buffer.capacity(), 0); buffer.push_str("apple"); assert!(!buffer.data.is_null()); - assert_eq!(buffer.len, 5); - assert_eq!(buffer.capacity, 5); + assert_eq!(buffer.len(), 5); + assert_eq!(buffer.capacity(), 5); buffer.push_str("pie"); assert!(!buffer.data.is_null()); - assert_eq!(buffer.len, 8); - assert_eq!(buffer.capacity, 10); + assert_eq!(buffer.len(), 8); + assert_eq!(buffer.capacity(), 10); + } + + #[test] + fn test2() { + let mut buffer = Buffer::with_capacity(1); + assert!(buffer.is_empty()); + assert_eq!(buffer.len(), 0); + assert!(buffer.capacity() >= 1); + + buffer += "pie"; + assert!(!buffer.is_empty()); } #[test] diff --git a/sailfish/src/runtime/render.rs b/sailfish/src/runtime/render.rs index 6afce93..b9b8695 100644 --- a/sailfish/src/runtime/render.rs +++ b/sailfish/src/runtime/render.rs @@ -1,4 +1,4 @@ -use std::path::{Path, PathBuf}; +use std::path::Path; use super::buffer::Buffer; use super::{escape, RenderError}; @@ -53,36 +53,6 @@ impl Render for str { } } -impl<'a> Render for &'a str { - #[inline] - fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { - b.push_str(self); - Ok(()) - } - - #[inline] - fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> { - // escape string - escape::escape_to_buf(self, b); - Ok(()) - } -} - -impl Render for String { - #[inline] - fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { - b.push_str(self); - Ok(()) - } - - #[inline] - fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> { - // escape string - escape::escape_to_buf(self, b); - Ok(()) - } -} - impl Render for char { #[inline] fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { @@ -103,7 +73,7 @@ impl Render for char { } } -impl<'a> Render for &'a Path { +impl Render for Path { #[inline] fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { // TODO: speed up on Windows using OsStrExt @@ -118,22 +88,6 @@ impl<'a> Render for &'a Path { } } -impl Render for PathBuf { - #[inline] - fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { - b.push_str(&*self.to_string_lossy()); - Ok(()) - } - - #[inline] - fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> { - // escape string - escape::escape_to_buf(&*self.to_string_lossy(), b); - - Ok(()) - } -} - // impl Render for [u8] { // #[inline] // fn render(&self, b: &mut Buffer) -> Result<(), RenderError> { @@ -266,4 +220,18 @@ mod tests { assert_eq!(b.as_str(), "c<& "); b.clear(); } + + #[test] + fn deref_coercion() { + use std::rc::Rc; + use std::path::PathBuf; + + let mut b = Buffer::new(); + (&String::from("a")).render(&mut b).unwrap(); + (&&PathBuf::from("b")).render(&mut b).unwrap(); + (&Rc::new(4u32)).render_escaped(&mut b).unwrap(); + (&Rc::new(2.3f32)).render_escaped(&mut b).unwrap(); + + assert_eq!(b.as_str(), "ab42.3"); + } }