summaryrefslogtreecommitdiffstats
path: root/vendor/derive_builder/tests/setter_extend.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/derive_builder/tests/setter_extend.rs')
-rw-r--r--vendor/derive_builder/tests/setter_extend.rs160
1 files changed, 160 insertions, 0 deletions
diff --git a/vendor/derive_builder/tests/setter_extend.rs b/vendor/derive_builder/tests/setter_extend.rs
new file mode 100644
index 000000000..496c656d3
--- /dev/null
+++ b/vendor/derive_builder/tests/setter_extend.rs
@@ -0,0 +1,160 @@
+#[macro_use]
+extern crate pretty_assertions;
+#[macro_use]
+extern crate derive_builder;
+
+use std::collections::HashMap;
+
+#[derive(Debug, PartialEq, Default, Builder, Clone)]
+struct Lorem {
+ #[builder(setter(each = "foo_append"))]
+ foo: String,
+ #[builder(setter(each = "bar"))]
+ bars: Vec<String>,
+ #[builder(setter(each = "baz"))]
+ bazes: HashMap<String, i32>,
+ #[builder(setter(strip_option, each = "qux"))]
+ quxes: Option<Vec<String>>,
+ #[builder(setter(strip_option, each = "quux"))]
+ quuxes: Option<HashMap<String, i32>>,
+}
+
+#[derive(Debug, PartialEq, Default, Builder, Clone)]
+#[builder(pattern = "mutable")]
+struct Ipsum {
+ #[builder(setter(each(name = "foo_append")))]
+ foo: String,
+ #[builder(setter(each(name = "bar")))]
+ bars: Vec<String>,
+ #[builder(setter(each(name = "baz")))]
+ bazes: HashMap<String, i32>,
+ #[builder(setter(strip_option, each = "qux"))]
+ quxes: Option<Vec<String>>,
+ #[builder(setter(strip_option, each = "quux"))]
+ quuxes: Option<HashMap<String, i32>>,
+}
+
+#[derive(Debug, PartialEq, Default, Builder, Clone)]
+#[builder]
+struct Dolor {
+ #[builder(setter(each(name = "foo_append")))]
+ foo: String,
+ #[builder(setter(each(name = "bar", into)))]
+ bars: Vec<String>,
+ #[builder(setter(each(name = "baz")))]
+ bazes: HashMap<String, i32>,
+}
+
+#[test]
+fn extend_field() {
+ let x = LoremBuilder::default()
+ .foo("foo".into())
+ .bar("bar".into())
+ .bar("bar bar".into())
+ .bar("bar bar bar".into())
+ .foo_append('-')
+ .baz(("baz".into(), 1))
+ .baz(("bazz".into(), 2))
+ .baz(("bazzz".into(), 3))
+ .foo_append("foo")
+ .qux("qux".into())
+ .qux("qux qux".into())
+ .quux(("quux".into(), 1))
+ .quux(("quuxx".into(), 2))
+ .build()
+ .unwrap();
+
+ assert_eq!(
+ x,
+ Lorem {
+ foo: "foo-foo".into(),
+ bars: vec!["bar".into(), "bar bar".into(), "bar bar bar".into()],
+ bazes: vec![("baz".into(), 1), ("bazz".into(), 2), ("bazzz".into(), 3)]
+ .into_iter()
+ .collect(),
+ quxes: Some(vec!["qux".into(), "qux qux".into()]),
+ quuxes: Some(
+ vec![("quux".into(), 1), ("quuxx".into(), 2)]
+ .into_iter()
+ .collect()
+ ),
+ }
+ );
+}
+
+#[test]
+fn extend_field_into() {
+ let x = DolorBuilder::default()
+ .foo("foo".into())
+ .bar("bar")
+ .bar("bar bar")
+ .bar("bar bar bar")
+ .foo_append('-')
+ .baz(("baz".into(), 1))
+ .baz(("bazz".into(), 2))
+ .baz(("bazzz".into(), 3))
+ .foo_append("foo")
+ .build()
+ .unwrap();
+
+ assert_eq!(
+ x,
+ Dolor {
+ foo: "foo-foo".into(),
+ bars: vec!["bar".into(), "bar bar".into(), "bar bar bar".into()],
+ bazes: vec![("baz".into(), 1), ("bazz".into(), 2), ("bazzz".into(), 3)]
+ .into_iter()
+ .collect(),
+ }
+ );
+}
+
+#[test]
+fn extend_field_mutable() {
+ let x = IpsumBuilder::default()
+ .foo("foo".into())
+ .bar("bar".into())
+ .bar("bar bar".into())
+ .bar("bar bar bar".into())
+ .foo_append('-')
+ .baz(("baz".into(), 1))
+ .baz(("bazz".into(), 2))
+ .baz(("bazzz".into(), 3))
+ .foo_append("foo")
+ .qux("qux".into())
+ .qux("qux qux".into())
+ .quux(("quux".into(), 1))
+ .quux(("quuxx".into(), 2))
+ .build()
+ .unwrap();
+
+ assert_eq!(
+ x,
+ Ipsum {
+ foo: "foo-foo".into(),
+ bars: vec!["bar".into(), "bar bar".into(), "bar bar bar".into()],
+ bazes: vec![("baz".into(), 1), ("bazz".into(), 2), ("bazzz".into(), 3)]
+ .into_iter()
+ .collect(),
+ quxes: Some(vec!["qux".into(), "qux qux".into()]),
+ quuxes: Some(
+ vec![("quux".into(), 1), ("quuxx".into(), 2)]
+ .into_iter()
+ .collect()
+ ),
+ }
+ );
+}
+
+#[derive(Debug, PartialEq, Default, Builder, Clone)]
+#[builder(setter(skip))]
+struct Sit {
+ #[builder(setter(each(name = "foo")))]
+ foos: Vec<i32>,
+}
+
+#[test]
+fn extend_field_enabled() {
+ let x = SitBuilder::default().foo(1).foo(2).build().unwrap();
+ assert_eq!(x, Sit { foos: vec![1, 2] });
+}