From 5f02d7383a4e96d143d3568fe3f45bfef7632f43 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Mon, 27 Jul 2020 01:14:55 -0700 Subject: [PATCH] Add tests for correct diagnostic output from proc macro-generated compiler errors. --- tarpc/tests/compile_fail.rs | 5 +++++ .../tarpc_server_missing_async.rs | 15 +++++++++++++++ .../tarpc_server_missing_async.stderr | 19 +++++++++++++++++++ .../compile_fail/tarpc_service_arg_pat.rs | 6 ++++++ .../compile_fail/tarpc_service_arg_pat.stderr | 5 +++++ .../compile_fail/tarpc_service_fn_new.rs | 6 ++++++ .../compile_fail/tarpc_service_fn_new.stderr | 5 +++++ .../compile_fail/tarpc_service_fn_serve.rs | 6 ++++++ .../tarpc_service_fn_serve.stderr | 5 +++++ 9 files changed, 72 insertions(+) create mode 100644 tarpc/tests/compile_fail.rs create mode 100644 tarpc/tests/compile_fail/tarpc_server_missing_async.rs create mode 100644 tarpc/tests/compile_fail/tarpc_server_missing_async.stderr create mode 100644 tarpc/tests/compile_fail/tarpc_service_arg_pat.rs create mode 100644 tarpc/tests/compile_fail/tarpc_service_arg_pat.stderr create mode 100644 tarpc/tests/compile_fail/tarpc_service_fn_new.rs create mode 100644 tarpc/tests/compile_fail/tarpc_service_fn_new.stderr create mode 100644 tarpc/tests/compile_fail/tarpc_service_fn_serve.rs create mode 100644 tarpc/tests/compile_fail/tarpc_service_fn_serve.stderr diff --git a/tarpc/tests/compile_fail.rs b/tarpc/tests/compile_fail.rs new file mode 100644 index 0000000..8f897c3 --- /dev/null +++ b/tarpc/tests/compile_fail.rs @@ -0,0 +1,5 @@ +#[test] +fn ui() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/compile_fail/*.rs"); +} diff --git a/tarpc/tests/compile_fail/tarpc_server_missing_async.rs b/tarpc/tests/compile_fail/tarpc_server_missing_async.rs new file mode 100644 index 0000000..48af99c --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_server_missing_async.rs @@ -0,0 +1,15 @@ +#[tarpc::service] +trait World { + async fn hello(name: String) -> String; +} + +struct HelloServer; + +#[tarpc::server] +impl World for HelloServer { + fn hello(name: String) -> String { + format!("Hello, {}!", name) + } +} + +fn main() {} diff --git a/tarpc/tests/compile_fail/tarpc_server_missing_async.stderr b/tarpc/tests/compile_fail/tarpc_server_missing_async.stderr new file mode 100644 index 0000000..d133dfb --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_server_missing_async.stderr @@ -0,0 +1,19 @@ +error: not all trait items implemented, missing: `HelloFut` + --> $DIR/tarpc_server_missing_async.rs:9:1 + | +9 | impl World for HelloServer { + | ^^^^ + +error: hint: `#[tarpc::server]` only rewrites async fns, and `fn hello` is not async + --> $DIR/tarpc_server_missing_async.rs:10:5 + | +10 | fn hello(name: String) -> String { + | ^^ + +error[E0433]: failed to resolve: use of undeclared type or module `serde` + --> $DIR/tarpc_server_missing_async.rs:1:1 + | +1 | #[tarpc::service] + | ^^^^^^^^^^^^^^^^^ use of undeclared type or module `serde` + | + = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/tarpc/tests/compile_fail/tarpc_service_arg_pat.rs b/tarpc/tests/compile_fail/tarpc_service_arg_pat.rs new file mode 100644 index 0000000..800af36 --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_arg_pat.rs @@ -0,0 +1,6 @@ +#[tarpc::service] +trait World { + async fn pat((a, b): (u8, u32)); +} + +fn main() {} diff --git a/tarpc/tests/compile_fail/tarpc_service_arg_pat.stderr b/tarpc/tests/compile_fail/tarpc_service_arg_pat.stderr new file mode 100644 index 0000000..36c1e86 --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_arg_pat.stderr @@ -0,0 +1,5 @@ +error: patterns aren't allowed in RPC args + --> $DIR/tarpc_service_arg_pat.rs:3:18 + | +3 | async fn pat((a, b): (u8, u32)); + | ^^^^^^ diff --git a/tarpc/tests/compile_fail/tarpc_service_fn_new.rs b/tarpc/tests/compile_fail/tarpc_service_fn_new.rs new file mode 100644 index 0000000..5fbd6a0 --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_fn_new.rs @@ -0,0 +1,6 @@ +#[tarpc::service] +trait World { + async fn new(); +} + +fn main() {} diff --git a/tarpc/tests/compile_fail/tarpc_service_fn_new.stderr b/tarpc/tests/compile_fail/tarpc_service_fn_new.stderr new file mode 100644 index 0000000..52161ce --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_fn_new.stderr @@ -0,0 +1,5 @@ +error: method name conflicts with generated fn `WorldClient::new` + --> $DIR/tarpc_service_fn_new.rs:3:14 + | +3 | async fn new(); + | ^^^ diff --git a/tarpc/tests/compile_fail/tarpc_service_fn_serve.rs b/tarpc/tests/compile_fail/tarpc_service_fn_serve.rs new file mode 100644 index 0000000..11f996b --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_fn_serve.rs @@ -0,0 +1,6 @@ +#[tarpc::service] +trait World { + async fn serve(); +} + +fn main() {} diff --git a/tarpc/tests/compile_fail/tarpc_service_fn_serve.stderr b/tarpc/tests/compile_fail/tarpc_service_fn_serve.stderr new file mode 100644 index 0000000..705e0e7 --- /dev/null +++ b/tarpc/tests/compile_fail/tarpc_service_fn_serve.stderr @@ -0,0 +1,5 @@ +error: method name conflicts with generated fn `World::serve` + --> $DIR/tarpc_service_fn_serve.rs:3:14 + | +3 | async fn serve(); + | ^^^^^