public void OutputWriterWriteCsv() { var stringBuilder = new StringBuilder(4); using var stringWriter = new StringWriter(stringBuilder); var csvSerializer = new CsvSerializer(); var output = new OutputRecordWriter(stringWriter, csvSerializer); // generate a fake and write it to the stream var a = this.fakes.Recording.Generate(); output.Write(a); // check the header was written var actual = stringBuilder.ToString(); Assert.StartsWith($"{nameof(Recording.SourcePath)},", actual); Assert.Contains(a.ExpectedDurationSeconds?.TotalSeconds.ToString(), actual); // generate and write another fake var b = this.fakes.Recording.Generate(); output.Write(b); // finish writing output.Dispose(); actual = stringBuilder.ToString(); Assert.StartsWith($"{nameof(Recording.SourcePath)},", actual); Assert.Single(Regex.Matches(actual, $"{nameof(Recording.SourcePath)},")); Assert.Contains(a.ExpectedDurationSeconds?.TotalSeconds.ToString(), actual); var records = csvSerializer.Deserialize <Recording>(new StringReader(actual)).ToArray(); Assert.Equal(records[0].SourcePath, a.SourcePath); Assert.Equal(records[1].SourcePath, b.SourcePath); }
public void OutputWriterWriteJson() { var stringBuilder = new StringBuilder(4); using var stringWriter = new StringWriter(stringBuilder); var jsonSerializer = new JsonSerializer(); var output = new OutputRecordWriter(stringWriter, jsonSerializer); // generate a fake and write it to the stream var a = this.fakes.Recording.Generate(); output.Write(a); // check the header was written var actual = stringBuilder.ToString(); Assert.StartsWith($"[{Environment.NewLine}", actual); Assert.EndsWith("}", actual); // generate and write another fake var b = this.fakes.Recording.Generate(); output.Write(b); // finish writing output.Dispose(); actual = stringBuilder.ToString(); Assert.StartsWith($"[{Environment.NewLine}", actual); Assert.EndsWith("]", actual); var records = jsonSerializer.Deserialize <Recording>(new StringReader(actual)).ToArray(); Assert.Equal(records[0].SourcePath, a.SourcePath); Assert.Equal(records[1].SourcePath, b.SourcePath); }