public async Task ReadObjectAsync_AfterObject_GetsNextProperty() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Query\query-n1ql-error-response-400.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadObjectsAsync <dynamic>().ToListAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadObjectAsync <MetricsData>(); var result = await reader.ReadToNextAttributeAsync(); // Assert Assert.Null(result); }
public async Task ReadToNextAttributeAsync_NestedProperties_ReadsPast() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Query\query-200-success.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); Assert.Equal("signature.*", await reader.ReadToNextAttributeAsync()); // Act var result = await reader.ReadToNextAttributeAsync(); // Assert Assert.Equal("results", result); Assert.Equal(1, reader.Depth); }
public async Task ReadToNextAttributeAsync_SecondTime_ReturnsFirstAttribute() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Views\200-success.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act await reader.ReadToNextAttributeAsync(); var result = await reader.ReadToNextAttributeAsync(); // Assert Assert.Equal("rows", result); }
public async Task ReadToNextAttributeAsync_AfterLast_ReturnsNull() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"404-view-notfound.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); var result = await reader.ReadToNextAttributeAsync(); // Assert Assert.Null(result); }
public async Task ReadArrayAsync_ReturnsArray() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Views\200-success.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); var result = await reader.ReadObjectsAsync <dynamic>().ToListAsync(); // Assert Assert.Equal(4, result.Count); Assert.Equal("21st_amendment_brewery_cafe", (string)result[0]["id"]); }
public async Task ReadObjectAsync_NotOnObject_InvalidOperationException() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Query\query-n1ql-error-response-400.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act/Assert await reader.ReadToNextAttributeAsync(); await Assert.ThrowsAsync <InvalidOperationException>(() => reader.ReadObjectAsync <dynamic>()); }
public async Task ReadArrayAsync_NotOnArray_InvalidOperationException() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Views\200-success.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act/Assert await reader.ReadToNextAttributeAsync(); await Assert.ThrowsAsync <InvalidOperationException>( () => reader.ReadObjectsAsync <dynamic>().ToListAsync().AsTask()); }
public async Task ReadObjectAsync_OnNumber_ReadsNumber() { // Arrange using var stream = new MemoryStream( System.Text.Encoding.UTF8.GetBytes("{\"value\":0.105}")); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act/Assert await reader.ReadToNextAttributeAsync(); var value = await reader.ReadObjectAsync <double>(); Assert.Equal(0.105, value); }
public async Task ValueType_OnProperty_ReturnsValue(string filename, Type expectedFirstProperty) { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(filename); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); // Act await reader.ReadToNextAttributeAsync(); var result = reader.ValueType; // Assert Assert.Equal(expectedFirstProperty, result); }
public async Task ReadObjectAsync_OnDateTimeOffset_PreservesTimeZone() { // Note: this emulates a "SELECT RAW" query returning a DateTimeOffset value, and currently requires // that the serializer be set to DateParseHandling.DateTimeOffset. It will fail with DateParseHandling.DateTime. { using var stream = new MemoryStream( System.Text.Encoding.UTF8.GetBytes("{\"value\":\"2021-06-21T10:16:56.9714243+10:00\"}")); var serializer = CreateDefaultJsonSerializer(); serializer.DateParseHandling = DateParseHandling.DateTimeOffset; using var reader = new DefaultJsonStreamReader(stream, serializer); Assert.True(await reader.InitializeAsync()); await reader.ReadToNextAttributeAsync(); var value = await reader.ReadObjectAsync <DateTimeOffset>(); Assert.Equal(10, value.Offset.Hours); } { // check again, just in case the test was run in the +10 timezone and would have given a false positive. using var stream = new MemoryStream( System.Text.Encoding.UTF8.GetBytes("{\"value\":\"2021-06-21T10:16:56.9714243-8:00\"}")); var serializer = CreateDefaultJsonSerializer(); serializer.DateParseHandling = DateParseHandling.DateTimeOffset; using var reader = new DefaultJsonStreamReader(stream, serializer); Assert.True(await reader.InitializeAsync()); await reader.ReadToNextAttributeAsync(); var value = await reader.ReadObjectAsync <DateTimeOffset>(); Assert.Equal(-8, value.Offset.Hours); } }
public async Task ReadToNextAttributeAsync_NestedArray_CorrectPathDuringIteration() { // Arrange using var stream = ResourceHelper.ReadResourceAsStream(@"Documents\Query\query-200-success.json"); using var reader = new DefaultJsonStreamReader(stream, CreateDefaultJsonSerializer()); Assert.True(await reader.InitializeAsync()); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); await reader.ReadToNextAttributeAsync(); Assert.Equal("results", await reader.ReadToNextAttributeAsync()); string?x; while ((x = await reader.ReadToNextAttributeAsync()) != "results[0].updatedUnixMillis") { int i = 0; // Loop to get to the last attr in the first element } // Act var result = await reader.ReadToNextAttributeAsync(); // Assert Assert.Equal("results[1].abv", result); Assert.Equal(3, reader.Depth); }