| use crate::directory::Directory; |
| use crate::run::PathDependency; |
| use std::path::Path; |
| |
| macro_rules! test_normalize { |
| ($name:ident $(DIR=$dir:literal)? $(WORKSPACE=$workspace:literal)? $(INPUT=$input:literal)? $original:literal $expected:literal) => { |
| #[test] |
| fn $name() { |
| let context = super::Context { |
| krate: "trybuild000", |
| input_file: Path::new({ "tests/ui/error.rs" $(; $input)? }), |
| source_dir: &Directory::new({ "/git/trybuild/test_suite" $(; $dir)? }), |
| workspace: &Directory::new({ "/git/trybuild" $(; $workspace)? }), |
| path_dependencies: &[PathDependency { |
| name: String::from("diesel"), |
| normalized_path: Directory::new("/home/user/documents/rust/diesel/diesel"), |
| }], |
| }; |
| let original = $original.to_owned().into_bytes(); |
| let variations = super::diagnostics(original, context); |
| let preferred = variations.preferred(); |
| let expected = $expected; |
| if preferred != expected { |
| panic!("\nACTUAL: \"{}\"\nEXPECTED: \"{}\"", preferred, expected); |
| } |
| } |
| }; |
| } |
| |
| test_normalize! {test_basic " |
| error: `self` parameter is only allowed in associated functions |
| --> /git/trybuild/test_suite/tests/ui/error.rs:11:23 |
| | |
| 11 | async fn bad_endpoint(self) -> Result<HttpResponseOkObject<()>, HttpError> { |
| | ^^^^ not semantically valid as function parameter |
| |
| error: aborting due to 2 previous errors |
| |
| For more information about this error, try `rustc --explain E0401`. |
| error: could not compile `trybuild-tests`. |
| |
| To learn more, run the command again with --verbose. |
| " " |
| error: `self` parameter is only allowed in associated functions |
| --> tests/ui/error.rs:11:23 |
| | |
| 11 | async fn bad_endpoint(self) -> Result<HttpResponseOkObject<()>, HttpError> { |
| | ^^^^ not semantically valid as function parameter |
| "} |
| |
| test_normalize! {test_dir_backslash " |
| error[E0277]: the trait bound `QueryParams: serde::de::Deserialize<'de>` is not satisfied |
| --> \\git\\trybuild\\test_suite\\tests\\ui\\error.rs:22:61 |
| " " |
| error[E0277]: the trait bound `QueryParams: serde::de::Deserialize<'de>` is not satisfied |
| --> tests/ui/error.rs:22:61 |
| "} |
| |
| test_normalize! {test_rust_lib |
| INPUT="tests/ui/not-repeatable.rs" |
| " |
| error[E0599]: no method named `quote_into_iter` found for struct `std::net::Ipv4Addr` in the current scope |
| --> /git/trybuild/test_suite/tests/ui/not-repeatable.rs:6:13 |
| | |
| 6 | let _ = quote! { #(#ip)* }; |
| | ^^^^^^^^^^^^^^^^^^ method not found in `std::net::Ipv4Addr` |
| | |
| ::: /rustlib/src/rust/src/libstd/net/ip.rs:83:1 |
| ::: /rustlib/src/rust/library/std/src/net/ip.rs:83:1 |
| | |
| 83 | pub struct Ipv4Addr { |
| | ------------------- |
| | | |
| | doesn't satisfy `std::net::Ipv4Addr: quote::to_tokens::ToTokens` |
| " " |
| error[E0599]: no method named `quote_into_iter` found for struct `std::net::Ipv4Addr` in the current scope |
| --> tests/ui/not-repeatable.rs:6:13 |
| | |
| 6 | let _ = quote! { #(#ip)* }; |
| | ^^^^^^^^^^^^^^^^^^ method not found in `std::net::Ipv4Addr` |
| | |
| ::: $RUST/src/libstd/net/ip.rs |
| ::: $RUST/std/src/net/ip.rs |
| | |
| | pub struct Ipv4Addr { |
| | ------------------- |
| | | |
| | doesn't satisfy `std::net::Ipv4Addr: quote::to_tokens::ToTokens` |
| "} |
| |
| test_normalize! {test_type_dir_backslash |
| INPUT="tests/ui/compile-fail-3.rs" |
| " |
| error[E0277]: `*mut _` cannot be shared between threads safely |
| --> /git/trybuild/test_suite/tests/ui/compile-fail-3.rs:7:5 |
| | |
| 7 | thread::spawn(|| { |
| | ^^^^^^^^^^^^^ `*mut _` cannot be shared between threads safely |
| | |
| = help: the trait `std::marker::Sync` is not implemented for `*mut _` |
| = note: required because of the requirements on the impl of `std::marker::Send` for `&*mut _` |
| = note: required because it appears within the type `[closure@/git/trybuild/test_suite/ui/compile-fail-3.rs:7:19: 9:6 x:&*mut _]` |
| " " |
| error[E0277]: `*mut _` cannot be shared between threads safely |
| --> tests/ui/compile-fail-3.rs:7:5 |
| | |
| 7 | thread::spawn(|| { |
| | ^^^^^^^^^^^^^ `*mut _` cannot be shared between threads safely |
| | |
| = help: the trait `std::marker::Sync` is not implemented for `*mut _` |
| = note: required because of the requirements on the impl of `std::marker::Send` for `&*mut _` |
| = note: required because it appears within the type `[closure@$DIR/ui/compile-fail-3.rs:7:19: 9:6 x:&*mut _]` |
| "} |
| |
| test_normalize! {test_strip_path_dependencies " |
| error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>: diesel::query_builder::IntoUpdateTarget` is not satisfied |
| --> $DIR/update_requires_valid_where_clause.rs:21:12 |
| | |
| 21 | update(users::table.filter(posts::id.eq(1))); |
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::query_builder::IntoUpdateTarget` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` |
| | |
| ::: /home/user/documents/rust/diesel/diesel/src/query_builder/functions.rs:78:18 |
| | |
| 78 | pub fn update<T: IntoUpdateTarget>(source: T) -> UpdateStatement<T::Table, T::WhereClause> { |
| | ---------------- required by this bound in `diesel::update` |
| | |
| = help: the following implementations were found: |
| <diesel::query_builder::SelectStatement<F, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, W> as diesel::query_builder::IntoUpdateTarget> |
| " " |
| error[E0277]: the trait bound `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>: diesel::query_builder::IntoUpdateTarget` is not satisfied |
| --> $DIR/update_requires_valid_where_clause.rs:21:12 |
| | |
| 21 | update(users::table.filter(posts::id.eq(1))); |
| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `diesel::query_builder::IntoUpdateTarget` is not implemented for `diesel::query_builder::SelectStatement<users::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::grouped::Grouped<diesel::expression::operators::Eq<posts::columns::id, diesel::expression::bound::Bound<diesel::sql_types::Integer, i32>>>>>` |
| | |
| ::: $DIESEL/src/query_builder/functions.rs |
| | |
| | pub fn update<T: IntoUpdateTarget>(source: T) -> UpdateStatement<T::Table, T::WhereClause> { |
| | ---------------- required by this bound in `diesel::update` |
| | |
| = help: the following implementations were found: |
| <diesel::query_builder::SelectStatement<F, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, W> as diesel::query_builder::IntoUpdateTarget> |
| "} |
| |
| test_normalize! {test_cargo_registry " |
| error[E0277]: the trait bound `Thread: serde::de::Deserialize<'_>` is not satisfied |
| --> src/main.rs:2:36 |
| | |
| 2 | let _ = serde_json::from_str::<std::thread::Thread>(\"???\"); |
| | ^^^^^^^^^^^^^^^^^^^ the trait `serde::de::Deserialize<'_>` is not implemented for `Thread` |
| | |
| ::: /home/ferris/.cargo/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.64/src/de.rs:2584:8 |
| | |
| 2584 | T: de::Deserialize<'a>, |
| | ------------------- required by this bound in `serde_json::from_str` |
| |
| For more information about this error, try `rustc --explain E0277`. |
| error: could not compile `testing` due to previous error |
| " " |
| error[E0277]: the trait bound `Thread: serde::de::Deserialize<'_>` is not satisfied |
| --> src/main.rs:2:36 |
| | |
| 2 | let _ = serde_json::from_str::<std::thread::Thread>(\"???\"); |
| | ^^^^^^^^^^^^^^^^^^^ the trait `serde::de::Deserialize<'_>` is not implemented for `Thread` |
| | |
| ::: $CARGO/serde_json-1.0.64/src/de.rs |
| | |
| | T: de::Deserialize<'a>, |
| | ------------------- required by this bound in `serde_json::from_str` |
| "} |
| |
| test_normalize! {test_traits_must_be_implemented " |
| error[E0599]: the method `anyhow_kind` exists for reference `&Error`, but its trait bounds were not satisfied |
| --> src/main.rs:7:13 |
| | |
| 4 | struct Error; |
| | ------------- |
| | | |
| | doesn't satisfy `Error: Into<anyhow::Error>` |
| | doesn't satisfy `Error: anyhow::private::kind::TraitKind` |
| | doesn't satisfy `Error: std::fmt::Display` |
| ... |
| 7 | let _ = anyhow!(Error); |
| | ^^^^^^^^^^^^^^ method cannot be called on `&Error` due to unsatisfied trait bounds |
| | |
| = note: the following trait bounds were not satisfied: |
| `Error: Into<anyhow::Error>` |
| which is required by `Error: anyhow::private::kind::TraitKind` |
| `Error: std::fmt::Display` |
| which is required by `&Error: anyhow::private::kind::AdhocKind` |
| `&Error: Into<anyhow::Error>` |
| which is required by `&Error: anyhow::private::kind::TraitKind` |
| note: the following traits must be implemented |
| --> /rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/convert/mod.rs:274:1 |
| | |
| 274 | / pub trait Into<T>: Sized { |
| 275 | | /// Performs the conversion. |
| 276 | | #[stable(feature = \"rust1\", since = \"1.0.0\")] |
| 277 | | fn into(self) -> T; |
| 278 | | } |
| | |_^ |
| | |
| ::: /rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs:715:1 |
| | |
| 715 | / pub trait Display { |
| 716 | | /// Formats the value using the given formatter. |
| 717 | | /// |
| 718 | | /// # Examples |
| ... | |
| 738 | | fn fmt(&self, f: &mut Formatter<'_>) -> Result; |
| 739 | | } |
| | |_^ |
| = note: this error originates in the macro `anyhow` (in Nightly builds, run with -Z macro-backtrace for more info) |
| " " |
| error[E0599]: the method `anyhow_kind` exists for reference `&Error`, but its trait bounds were not satisfied |
| --> src/main.rs:7:13 |
| | |
| 4 | struct Error; |
| | ------------- |
| | | |
| | doesn't satisfy `Error: Into<anyhow::Error>` |
| | doesn't satisfy `Error: anyhow::private::kind::TraitKind` |
| | doesn't satisfy `Error: std::fmt::Display` |
| ... |
| 7 | let _ = anyhow!(Error); |
| | ^^^^^^^^^^^^^^ method cannot be called on `&Error` due to unsatisfied trait bounds |
| | |
| = note: the following trait bounds were not satisfied: |
| `Error: Into<anyhow::Error>` |
| which is required by `Error: anyhow::private::kind::TraitKind` |
| `Error: std::fmt::Display` |
| which is required by `&Error: anyhow::private::kind::AdhocKind` |
| `&Error: Into<anyhow::Error>` |
| which is required by `&Error: anyhow::private::kind::TraitKind` |
| note: the following traits must be implemented |
| --> $RUST/core/src/convert/mod.rs |
| | |
| | / pub trait Into<T>: Sized { |
| | | /// Performs the conversion. |
| | | #[stable(feature = \"rust1\", since = \"1.0.0\")] |
| | | fn into(self) -> T; |
| | | } |
| | |_^ |
| | |
| ::: $RUST/core/src/fmt/mod.rs |
| | |
| | / pub trait Display { |
| | | /// Formats the value using the given formatter. |
| | | /// |
| | | /// # Examples |
| ... | |
| | | fn fmt(&self, f: &mut Formatter<'_>) -> Result; |
| | | } |
| | |_^ |
| = note: this error originates in the macro `anyhow` (in Nightly builds, run with -Z macro-backtrace for more info) |
| "} |
| |
| test_normalize! {test_pyo3_url |
| DIR="/pyo3" |
| WORKSPACE="/pyo3" |
| " |
| error: `async fn` is not yet supported for Python functions. |
| |
| Additional crates such as `pyo3-asyncio` can be used to integrate async Rust and Python. For more information, see https://github.com/PyO3/pyo3/issues/1632 |
| --> tests/ui/invalid_pyfunctions.rs:10:1 |
| | |
| 10 | async fn async_function() {} |
| | ^^^^^ |
| " " |
| error: `async fn` is not yet supported for Python functions. |
| |
| Additional crates such as `pyo3-asyncio` can be used to integrate async Rust and Python. For more information, see https://github.com/PyO3/pyo3/issues/1632 |
| --> tests/ui/invalid_pyfunctions.rs:10:1 |
| | |
| 10 | async fn async_function() {} |
| | ^^^^^ |
| "} |
| |
| test_normalize! {test_dropshot_required_by |
| DIR="/git/dropshot/dropshot" |
| WORKSPACE="/git/dropshot" |
| INPUT="tests/fail/bad_endpoint4.rs" |
| " |
| error[E0277]: the trait bound `QueryParams: schemars::JsonSchema` is not satisfied |
| --> /git/dropshot/dropshot/tests/fail/bad_endpoint4.rs:24:14 |
| | |
| 24 | _params: Query<QueryParams>, |
| | ^^^^^^^^^^^^^^^^^^ the trait `schemars::JsonSchema` is not implemented for `QueryParams` |
| | |
| note: required by a bound in `dropshot::Query` |
| --> /git/dropshot/dropshot/src/handler.rs:547:48 |
| | |
| 547 | pub struct Query<QueryType: DeserializeOwned + JsonSchema + Send + Sync> { |
| | ^^^^^^^^^^ required by this bound in `dropshot::Query` |
| " |
| // TODO: it would be nice to also unindent the column of `|` by one column. |
| // https://github.com/dtolnay/trybuild/issues/86 |
| " |
| error[E0277]: the trait bound `QueryParams: schemars::JsonSchema` is not satisfied |
| --> tests/fail/bad_endpoint4.rs:24:14 |
| | |
| 24 | _params: Query<QueryParams>, |
| | ^^^^^^^^^^^^^^^^^^ the trait `schemars::JsonSchema` is not implemented for `QueryParams` |
| | |
| note: required by a bound in `dropshot::Query` |
| --> src/handler.rs |
| | |
| | pub struct Query<QueryType: DeserializeOwned + JsonSchema + Send + Sync> { |
| | ^^^^^^^^^^ required by this bound in `dropshot::Query` |
| "} |