//Numeric.RPL_LIST import std.algorithm.searching : canFind; import std.range : only; import std.typecons : Nullable; import virc.common : Topic; import virc.modes : Mode; { immutable listEntry = parseNumeric!(Numeric.RPL_LIST)(only("someone", "#test", "4", "[+fnt 200:2] some words"), ['n': ModeType.d, 't': ModeType.d, 'f': ModeType.c]); assert(listEntry.name == "#test"); assert(listEntry.userCount == 4); assert(listEntry.topic == Topic("some words")); assert(listEntry.modes.canFind(Mode(ModeType.d, 'n'))); assert(listEntry.modes.canFind(Mode(ModeType.d, 't'))); assert(listEntry.modes.canFind(Mode(ModeType.c, 'f', Nullable!string("100:2")))); } { immutable listEntry = parseNumeric!(Numeric.RPL_LIST)(only("someone", "#test2", "6", "[+fnst 100:2] some more words"), ['n': ModeType.d, 't': ModeType.d, 'f': ModeType.c]); assert(listEntry.name == "#test2"); assert(listEntry.userCount == 6); assert(listEntry.topic == Topic("some more words")); assert(listEntry.modes.canFind(Mode(ModeType.d, 'n'))); assert(listEntry.modes.canFind(Mode(ModeType.d, 't'))); assert(listEntry.modes.canFind(Mode(ModeType.d, 's'))); assert(listEntry.modes.canFind(Mode(ModeType.c, 'f', Nullable!string("100:2")))); } { immutable listEntry = parseNumeric!(Numeric.RPL_LIST)(only("someone", "#test3", "1", "no modes?"), ['n': ModeType.d, 't': ModeType.d, 'f': ModeType.c]); assert(listEntry.name == "#test3"); assert(listEntry.userCount == 1); assert(listEntry.topic == Topic("no modes?")); assert(listEntry.modes.length == 0); }