summaryrefslogtreecommitdiffstats
path: root/third_party/rust/inherent/tests
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/inherent/tests')
-rw-r--r--third_party/rust/inherent/tests/compiletest.rs7
-rw-r--r--third_party/rust/inherent/tests/test.rs25
-rw-r--r--third_party/rust/inherent/tests/ui/blanket-impl.rs12
-rw-r--r--third_party/rust/inherent/tests/ui/blanket-impl.stderr7
-rw-r--r--third_party/rust/inherent/tests/ui/not-trait-impl.rs10
-rw-r--r--third_party/rust/inherent/tests/ui/not-trait-impl.stderr7
-rw-r--r--third_party/rust/inherent/tests/ui/not-visible.rs18
-rw-r--r--third_party/rust/inherent/tests/ui/not-visible.stderr8
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