#[derive(Default)]
struct GameViewProperties {
label_visible: bool,
}
impl GameViewProperties {
fn do_something(&self) {}
}
impl From<&MachineProperties> for GameViewProperties {
fn from(_: &MachineProperties) -> Self {
Self {
label_visible: false,
}
}
}
struct MachineProperties {}
impl MachineProperties {
fn do_something(&self) {}
}
#[derive(Default)]
struct SeventhProperties {}
#[derive(Default)]
struct EigthProperties {}
brisk_machine::brisk_it! {
Machine
{
id: Main,
properties: MachineProperties,
State {
id: MainMenuView,
State {
id: MainMenu,
},
State {
id: LoadMenu,
},
State {
id: SettingsMenu,
},
on load_clicked: MainMenu => LoadMenu { },
on settings_clicked: MainMenu => SettingsMenu { },
on back_clicked: [ LoadMenu => MainMenu { }, SettingsMenu => MainMenu { } ]
},
State {
id: LoadingView,
},
State
{
id: GameView,
properties: GameViewProperties,
Group
{
id: FirstGroup,
State { id: First },
State { id: Second },
on f2s: First => Second { }
},
Group
{
id: SecondGroup,
State { id: Third },
State { id: Fourth },
on f2s: Third => Fourth { super_properties.do_something() }
},
Group
{
id: ThirdGroup,
State {
id: Fifth,
State
{
id: Seventh,
properties: SeventhProperties,
},
State
{
id: Eigth,
properties: EigthProperties,
},
on s2e: Seventh => Eigth { },
},
State {
id: Sixth,
},
on game_ready: Fifth => Sixth { },
}
},
on new_game_clicked: MainMenuView => LoadingView { super_properties.do_something() },
on game_ready: LoadingView => GameView { },
}
}
#[test]
fn test_main() {
let m = std::cell::RefCell::new(MainMachine::create(MachineProperties {}));
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::MainMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.load_clicked();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::LoadMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.settings_clicked();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::LoadMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.back_clicked();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::MainMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.settings_clicked();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::SettingsMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.back_clicked();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::MainMenuView { state } => match state {
MainMenuView::MainMenu => true,
_ => false,
},
_ => false,
});
let ec = MainMachine::start_events(&m);
ec.new_game_clicked();
ec.game_ready();
drop(ec);
assert!(match &*m.borrow().state.borrow() {
Main::GameView { .. } => true,
_ => false,
},);
}