//Numeric.RPL_ISUPPORT import std.exception : assertNotThrown, assertThrown; import std.range : only; import virc.modes : ModeType; { auto support = parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "STATUSMSG=~&@%+", "CHANLIMIT=#:2", "CHANMODES=a,b,c,d", "CHANTYPES=#", "are supported by this server")); assert(support.statusMessage == "~&@%+"); assert(support.chanLimits == ['#': 2UL]); assert(support.channelTypes == "#"); assert(support.channelModeTypes == ['a':ModeType.a, 'b':ModeType.b, 'c':ModeType.c, 'd':ModeType.d]); parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "-STATUSMSG", "-CHANLIMIT", "-CHANMODES", "-CHANTYPES", "are supported by this server"), support); assert(support.statusMessage == support.statusMessage.init); assert(support.chanLimits == support.chanLimits.init); assert(support.channelTypes == "#&!+"); assert(support.channelModeTypes == support.channelModeTypes.init); } { auto support = parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "SILENCE=4", "are supported by this server")); assert(support.silence == 4); parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "SILENCE", "are supported by this server"), support); assert(support.silence == ulong.max); parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "SILENCE=6", "are supported by this server"), support); parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone" ,"-SILENCE", "are supported by this server"), support); assert(support.silence.isNull); } { assertNotThrown(parseNumeric!(Numeric.RPL_ISUPPORT)(only("someone", "are supported by this server"))); }