From 254c3863490053d94c2eb7a278953bd2bebc3228 Mon Sep 17 00:00:00 2001 From: Lymia Aluysia Date: Wed, 1 Apr 2020 11:14:54 -0700 Subject: [PATCH] Add UI tests. --- enumset/Cargo.toml | 1 + enumset/tests/compile-fail/variants.rs | 46 ++++++++++++++++++++++ enumset/tests/compile-fail/variants.stderr | 46 ++++++++++++++++++++++ enumset/tests/trybuild.rs | 5 +++ enumset_derive/src/lib.rs | 6 +-- 5 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 enumset/tests/compile-fail/variants.rs create mode 100644 enumset/tests/compile-fail/variants.stderr create mode 100644 enumset/tests/trybuild.rs diff --git a/enumset/Cargo.toml b/enumset/Cargo.toml index 0a30a62..ee346ad 100644 --- a/enumset/Cargo.toml +++ b/enumset/Cargo.toml @@ -27,3 +27,4 @@ serde2 = { package = "serde", version = "1.0.91", default-features = false, opti bincode = { version = "1.0", features = ["i128"] } serde_derive = "1.0.91" serde_json = "1.0.39" +trybuild = "1.0.24" diff --git a/enumset/tests/compile-fail/variants.rs b/enumset/tests/compile-fail/variants.rs new file mode 100644 index 0000000..26e24a4 --- /dev/null +++ b/enumset/tests/compile-fail/variants.rs @@ -0,0 +1,46 @@ +use enumset::*; + +#[derive(EnumSetType)] +enum VariantOver127 { + Variant = 128, +} + +#[derive(EnumSetType)] +enum TooManyVariants { + _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, + _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, + _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, + _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, + _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, + _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, + _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, +} + +#[derive(EnumSetType)] +enum NegativeVariant { + Variant = -1, +} + +#[derive(EnumSetType)] +#[repr(usize)] +enum BadRepr { + Variant, +} + +#[derive(EnumSetType)] +enum HasFields { + Variant(u32), +} + +#[derive(EnumSetType)] +#[enumset(serialize_repr = "u8")] +enum BadSerializationRepr { + Variant = 8, +} + +#[derive(EnumSetType)] +struct BadItemType { + +} + +fn main() { } \ No newline at end of file diff --git a/enumset/tests/compile-fail/variants.stderr b/enumset/tests/compile-fail/variants.stderr new file mode 100644 index 0000000..c3d5849 --- /dev/null +++ b/enumset/tests/compile-fail/variants.stderr @@ -0,0 +1,46 @@ +error: `#[derive(EnumSetType)]` currently only supports enum discriminants up to 127. + --> $DIR/variants.rs:5:5 + | +5 | Variant = 128, + | ^^^^^^^^^^^^^ + +error: `#[derive(EnumSetType)]` currently only supports enums up to 128 variants. + --> $DIR/variants.rs:16:95 + | +16 | _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, + | ^^^^ + +error: Enum set discriminants must be `u32`s. + --> $DIR/variants.rs:21:5 + | +21 | Variant = -1, + | ^^^^^^^^^^^^ + +error: Only `u8`, `u16` and `u32` reprs are supported. + --> $DIR/variants.rs:25:1 + | +25 | #[repr(usize)] + | ^^^^^^^^^^^^^^ + +error: `#[derive(EnumSetType)]` can only be used on fieldless enums. + --> $DIR/variants.rs:32:5 + | +32 | Variant(u32), + | ^^^^^^^^^^^^ + +error: Too many variants for u8 serialization repr. + --> $DIR/variants.rs:36:1 + | +36 | / #[enumset(serialize_repr = "u8")] +37 | | enum BadSerializationRepr { +38 | | Variant = 8, +39 | | } + | |_^ + +error: `#[derive(EnumSetType)]` may only be used on enums + --> $DIR/variants.rs:42:1 + | +42 | / struct BadItemType { +43 | | +44 | | } + | |_^ diff --git a/enumset/tests/trybuild.rs b/enumset/tests/trybuild.rs new file mode 100644 index 0000000..f4c1557 --- /dev/null +++ b/enumset/tests/trybuild.rs @@ -0,0 +1,5 @@ +#[test] +fn ui() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/compile-fail/*.rs"); +} diff --git a/enumset_derive/src/lib.rs b/enumset_derive/src/lib.rs index 99b5f99..e6d7bf6 100644 --- a/enumset_derive/src/lib.rs +++ b/enumset_derive/src/lib.rs @@ -245,13 +245,13 @@ fn derive_enum_set_type_impl(input: DeriveInput) -> Result { current_variant = match i.base10_parse() { Ok(val) => val, Err(_) => error( - expr.span(), "Could not parse discriminant as u32.", + expr.span(), "Enum set discriminants must be `u32`s.", )?, }; has_manual_discriminant = true; } else { error( - variant.span(), "Unrecognized discriminant for variant." + variant.span(), "Enum set discriminants must be `u32`s." )?; } } @@ -283,7 +283,7 @@ fn derive_enum_set_type_impl(input: DeriveInput) -> Result { } else { error( variant.span(), - "`#[derive(EnumSetType)]` can only be used on C-like enums." + "`#[derive(EnumSetType)]` can only be used on fieldless enums." )?; } } -- 2.44.0