using System; using System.IO; using System.Text; using Google.ProtocolBuffers.TestProtos; using Google.ProtocolBuffers.Serialization.Http; using Xunit; namespace Google.ProtocolBuffers { public class TestReaderForUrlEncoded { [Fact] public void Example_FromQueryString() { Uri sampleUri = new Uri("http://sample.com/Path/File.ext?text=two+three%20four&valid=true&numbers=1&numbers=2", UriKind.Absolute); ICodedInputStream input = FormUrlEncodedReader.CreateInstance(sampleUri.Query); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); builder.MergeFrom(input); TestXmlMessage message = builder.Build(); Assert.Equal(true, message.Valid); Assert.Equal("two three four", message.Text); Assert.Equal(2, message.NumbersCount); Assert.Equal(1, message.NumbersList[0]); Assert.Equal(2, message.NumbersList[1]); } [Fact] public void Example_FromFormData() { Stream rawPost = new MemoryStream(Encoding.UTF8.GetBytes("text=two+three%20four&valid=true&numbers=1&numbers=2"), false); ICodedInputStream input = FormUrlEncodedReader.CreateInstance(rawPost); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); builder.MergeFrom(input); TestXmlMessage message = builder.Build(); Assert.Equal(true, message.Valid); Assert.Equal("two three four", message.Text); Assert.Equal(2, message.NumbersCount); Assert.Equal(1, message.NumbersList[0]); Assert.Equal(2, message.NumbersList[1]); } [Fact] public void TestEmptyValues() { ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text=&numbers=1"); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); builder.MergeFrom(input); Assert.True(builder.Valid); Assert.True(builder.HasText); Assert.Equal("", builder.Text); Assert.Equal(1, builder.NumbersCount); Assert.Equal(1, builder.NumbersList[0]); } [Fact] public void TestNoValue() { ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text&numbers=1"); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); builder.MergeFrom(input); Assert.True(builder.Valid); Assert.True(builder.HasText); Assert.Equal("", builder.Text); Assert.Equal(1, builder.NumbersCount); Assert.Equal(1, builder.NumbersList[0]); } [Fact] public void FormUrlEncodedReaderDoesNotSupportChildren() { ICodedInputStream input = FormUrlEncodedReader.CreateInstance("child=uh0"); Assert.Throws(() => TestXmlMessage.CreateBuilder().MergeFrom(input)); } } }