aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/program
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_core/src/program')
-rw-r--r--mingling_core/src/program/collection.rs3
-rw-r--r--mingling_core/src/program/collection/mock.rs105
-rw-r--r--mingling_core/src/program/setup.rs63
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());
}