summaryrefslogtreecommitdiffstats
path: root/tests/common/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/common/mod.rs')
-rw-r--r--tests/common/mod.rs118
1 files changed, 118 insertions, 0 deletions
diff --git a/tests/common/mod.rs b/tests/common/mod.rs
new file mode 100644
index 0000000..26e0066
--- /dev/null
+++ b/tests/common/mod.rs
@@ -0,0 +1,118 @@
+use interactive_object_builder::*;
+
+pub struct DummyBackend;
+impl Backend for DummyBackend {
+ fn bool_builder(&self) -> Box<dyn ValueBuilder<Output = bool>> {
+ Box::new(BoolValBuilder)
+ }
+ fn u8_builder(&self) -> Box<dyn ValueBuilder<Output = u8>> {
+ Box::new(U8ValueBuilder)
+ }
+ fn u16_builder(&self) -> Box<dyn ValueBuilder<Output = u16>> {
+ unimplemented!()
+ }
+ fn u32_builder(&self) -> Box<dyn ValueBuilder<Output = u32>> {
+ unimplemented!()
+ }
+ fn u64_builder(&self) -> Box<dyn ValueBuilder<Output = u64>> {
+ unimplemented!()
+ }
+ fn u128_builder(&self) -> Box<dyn ValueBuilder<Output = u128>> {
+ unimplemented!()
+ }
+ fn i8_builder(&self) -> Box<dyn ValueBuilder<Output = i8>> {
+ unimplemented!()
+ }
+ fn i16_builder(&self) -> Box<dyn ValueBuilder<Output = i16>> {
+ unimplemented!()
+ }
+ fn i32_builder(&self) -> Box<dyn ValueBuilder<Output = i32>> {
+ unimplemented!()
+ }
+ fn i64_builder(&self) -> Box<dyn ValueBuilder<Output = i64>> {
+ unimplemented!()
+ }
+ fn i128_builder(&self) -> Box<dyn ValueBuilder<Output = i128>> {
+ unimplemented!()
+ }
+ fn usize_builder(&self) -> Box<dyn ValueBuilder<Output = usize>> {
+ unimplemented!()
+ }
+ fn isize_builder(&self) -> Box<dyn ValueBuilder<Output = isize>> {
+ unimplemented!()
+ }
+ fn f32_builder(&self) -> Box<dyn ValueBuilder<Output = f32>> {
+ unimplemented!()
+ }
+ fn f64_builder(&self) -> Box<dyn ValueBuilder<Output = f64>> {
+ unimplemented!()
+ }
+ fn char_builder(&self) -> Box<dyn ValueBuilder<Output = char>> {
+ unimplemented!()
+ }
+ fn string_builder(&self) -> Box<dyn ValueBuilder<Output = String>> {
+ unimplemented!()
+ }
+ fn option_builder<T: 'static + BuildableValue>(&self) -> Box<dyn CollectionBuilder<Output = Option<T>>> {
+ unimplemented!()
+ }
+ fn vec_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = Vec<T>>>
+ where T: 'static + BuildableValue
+ {
+ Box::new(VecBuilder::<T>(std::marker::PhantomData))
+ }
+
+ fn struct_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = T>>
+ where T: 'static + BuildableCollection
+ {
+ Box::new(StructBuilder::<T>(std::marker::PhantomData))
+ }
+}
+
+pub struct BoolValBuilder;
+impl ValueBuilder for BoolValBuilder {
+ type Output = bool;
+
+ fn build_value(&self, _question: &str) -> Result<Self::Output> {
+ Ok(true)
+ }
+}
+
+pub struct U8ValueBuilder;
+impl ValueBuilder for U8ValueBuilder {
+ type Output = u8;
+
+ fn build_value(&self, _question: &str) -> Result<Self::Output> {
+ Ok(42)
+ }
+}
+
+pub struct VecBuilder<T: 'static + BuildableValue>(std::marker::PhantomData<T>);
+impl<T: BuildableValue> CollectionBuilder for VecBuilder<T> {
+ type Output = Vec<T>;
+
+ fn build_collection(&self, value_desc: &str) -> Result<Self::Output> {
+ 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)
+ }
+}
+
+pub struct StructBuilder<T: BuildableCollection>(std::marker::PhantomData<T>);
+impl<T: BuildableCollection> CollectionBuilder for StructBuilder<T> {
+ type Output = T;
+
+ fn build_collection(&self, value_desc: &str) -> Result<Self::Output> {
+ T::builder(DummyBackend).build_collection(value_desc)
+ }
+}
+