From 6b7e6d8e6c9ea51721a56786e33c6ca2d757de70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 4 Feb 2017 17:48:44 +0100 Subject: [PATCH] Add unit test for buffers that checks the miniobject writability wrapping --- gst-plugin/src/buffer.rs | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/gst-plugin/src/buffer.rs b/gst-plugin/src/buffer.rs index 0206af8b..fae9fd24 100644 --- a/gst-plugin/src/buffer.rs +++ b/gst-plugin/src/buffer.rs @@ -670,3 +670,67 @@ bitflags! { | BUFFER_COPY_FLAG_MEMORY.bits, } } + +#[cfg(test)] +mod tests { + use super::*; + use std::ptr; + use std::os::raw::c_void; + + fn init() { + extern "C" { + fn gst_init(argc: *mut c_void, argv: *mut c_void); + } + + unsafe { + gst_init(ptr::null_mut(), ptr::null_mut()); + } + } + + #[test] + fn test_writability() { + init(); + + let mut buffer = Buffer::new_from_vec(vec![1, 2, 3, 4]).unwrap(); + { + let data = buffer.map_read().unwrap(); + assert_eq!(data.as_slice(), vec![1, 2, 3, 4].as_slice()); + } + assert_ne!(buffer.get_mut(), None); + { + let buffer = buffer.get_mut().unwrap(); + buffer.set_pts(Some(1)); + } + + let mut buffer2 = buffer.clone(); + assert_eq!(buffer.get_mut(), None); + + unsafe { + assert_eq!(buffer2.as_ptr(), buffer.as_ptr()); + } + + { + let buffer2 = buffer2.make_mut(); + unsafe { + assert_ne!(buffer2.as_ptr(), buffer.as_ptr()); + } + + buffer2.set_pts(Some(2)); + + let mut data = buffer2.map_readwrite().unwrap(); + assert_eq!(data.as_slice(), vec![1, 2, 3, 4].as_slice()); + data.as_mut_slice()[0] = 0; + } + + assert_eq!(buffer.get_pts(), Some(1)); + assert_eq!(buffer2.get_pts(), Some(2)); + + { + let data = buffer.map_read().unwrap(); + assert_eq!(data.as_slice(), vec![1, 2, 3, 4].as_slice()); + + let data = buffer2.map_read().unwrap(); + assert_eq!(data.as_slice(), vec![0, 2, 3, 4].as_slice()); + } + } +}