From 6871f75d09f841e7611ce63f1e825aca877b50bf Mon Sep 17 00:00:00 2001 From: Nicolas <> Date: Sat, 9 Apr 2022 16:46:56 +0200 Subject: [PATCH] Add finish method --- src/render.rs | 17 +++++++++++++++++ src/surface.rs | 14 +++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/render.rs b/src/render.rs index 8268cd0..45329c9 100644 --- a/src/render.rs +++ b/src/render.rs @@ -6,6 +6,7 @@ use crate::Vector; pub trait Renderer { fn render(&mut self, step: f32); fn present(&mut self) -> Result<(), Error>; + fn finish(&mut self) -> Result<(), Error>; } pub struct SamplerRenderer { @@ -39,6 +40,10 @@ impl Renderer for SamplerRenderer { fn present(&mut self) -> Result<(), Error> { self.surface.present() } + + fn finish(&mut self) -> Result<(), Error> { + self.surface.finish() + } } #[cfg(test)] @@ -84,4 +89,16 @@ mod test { renderer.present().unwrap(); } + + #[test] + fn finish() { + let mut surface = Box::new(MockSurface::new()); + let sampler = Box::new(MockSampler::new()); + + surface.expect_finish().once().returning(|| Ok(())); + + let mut renderer = SamplerRenderer::new(surface, sampler); + + renderer.finish().unwrap(); + } } \ No newline at end of file diff --git a/src/surface.rs b/src/surface.rs index 3096f5f..c3f2029 100644 --- a/src/surface.rs +++ b/src/surface.rs @@ -14,6 +14,7 @@ pub trait Surface { fn draw(&mut self, x: usize, y: usize, char: char, color: Color); fn clear(&mut self, x: usize, y: usize); fn present(&mut self) -> Result<(), Error>; + fn finish(&mut self) -> Result<(), Error>; } pub struct WriteSurface { @@ -88,11 +89,10 @@ impl Surface for WriteSurface { self.out.flush()?; Ok(()) } -} -impl Drop for WriteSurface { - fn drop(&mut self) { - self.out.execute(Clear(ClearType::Purge)).unwrap(); + fn finish(&mut self) -> Result<(), Error> { + self.out.execute(Clear(ClearType::Purge))?; + Ok(()) } } @@ -160,13 +160,13 @@ mod test { } #[test] - fn purge() { + fn finish() { // Execute let data = Data::new(); let mock = MockWrite::new(data.clone()); - let renderer = WriteSurface::new(mock, 4, 4); + let mut renderer = WriteSurface::new(mock, 4, 4); - drop(renderer); + renderer.finish().unwrap(); // Recreate expectation let expected = Data::new();