]> git.lizzy.rs Git - enumset.git/commitdiff
Add UI tests.
authorLymia Aluysia <lymia@lymiahugs.com>
Wed, 1 Apr 2020 18:14:54 +0000 (11:14 -0700)
committerLymia Aluysia <lymia@lymiahugs.com>
Wed, 1 Apr 2020 18:14:54 +0000 (11:14 -0700)
enumset/Cargo.toml
enumset/tests/compile-fail/variants.rs [new file with mode: 0644]
enumset/tests/compile-fail/variants.stderr [new file with mode: 0644]
enumset/tests/trybuild.rs [new file with mode: 0644]
enumset_derive/src/lib.rs

index 0a30a622ccfd2fc7555cd2d861cce0786187f1c4..ee346aded16f47561a11aa05f0e618511dc059d5 100644 (file)
@@ -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 (file)
index 0000000..26e24a4
--- /dev/null
@@ -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 (file)
index 0000000..c3d5849
--- /dev/null
@@ -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 (file)
index 0000000..f4c1557
--- /dev/null
@@ -0,0 +1,5 @@
+#[test]
+fn ui() {
+    let t = trybuild::TestCases::new();
+    t.compile_fail("tests/compile-fail/*.rs");
+}
index 99b5f99c411153fb5e43e3b1784fd0108c048ab8..e6d7bf66b8f9f2b64a12c6956488991747788427 100644 (file)
@@ -245,13 +245,13 @@ fn derive_enum_set_type_impl(input: DeriveInput) -> Result<TokenStream> {
                             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<TokenStream> {
                 } else {
                     error(
                         variant.span(),
-                        "`#[derive(EnumSetType)]` can only be used on C-like enums."
+                        "`#[derive(EnumSetType)]` can only be used on fieldless enums."
                     )?;
                 }
             }