mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 11:46:42 +01:00
This commit is contained in:
parent
21832453d9
commit
17506726cb
36 changed files with 280 additions and 271 deletions
|
|
@ -5,96 +5,4 @@ pub use ::tengri_core::*;
|
|||
#[cfg(feature="tui")] pub use ::tengri_tui as tui;
|
||||
|
||||
#[cfg(test)] extern crate tengri_proc;
|
||||
#[cfg(test)] #[test] fn test_subcommand () -> Usually<()> {
|
||||
use crate::input::{Command, InputMap, KeyMap, Handle, handle};
|
||||
use crate::dsl::TokenIter;
|
||||
use crate::tui::TuiIn;
|
||||
use crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers, KeyEventKind, KeyEventState};
|
||||
//use crate::input::*;
|
||||
//use crate::dsl::*;
|
||||
struct Test {
|
||||
keys: InputMap<'static, Test, TestCommand, TuiIn, TokenIter<'static>>
|
||||
}
|
||||
handle!(TuiIn: |self: Test, input|if let Some(command) = self.keys.command(self, input) {
|
||||
Ok(Some(true))
|
||||
} else {
|
||||
Ok(None)
|
||||
});
|
||||
#[tengri_proc::command(Test)] impl TestCommand {
|
||||
fn do_thing (state: &mut Test) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_thing_arg (state: &mut Test, arg: usize) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_sub (state: &mut Test, command: TestSubcommand) -> Perhaps<Self> {
|
||||
Ok(command.execute(state)?.map(|command|Self::DoSub { command }))
|
||||
}
|
||||
}
|
||||
#[tengri_proc::command(Test)] impl TestSubcommand {
|
||||
fn do_other_thing (state: &mut Test) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_other_thing_arg (state: &mut Test, arg: usize) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
let mut test = Test {
|
||||
keys: InputMap::new("
|
||||
(@a do-thing)
|
||||
(@b do-thing-arg 0)
|
||||
(@c do-sub do-other-thing)
|
||||
(@d do-sub do-other-thing-arg 0)
|
||||
".into())
|
||||
};
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('a'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('b'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('c'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('d'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(None, test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('z'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
//FIXME:
|
||||
//#[cfg(test)] #[test] fn test_dsl_context () {
|
||||
//use crate::dsl::{Dsl, Value};
|
||||
|
||||
//struct Test;
|
||||
//#[tengri_proc::expose]
|
||||
//impl Test {
|
||||
//fn some_bool (&self) -> bool {
|
||||
//true
|
||||
//}
|
||||
//}
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":false")), Some(false));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":true")), Some(true));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":some-bool")), Some(true));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":missing-bool")), None);
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Num(0)), Some(false));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Num(1)), Some(true));
|
||||
//}
|
||||
#[cfg(test)] mod test;
|
||||
|
|
|
|||
97
tengri/src/test.rs
Normal file
97
tengri/src/test.rs
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
use crate::*;
|
||||
|
||||
#[test] fn test_subcommand () -> Usually<()> {
|
||||
use crate::input::{Command, Handle, handle};
|
||||
//use crate::dsl::TokenIter;
|
||||
use crate::tui::TuiIn;
|
||||
use crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers, KeyEventKind, KeyEventState};
|
||||
//use crate::input::*;
|
||||
//use crate::dsl::*;
|
||||
struct Test {
|
||||
//keys: InputMap<'static, Test, TestCommand, TuiIn, TokenIter<'static>>
|
||||
}
|
||||
handle!(TuiIn: |self: Test, input|if let Some(command) = self.keys.command(self, input) {
|
||||
Ok(Some(true))
|
||||
} else {
|
||||
Ok(None)
|
||||
});
|
||||
#[tengri_proc::command(Test)]
|
||||
impl TestCommand {
|
||||
fn do_thing (_state: &mut Test) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_thing_arg (_state: &mut Test, _arg: usize) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_sub (state: &mut Test, command: TestSubcommand) -> Perhaps<Self> {
|
||||
Ok(command.execute(state)?.map(|command|Self::DoSub { command }))
|
||||
}
|
||||
}
|
||||
#[tengri_proc::command(Test)]
|
||||
impl TestSubcommand {
|
||||
fn do_other_thing (_state: &mut Test) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
fn do_other_thing_arg (_state: &mut Test, _arg: usize) -> Perhaps<Self> {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
let mut test = Test {
|
||||
keys: InputMap::new("
|
||||
(@a do-thing)
|
||||
(@b do-thing-arg 0)
|
||||
(@c do-sub do-other-thing)
|
||||
(@d do-sub do-other-thing-arg 0)
|
||||
".into())
|
||||
};
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('a'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('b'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('c'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(Some(true), test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('d'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
assert_eq!(None, test.handle(&TuiIn(Default::default(), Event::Key(KeyEvent {
|
||||
kind: KeyEventKind::Press,
|
||||
code: KeyCode::Char('z'),
|
||||
modifiers: KeyModifiers::NONE,
|
||||
state: KeyEventState::NONE,
|
||||
})))?);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
//FIXME:
|
||||
//#[cfg(test)] #[test] fn test_dsl_context () {
|
||||
//use crate::dsl::{Dsl, Value};
|
||||
|
||||
//struct Test;
|
||||
//#[tengri_proc::expose]
|
||||
//impl Test {
|
||||
//fn some_bool (&self) -> bool {
|
||||
//true
|
||||
//}
|
||||
//}
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":false")), Some(false));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":true")), Some(true));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":some-bool")), Some(true));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Sym(":missing-bool")), None);
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Num(0)), Some(false));
|
||||
//assert_eq!(Dsl::get(&Test, &Value::Num(1)), Some(true));
|
||||
//}
|
||||
Loading…
Add table
Add a link
Reference in a new issue