From 9443d763a16724840f2cd1cb79e079ebb95947da Mon Sep 17 00:00:00 2001 From: Gino Valente Date: Tue, 27 Dec 2022 11:58:03 -0800 Subject: [PATCH] Add compile fail tests for bevy_reflect --- .gitignore | 2 +- Cargo.toml | 2 +- .../Cargo.toml | 13 +++++++++++++ .../src/lib.rs | 1 + .../tests/field_attributes.rs | 6 ++++++ .../field_attributes/ignored_order.fail.rs | 10 ++++++++++ .../ignored_order.fail.stderr | 5 +++++ .../field_attributes/ignored_order.pass.rs | 10 ++++++++++ .../field_attributes/skipped_order.fail.rs | 19 +++++++++++++++++++ .../skipped_order.fail.stderr | 11 +++++++++++ .../field_attributes/skipped_order.pass.rs | 19 +++++++++++++++++++ 11 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/Cargo.toml create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/src/lib.rs create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes.rs create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.rs create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.stderr create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.pass.rs create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.rs create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.stderr create mode 100644 crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.pass.rs diff --git a/.gitignore b/.gitignore index d1e9822c5bb7f4..56aed3d9054470 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /target -crates/*/target +crates/**/target **/*.rs.bk Cargo.lock .cargo/config diff --git a/Cargo.toml b/Cargo.toml index 794f03d2db6205..a37dadd9102fe7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ readme = "README.md" repository = "https://github.com/bevyengine/bevy" [workspace] -exclude = ["benches", "crates/bevy_ecs_compile_fail_tests"] +exclude = ["benches", "crates/bevy_ecs_compile_fail_tests", "crates/bevy_reflect/bevy_reflect_compile_fail_tests"] members = [ "crates/*", "examples/android", diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/Cargo.toml b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/Cargo.toml new file mode 100644 index 00000000000000..b65cde34c2d2a0 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bevy_reflect_compile_fail_tests" +version = "0.1.0" +edition = "2021" +description = "Compile fail tests for Bevy Engine's reflection system" +homepage = "https://bevyengine.org" +repository = "https://github.com/bevyengine/bevy" +license = "MIT OR Apache-2.0" +publish = false + +[dev-dependencies] +bevy_reflect = { path = ".." } +trybuild = "1.0.71" diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/src/lib.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/src/lib.rs new file mode 100644 index 00000000000000..d0d1683dd6b97c --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/src/lib.rs @@ -0,0 +1 @@ +// Nothing here, check out the integration tests diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes.rs new file mode 100644 index 00000000000000..175614e4f41cd9 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes.rs @@ -0,0 +1,6 @@ +#[test] +fn test() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/field_attributes/*.fail.rs"); + t.pass("tests/field_attributes/*.pass.rs"); +} diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.rs new file mode 100644 index 00000000000000..b76072d683e04d --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.rs @@ -0,0 +1,10 @@ +use bevy_reflect::Reflect; + +#[derive(Reflect)] +struct Foo { + #[reflect(ignore)] + a: i32, + b: i32, +} + +fn main() {} diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.stderr b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.stderr new file mode 100644 index 00000000000000..839c775c9f8ac5 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.fail.stderr @@ -0,0 +1,5 @@ +error: fields marked with `#[reflect(ignore)]` must come last in type definition + --> tests/field_attributes/ignored_order.fail.rs:5:15 + | +5 | #[reflect(ignore)] + | ^^^^^^ diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.pass.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.pass.rs new file mode 100644 index 00000000000000..a83b3125ae480f --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/ignored_order.pass.rs @@ -0,0 +1,10 @@ +use bevy_reflect::Reflect; + +#[derive(Reflect)] +struct Foo { + a: i32, + #[reflect(ignore)] + b: i32, +} + +fn main() {} diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.rs new file mode 100644 index 00000000000000..2ebd3427dab4b1 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.rs @@ -0,0 +1,19 @@ +use bevy_reflect::Reflect; + +#[derive(Reflect)] +struct Foo { + #[reflect(skip_serializing)] + a: i32, + b: i32, +} + +#[derive(Reflect)] +struct Bar { + a: i32, + #[reflect(ignore)] + b: i32, + #[reflect(skip_serializing)] + c: i32, +} + +fn main() {} diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.stderr b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.stderr new file mode 100644 index 00000000000000..3f84931cf54cc6 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.fail.stderr @@ -0,0 +1,11 @@ +error: fields marked with `#[reflect(skip_serializing)]` must come last in type definition (but before any fields marked `#[reflect(ignore)]`) + --> tests/field_attributes/skipped_order.fail.rs:5:15 + | +5 | #[reflect(skip_serializing)] + | ^^^^^^^^^^^^^^^^ + +error: fields marked with `#[reflect(ignore)]` must come last in type definition + --> tests/field_attributes/skipped_order.fail.rs:13:15 + | +13 | #[reflect(ignore)] + | ^^^^^^ diff --git a/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.pass.rs b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.pass.rs new file mode 100644 index 00000000000000..14e33c1cb59a20 --- /dev/null +++ b/crates/bevy_reflect/bevy_reflect_compile_fail_tests/tests/field_attributes/skipped_order.pass.rs @@ -0,0 +1,19 @@ +use bevy_reflect::Reflect; + +#[derive(Reflect)] +struct Foo { + a: i32, + #[reflect(skip_serializing)] + b: i32, +} + +#[derive(Reflect)] +struct Bar { + a: i32, + #[reflect(skip_serializing)] + b: i32, + #[reflect(ignore)] + c: i32, +} + +fn main() {}