diff options
Diffstat (limited to 'mingling_core/src/program')
| -rw-r--r-- | mingling_core/src/program/collection.rs | 3 | ||||
| -rw-r--r-- | mingling_core/src/program/collection/mock.rs | 105 | ||||
| -rw-r--r-- | mingling_core/src/program/setup.rs | 63 |
3 files changed, 112 insertions, 59 deletions
diff --git a/mingling_core/src/program/collection.rs b/mingling_core/src/program/collection.rs index d3d18d6..078f736 100644 --- a/mingling_core/src/program/collection.rs +++ b/mingling_core/src/program/collection.rs @@ -12,6 +12,9 @@ use crate::{GeneralRendererSetting, error::GeneralRendererSerializeError}; #[cfg(feature = "comp")] use crate::{ShellContext, Suggest}; +mod mock; +pub use mock::*; + /// Collected program context /// /// Note: It is recommended to use the `gen_program!()` macro from [mingling_macros](https://crates.io/crates/mingling_macros) to automatically create this type diff --git a/mingling_core/src/program/collection/mock.rs b/mingling_core/src/program/collection/mock.rs new file mode 100644 index 0000000..e1b3aa4 --- /dev/null +++ b/mingling_core/src/program/collection/mock.rs @@ -0,0 +1,105 @@ +pub use mock::*; + +mod mock { + #[cfg(feature = "async")] + use std::pin::Pin; + + #[cfg(feature = "dispatch_tree")] + use crate::Dispatcher; + + use crate::{AnyOutput, ChainProcess, Groupped, ProgramCollect, RenderResult}; + + #[cfg(feature = "general_renderer")] + use crate::{GeneralRendererSetting, error::GeneralRendererSerializeError}; + + #[cfg(feature = "comp")] + use crate::{ShellContext, Suggest}; + + #[cfg(feature = "general_renderer")] + use serde::Serialize; + + #[cfg_attr(feature = "general_renderer", derive(Serialize))] + #[allow(unused)] + pub enum MockProgramCollect { + Foo, + Bar, + } + + impl Groupped<MockProgramCollect> for MockProgramCollect { + fn member_id() -> MockProgramCollect { + MockProgramCollect::Foo + } + } + + impl ProgramCollect for MockProgramCollect { + type Enum = MockProgramCollect; + type ErrorDispatcherNotFound = MockProgramCollect; + type ErrorRendererNotFound = MockProgramCollect; + type ResultEmpty = MockProgramCollect; + + #[cfg(feature = "dispatch_tree")] + fn dispatch_args_trie( + _raw: &[String], + ) -> Result<AnyOutput<Self::Enum>, crate::error::ProgramInternalExecuteError> { + unreachable!() + } + + #[cfg(feature = "dispatch_tree")] + fn get_nodes() -> Vec<(String, &'static (dyn Dispatcher<Self::Enum> + Send + Sync))> { + unreachable!() + } + + fn build_renderer_not_found(_member_id: Self::Enum) -> AnyOutput<Self::Enum> { + unreachable!() + } + + fn build_dispatcher_not_found(_args: Vec<String>) -> AnyOutput<Self::Enum> { + unreachable!() + } + + fn build_empty_result() -> AnyOutput<Self::Enum> { + unreachable!() + } + + fn render(_any: AnyOutput<Self::Enum>, _r: &mut RenderResult) { + unreachable!() + } + + fn render_help(_any: AnyOutput<Self::Enum>, _r: &mut RenderResult) { + unreachable!() + } + + #[cfg(feature = "async")] + fn do_chain( + _any: AnyOutput<Self::Enum>, + ) -> Pin<Box<dyn Future<Output = ChainProcess<Self::Enum>> + Send>> { + unreachable!() + } + + #[cfg(not(feature = "async"))] + fn do_chain(_any: AnyOutput<Self::Enum>) -> ChainProcess<Self::Enum> { + unreachable!() + } + + #[cfg(feature = "comp")] + fn do_comp(_any: &AnyOutput<Self::Enum>, _ctx: &ShellContext) -> Suggest { + unreachable!() + } + + fn has_renderer(_any: &AnyOutput<Self::Enum>) -> bool { + unreachable!() + } + + fn has_chain(_any: &AnyOutput<Self::Enum>) -> bool { + unreachable!() + } + + #[cfg(feature = "general_renderer")] + fn general_render( + _any: AnyOutput<Self::Enum>, + _setting: &GeneralRendererSetting, + ) -> Result<RenderResult, GeneralRendererSerializeError> { + unreachable!() + } + } +} diff --git a/mingling_core/src/program/setup.rs b/mingling_core/src/program/setup.rs index 2bfced1..f248fb6 100644 --- a/mingling_core/src/program/setup.rs +++ b/mingling_core/src/program/setup.rs @@ -20,69 +20,14 @@ where #[cfg(test)] mod tests { use super::*; - use crate::{AnyOutput, ChainProcess, Groupped, RenderResult}; - - /// Minimal mock collector that satisfies `C: ProgramCollect<Enum = C>` - /// by setting `Enum = Self`. - #[derive(Debug, Clone, PartialEq)] - struct MockCollect; - - impl Groupped<MockCollect> for MockCollect { - fn member_id() -> MockCollect { - MockCollect - } - } - - impl ProgramCollect for MockCollect { - type Enum = MockCollect; - type ErrorDispatcherNotFound = MockCollect; - type ErrorRendererNotFound = MockCollect; - type ResultEmpty = MockCollect; - - fn build_renderer_not_found(_member_id: MockCollect) -> AnyOutput<MockCollect> { - unimplemented!() - } - fn build_dispatcher_not_found(_args: Vec<String>) -> AnyOutput<MockCollect> { - unimplemented!() - } - fn build_empty_result() -> AnyOutput<MockCollect> { - unimplemented!() - } - fn render(_any: AnyOutput<MockCollect>, _r: &mut RenderResult) { - unimplemented!() - } - fn render_help(_any: AnyOutput<MockCollect>, _r: &mut RenderResult) { - unimplemented!() - } - fn do_chain(_any: AnyOutput<MockCollect>) -> ChainProcess<MockCollect> { - unimplemented!() - } - #[cfg(feature = "comp")] - fn do_comp(_any: &AnyOutput<MockCollect>, _ctx: &crate::ShellContext) -> crate::Suggest { - unimplemented!() - } - fn has_renderer(_any: &AnyOutput<MockCollect>) -> bool { - unimplemented!() - } - fn has_chain(_any: &AnyOutput<MockCollect>) -> bool { - unimplemented!() - } - - #[cfg(feature = "general_renderer")] - fn general_render( - _any: AnyOutput<MockCollect>, - _setting: &crate::GeneralRendererSetting, - ) -> Result<RenderResult, crate::error::GeneralRendererSerializeError> { - unimplemented!() - } - } + use crate::MockProgramCollect; struct TestSetup { called: std::rc::Rc<std::cell::Cell<bool>>, } - impl ProgramSetup<MockCollect> for TestSetup { - fn setup(self, _program: &mut Program<MockCollect>) { + impl ProgramSetup<MockProgramCollect> for TestSetup { + fn setup(self, _program: &mut Program<MockProgramCollect>) { self.called.set(true); } } @@ -93,7 +38,7 @@ mod tests { let setup = TestSetup { called: std::rc::Rc::clone(&called), }; - let mut program: Program<MockCollect> = Program::new_with_args(["test"]); + let mut program: Program<MockProgramCollect> = Program::new_with_args(["test"]); program.with_setup(setup); assert!(called.get()); } |
