public void ParseFromRawMessage()
        {
            var rawline = ":irc.example.com 005 meebey3 CALLERID CASEMAPPING=rfc1459 DEAF=D KICKLEN=160 MODES=4 NICKLEN=30 PREFIX=(ov)@+ STATUSMSG=@+ TOPICLEN=390 NETWORK=EFnet MAXLIST=beI:25 MAXTARGETS=4 CHANTYPES=#& :are supported by this server";
            var props   = new ServerProperties();

            props.ParseFromRawMessage(rawline.Split(' '));
            Assert.AreEqual(13, props.RawProperties.Count);
            Assert.IsTrue(props.RawProperties.ContainsKey("CALLERID"));
            Assert.AreEqual(null, props.RawProperties["CALLERID"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("CASEMAPPING"));
            Assert.AreEqual("rfc1459", props.RawProperties["CASEMAPPING"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("DEAF"));
            Assert.AreEqual("D", props.RawProperties["DEAF"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("KICKLEN"));
            Assert.AreEqual("160", props.RawProperties["KICKLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MODES"));
            Assert.AreEqual("4", props.RawProperties["MODES"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("NICKLEN"));
            Assert.AreEqual("30", props.RawProperties["NICKLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("PREFIX"));
            Assert.AreEqual("(ov)@+", props.RawProperties["PREFIX"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("STATUSMSG"));
            Assert.AreEqual("@+", props.RawProperties["STATUSMSG"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("TOPICLEN"));
            Assert.AreEqual("390", props.RawProperties["TOPICLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("NETWORK"));
            Assert.AreEqual("EFnet", props.RawProperties["NETWORK"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MAXLIST"));
            Assert.AreEqual("beI:25", props.RawProperties["MAXLIST"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MAXTARGETS"));
            Assert.AreEqual("4", props.RawProperties["MAXTARGETS"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("CHANTYPES"));
            Assert.AreEqual("#&", props.RawProperties["CHANTYPES"]);

            rawline = ":irc.example.com 005 meebey3 CHANLIMIT=#&:25 CHANNELLEN=50 CHANMODES=eIb,k,l,imnpstMRS KNOCK ELIST=CMNTU SAFELIST AWAYLEN=160 EXCEPTS=e INVEX=I :are supported by this server";
            props.ParseFromRawMessage(rawline.Split(' '));
            Assert.AreEqual(13 + 9, props.RawProperties.Count);
            Assert.AreEqual("#&:25", props.RawProperties["CHANLIMIT"]);
            Assert.AreEqual("50", props.RawProperties["CHANNELLEN"]);
            Assert.AreEqual("eIb,k,l,imnpstMRS", props.RawProperties["CHANMODES"]);
            Assert.AreEqual(null, props.RawProperties["KNOCK"]);
            Assert.AreEqual("CMNTU", props.RawProperties["ELIST"]);
            Assert.AreEqual(null, props.RawProperties["SAFELIST"]);
            Assert.AreEqual("160", props.RawProperties["AWAYLEN"]);
            Assert.AreEqual("e", props.RawProperties["EXCEPTS"]);
            Assert.AreEqual("I", props.RawProperties["INVEX"]);
        }
        public void ParseFromRawMessage()
        {
            var rawline = ":irc.example.com 005 meebey3 CALLERID CASEMAPPING=rfc1459 DEAF=D KICKLEN=160 MODES=4 NICKLEN=30 PREFIX=(ov)@+ STATUSMSG=@+ TOPICLEN=390 NETWORK=EFnet MAXLIST=beI:25 MAXTARGETS=4 CHANTYPES=#& :are supported by this server";
            var props = new ServerProperties();
            props.ParseFromRawMessage(rawline.Split(' '));
            Assert.AreEqual(13, props.RawProperties.Count);
            Assert.IsTrue(props.RawProperties.ContainsKey("CALLERID"));
            Assert.AreEqual(null, props.RawProperties["CALLERID"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("CASEMAPPING"));
            Assert.AreEqual("rfc1459", props.RawProperties["CASEMAPPING"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("DEAF"));
            Assert.AreEqual("D", props.RawProperties["DEAF"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("KICKLEN"));
            Assert.AreEqual("160", props.RawProperties["KICKLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MODES"));
            Assert.AreEqual("4", props.RawProperties["MODES"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("NICKLEN"));
            Assert.AreEqual("30", props.RawProperties["NICKLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("PREFIX"));
            Assert.AreEqual("(ov)@+", props.RawProperties["PREFIX"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("STATUSMSG"));
            Assert.AreEqual("@+", props.RawProperties["STATUSMSG"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("TOPICLEN"));
            Assert.AreEqual("390", props.RawProperties["TOPICLEN"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("NETWORK"));
            Assert.AreEqual("EFnet", props.RawProperties["NETWORK"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MAXLIST"));
            Assert.AreEqual("beI:25", props.RawProperties["MAXLIST"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("MAXTARGETS"));
            Assert.AreEqual("4", props.RawProperties["MAXTARGETS"]);
            Assert.IsTrue(props.RawProperties.ContainsKey("CHANTYPES"));
            Assert.AreEqual("#&", props.RawProperties["CHANTYPES"]);

            rawline = ":irc.example.com 005 meebey3 CHANLIMIT=#&:25 CHANNELLEN=50 CHANMODES=eIb,k,l,imnpstMRS KNOCK ELIST=CMNTU SAFELIST AWAYLEN=160 EXCEPTS=e INVEX=I :are supported by this server";
            props.ParseFromRawMessage(rawline.Split(' '));
            Assert.AreEqual(13+9, props.RawProperties.Count);
            Assert.AreEqual("#&:25", props.RawProperties["CHANLIMIT"]);
            Assert.AreEqual("50", props.RawProperties["CHANNELLEN"]);
            Assert.AreEqual("eIb,k,l,imnpstMRS", props.RawProperties["CHANMODES"]);
            Assert.AreEqual(null, props.RawProperties["KNOCK"]);
            Assert.AreEqual("CMNTU", props.RawProperties["ELIST"]);
            Assert.AreEqual(null, props.RawProperties["SAFELIST"]);
            Assert.AreEqual("160", props.RawProperties["AWAYLEN"]);
            Assert.AreEqual("e", props.RawProperties["EXCEPTS"]);
            Assert.AreEqual("I", props.RawProperties["INVEX"]);
        }