Inheritance: System.IO.TextReader
        public void ShouldParseService_multi()
        {
            var sr     = new StringWrapper("  ##teamcity[name a='z']\r##teamcity[zzz 'z']\n##teamcity[name a='z']  ");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(3, result.Length);

            var msg = result[0];

            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(1, msg.Keys.Count());
            Assert.AreEqual(new HashSet <string> {
                "a"
            }, new HashSet <string>(msg.Keys));
            Assert.AreEqual(null, msg.DefaultValue);
            Assert.AreEqual("z", msg.GetValue("a"));

            msg = result[1];
            Assert.AreEqual("zzz", msg.Name);
            Assert.AreEqual(0, msg.Keys.Count());
            Assert.AreEqual("z", msg.DefaultValue);

            msg = result[2];
            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(1, msg.Keys.Count());
            Assert.AreEqual(new HashSet <string> {
                "a"
            }, new HashSet <string>(msg.Keys));
            Assert.AreEqual(null, msg.DefaultValue);
            Assert.AreEqual("z", msg.GetValue("a"));
        }
        public void ShouldParseService_simpleMessage_decode()
        {
            var sr     = new StringWrapper("##teamcity[name '\"|'|n|r|x|l|p||[|]']");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(1, result.Length);

            var msg = result[0];

            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(0, msg.Keys.Count());
            Assert.AreEqual("\"'\n\r\u0085\u2028\u2029|[]", msg.DefaultValue);
        }
        public void ShouldParseService_simpleMessage()
        {
            var sr     = new StringWrapper("##teamcity[name 'a']");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(1, result.Length);

            var msg = result[0];

            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(0, msg.Keys.Count());
            Assert.AreEqual("a", msg.DefaultValue);
        }
        public void ShouldParseService_simpleMessages_multi2()
        {
            var sr     = new StringWrapper("##teamcity[name 'a']\r ##teamcity[name 'a']\n ##teamcity[name 'a'] \r\n ##teamcity[name 'a']");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(4, result.Length);

            foreach (var msg in result)
            {
                Assert.AreEqual("name", msg.Name);
                Assert.AreEqual(0, msg.Keys.Count());
                Assert.AreEqual("a", msg.DefaultValue);
            }
        }
        public void ShouldParseService_complexMessage_escaping()
        {
            var sr     = new StringWrapper("##teamcity[name    a='1\"|'|n|r|x|l|p||[|]'     b='2\"|'|n|r|x|l|p||[|]'   ]");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(1, result.Length);

            var msg = result[0];

            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(2, msg.Keys.Count());
            Assert.AreEqual(new HashSet <string> {
                "a", "b"
            }, new HashSet <string>(msg.Keys));
            Assert.AreEqual(null, msg.DefaultValue);
            Assert.AreEqual("1\"'\n\r\u0085\u2028\u2029|[]", msg.GetValue("a"));
            Assert.AreEqual("2\"'\n\r\u0085\u2028\u2029|[]", msg.GetValue("b"));
        }
        public void ShouldParseService_complexMessage_multi()
        {
            var sr     = new StringWrapper("  ##teamcity[name a='z']##teamcity[name a='z']##teamcity[name a='z']  ");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(3, result.Length);

            foreach (var msg in result)
            {
                Assert.AreEqual("name", msg.Name);
                Assert.AreEqual(1, msg.Keys.Count());
                Assert.AreEqual(new HashSet <string> {
                    "a"
                }, new HashSet <string>(msg.Keys));
                Assert.AreEqual(null, msg.DefaultValue);
                Assert.AreEqual("z", msg.GetValue("a"));
            }
        }
        public void ShouldParseService_complexMessage2()
        {
            var sr     = new StringWrapper("##teamcity[name    a='a'     b='z'   ]");
            var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();

            Assert.AreEqual(1, result.Length);

            var msg = result[0];

            Assert.AreEqual("name", msg.Name);
            Assert.AreEqual(2, msg.Keys.Count());
            Assert.AreEqual(new HashSet <string> {
                "a", "b"
            }, new HashSet <string>(msg.Keys));
            Assert.AreEqual(null, msg.DefaultValue);
            Assert.AreEqual("a", msg.GetValue("a"));
            Assert.AreEqual("z", msg.GetValue("b"));
        }
    public void ShouldParseService_multi()
    {
      var sr = new StringWrapper("  ##teamcity[name a='z']\r##teamcity[zzz 'z']\n##teamcity[name a='z']  ");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(3, result.Length);

      var msg = result[0];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(1, msg.Keys.Count());
      Assert.AreEqual(new HashSet<string> { "a" }, new HashSet<string>(msg.Keys));
      Assert.AreEqual(null, msg.DefaultValue);
      Assert.AreEqual("z", msg.GetValue("a"));  

      msg = result[1];
      Assert.AreEqual("zzz", msg.Name);
      Assert.AreEqual(0, msg.Keys.Count());
      Assert.AreEqual("z", msg.DefaultValue);

      msg = result[2];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(1, msg.Keys.Count());
      Assert.AreEqual(new HashSet<string> { "a" }, new HashSet<string>(msg.Keys));
      Assert.AreEqual(null, msg.DefaultValue);
      Assert.AreEqual("z", msg.GetValue("a"));  
    }
    public void ShouldParseService_complexMessage_escaping()
    {
      var sr = new StringWrapper("##teamcity[name    a='1\"|'|n|r|x|l|p||[|]'     b='2\"|'|n|r|x|l|p||[|]'   ]");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(1, result.Length);

      var msg = result[0];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(2, msg.Keys.Count());
      Assert.AreEqual(new HashSet<string>{"a", "b"}, new HashSet<string>(msg.Keys));
      Assert.AreEqual(null, msg.DefaultValue);
      Assert.AreEqual("1\"'\n\r\u0085\u2028\u2029|[]", msg.GetValue("a"));
      Assert.AreEqual("2\"'\n\r\u0085\u2028\u2029|[]", msg.GetValue("b"));
    }
    public void ShouldParseService_complexMessage_multi()
    {
      var sr = new StringWrapper("  ##teamcity[name a='z']##teamcity[name a='z']##teamcity[name a='z']  ");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(3, result.Length);

      foreach (var msg in result)
      {
        Assert.AreEqual("name", msg.Name);
        Assert.AreEqual(1, msg.Keys.Count());
        Assert.AreEqual(new HashSet<string> { "a" }, new HashSet<string>(msg.Keys));
        Assert.AreEqual(null, msg.DefaultValue);
        Assert.AreEqual("z", msg.GetValue("a"));  
      }
    }
    public void ShouldParseService_complexMessage2()
    {
      var sr = new StringWrapper("##teamcity[name    a='a'     b='z'   ]");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(1, result.Length);

      var msg = result[0];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(2, msg.Keys.Count());
      Assert.AreEqual(new HashSet<string>{"a", "b"}, new HashSet<string>(msg.Keys));
      Assert.AreEqual(null, msg.DefaultValue);
      Assert.AreEqual("a", msg.GetValue("a"));
      Assert.AreEqual("z", msg.GetValue("b"));
    }
    public void ShouldParseService_simpleMessage_decode()
    {
      var sr = new StringWrapper("##teamcity[name '\"|'|n|r|x|l|p||[|]']");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(1, result.Length);

      var msg = result[0];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(0, msg.Keys.Count());
      Assert.AreEqual("\"'\n\r\u0085\u2028\u2029|[]", msg.DefaultValue);
    }
    public void ShouldParseService_simpleMessages_multi2()
    {
      var sr = new StringWrapper("##teamcity[name 'a']\r ##teamcity[name 'a']\n ##teamcity[name 'a'] \r\n ##teamcity[name 'a']");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(4, result.Length);

      foreach (var msg in result)
      {
        Assert.AreEqual("name", msg.Name);
        Assert.AreEqual(0, msg.Keys.Count());
        Assert.AreEqual("a", msg.DefaultValue);
      }
    }
    public void ShouldParseService_simpleMessage()
    {
      var sr = new StringWrapper("##teamcity[name 'a']");
      var result = new ServiceMessageParser().ParseServiceMessages(sr).ToArray();
      Assert.AreEqual(1, result.Length);

      var msg = result[0];
      Assert.AreEqual("name", msg.Name);
      Assert.AreEqual(0, msg.Keys.Count());
      Assert.AreEqual("a", msg.DefaultValue);
    }