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