Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: third_party/protobuf/csharp/src/Google.Protobuf.Conformance/Program.cs

Issue 1842653006: Update //third_party/protobuf to version 3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #region Copyright notice and license
2 // Protocol Buffers - Google's data interchange format
3 // Copyright 2015 Google Inc. All rights reserved.
4 // https://developers.google.com/protocol-buffers/
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are
8 // met:
9 //
10 // * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 // * Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following disclaimer
14 // in the documentation and/or other materials provided with the
15 // distribution.
16 // * Neither the name of Google Inc. nor the names of its
17 // contributors may be used to endorse or promote products derived from
18 // this software without specific prior written permission.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #endregion
32
33 using Conformance;
34 using Google.Protobuf.Reflection;
35 using System;
36 using System.IO;
37
38 namespace Google.Protobuf.Conformance
39 {
40 /// <summary>
41 /// Conformance tests. The test runner will provide JSON or proto data on st din,
42 /// and this program will produce its output on stdout.
43 /// </summary>
44 class Program
45 {
46 private static void Main(string[] args)
47 {
48 // This way we get the binary streams instead of readers/writers.
49 var input = new BinaryReader(Console.OpenStandardInput());
50 var output = new BinaryWriter(Console.OpenStandardOutput());
51 var typeRegistry = TypeRegistry.FromMessages(TestAllTypes.Descriptor );
52
53 int count = 0;
54 while (RunTest(input, output, typeRegistry))
55 {
56 count++;
57 }
58 Console.Error.WriteLine("Received EOF after {0} tests", count);
59 }
60
61 private static bool RunTest(BinaryReader input, BinaryWriter output, Typ eRegistry typeRegistry)
62 {
63 int? size = ReadInt32(input);
64 if (size == null)
65 {
66 return false;
67 }
68 byte[] inputData = input.ReadBytes(size.Value);
69 if (inputData.Length != size.Value)
70 {
71 throw new EndOfStreamException("Read " + inputData.Length + " by tes of data when expecting " + size);
72 }
73 ConformanceRequest request = ConformanceRequest.Parser.ParseFrom(inp utData);
74 ConformanceResponse response = PerformRequest(request, typeRegistry) ;
75 byte[] outputData = response.ToByteArray();
76 output.Write(outputData.Length);
77 output.Write(outputData);
78 // Ready for another test...
79 return true;
80 }
81
82 private static ConformanceResponse PerformRequest(ConformanceRequest req uest, TypeRegistry typeRegistry)
83 {
84 TestAllTypes message;
85 try
86 {
87 switch (request.PayloadCase)
88 {
89 case ConformanceRequest.PayloadOneofCase.JsonPayload:
90 var parser = new JsonParser(new JsonParser.Settings(20, typeRegistry));
91 message = parser.Parse<TestAllTypes>(request.JsonPayload );
92 break;
93 case ConformanceRequest.PayloadOneofCase.ProtobufPayload:
94 message = TestAllTypes.Parser.ParseFrom(request.Protobuf Payload);
95 break;
96 default:
97 throw new Exception("Unsupported request payload: " + re quest.PayloadCase);
98 }
99 }
100 catch (InvalidProtocolBufferException e)
101 {
102 return new ConformanceResponse { ParseError = e.Message };
103 }
104 switch (request.RequestedOutputFormat)
105 {
106 case global::Conformance.WireFormat.JSON:
107 var formatter = new JsonFormatter(new JsonFormatter.Settings (false, typeRegistry));
108 return new ConformanceResponse { JsonPayload = formatter.For mat(message) };
109 case global::Conformance.WireFormat.PROTOBUF:
110 return new ConformanceResponse { ProtobufPayload = message.T oByteString() };
111 default:
112 throw new Exception("Unsupported request output format: " + request.PayloadCase);
113 }
114 }
115
116 private static int? ReadInt32(BinaryReader input)
117 {
118 byte[] bytes = input.ReadBytes(4);
119 if (bytes.Length == 0)
120 {
121 // Cleanly reached the end of the stream
122 return null;
123 }
124 if (bytes.Length != 4)
125 {
126 throw new EndOfStreamException("Read " + bytes.Length + " bytes of size when expecting 4");
127 }
128 return bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
129 }
130 }
131 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698