Example #1
0
        private static void ValidateFormUrlEncoded(string encoded, string expectedResult)
        {
            byte[] data = Encoding.UTF8.GetBytes(encoded);
            for (var cnt = 1; cnt <= data.Length; cnt++)
            {
                ICollection <KeyValuePair <string, string> > collection;
                FormUrlEncodedParser parser = FormUrlEncodedParserTests.CreateParser(
                    data.Length + 1,
                    out collection
                    );
                Assert.NotNull(parser);

                int         totalBytesConsumed;
                ParserState state = FormUrlEncodedParserTests.ParseBufferInSteps(
                    parser,
                    data,
                    cnt,
                    out totalBytesConsumed
                    );
                Assert.Equal(ParserState.Done, state);
                Assert.Equal(data.Length, totalBytesConsumed);

                JObject result = FormUrlEncodedJson.Parse(collection);
                Assert.NotNull(result);
                Assert.Equal(expectedResult, result.ToString(Newtonsoft.Json.Formatting.None));
            }
        }
Example #2
0
        private static void ParseInvalidFormUrlEncoded(string encoded)
        {
            byte[] data = Encoding.UTF8.GetBytes(encoded);
            for (var cnt = 1; cnt <= data.Length; cnt++)
            {
                ICollection <KeyValuePair <string, string> > collection;
                FormUrlEncodedParser parser = FormUrlEncodedParserTests.CreateParser(
                    data.Length + 1,
                    out collection
                    );
                Assert.NotNull(parser);

                int         totalBytesConsumed;
                ParserState state = FormUrlEncodedParserTests.ParseBufferInSteps(
                    parser,
                    data,
                    cnt,
                    out totalBytesConsumed
                    );
                Assert.Equal(ParserState.Done, state);
                Assert.Equal(data.Length, totalBytesConsumed);

                Assert.ThrowsArgument(
                    () =>
                {
                    FormUrlEncodedJson.Parse(collection);
                },
                    null
                    );
            }
        }
Example #3
0
        // Helper to invoke parser around a query string
        private static IEnumerable <KeyValuePair <string, string> > ParseQueryString(string query)
        {
            List <KeyValuePair <string, string> > result = new List <KeyValuePair <string, string> >();

            if (String.IsNullOrWhiteSpace(query))
            {
                return(result);
            }

            if (query.Length > 0 && query[0] == '?')
            {
                query = query.Substring(1);
            }

            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(query);

            FormUrlEncodedParser parser = new FormUrlEncodedParser(result, Int64.MaxValue);

            int         bytesConsumed = 0;
            ParserState state         = parser.ParseBuffer(bytes, bytes.Length, ref bytesConsumed, isFinal: true);

            if (state != ParserState.Done)
            {
                throw new InvalidOperationException(RS.Format(Properties.Resources.FormUrlEncodedParseError, bytesConsumed));
            }

            return(result);
        }
Example #4
0
        /// <summary>
        /// Reads all name-value pairs encoded as HTML Form URL encoded data and add them to
        /// a collection as UNescaped URI strings.
        /// </summary>
        /// <param name="input">Stream to read from.</param>
        /// <param name="bufferSize">Size of the buffer used to read the contents.</param>
        /// <returns>Collection of name-value pairs.</returns>
        private static IEnumerable <KeyValuePair <string, string> > ReadFormUrlEncoded(
            Stream input,
            int bufferSize
            )
        {
            Contract.Assert(input != null, "input stream cannot be null");
            Contract.Assert(
                bufferSize >= MinBufferSize,
                "buffer size cannot be less than MinBufferSize"
                );

            byte[] data = new byte[bufferSize];

            int  bytesRead;
            bool isFinal = false;
            List <KeyValuePair <string, string> > result = new List <KeyValuePair <string, string> >();
            FormUrlEncodedParser parser = new FormUrlEncodedParser(result, Int64.MaxValue);
            ParserState          state;

            while (true)
            {
                try
                {
                    bytesRead = input.Read(data, 0, data.Length);
                    if (bytesRead == 0)
                    {
                        isFinal = true;
                    }
                }
                catch (Exception e)
                {
                    throw Error.InvalidOperation(
                              e,
                              Properties.Resources.ErrorReadingFormUrlEncodedStream
                              );
                }

                int bytesConsumed = 0;
                state = parser.ParseBuffer(data, bytesRead, ref bytesConsumed, isFinal);
                if (state != ParserState.NeedMoreData && state != ParserState.Done)
                {
                    throw Error.InvalidOperation(
                              Properties.Resources.FormUrlEncodedParseError,
                              bytesConsumed
                              );
                }

                if (isFinal)
                {
                    return(result);
                }
            }
        }
        // Helper to invoke parser around a query string
        private static IEnumerable <KeyValuePair <string, string> > ParseQueryString(string query)
        {
            List <KeyValuePair <string, string> > result = new List <KeyValuePair <string, string> >();

            if (String.IsNullOrWhiteSpace(query))
            {
                return(result);
            }

            byte[] bytes = Encoding.UTF8.GetBytes(query);

            FormUrlEncodedParser parser = new FormUrlEncodedParser(result, Int64.MaxValue);

            int         bytesConsumed = 0;
            ParserState state         = parser.ParseBuffer(bytes, bytes.Length, ref bytesConsumed, isFinal: true);

            if (state != ParserState.Done)
            {
                throw Error.InvalidOperation(Resources.FormUrlEncodedParseError, bytesConsumed);
            }

            return(result);
        }
        public void GeneratedJTokenTest()
        {
            Random rndGen             = new Random(1);
            int    oldMaxArray        = CreatorSettings.MaxArrayLength;
            int    oldMaxList         = CreatorSettings.MaxListLength;
            int    oldMaxStr          = CreatorSettings.MaxStringLength;
            double oldNullProbability = CreatorSettings.NullValueProbability;
            bool   oldCreateAscii     = CreatorSettings.CreateOnlyAsciiChars;

            CreatorSettings.MaxArrayLength       = 5;
            CreatorSettings.MaxListLength        = 3;
            CreatorSettings.MaxStringLength      = 3;
            CreatorSettings.NullValueProbability = 0;
            CreatorSettings.CreateOnlyAsciiChars = true;
            JTokenCreatorSurrogate jsonValueCreator = new JTokenCreatorSurrogate();

            try
            {
                for (int i = 0; i < 1000; i++)
                {
                    JToken jv = (JToken)jsonValueCreator.CreateInstanceOf(typeof(JToken), rndGen);
                    if (jv.Type == JTokenType.Array || jv.Type == JTokenType.Object)
                    {
                        string jaStr = FormUrlEncoding(jv);
                        byte[] data  = Encoding.UTF8.GetBytes(jaStr);
                        for (var cnt = 1; cnt <= data.Length; cnt += 4)
                        {
                            ICollection <KeyValuePair <string, string> > collection;
                            FormUrlEncodedParser parser = FormUrlEncodedParserTests.CreateParser(data.Length + 1, out collection);
                            Assert.NotNull(parser);

                            int         totalBytesConsumed;
                            ParserState state = FormUrlEncodedParserTests.ParseBufferInSteps(parser, data, cnt, out totalBytesConsumed);
                            Assert.Equal(ParserState.Done, state);
                            Assert.Equal(data.Length, totalBytesConsumed);

                            JObject deserJo = FormUrlEncodedJson.Parse(collection);
                            Assert.NotNull(deserJo);
                            bool compare = true;
                            if (((IDictionary <string, JToken>)deserJo).ContainsKey("JV"))
                            {
                                compare = JTokenRoundTripComparer.Compare(jv, deserJo["JV"]);
                            }
                            else
                            {
                                compare = JTokenRoundTripComparer.Compare(jv, deserJo);
                            }

                            Assert.True(compare, "Comparison failed for test instance " + i);
                        }
                    }
                }
            }
            finally
            {
                CreatorSettings.MaxArrayLength       = oldMaxArray;
                CreatorSettings.MaxListLength        = oldMaxList;
                CreatorSettings.MaxStringLength      = oldMaxStr;
                CreatorSettings.NullValueProbability = oldNullProbability;
                CreatorSettings.CreateOnlyAsciiChars = oldCreateAscii;
            }
        }