rust/hedgewars-network-protocol/src/tests/test.rs
author alfadur
Mon, 31 Jan 2022 18:24:49 +0300
changeset 15830 ea459da15b30
permissions -rw-r--r--
update protocol 📦
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15830
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     1
use crate::{
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     2
    messages::{HwProtocolMessage, HwServerMessage},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     3
    parser::{message, server_message},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     4
    types::ServerVar::*,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     5
    types::*,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     6
    types::{GameCfg, ServerVar, TeamInfo, VoteType},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     7
};
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     8
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     9
use proptest::{
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    10
    arbitrary::{any, Arbitrary},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    11
    proptest,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    12
    strategy::{BoxedStrategy, Just, Strategy},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    13
};
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    14
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    15
// Due to inability to define From between Options
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    16
pub trait Into2<T>: Sized {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    17
    fn into2(self) -> T;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    18
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    19
impl<T> Into2<T> for T {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    20
    fn into2(self) -> T {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    21
        self
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    22
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    23
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    24
impl Into2<Vec<String>> for Vec<Ascii> {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    25
    fn into2(self) -> Vec<String> {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    26
        self.into_iter().map(|x| x.0).collect()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    27
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    28
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    29
impl Into2<String> for Ascii {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    30
    fn into2(self) -> String {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    31
        self.0
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    32
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    33
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    34
impl Into2<Option<String>> for Option<Ascii> {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    35
    fn into2(self) -> Option<String> {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    36
        self.map(|x| x.0)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    37
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    38
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    39
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    40
#[macro_export]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    41
macro_rules! proto_msg_case {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    42
    ($val: ident()) => {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    43
        Just($val)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    44
    };
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    45
    ($val: ident($arg: ty)) => {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    46
        any::<$arg>().prop_map(|v| $val(v.into2()))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    47
    };
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    48
    ($val: ident($arg1: ty, $arg2: ty)) => {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    49
        any::<($arg1, $arg2)>().prop_map(|v| $val(v.0.into2(), v.1.into2()))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    50
    };
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    51
    ($val: ident($arg1: ty, $arg2: ty, $arg3: ty)) => {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    52
        any::<($arg1, $arg2, $arg3)>().prop_map(|v| $val(v.0.into2(), v.1.into2(), v.2.into2()))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    53
    };
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    54
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    55
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    56
macro_rules! proto_msg_match {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    57
($var: expr, def = $default: expr, $($num: expr => $constr: ident $res: tt),*) => (
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    58
    match $var {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    59
        $($num => (proto_msg_case!($constr $res)).boxed()),*,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    60
        _ => Just($default).boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    61
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    62
)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    63
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    64
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    65
/// Wrapper type for generating non-empty strings
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    66
#[derive(Debug)]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    67
pub struct Ascii(String);
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    68
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    69
impl Arbitrary for Ascii {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    70
    type Parameters = <String as Arbitrary>::Parameters;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    71
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    72
    fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    73
        "[a-zA-Z0-9]+".prop_map(Ascii).boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    74
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    75
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    76
    type Strategy = BoxedStrategy<Ascii>;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    77
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    78
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    79
impl Arbitrary for GameCfg {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    80
    type Parameters = ();
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    81
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    82
    fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    83
        use crate::types::GameCfg::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    84
        (0..10)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    85
            .no_shrink()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    86
            .prop_flat_map(|i| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    87
                proto_msg_match!(i, def = FeatureSize(0),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    88
        0 => FeatureSize(u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    89
        1 => MapType(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    90
        2 => MapGenerator(u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    91
        3 => MazeSize(u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    92
        4 => Seed(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    93
        5 => Template(u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    94
        6 => Ammo(Ascii, Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    95
        7 => Scheme(Ascii, Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    96
        8 => Script(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    97
        9 => Theme(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    98
        10 => DrawnMap(Ascii))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    99
            })
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   100
            .boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   101
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   102
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   103
    type Strategy = BoxedStrategy<GameCfg>;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   104
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   105
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   106
impl Arbitrary for TeamInfo {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   107
    type Parameters = ();
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   108
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   109
    fn arbitrary_with(_args: <Self as Arbitrary>::Parameters) -> <Self as Arbitrary>::Strategy {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   110
        (
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   111
            "[a-z]+",
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   112
            0u8..127u8,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   113
            "[a-z]+",
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   114
            "[a-z]+",
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   115
            "[a-z]+",
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   116
            "[a-z]+",
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   117
            0u8..127u8,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   118
        )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   119
            .prop_map(|(name, color, grave, fort, voice_pack, flag, difficulty)| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   120
                fn hog(n: u8) -> HedgehogInfo {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   121
                    HedgehogInfo {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   122
                        name: format!("hog{}", n),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   123
                        hat: format!("hat{}", n),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   124
                    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   125
                }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   126
                let hedgehogs = [
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   127
                    hog(1),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   128
                    hog(2),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   129
                    hog(3),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   130
                    hog(4),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   131
                    hog(5),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   132
                    hog(6),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   133
                    hog(7),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   134
                    hog(8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   135
                ];
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   136
                TeamInfo {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   137
                    owner: String::new(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   138
                    name,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   139
                    color,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   140
                    grave,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   141
                    fort,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   142
                    voice_pack,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   143
                    flag,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   144
                    difficulty,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   145
                    hedgehogs,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   146
                    hedgehogs_number: 0,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   147
                }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   148
            })
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   149
            .boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   150
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   151
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   152
    type Strategy = BoxedStrategy<TeamInfo>;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   153
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   154
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   155
impl Arbitrary for ServerVar {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   156
    type Parameters = ();
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   157
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   158
    fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   159
        (0..=2)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   160
            .no_shrink()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   161
            .prop_flat_map(|i| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   162
                proto_msg_match!(i, def = ServerVar::LatestProto(0),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   163
                    0 => MOTDNew(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   164
                    1 => MOTDOld(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   165
                    2 => LatestProto(u16)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   166
                )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   167
            })
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   168
            .boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   169
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   170
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   171
    type Strategy = BoxedStrategy<ServerVar>;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   172
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   173
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   174
impl Arbitrary for VoteType {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   175
    type Parameters = ();
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   176
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   177
    fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   178
        use VoteType::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   179
        (0..=4)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   180
            .no_shrink()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   181
            .prop_flat_map(|i| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   182
                proto_msg_match!(i, def = VoteType::Pause,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   183
                    0 => Kick(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   184
                    1 => Map(Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   185
                    2 => Pause(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   186
                    3 => NewSeed(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   187
                    4 => HedgehogsPerTeam(u8)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   188
                )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   189
            })
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   190
            .boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   191
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   192
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   193
    type Strategy = BoxedStrategy<VoteType>;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   194
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   195
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   196
pub fn gen_proto_msg() -> BoxedStrategy<HwProtocolMessage> where {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   197
    use HwProtocolMessage::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   198
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   199
    let res = (0..=58).no_shrink().prop_flat_map(|i| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   200
        proto_msg_match!(i, def = Ping,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   201
            0 => Ping(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   202
            1 => Pong(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   203
            2 => Quit(Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   204
            4 => Global(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   205
            5 => Watch(u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   206
            6 => ToggleServerRegisteredOnly(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   207
            7 => SuperPower(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   208
            8 => Info(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   209
            9 => Nick(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   210
            10 => Proto(u16),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   211
            11 => Password(Ascii, Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   212
            12 => Checker(u16, Ascii, Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   213
            13 => List(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   214
            14 => Chat(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   215
            15 => CreateRoom(Ascii, Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   216
            16 => JoinRoom(Ascii, Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   217
            17 => Follow(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   218
            18 => Rnd(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   219
            19 => Kick(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   220
            20 => Ban(Ascii, Ascii, u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   221
            21 => BanIp(Ascii, Ascii, u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   222
            22 => BanNick(Ascii, Ascii, u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   223
            23 => BanList(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   224
            24 => Unban(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   225
            25 => SetServerVar(ServerVar),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   226
            26 => GetServerVar(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   227
            27 => RestartServer(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   228
            28 => Stats(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   229
            29 => Part(Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   230
            30 => Cfg(GameCfg),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   231
            31 => AddTeam(Box<TeamInfo>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   232
            32 => RemoveTeam(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   233
            33 => SetHedgehogsNumber(Ascii, u8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   234
            34 => SetTeamColor(Ascii, u8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   235
            35 => ToggleReady(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   236
            36 => StartGame(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   237
            37 => EngineMessage(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   238
            38 => RoundFinished(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   239
            39 => ToggleRestrictJoin(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   240
            40 => ToggleRestrictTeams(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   241
            41 => ToggleRegisteredOnly(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   242
            42 => RoomName(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   243
            43 => Delegate(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   244
            44 => TeamChat(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   245
            45 => MaxTeams(u8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   246
            46 => Fix(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   247
            47 => Unfix(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   248
            48 => Greeting(Option<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   249
            49 => CallVote(Option<VoteType>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   250
            50 => Vote(bool),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   251
            51 => ForceVote(bool),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   252
            52 => Save(Ascii, Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   253
            53 => Delete(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   254
            54 => SaveRoom(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   255
            55 => LoadRoom(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   256
            56 => CheckerReady(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   257
            57 => CheckedOk(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   258
            58 => CheckedFail(Ascii)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   259
        )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   260
    });
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   261
    res.boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   262
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   263
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   264
pub fn gen_server_msg() -> BoxedStrategy<HwServerMessage> where {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   265
    use HwServerMessage::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   266
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   267
    let res = (0..=38).no_shrink().prop_flat_map(|i| {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   268
        proto_msg_match!(i, def = Ping,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   269
                    0 => Connected(Ascii, u32),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   270
                    1 => Redirect(u16),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   271
                    2 => Ping(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   272
                    3 => Pong(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   273
                    4 => Bye(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   274
                    5 => Nick(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   275
                    6 => Proto(u16),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   276
                    7 => AskPassword(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   277
                    8 => ServerAuth(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   278
                    9 => LogonPassed(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   279
                    10 => LobbyLeft(Ascii, Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   280
                    11 => LobbyJoined(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   281
        //            12 => ChatMsg { Ascii, Ascii },
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   282
                    13 => ClientFlags(Ascii, Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   283
                    14 => Rooms(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   284
                    15 => RoomAdd(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   285
                    16=> RoomJoined(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   286
                    17 => RoomLeft(Ascii, Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   287
                    18 => RoomRemove(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   288
                    19 => RoomUpdated(Ascii, Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   289
                    20 => Joining(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   290
                    21 => TeamAdd(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   291
                    22 => TeamRemove(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   292
                    23 => TeamAccepted(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   293
                    24 => TeamColor(Ascii, u8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   294
                    25 => HedgehogsNumber(Ascii, u8),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   295
                    26 => ConfigEntry(Ascii, Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   296
                    27 => Kicked(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   297
                    28 => RunGame(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   298
                    29 => ForwardEngineMessage(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   299
                    30 => RoundFinished(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   300
                    31 => ReplayStart(),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   301
                    32 => Info(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   302
                    33 => ServerMessage(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   303
                    34 => ServerVars(Vec<Ascii>),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   304
                    35 => Notice(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   305
                    36 => Warning(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   306
                    37 => Error(Ascii),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   307
                    38 => Replay(Vec<Ascii>)
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   308
                )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   309
    });
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   310
    res.boxed()
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   311
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   312
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   313
proptest! {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   314
    #[test]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   315
    fn is_parser_composition_idempotent(ref msg in gen_proto_msg()) {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   316
        println!("!! Msg: {:?}, Bytes: {:?} !!", msg, msg.to_raw_protocol().as_bytes());
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   317
        assert_eq!(message(msg.to_raw_protocol().as_bytes()), Ok((&b""[..], msg.clone())))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   318
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   319
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   320
    #[test]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   321
    fn is_server_message_parser_composition_idempotent(ref msg in gen_server_msg()) {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   322
        println!("!! Msg: {:?}, Bytes: {:?} !!", msg, msg.to_raw_protocol().as_bytes());
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   323
        assert_eq!(server_message(msg.to_raw_protocol().as_bytes()), Ok((&b""[..], msg.clone())))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   324
    }
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
   325
}