Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }