private static void ParseAndValidate(string text, int expectedLength) { var reader = new StringReader(text); var jsonTextReader = new JsonTextReader(reader); Assert.True(jsonTextReader.Read()); Assert.Equal(JsonToken.StartObject, jsonTextReader.TokenType); Assert.True(jsonTextReader.Read()); Assert.Equal(JsonToken.PropertyName, jsonTextReader.TokenType); Assert.Equal("Data", jsonTextReader.Value); var memoryStream = jsonTextReader.ReadBytesAsStream(); Assert.Equal(expectedLength, memoryStream.Length); Assert.True(jsonTextReader.Read()); Assert.Equal(JsonToken.PropertyName, jsonTextReader.TokenType); Assert.Equal("Metadata", jsonTextReader.Value); Assert.True(jsonTextReader.Read()); Assert.Equal(JsonToken.Null, jsonTextReader.TokenType); Assert.True(jsonTextReader.Read()); Assert.Equal(JsonToken.EndObject, jsonTextReader.TokenType); Assert.False(jsonTextReader.Read()); }
public void ReadSingleValueAsStreamShouldWork(int size) { var random = new Random(size); var buffer = new byte[size]; random.NextBytes(buffer); var d = new Data { Foo = buffer }; var jsonObj = RavenJToken.FromObject(d); var jsonObjAsString = jsonObj.ToString(); using (var textReader = new StringReader(jsonObjAsString)) using (var jsonReader = new JsonTextReader(textReader)) { jsonReader.Read(); // start object jsonReader.Read(); // property name var actual = new byte[buffer.Length]; using (var objectStream = jsonReader.ReadBytesAsStream()) { objectStream.Read(actual, 0, actual.Length); for (int a = 0; a < actual.Length; a++) { if (buffer[a] != actual[a]) { Assert.True(false, "not equal on byte " + a); } } } } }
public void ReadBytesAsStreamShouldPreserveJsonTextReaderInternalState(int size) { var random = new Random(size); var buffer = new byte[size]; var items = new Data[3]; for (int i = 0; i < 3; i++) { random.NextBytes(buffer); items[i] = new Data { Foo = buffer.ToArray() }; } var jsonObj = RavenJToken.FromObject(items); var jsonObjAsString = jsonObj.ToString(); using (var textReader = new StringReader(jsonObjAsString)) using (var jsonReader = new JsonTextReader(textReader)) { jsonReader.Read(); //start array jsonReader.Read(); jsonReader.Read(); // property name var actual = new byte[buffer.Length]; buffer = items[0].Foo; using (var objectStream = jsonReader.ReadBytesAsStream()) { objectStream.Read(actual, 0, actual.Length); for (int a = 0; a < actual.Length; a++) { if (buffer[a] != actual[a]) { Assert.True(false, "not equal on byte " + a); } } } jsonReader.Read(); //end object jsonReader.Read(); //start object jsonReader.Read(); // property name actual = jsonReader.ReadAsBytes(); // value; buffer = items[1].Foo; for (int a = 0; a < actual.Length; a++) { if (buffer[a] != actual[a]) { Assert.True(false, "not equal on byte " + a); } } jsonReader.Read(); //end object jsonReader.Read(); //start object jsonReader.Read(); // property name actual = new byte[buffer.Length]; buffer = items[2].Foo; using (var objectStream = jsonReader.ReadBytesAsStream()) { objectStream.Read(actual, 0, actual.Length); for (int a = 0; a < actual.Length; a++) { if (buffer[a] != actual[a]) { Assert.True(false, "not equal on byte " + a); } } } jsonReader.Read(); //end object } }
public void ReadMultipleValuesAsStreamShouldWork(int itemsCount, int size) { var random = new Random(size); var items = new Data[itemsCount]; var buffer = new byte[size]; for (int i = 0; i < itemsCount; i++) { random.NextBytes(buffer); items[i] = new Data { Foo = buffer.ToArray() }; } var jsonObj = RavenJToken.FromObject(items); var jsonObjAsString = jsonObj.ToString(); using (var textReader = new StringReader(jsonObjAsString)) using (var jsonReader = new JsonTextReader(textReader)) { jsonReader.Read(); // start array for (int i = 0; i < itemsCount; i++) { jsonReader.Read(); jsonReader.Read(); // property name var actual = new byte[buffer.Length]; buffer = items[i].Foo; using (var objectStream = jsonReader.ReadBytesAsStream()) { objectStream.Read(actual, 0, actual.Length); //Assert.Equal(buffer, actual); for (int a = 0; a < actual.Length; a++) { if (buffer[a] != actual[a]) { Assert.True(false, "not equal on byte " + a); } } } jsonReader.Read(); //end object } } }