|
|
@ -367,5 +367,106 @@ namespace Google.ProtocolBuffers |
|
|
|
for (int i = 0; i > -6; i--) |
|
|
|
for (int i = 0; i > -6; i--) |
|
|
|
Assert.AreEqual(i, values[Math.Abs(i)]); |
|
|
|
Assert.AreEqual(i, values[Math.Abs(i)]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[TestMethod] |
|
|
|
|
|
|
|
public void TestCodedInputOutputPosition() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
byte[] content = new byte[110]; |
|
|
|
|
|
|
|
for (int i = 0; i < content.Length; i++) |
|
|
|
|
|
|
|
content[i] = (byte)i; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte[] child = new byte[120]; |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemoryStream ms = new MemoryStream(child); |
|
|
|
|
|
|
|
CodedOutputStream cout = CodedOutputStream.CreateInstance(ms, 20); |
|
|
|
|
|
|
|
// Field 11: numeric value: 500 |
|
|
|
|
|
|
|
cout.WriteTag(11, WireFormat.WireType.Varint); |
|
|
|
|
|
|
|
Assert.AreEqual(1, cout.Position); |
|
|
|
|
|
|
|
cout.WriteInt32NoTag(500); |
|
|
|
|
|
|
|
Assert.AreEqual(3, cout.Position); |
|
|
|
|
|
|
|
//Field 12: length delimited 120 bytes |
|
|
|
|
|
|
|
cout.WriteTag(12, WireFormat.WireType.LengthDelimited); |
|
|
|
|
|
|
|
Assert.AreEqual(4, cout.Position); |
|
|
|
|
|
|
|
cout.WriteBytesNoTag(ByteString.CopyFrom(content)); |
|
|
|
|
|
|
|
Assert.AreEqual(115, cout.Position); |
|
|
|
|
|
|
|
// Field 13: fixed numeric value: 501 |
|
|
|
|
|
|
|
cout.WriteTag(13, WireFormat.WireType.Fixed32); |
|
|
|
|
|
|
|
Assert.AreEqual(116, cout.Position); |
|
|
|
|
|
|
|
cout.WriteSFixed32NoTag(501); |
|
|
|
|
|
|
|
Assert.AreEqual(120, cout.Position); |
|
|
|
|
|
|
|
cout.Flush(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte[] bytes = new byte[130]; |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CodedOutputStream cout = CodedOutputStream.CreateInstance(bytes); |
|
|
|
|
|
|
|
// Field 1: numeric value: 500 |
|
|
|
|
|
|
|
cout.WriteTag(1, WireFormat.WireType.Varint); |
|
|
|
|
|
|
|
Assert.AreEqual(1, cout.Position); |
|
|
|
|
|
|
|
cout.WriteInt32NoTag(500); |
|
|
|
|
|
|
|
Assert.AreEqual(3, cout.Position); |
|
|
|
|
|
|
|
//Field 2: length delimited 120 bytes |
|
|
|
|
|
|
|
cout.WriteTag(2, WireFormat.WireType.LengthDelimited); |
|
|
|
|
|
|
|
Assert.AreEqual(4, cout.Position); |
|
|
|
|
|
|
|
cout.WriteBytesNoTag(ByteString.CopyFrom(child)); |
|
|
|
|
|
|
|
Assert.AreEqual(125, cout.Position); |
|
|
|
|
|
|
|
// Field 3: fixed numeric value: 500 |
|
|
|
|
|
|
|
cout.WriteTag(3, WireFormat.WireType.Fixed32); |
|
|
|
|
|
|
|
Assert.AreEqual(126, cout.Position); |
|
|
|
|
|
|
|
cout.WriteSFixed32NoTag(501); |
|
|
|
|
|
|
|
Assert.AreEqual(130, cout.Position); |
|
|
|
|
|
|
|
cout.Flush(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//Now test Input stream: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
CodedInputStream cin = CodedInputStream.CreateInstance(new MemoryStream(bytes), new byte[50]); |
|
|
|
|
|
|
|
uint tag; |
|
|
|
|
|
|
|
int intValue = 0; |
|
|
|
|
|
|
|
string ignore; |
|
|
|
|
|
|
|
Assert.AreEqual(0, cin.Position); |
|
|
|
|
|
|
|
// Field 1: |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 1); |
|
|
|
|
|
|
|
Assert.AreEqual(1, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500); |
|
|
|
|
|
|
|
Assert.AreEqual(3, cin.Position); |
|
|
|
|
|
|
|
//Field 2: |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 2); |
|
|
|
|
|
|
|
Assert.AreEqual(4, cin.Position); |
|
|
|
|
|
|
|
uint childlen = cin.ReadRawVarint32(); |
|
|
|
|
|
|
|
Assert.AreEqual(120u, childlen); |
|
|
|
|
|
|
|
Assert.AreEqual(5, cin.Position); |
|
|
|
|
|
|
|
int oldlimit = cin.PushLimit((int)childlen); |
|
|
|
|
|
|
|
Assert.AreEqual(5, cin.Position); |
|
|
|
|
|
|
|
// Now we are reading child message |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// Field 11: numeric value: 500 |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 11); |
|
|
|
|
|
|
|
Assert.AreEqual(6, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500); |
|
|
|
|
|
|
|
Assert.AreEqual(8, cin.Position); |
|
|
|
|
|
|
|
//Field 12: length delimited 120 bytes |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 12); |
|
|
|
|
|
|
|
Assert.AreEqual(9, cin.Position); |
|
|
|
|
|
|
|
ByteString bstr = null; |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadBytes(ref bstr) && bstr.Length == 110 && bstr.ToByteArray()[109] == 109); |
|
|
|
|
|
|
|
Assert.AreEqual(120, cin.Position); |
|
|
|
|
|
|
|
// Field 13: fixed numeric value: 501 |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 13); |
|
|
|
|
|
|
|
// ROK - Previously broken here, this returned 126 failing to account for bufferSizeAfterLimit |
|
|
|
|
|
|
|
Assert.AreEqual(121, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501); |
|
|
|
|
|
|
|
Assert.AreEqual(125, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.IsAtEnd); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
cin.PopLimit(oldlimit); |
|
|
|
|
|
|
|
Assert.AreEqual(125, cin.Position); |
|
|
|
|
|
|
|
// Field 3: fixed numeric value: 501 |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 3); |
|
|
|
|
|
|
|
Assert.AreEqual(126, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501); |
|
|
|
|
|
|
|
Assert.AreEqual(130, cin.Position); |
|
|
|
|
|
|
|
Assert.IsTrue(cin.IsAtEnd); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |