TestReaderForUrlEncoded.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using Google.ProtocolBuffers.TestProtos;
  5. using Google.ProtocolBuffers.Serialization.Http;
  6. using NUnit.Framework;
  7. namespace Google.ProtocolBuffers
  8. {
  9. public class TestReaderForUrlEncoded
  10. {
  11. [Test]
  12. public void Example_FromQueryString()
  13. {
  14. Uri sampleUri = new Uri("http://sample.com/Path/File.ext?text=two+three%20four&valid=true&numbers=1&numbers=2", UriKind.Absolute);
  15. ICodedInputStream input = FormUrlEncodedReader.CreateInstance(sampleUri.Query);
  16. TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
  17. builder.MergeFrom(input);
  18. TestXmlMessage message = builder.Build();
  19. Assert.AreEqual(true, message.Valid);
  20. Assert.AreEqual("two three four", message.Text);
  21. Assert.AreEqual(2, message.NumbersCount);
  22. Assert.AreEqual(1, message.NumbersList[0]);
  23. Assert.AreEqual(2, message.NumbersList[1]);
  24. }
  25. [Test]
  26. public void Example_FromFormData()
  27. {
  28. Stream rawPost = new MemoryStream(Encoding.UTF8.GetBytes("text=two+three%20four&valid=true&numbers=1&numbers=2"), false);
  29. ICodedInputStream input = FormUrlEncodedReader.CreateInstance(rawPost);
  30. TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
  31. builder.MergeFrom(input);
  32. TestXmlMessage message = builder.Build();
  33. Assert.AreEqual(true, message.Valid);
  34. Assert.AreEqual("two three four", message.Text);
  35. Assert.AreEqual(2, message.NumbersCount);
  36. Assert.AreEqual(1, message.NumbersList[0]);
  37. Assert.AreEqual(2, message.NumbersList[1]);
  38. }
  39. [Test]
  40. public void TestEmptyValues()
  41. {
  42. ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text=&numbers=1");
  43. TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
  44. builder.MergeFrom(input);
  45. Assert.IsTrue(builder.Valid);
  46. Assert.IsTrue(builder.HasText);
  47. Assert.AreEqual("", builder.Text);
  48. Assert.AreEqual(1, builder.NumbersCount);
  49. Assert.AreEqual(1, builder.NumbersList[0]);
  50. }
  51. [Test]
  52. public void TestNoValue()
  53. {
  54. ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text&numbers=1");
  55. TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
  56. builder.MergeFrom(input);
  57. Assert.IsTrue(builder.Valid);
  58. Assert.IsTrue(builder.HasText);
  59. Assert.AreEqual("", builder.Text);
  60. Assert.AreEqual(1, builder.NumbersCount);
  61. Assert.AreEqual(1, builder.NumbersList[0]);
  62. }
  63. [Test]
  64. public void FormUrlEncodedReaderDoesNotSupportChildren()
  65. {
  66. ICodedInputStream input = FormUrlEncodedReader.CreateInstance("child=uh0");
  67. Assert.Throws<NotSupportedException>(() => TestXmlMessage.CreateBuilder().MergeFrom(input));
  68. }
  69. }
  70. }