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