rust/hedgewars-network-protocol/tests/test.rs
changeset 15804 747278149393
child 15810 ee84e417d8d0
equal deleted inserted replaced
15803:b06b33cf0a89 15804:747278149393
       
     1 use proptest::{
       
     2     arbitrary::any,
       
     3     proptest,
       
     4     strategy::{BoxedStrategy, Just, Strategy},
       
     5 };
       
     6 
       
     7 use hedgewars_network_protocol::messages::{HwProtocolMessage, HwProtocolMessage::*};
       
     8 use hedgewars_network_protocol::parser::message;
       
     9 use hedgewars_network_protocol::types::{GameCfg, ServerVar, TeamInfo, VoteType};
       
    10 
       
    11 use hedgewars_network_protocol::types::testing::*;
       
    12 use hedgewars_network_protocol::{proto_msg_case, proto_msg_match};
       
    13 
       
    14 pub fn gen_proto_msg() -> BoxedStrategy<HwProtocolMessage> where {
       
    15     let res = (0..=55).no_shrink().prop_flat_map(|i| {
       
    16         proto_msg_match!(i, def = Ping,
       
    17             0 => Ping(),
       
    18             1 => Pong(),
       
    19             2 => Quit(Option<Ascii>),
       
    20             4 => Global(Ascii),
       
    21             5 => Watch(u32),
       
    22             6 => ToggleServerRegisteredOnly(),
       
    23             7 => SuperPower(),
       
    24             8 => Info(Ascii),
       
    25             9 => Nick(Ascii),
       
    26             10 => Proto(u16),
       
    27             11 => Password(Ascii, Ascii),
       
    28             12 => Checker(u16, Ascii, Ascii),
       
    29             13 => List(),
       
    30             14 => Chat(Ascii),
       
    31             15 => CreateRoom(Ascii, Option<Ascii>),
       
    32             16 => JoinRoom(Ascii, Option<Ascii>),
       
    33             17 => Follow(Ascii),
       
    34             18 => Rnd(Vec<Ascii>),
       
    35             19 => Kick(Ascii),
       
    36             20 => Ban(Ascii, Ascii, u32),
       
    37             21 => BanIp(Ascii, Ascii, u32),
       
    38             22 => BanNick(Ascii, Ascii, u32),
       
    39             23 => BanList(),
       
    40             24 => Unban(Ascii),
       
    41             25 => SetServerVar(ServerVar),
       
    42             26 => GetServerVar(),
       
    43             27 => RestartServer(),
       
    44             28 => Stats(),
       
    45             29 => Part(Option<Ascii>),
       
    46             30 => Cfg(GameCfg),
       
    47             31 => AddTeam(Box<TeamInfo>),
       
    48             32 => RemoveTeam(Ascii),
       
    49             33 => SetHedgehogsNumber(Ascii, u8),
       
    50             34 => SetTeamColor(Ascii, u8),
       
    51             35 => ToggleReady(),
       
    52             36 => StartGame(),
       
    53             37 => EngineMessage(Ascii),
       
    54             38 => RoundFinished(),
       
    55             39 => ToggleRestrictJoin(),
       
    56             40 => ToggleRestrictTeams(),
       
    57             41 => ToggleRegisteredOnly(),
       
    58             42 => RoomName(Ascii),
       
    59             43 => Delegate(Ascii),
       
    60             44 => TeamChat(Ascii),
       
    61             45 => MaxTeams(u8),
       
    62             46 => Fix(),
       
    63             47 => Unfix(),
       
    64             48 => Greeting(Option<Ascii>),
       
    65             49 => CallVote(Option<VoteType>),
       
    66             50 => Vote(bool),
       
    67             51 => ForceVote(bool),
       
    68             52 => Save(Ascii, Ascii),
       
    69             53 => Delete(Ascii),
       
    70             54 => SaveRoom(Ascii),
       
    71             55 => LoadRoom(Ascii)
       
    72         )
       
    73     });
       
    74     res.boxed()
       
    75 }
       
    76 
       
    77 proptest! {
       
    78     #[test]
       
    79     fn is_parser_composition_idempotent(ref msg in gen_proto_msg()) {
       
    80         println!("!! Msg: {:?}, Bytes: {:?} !!", msg, msg.to_raw_protocol().as_bytes());
       
    81         assert_eq!(message(msg.to_raw_protocol().as_bytes()), Ok((&b""[..], msg.clone())))
       
    82     }
       
    83 }