diff options
Diffstat (limited to 'third_party/rust/inherent/tests')
8 files changed, 94 insertions, 0 deletions
diff --git a/third_party/rust/inherent/tests/compiletest.rs b/third_party/rust/inherent/tests/compiletest.rs new file mode 100644 index 0000000000..7974a6249e --- /dev/null +++ b/third_party/rust/inherent/tests/compiletest.rs @@ -0,0 +1,7 @@ +#[rustversion::attr(not(nightly), ignore)] +#[cfg_attr(miri, ignore)] +#[test] +fn ui() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/ui/*.rs"); +} diff --git a/third_party/rust/inherent/tests/test.rs b/third_party/rust/inherent/tests/test.rs new file mode 100644 index 0000000000..801b1c1165 --- /dev/null +++ b/third_party/rust/inherent/tests/test.rs @@ -0,0 +1,25 @@ +mod types { + use inherent::inherent; + + trait Trait { + fn f<T: ?Sized>(self); + // A default method + fn g(&self) {} + } + + pub struct Struct; + + #[inherent] + impl Trait for Struct { + pub fn f<T: ?Sized>(self) {} + pub fn g(&self); + } +} + +#[test] +fn test() { + // types::Trait is not in scope. + let s = types::Struct; + s.g(); + s.f::<str>(); +} diff --git a/third_party/rust/inherent/tests/ui/blanket-impl.rs b/third_party/rust/inherent/tests/ui/blanket-impl.rs new file mode 100644 index 0000000000..d775c5e937 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/blanket-impl.rs @@ -0,0 +1,12 @@ +use inherent::inherent; + +trait A { + fn a(&self); +} + +#[inherent] +impl<T> A for T { + fn a(&self) {} +} + +fn main() {} diff --git a/third_party/rust/inherent/tests/ui/blanket-impl.stderr b/third_party/rust/inherent/tests/ui/blanket-impl.stderr new file mode 100644 index 0000000000..986641cea2 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/blanket-impl.stderr @@ -0,0 +1,7 @@ +error[E0118]: no nominal type found for inherent implementation + --> tests/ui/blanket-impl.rs:8:1 + | +8 | impl<T> A for T { + | ^^^^^^^^^^^^^^^ impl requires a nominal type + | + = note: either implement a trait on it or create a newtype to wrap it instead diff --git a/third_party/rust/inherent/tests/ui/not-trait-impl.rs b/third_party/rust/inherent/tests/ui/not-trait-impl.rs new file mode 100644 index 0000000000..a9a6a11628 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/not-trait-impl.rs @@ -0,0 +1,10 @@ +use inherent::inherent; + +struct Struct; + +#[inherent] +impl Struct { + fn f() {} +} + +fn main() {} diff --git a/third_party/rust/inherent/tests/ui/not-trait-impl.stderr b/third_party/rust/inherent/tests/ui/not-trait-impl.stderr new file mode 100644 index 0000000000..ea723e86b0 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/not-trait-impl.stderr @@ -0,0 +1,7 @@ +error: must be placed on a trait impl + --> tests/ui/not-trait-impl.rs:5:1 + | +5 | #[inherent] + | ^^^^^^^^^^^ + | + = note: this error originates in the attribute macro `inherent` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/third_party/rust/inherent/tests/ui/not-visible.rs b/third_party/rust/inherent/tests/ui/not-visible.rs new file mode 100644 index 0000000000..faccf90ff4 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/not-visible.rs @@ -0,0 +1,18 @@ +mod types { + use inherent::inherent; + + trait Trait { + fn f(); + } + + pub struct Struct; + + #[inherent] + impl Trait for Struct { + fn f() {} + } +} + +fn main() { + types::Struct::f(); +} diff --git a/third_party/rust/inherent/tests/ui/not-visible.stderr b/third_party/rust/inherent/tests/ui/not-visible.stderr new file mode 100644 index 0000000000..9fb9d7b892 --- /dev/null +++ b/third_party/rust/inherent/tests/ui/not-visible.stderr @@ -0,0 +1,8 @@ +error[E0624]: associated function `f` is private + --> tests/ui/not-visible.rs:17:20 + | +12 | fn f() {} + | ------ private associated function defined here +... +17 | types::Struct::f(); + | ^ private associated function |