diff -r da71e0d88a1c -r c4f917c6be51 gameServer2/src/protocol/test.rs --- a/gameServer2/src/protocol/test.rs Wed Jul 04 00:01:25 2018 +0300 +++ b/gameServer2/src/protocol/test.rs Wed Jul 04 04:42:16 2018 +0300 @@ -2,9 +2,11 @@ test_runner::{TestRunner, Reason}, arbitrary::{any, any_with, Arbitrary, StrategyFor}, strategy::{Strategy, BoxedStrategy, Just, Filter, ValueTree}, - string::RegexGeneratorValueTree + string::RegexGeneratorValueTree, }; +use server::coretypes::{GameCfg, TeamInfo, HedgehogInfo}; + use super::messages::{ HWProtocolMessage, HWProtocolMessage::* }; @@ -21,6 +23,9 @@ impl Into2> for Option{ fn into2(self) -> Option { self.map(|x| {x.0}) } } +impl Into2>> for Option>{ + fn into2(self) -> Option> { self.map(|x| {x.into2()}) } +} macro_rules! proto_msg_case { ($val: ident()) => @@ -34,7 +39,7 @@ } macro_rules! proto_msg_match { - ($var: expr, def = $default: ident, $($num: expr => $constr: ident $res: tt),*) => ( + ($var: expr, def = $default: expr, $($num: expr => $constr: ident $res: tt),*) => ( match $var { $($num => (proto_msg_case!($constr $res)).boxed()),*, _ => Just($default).boxed() @@ -63,6 +68,51 @@ type Strategy = BoxedStrategy; } +impl Arbitrary for GameCfg { + type Parameters = (); + + fn arbitrary_with(args: ::Parameters) -> ::Strategy { + use server::coretypes::GameCfg::*; + (0..10).no_shrink().prop_flat_map(|i| { + proto_msg_match!(i, def = FeatureSize(0), + 0 => FeatureSize(u32), + 1 => MapType(Ascii), + 2 => MapGenerator(u32), + 3 => MazeSize(u32), + 4 => Seed(Ascii), + 5 => Template(u32), + 6 => Ammo(Ascii, Option), + 7 => Scheme(Ascii, Option>), + 8 => Script(Ascii), + 9 => Theme(Ascii), + 10 => DrawnMap(Ascii)) + }).boxed() + } + + type Strategy = BoxedStrategy; +} + +impl Arbitrary for TeamInfo { + type Parameters = (); + + fn arbitrary_with(args: ::Parameters) -> ::Strategy { + ("[a-z]+", 0u8..127u8, "[a-z]+", "[a-z]+", "[a-z]+", "[a-z]+", 0u8..127u8) + .prop_map(|(name, color, grave, fort, voice_pack, flag, difficulty)| { + fn hog(n: u8) -> HedgehogInfo { + HedgehogInfo { name: format!("hog{}", n), hat: format!("hat{}", n)} + } + let hedgehogs = [hog(1), hog(2), hog(3), hog(4), hog(5), hog(6), hog(7), hog(8)]; + TeamInfo { + name, color, grave, fort, + voice_pack, flag,difficulty, + hedgehogs, hedgehogs_number: 0 + } + }).boxed() + } + + type Strategy = BoxedStrategy; +} + pub fn gen_proto_msg() -> BoxedStrategy where { let res = (0..58).no_shrink().prop_flat_map(|i| { proto_msg_match!(i, def = Malformed, @@ -96,11 +146,11 @@ 27 => RestartServer(), 28 => Stats(), 29 => Part(Option), - //30 => Cfg(GameCfg), - //31 => AddTeam(TeamInfo), + 30 => Cfg(GameCfg), + 31 => AddTeam(TeamInfo), 32 => RemoveTeam(Ascii), - //33 => SetHedgehogsNumber(String, u8), - //34 => SetTeamColor(String, u8), + 33 => SetHedgehogsNumber(Ascii, u8), + 34 => SetTeamColor(Ascii, u8), 35 => ToggleReady(), 36 => StartGame(), 37 => EngineMessage(Ascii),