diff options
Diffstat (limited to 'tests/ui/pin_project/invalid.rs')
-rw-r--r-- | tests/ui/pin_project/invalid.rs | 64 |
1 files changed, 55 insertions, 9 deletions
diff --git a/tests/ui/pin_project/invalid.rs b/tests/ui/pin_project/invalid.rs index d7911df..9c51bec 100644 --- a/tests/ui/pin_project/invalid.rs +++ b/tests/ui/pin_project/invalid.rs @@ -100,6 +100,9 @@ mod pin_project_argument { #[pin_project()] // Ok struct Unexpected4(#[pin] ()); + #[pin_project(PinnedDrop PinnedDrop)] //~ ERROR expected `,` + struct Unexpected5(#[pin] ()); + #[pin_project(PinnedDrop, PinnedDrop)] //~ ERROR duplicate `PinnedDrop` argument struct DuplicatePinnedDrop(#[pin] ()); @@ -121,13 +124,22 @@ mod pin_project_argument { #[pin_project(project = A, project = B)] //~ ERROR duplicate `project` argument struct DuplicateProject(#[pin] ()); + #[pin_project(project = A, project_ref = A, project = B)] //~ ERROR duplicate `project` argument + struct DuplicateProject2(#[pin] ()); + #[pin_project(project_ref = A, project_ref = B)] //~ ERROR duplicate `project_ref` argument struct DuplicateProjectRef(#[pin] ()); #[pin_project(project_replace = A, project_replace = B)] //~ ERROR duplicate `project_replace` argument - struct DuplicateProjectReplace(#[pin] ()); + struct DuplicateProjectReplace1(#[pin] ()); + + #[pin_project(project_replace, project_replace = B)] //~ ERROR duplicate `project_replace` argument + struct DuplicateProjectReplace2(#[pin] ()); - #[pin_project(project_replace = A)] //~ ERROR `project_replace` argument can only be used together with `Replace` argument + #[pin_project(project_replace = A, project_replace)] //~ ERROR duplicate `project_replace` argument + struct DuplicateProjectReplace3(#[pin] ()); + + #[pin_project(project_replace = A)] // Ok struct ProjectReplaceWithoutReplace(#[pin] ()); #[pin_project(PinnedDrop, Replace)] //~ ERROR arguments `PinnedDrop` and `Replace` are mutually exclusive @@ -136,35 +148,69 @@ mod pin_project_argument { #[pin_project(Replace, UnsafeUnpin, PinnedDrop)] //~ ERROR arguments `PinnedDrop` and `Replace` are mutually exclusive struct PinnedDropWithReplace2(#[pin] ()); + #[pin_project(PinnedDrop, project_replace)] //~ ERROR arguments `PinnedDrop` and `project_replace` are mutually exclusive + struct PinnedDropWithProjectReplace1(#[pin] ()); + + #[pin_project(project_replace, UnsafeUnpin, PinnedDrop)] //~ ERROR arguments `PinnedDrop` and `project_replace` are mutually exclusive + struct PinnedDropWithProjectReplace2(#[pin] ()); + + #[pin_project(project_replace, Replace)] // Ok + struct ProjectReplaceWithReplace1(#[pin] ()); + + #[pin_project(project_replace = B, Replace)] // Ok + struct ProjectReplaceWithReplace2(#[pin] ()); + #[pin_project(UnsafeUnpin, !Unpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive struct UnsafeUnpinWithNotUnpin1(#[pin] ()); #[pin_project(!Unpin, PinnedDrop, UnsafeUnpin)] //~ ERROR arguments `UnsafeUnpin` and `!Unpin` are mutually exclusive struct UnsafeUnpinWithNotUnpin2(#[pin] ()); - #[pin_project(!)] //~ ERROR unexpected end of input, expected `Unpin` + #[pin_project(!)] //~ ERROR expected `!Unpin`, found `!` struct NotUnpin1(#[pin] ()); #[pin_project(Unpin)] //~ ERROR unexpected argument struct NotUnpin2(#[pin] ()); - #[pin_project(project)] //~ ERROR expected `=` + #[pin_project(project)] //~ ERROR expected `project = <identifier>`, found `project` struct Project1(#[pin] ()); - #[pin_project(project = )] //~ ERROR unexpected end of input, expected identifier + #[pin_project(project = )] //~ ERROR expected `project = <identifier>`, found `project =` struct Project2(#[pin] ()); - #[pin_project(project_ref)] //~ ERROR expected `=` + #[pin_project(project = !)] //~ ERROR expected identifier + struct Project3(#[pin] ()); + + #[pin_project(project_ref)] //~ ERROR expected `project_ref = <identifier>`, found `project_ref` struct ProjectRef1(#[pin] ()); - #[pin_project(project_ref = )] //~ ERROR unexpected end of input, expected identifier + #[pin_project(project_ref = )] //~ ERROR expected `project_ref = <identifier>`, found `project_ref =` struct ProjectRef2(#[pin] ()); - #[pin_project(project_replace)] //~ ERROR expected `=` + #[pin_project(project_ref = !)] //~ ERROR expected identifier + struct ProjectRef3(#[pin] ()); + + #[pin_project(project_replace)] // Ok struct ProjectReplace1(#[pin] ()); - #[pin_project(project_replace = )] //~ ERROR unexpected end of input, expected identifier + #[pin_project(project_replace = )] //~ ERROR expected `project_replace = <identifier>`, found `project_replace =` struct ProjectReplace2(#[pin] ()); + + #[pin_project(project_replace = !)] //~ ERROR expected identifier + struct ProjectReplace3(#[pin] ()); +} + +mod pin_project_conflict_naming { + use pin_project::pin_project; + + #[pin_project(project = A, project_ref = A)] //~ ERROR name `A` is already specified by `project` argument + struct ProjAndProjRef(#[pin] ()); + + #[pin_project(project = A, project_replace = A)] //~ ERROR name `A` is already specified by `project` argument + struct ProjAndProjOwn(#[pin] ()); + + #[pin_project(project_ref = A, project_replace = A)] //~ ERROR name `A` is already specified by `project_ref` argument + struct ProjRefAndProjOwn(#[pin] ()); } mod pin_project_attribute { |