Skip to content

Commit

Permalink
Split up normalizer unit tests into dir
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Mar 20, 2023
1 parent 742f791 commit 065bf5d
Show file tree
Hide file tree
Showing 17 changed files with 464 additions and 477 deletions.
3 changes: 3 additions & 0 deletions Cargo.toml
Expand Up @@ -28,6 +28,9 @@ serde_json = "1.0"
termcolor = "1.0.4"
basic-toml = "0.1"

[dev-dependencies]
automod = "1.0"

[lib]
doc-scrape-examples = false

Expand Down
489 changes: 12 additions & 477 deletions src/tests.rs

Large diffs are not rendered by default.

37 changes: 37 additions & 0 deletions src/tests/and-n-others.rs
@@ -0,0 +1,37 @@
test_normalize! {"
error[E0277]: no implementation for `u8 >> &str`
--> src/main.rs:2:20
|
2 | let _x = 42_u8 >> \"bar\";
| ^^ no implementation for `u8 >> &str`
|
= help: the trait `Shr<&str>` is not implemented for `u8`
= help: the following other types implement trait `Shr<Rhs>`:
<&'a i128 as Shr<i128>>
<&'a i128 as Shr<i16>>
<&'a i128 as Shr<i32>>
<&'a i128 as Shr<i64>>
<&'a i128 as Shr<i8>>
<&'a i128 as Shr<isize>>
<&'a i128 as Shr<u128>>
<&'a i128 as Shr<u16>>
and 568 others
" "
error[E0277]: no implementation for `u8 >> &str`
--> src/main.rs:2:20
|
2 | let _x = 42_u8 >> \"bar\";
| ^^ no implementation for `u8 >> &str`
|
= help: the trait `Shr<&str>` is not implemented for `u8`
= help: the following other types implement trait `Shr<Rhs>`:
<&'a i128 as Shr<i128>>
<&'a i128 as Shr<i16>>
<&'a i128 as Shr<i32>>
<&'a i128 as Shr<i64>>
<&'a i128 as Shr<i8>>
<&'a i128 as Shr<isize>>
<&'a i128 as Shr<u128>>
<&'a i128 as Shr<u16>>
and $N others
"}
20 changes: 20 additions & 0 deletions src/tests/basic.rs
@@ -0,0 +1,20 @@
test_normalize! {"
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
"}
35 changes: 35 additions & 0 deletions src/tests/cargo-registry-sparse.rs
@@ -0,0 +1,35 @@
test_normalize! {"
error[E0308]: mismatched types
--> tests/compile-fail/surface_source_interval_badarg.rs:7:25
|
5 | let mut df = hydroflow_syntax! {
| __________________-
6 | | // Should be a `Duration`.
7 | | source_interval(5) -> for_each(std::mem::drop);
| | ^ expected `Duration`, found integer
8 | | };
| |_____- arguments to this function are incorrect
|
note: function defined here
--> /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.26.0/src/time/interval.rs:74:8
|
74 | pub fn interval(period: Duration) -> Interval {
| ^^^^^^^^
" "
error[E0308]: mismatched types
--> tests/compile-fail/surface_source_interval_badarg.rs:7:25
|
5 | let mut df = hydroflow_syntax! {
| __________________-
6 | | // Should be a `Duration`.
7 | | source_interval(5) -> for_each(std::mem::drop);
| | ^ expected `Duration`, found integer
8 | | };
| |_____- arguments to this function are incorrect
|
note: function defined here
--> $CARGO/tokio-1.26.0/src/time/interval.rs
|
| pub fn interval(period: Duration) -> Interval {
| ^^^^^^^^
"}
26 changes: 26 additions & 0 deletions src/tests/cargo-registry.rs
@@ -0,0 +1,26 @@
test_normalize! {"
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`
"}
7 changes: 7 additions & 0 deletions src/tests/dir-backslash.rs
@@ -0,0 +1,7 @@
test_normalize! {"
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
"}
29 changes: 29 additions & 0 deletions src/tests/dropshot-required-by.rs
@@ -0,0 +1,29 @@
test_normalize! {
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`
" "
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`
"}
27 changes: 27 additions & 0 deletions src/tests/long-file-names.rs
@@ -0,0 +1,27 @@
test_normalize! {"
error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<...>>>>>>`
--> src/main.rs:18:11
|
18 | _ => {test (n-1, i+1, Cons {head:2*i+1, tail:first}, Cons{head:i*i, tail:second})}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: `test` defined here
--> src/main.rs:16:1
|
16 | fn test<T:Dot> (n:isize, i:isize, first:T, second:T) ->isize {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: the full type name has been written to `/playground/target/debug/deps/playground-c53df771d95c66fb.c7a39e8d0dd9c781.long-type-16688711729771999621.txt`
the full type name has been written to `/playground/target/debug/deps/playground-c53df771d95c66fb.c7a39e8d0dd9c781.long-type-16688711729771999621.txt`
" "
error: reached the recursion limit while instantiating `test::<Cons<Cons<Cons<Cons<Cons<...>>>>>>`
--> src/main.rs:18:11
|
18 | _ => {test (n-1, i+1, Cons {head:2*i+1, tail:first}, Cons{head:i*i, tail:second})}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: `test` defined here
--> src/main.rs:16:1
|
16 | fn test<T:Dot> (n:isize, i:isize, first:T, second:T) ->isize {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
"}
16 changes: 16 additions & 0 deletions src/tests/proc-macro-panic.rs
@@ -0,0 +1,16 @@
test_normalize! {
DIR="D:\\repro"
INPUT="tests\\ui\\nonzero_fail.rs"
"
error[E0080]: evaluation of constant value failed
--> D:\\repro\\tests\\ui\\nonzero_fail.rs:7:10
|
7 | #[derive(NonZeroRepr)]
| ^^^^^^^^^^^ the evaluated program panicked at 'expected non-zero discriminant expression', D:\\repro\\tests\\ui\\nonzero_fail.rs:7:10
" "
error[E0080]: evaluation of constant value failed
--> tests/ui/nonzero_fail.rs:7:10
|
7 | #[derive(NonZeroRepr)]
| ^^^^^^^^^^^ the evaluated program panicked at 'expected non-zero discriminant expression', $DIR/tests/ui/nonzero_fail.rs:7:10
"}
20 changes: 20 additions & 0 deletions src/tests/py03-url.rs
@@ -0,0 +1,20 @@
test_normalize! {
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() {}
| ^^^^^
"}
39 changes: 39 additions & 0 deletions src/tests/rust-lib-with-githash.rs
@@ -0,0 +1,39 @@
test_normalize! {"
error[E0599]: the method `to_cxx_exception` exists for reference `&NonError`, but its trait bounds were not satisfied
--> tests/ui/result_no_display.rs:4:19
|
4 | fn f() -> Result<()>;
| ^^^^^^^^^^ method cannot be called on `&NonError` due to unsatisfied trait bounds
...
8 | pub struct NonError;
| ------------------- doesn't satisfy `NonError: std::fmt::Display`
|
= note: the following trait bounds were not satisfied:
`NonError: std::fmt::Display`
which is required by `&NonError: ToCxxExceptionDefault`
note: the trait `std::fmt::Display` must be implemented
--> /rustc/c5c7d2b37780dac1092e75f12ab97dd56c30861d/library/core/src/fmt/mod.rs:786:1
|
| pub trait Display {
| ^^^^^^^^^^^^^^^^^
= note: this error originates in the macro `::cxx::map_rust_error_to_cxx_exception` (in Nightly builds, run with -Z macro-backtrace for more info)
" "
error[E0599]: the method `to_cxx_exception` exists for reference `&NonError`, but its trait bounds were not satisfied
--> tests/ui/result_no_display.rs:4:19
|
4 | fn f() -> Result<()>;
| ^^^^^^^^^^ method cannot be called on `&NonError` due to unsatisfied trait bounds
...
8 | pub struct NonError;
| ------------------- doesn't satisfy `NonError: std::fmt::Display`
|
= note: the following trait bounds were not satisfied:
`NonError: std::fmt::Display`
which is required by `&NonError: ToCxxExceptionDefault`
note: the trait `std::fmt::Display` must be implemented
--> $RUST/core/src/fmt/mod.rs
|
| pub trait Display {
| ^^^^^^^^^^^^^^^^^
= note: this error originates in the macro `::cxx::map_rust_error_to_cxx_exception` (in Nightly builds, run with -Z macro-backtrace for more info)
"}
31 changes: 31 additions & 0 deletions src/tests/rust-lib.rs
@@ -0,0 +1,31 @@
test_normalize! {
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`
"}
29 changes: 29 additions & 0 deletions src/tests/strip-path-dependencies.rs
@@ -0,0 +1,29 @@
test_normalize! {"
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>
"}

0 comments on commit 065bf5d

Please sign in to comment.