1 import std.algorithm : canFind, filter, map; 2 import std.range : empty; 3 { 4 const testParsed = parseModeString("+s", null); 5 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 6 assert(testParsed.filter!(x => x.change == Change.unset).empty); 7 } 8 { 9 const testParsed = parseModeString("-s", null); 10 assert(testParsed.filter!(x => x.change == Change.set).empty); 11 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 12 } 13 { 14 const testParsed = parseModeString("+s-n", null); 15 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 16 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 17 } 18 { 19 const testParsed = parseModeString("-s+n", null); 20 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 21 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 22 } 23 { 24 const testParsed = parseModeString("+kp secret", ['k': ModeType.b]); 25 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'p'))); 26 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret")))); 27 } 28 { 29 const testParsed = parseModeString("+kp secret", null); 30 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'p'))); 31 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'k'))); 32 } 33 { 34 const testParsed = parseModeString("-s+nk secret", ['k': ModeType.b]); 35 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 36 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret")))); 37 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 38 } 39 { 40 const testParsed = parseModeString("-sk+nl secret 4", ['k': ModeType.b, 'l': ModeType.c]); 41 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 42 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.b, 'l', Nullable!string("4")))); 43 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.b, 'k', Nullable!string("secret")))); 44 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 45 } 46 { 47 const testParsed = parseModeString("-s+nl 3333", ['l': ModeType.c]); 48 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 49 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.c, 'l', Nullable!string("3333")))); 50 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 51 } 52 { 53 const testParsed = parseModeString("+s-nl", ['l': ModeType.c]); 54 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.d, 'n'))); 55 assert(testParsed.filter!(x => x.change == Change.unset).map!(x => x.mode).canFind(Mode(ModeType.c, 'l'))); 56 assert(testParsed.filter!(x => x.change == Change.set).map!(x => x.mode).canFind(Mode(ModeType.d, 's'))); 57 } 58 { 59 const testParsed = parseModeString("+kp", ['k': ModeType.b]); 60 assert(testParsed.empty); 61 } 62 { 63 const testParsed = parseModeString("-kp", ['k': ModeType.b]); 64 assert(testParsed.empty); 65 }
Parse a mode string into individual mode changes.