diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-24 13:23:05 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-24 13:23:05 +0200 |
commit | 851a1adf02093cdb094f85978bc1433fd18a28ec (patch) | |
tree | 5cb0cbc45af0e3704af8f1292385566bf4971dbd | |
parent | 8e4d1f43c5383c5efc112e39f035476a4e63713e (diff) |
Add test for Vec<bool>
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/lib.rs | 104 |
1 files changed, 104 insertions, 0 deletions
@@ -95,3 +95,107 @@ mod dummy_bool_test { } } + +#[cfg(test)] +mod vec_test { + use super::*; + + struct DummyBackend; + impl Backend for DummyBackend { + type Error = (); + + fn bool_builder(&self) -> Box<dyn ValueBuilder<Output = bool, Error = Self::Error>> { + Box::new(BoolValBuilder) + } + fn u8_builder(&self) -> Box<dyn ValueBuilder<Output = u8, Error = Self::Error>> { + unimplemented!() + } + fn u16_builder(&self) -> Box<dyn ValueBuilder<Output = u16, Error = Self::Error>> { + unimplemented!() + } + fn u32_builder(&self) -> Box<dyn ValueBuilder<Output = u32, Error = Self::Error>> { + unimplemented!() + } + fn u64_builder(&self) -> Box<dyn ValueBuilder<Output = u64, Error = Self::Error>> { + unimplemented!() + } + fn u128_builder(&self) -> Box<dyn ValueBuilder<Output = u128, Error = Self::Error>> { + unimplemented!() + } + fn i8_builder(&self) -> Box<dyn ValueBuilder<Output = i8, Error = Self::Error>> { + unimplemented!() + } + fn i16_builder(&self) -> Box<dyn ValueBuilder<Output = i16, Error = Self::Error>> { + unimplemented!() + } + fn i32_builder(&self) -> Box<dyn ValueBuilder<Output = i32, Error = Self::Error>> { + unimplemented!() + } + fn i64_builder(&self) -> Box<dyn ValueBuilder<Output = i64, Error = Self::Error>> { + unimplemented!() + } + fn i128_builder(&self) -> Box<dyn ValueBuilder<Output = i128, Error = Self::Error>> { + unimplemented!() + } + fn usize_builder(&self) -> Box<dyn ValueBuilder<Output = usize, Error = Self::Error>> { + unimplemented!() + } + fn isize_builder(&self) -> Box<dyn ValueBuilder<Output = isize, Error = Self::Error>> { + unimplemented!() + } + fn f32_builder(&self) -> Box<dyn ValueBuilder<Output = f32, Error = Self::Error>> { + unimplemented!() + } + fn f64_builder(&self) -> Box<dyn ValueBuilder<Output = f64, Error = Self::Error>> { + unimplemented!() + } + fn char_builder(&self) -> Box<dyn ValueBuilder<Output = char, Error = Self::Error>> { + unimplemented!() + } + fn string_builder(&self) -> Box<dyn ValueBuilder<Output = String, Error = Self::Error>> { + unimplemented!() + } + fn vec_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = Vec<T>, Error = Self::Error>> + where T: 'static + BuildableValue + { + Box::new(VecBuilder::<T>(std::marker::PhantomData)) + } + } + + struct BoolValBuilder; + impl ValueBuilder for BoolValBuilder { + type Output = bool; + type Error = (); + + fn build_value(&self, _question: &str) -> Result<Self::Output, Self::Error> { + Ok(true) + } + } + + pub struct VecBuilder<T: 'static + BuildableValue>(std::marker::PhantomData<T>); + impl<T: BuildableValue> CollectionBuilder for VecBuilder<T> { + type Output = Vec<T>; + type Error = (); + + fn build_collection(&self, value_desc: &str) -> Result<Self::Output, Self::Error> { + let mut buf = vec![]; + + loop { + let v: T = T::builder(DummyBackend).build_value(value_desc)?; + buf.push(v); + + if buf.len() == 3 { + break + } + } + + Ok(buf) + } + } + + #[test] + fn test_build_vec() { + let v = Vec::<bool>::builder(DummyBackend).build_collection("flag").unwrap(); + assert_eq!(v, vec![true, true, true]); + } +} |