aboutsummaryrefslogtreecommitdiff
path: root/tests/test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test.rs')
-rw-r--r--tests/test.rs52
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;
+ }
+ }
+ }
+}