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(); + | ^^^^^