public void ParseComplex() { var modeMap = new ChannelModeMap(); List <ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "-l+o-k+v", "op_nick * voice_nick"); Assert.IsNotNull(changeInfos); Assert.AreEqual(4, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.UserLimit, changeInfo.Mode); Assert.AreEqual('l', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Op, changeInfo.Mode); Assert.AreEqual('o', changeInfo.ModeChar); Assert.AreEqual("op_nick", changeInfo.Parameter); changeInfo = changeInfos[2]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.Key, changeInfo.Mode); Assert.AreEqual('k', changeInfo.ModeChar); Assert.AreEqual("*", changeInfo.Parameter); changeInfo = changeInfos[3]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Voice, changeInfo.Mode); Assert.AreEqual('v', changeInfo.ModeChar); Assert.AreEqual("voice_nick", changeInfo.Parameter); }
public void ParseWithParameter() { var modeMap = new ChannelModeMap(); List <ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+o", "meebey"); Assert.IsNotNull(changeInfos); Assert.AreEqual(1, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Op, changeInfo.Mode); Assert.AreEqual('o', changeInfo.ModeChar); Assert.AreEqual("meebey", changeInfo.Parameter); }
public void ParseWithoutParameter() { var modeMap = new ChannelModeMap(); List <ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+nt", ""); Assert.IsNotNull(changeInfos); Assert.AreEqual(2, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('n', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.TopicLock, changeInfo.Mode); Assert.AreEqual('t', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); }
public void ParseUnknown() { var modeMap = new ChannelModeMap(); List <ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+X-Y", "foo bar"); Assert.IsNotNull(changeInfos); Assert.AreEqual(2, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('X', changeInfo.ModeChar); Assert.AreEqual("foo", changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('Y', changeInfo.ModeChar); Assert.AreEqual("bar", changeInfo.Parameter); }
public static List <ChannelModeChangeInfo> Parse(ChannelModeMap modeMap, string target, string mode, string modeParameters) { if (modeMap == null) { throw new ArgumentNullException("modeMap"); } if (target == null) { throw new ArgumentNullException("target"); } if (mode == null) { throw new ArgumentNullException("mode"); } if (modeParameters == null) { throw new ArgumentNullException("modeParameters"); } var modeChanges = new List <ChannelModeChangeInfo>(); var action = ChannelModeChangeAction.Set; var parameters = modeParameters.Split(new char[] { ' ' }); var parametersEnumerator = parameters.GetEnumerator(); // bring the enumerator to the 1. element parametersEnumerator.MoveNext(); foreach (char modeChar in mode) { switch (modeChar) { case '+': action = ChannelModeChangeAction.Set; break; case '-': action = ChannelModeChangeAction.Unset; break; default: ChannelModeInfo modeInfo = null; modeMap.TryGetValue(modeChar, out modeInfo); if (modeInfo == null) { // modes not specified in CHANMODES are expected to // always have parameters modeInfo = new ChannelModeInfo((ChannelMode)modeChar, ChannelModeHasParameter.Always); } string parameter = null; var channelMode = modeInfo.Mode; if (!Enum.IsDefined(typeof(ChannelMode), channelMode)) { channelMode = ChannelMode.Unknown; } var hasParameter = modeInfo.HasParameter; if (hasParameter == ChannelModeHasParameter.Always || (hasParameter == ChannelModeHasParameter.OnlySet && action == ChannelModeChangeAction.Set)) { parameter = (string)parametersEnumerator.Current; parametersEnumerator.MoveNext(); } modeChanges.Add(new ChannelModeChangeInfo() { Action = action, Mode = channelMode, ModeChar = modeChar, Parameter = parameter }); break; } } return(modeChanges); }