public void QueryStringMultipleTest()
        {
            string str = "http://mysite.com/page1?id=3123&format=json&format=xml";

            var query = new UrlEncodingParser(str);

            Assert.IsTrue(query["id"] == "3123");
            Assert.IsTrue(query["format"] == "json,xml", "wrong format " + query["format"]);

            // multiple format strings
            string[] formats = query.GetValues("format");
            Assert.IsTrue(formats.Length == 2);

            query.SetValues("multiple", new[]
            {
                "1",
                "2",
                "3"
            });

            var url = query.ToString();

            Console.WriteLine(url);

            Assert.IsTrue(url ==
                          "http://mysite.com/page1?id=3123&format=json&format=xml&multiple=1&multiple=2&multiple=3");

        }
        public void QueryStringTest()
        {
            string str = "http://mysite.com/page1?id=3123&format=json&action=edit&text=It's%20a%20brave%20new%20world!";

            var query = new UrlEncodingParser(str);
            Console.WriteLine(query);

            Assert.IsTrue(query["id"] == "3123");
            Assert.IsTrue(query["format"] == "json", "wrong format " + query["format"]);
            Assert.IsTrue(query["action"] == "edit");

            Console.WriteLine(query["text"]);
            // It's a brave new world!

            query["id"] = "4123";
            query["format"] = "xml";
            query["name"] = "<< It's a brave new world! say what?";

            var url = query.ToString();

            Console.WriteLine(url);            
            Console.Write(query.ToString());
            //http://mysite.com/page1?id=4123&format=xml&action=edit&
            //text=It's%20a%20brave%20new%20world!&name=%3C%3C%20It's%20a%20brave%20new%20world!
        }
        public void QueryStringPlusSigns()
        {
            string str = "http://mysite.com/page1?text=It's+a+depressing+world+out+there";

            var query = new UrlEncodingParser(str, true);
           
            string text = query["text"];
            Console.WriteLine(text);

            Assert.IsFalse(text.Contains("+") );
            Assert.IsTrue(text.Contains(" "));;
        }
        internal string ReplaceQueryStringValuePairs(string url, string replaceKeys)
        {
            if (string.IsNullOrEmpty(replaceKeys))
                return url;

            var urlQuery = new UrlEncodingParser(url);
            var replaceQuery = new UrlEncodingParser(replaceKeys);

            foreach (string key in replaceQuery.Keys)
            {
                urlQuery[key] = replaceQuery[key];
            }

            return urlQuery.ToString();
        }
        public void WriteUrlTest()
        {
            // URL only
            string url = "http://test.com/page";

            var query = new UrlEncodingParser(url);
            query["id"] = "321312";
            query["name"] = "rick";

            url = query.ToString();
            Console.WriteLine(url);

            Assert.IsTrue(url.Contains("name="));
            Assert.IsTrue(url.Contains("http://"));

            // URL with ? but no query
            url = "http://test.com/page?";

            query = new UrlEncodingParser(url);
            query["id"] = "321312";
            query["name"] = "rick";

            url = query.ToString();
            Console.WriteLine(url);

            Assert.IsTrue(url.Contains("name="));


            // URL with query
            url = "http://test.com/page?q=search";

            query = new UrlEncodingParser(url);
            query["id"] = "321312";
            query["name"] = "rick";

            url = query.ToString();
            Console.WriteLine(url);

            Assert.IsTrue(url.Contains("name="));
            Assert.IsTrue(url.Contains("http://"));


            // Raw query data
            url = "q=search&name=james";

            query = new UrlEncodingParser(url);
            query["id"] = "321312";
            query["name"] = "rick";

            url = query.ToString();
            Console.WriteLine(url);

            Assert.IsTrue(url.Contains("name="));
            Assert.IsTrue(!url.Contains("http://"));


            // No data at all
            url = null;

            query = new UrlEncodingParser();
            query["id"] = "321312";
            query["name"] = "rick";

            url = query.ToString();
            Console.WriteLine(url);

            Assert.IsTrue(url.Contains("name="));
            Assert.IsTrue(!url.Contains("http://"));
        }