summaryrefslogtreecommitdiffstats
path: root/vendor/darling-0.14.4/tests/skip.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
commitc23a457e72abe608715ac76f076f47dc42af07a5 (patch)
tree2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /vendor/darling-0.14.4/tests/skip.rs
parentReleasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz
rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/darling-0.14.4/tests/skip.rs')
-rw-r--r--vendor/darling-0.14.4/tests/skip.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/darling-0.14.4/tests/skip.rs b/vendor/darling-0.14.4/tests/skip.rs
new file mode 100644
index 000000000..f930ca5d3
--- /dev/null
+++ b/vendor/darling-0.14.4/tests/skip.rs
@@ -0,0 +1,74 @@
+//! Test that skipped fields are not read into structs when they appear in input.
+
+use darling::{FromDeriveInput, FromMeta};
+use syn::parse_quote;
+
+#[derive(Debug, PartialEq, Eq, FromDeriveInput)]
+#[darling(attributes(skip_test))]
+pub struct Lorem {
+ ipsum: String,
+
+ #[darling(skip)]
+ dolor: u8,
+}
+
+/// Verify variant-level and field-level skip work correctly for enums.
+#[derive(Debug, FromMeta)]
+pub enum Sit {
+ Amet(bool),
+
+ #[darling(skip)]
+ Foo {
+ hello: bool,
+ },
+
+ Bar {
+ hello: bool,
+ #[darling(skip)]
+ world: u8,
+ },
+}
+
+#[test]
+fn verify_skipped_field_not_required() {
+ let di = parse_quote! {
+ #[skip_test(ipsum = "Hello")]
+ struct Baz;
+ };
+
+ assert_eq!(
+ Lorem::from_derive_input(&di).unwrap(),
+ Lorem {
+ ipsum: "Hello".to_string(),
+ dolor: 0,
+ }
+ );
+}
+
+/// This test verifies that a skipped field will still prefer an explicit default
+/// over the default that would come from its field type. It would be incorrect for
+/// `Defaulting::from_derive_input` to fail here, and it would be wrong for the value
+/// of `dolor` to be `None`.
+#[test]
+fn verify_default_supersedes_from_none() {
+ fn default_dolor() -> Option<u8> {
+ Some(2)
+ }
+
+ #[derive(Debug, PartialEq, Eq, FromDeriveInput)]
+ #[darling(attributes(skip_test))]
+ pub struct Defaulting {
+ #[darling(skip, default = "default_dolor")]
+ dolor: Option<u8>,
+ }
+
+ let di = parse_quote! {
+ #[skip_test]
+ struct Baz;
+ };
+
+ assert_eq!(
+ Defaulting::from_derive_input(&di).unwrap(),
+ Defaulting { dolor: Some(2) }
+ )
+}