diff options
Diffstat (limited to 'tests/test.rs')
-rw-r--r-- | tests/test.rs | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/tests/test.rs b/tests/test.rs index f4c29ee..162fc20 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -8,6 +8,7 @@ use core::{ marker::{PhantomData, PhantomPinned}, pin::Pin, }; + use pin_project_lite::pin_project; #[test] @@ -51,7 +52,7 @@ fn projection() { { let StructProjReplace { f1: PhantomData, f2 } = - s.as_mut().project_replace(Default::default()); + s.as_mut().project_replace(Struct::default()); assert_eq!(f2, 2); let StructProj { f1, f2 } = s.project(); assert_eq!(*f1, 0); @@ -587,6 +588,21 @@ fn trailing_comma() { #[test] fn attrs() { pin_project! { + /// dox1 + #[derive(Clone)] + #[project = StructProj] + #[project_ref = StructProjRef] + /// dox2 + #[derive(Debug)] + /// dox3 + struct Struct { + // TODO + // /// dox4 + f: () + } + } + + pin_project! { #[project = Enum1Proj] #[project_ref = Enum1ProjRef] enum Enum1 { @@ -599,6 +615,7 @@ fn attrs() { pin_project! { /// dox1 + #[derive(Clone)] #[project = Enum2Proj] #[project_ref = Enum2ProjRef] /// dox2 @@ -616,3 +633,36 @@ fn attrs() { } } } + +#[test] +fn pinned_drop() { + pin_project! { + pub struct Struct1<'a> { + was_dropped: &'a mut bool, + #[pin] + field: u8, + } + impl PinnedDrop for Struct1<'_> { + fn drop(this: Pin<&mut Self>) { + **this.project().was_dropped = true; + } + } + } + + let mut was_dropped = false; + drop(Struct1 { was_dropped: &mut was_dropped, field: 42 }); + assert!(was_dropped); + + pin_project! { + pub struct Struct2<'a> { + was_dropped: &'a mut bool, + #[pin] + field: u8, + } + impl PinnedDrop for Struct2<'_> { + fn drop(mut this: Pin<&mut Self>) { + **this.as_mut().project().was_dropped = true; + } + } + } +} |