public void ReadCsv_CompositeObject_MissingMember_RecordsWithNullValues() { var serializer = new CsvSerializerContext() { ThrowOnFailedDeserialize = false }; var converter = new CompositeObjectCsvConverter(); serializer.Converters.Add(converter); serializer.Converters.Add(new SingleIntValueCsvConverter()); serializer.Converters.Add(new CompositeValueCsvConverter()); string[] csv = new string[] { "Single,Double", // header "15,52.1", // first record ",-15.2", // second record "0,0", // third record ",", // fourth null record "" // empty line after the last record }; List <CompositeObject> result = new List <CompositeObject>(); using (var source = new StringReader(String.Join(Environment.NewLine, csv))) using (var reader = new CsvReader(source, serializer.Configuration)) { var naming = new CsvHeaderNamingContext(); if (reader.Read()) { converter.ReadCsvHeader(reader, serializer); } while (reader.Read()) { result.Add((CompositeObject)converter.ReadCsv(reader, typeof(CompositeObject), serializer, naming)); } } Assert.AreEqual(4, result.Count); Assert.IsNotNull(result[0]); Assert.IsNotNull(result[0].Single); Assert.AreEqual(15, result[0].Single.Value); Assert.IsNull(result[0].Composite); Assert.AreEqual(52.1, result[0].Double); Assert.IsNotNull(result[1]); Assert.IsNull(result[1].Single); Assert.IsNull(result[1].Composite); Assert.AreEqual(-15.2, result[1].Double); Assert.IsNotNull(result[2]); Assert.IsNotNull(result[2].Single); Assert.AreEqual(0, result[2].Single.Value); Assert.IsNull(result[2].Composite); Assert.AreEqual(0, result[2].Double); Assert.IsNull(result[3]); }
public void WriteHeader_CompositeObject_ColumnsIs4() { var serializer = new CsvSerializerContext(); var converter = new CompositeObjectCsvConverter(); serializer.Converters.Add(converter); serializer.Converters.Add(new SingleIntValueCsvConverter()); serializer.Converters.Add(new CompositeValueCsvConverter()); var target = new StringWriter(); var writer = new CsvWriter(target, serializer.Configuration); converter.WriteCsvHeader(writer, typeof(CompositeObject), serializer, new CsvHeaderNamingContext()); writer.NextRecord(); writer.Dispose(); target.Close(); Assert.AreEqual(4, converter.Columns); }
public void ReadCsv_CompositeObject_ValidRecords() { var serializer = new CsvSerializerContext(); var converter = new CompositeObjectCsvConverter(); serializer.Converters.Add(converter); serializer.Converters.Add(new SingleIntValueCsvConverter()); serializer.Converters.Add(new CompositeValueCsvConverter()); string[] csv = new string[] { "Single,CompositeId,CompositeName,Double", // header "15,1,Apple,52.1", // first record "158792,2,Strawberry,-15.2", // second record "0,3,Orange,0", // third record "" // empty line after the last record }; List <CompositeObject> result = new List <CompositeObject>(); using (var source = new StringReader(String.Join(Environment.NewLine, csv))) using (var reader = new CsvReader(source, serializer.Configuration)) { var naming = new CsvHeaderNamingContext(); if (reader.Read()) { converter.ReadCsvHeader(reader, serializer); } while (reader.Read()) { result.Add((CompositeObject)converter.ReadCsv(reader, typeof(CompositeObject), serializer, naming)); } } Assert.AreEqual(3, result.Count); Assert.IsNotNull(result[0]); Assert.IsNotNull(result[0].Single); Assert.AreEqual(15, result[0].Single.Value); Assert.IsNotNull(result[0].Composite); Assert.AreEqual(1, result[0].Composite.Id); Assert.AreEqual("Apple", result[0].Composite.Name); Assert.AreEqual(52.1, result[0].Double); Assert.IsNotNull(result[1]); Assert.IsNotNull(result[1].Single); Assert.AreEqual(158792, result[1].Single.Value); Assert.IsNotNull(result[1].Composite); Assert.AreEqual(2, result[1].Composite.Id); Assert.AreEqual("Strawberry", result[1].Composite.Name); Assert.AreEqual(-15.2, result[1].Double); Assert.IsNotNull(result[2]); Assert.IsNotNull(result[2].Single); Assert.AreEqual(0, result[2].Single.Value); Assert.IsNotNull(result[2].Composite); Assert.AreEqual(3, result[2].Composite.Id); Assert.AreEqual("Orange", result[2].Composite.Name); Assert.AreEqual(0, result[2].Double); }
public void WriteCsv_CompositeObject_RecordsWithNullValues() { var serializer = new CsvSerializerContext(); var converter = new CompositeObjectCsvConverter(); serializer.Converters.Add(converter); serializer.Converters.Add(new SingleIntValueCsvConverter()); serializer.Converters.Add(new CompositeValueCsvConverter()); var target = new StringWriter(); var writer = new CsvWriter(target, serializer.Configuration); converter.WriteCsvHeader(writer, typeof(CompositeObject), serializer, new CsvHeaderNamingContext()); writer.NextRecord(); converter.WriteCsv(new CompositeObject() { Composite = new MultipleValues() { Id = 1, Name = null }, Single = new SingleIntValue() { Value = 15 }, Double = 52.1 }, writer, serializer); writer.NextRecord(); converter.WriteCsv(new CompositeObject() { Composite = new MultipleValues() { Id = 2, Name = "Strawberry" }, Single = null, Double = -15.2 }, writer, serializer); writer.NextRecord(); converter.WriteCsv(new CompositeObject() { Composite = null, Single = new SingleIntValue() { Value = 0 }, Double = 0 }, writer, serializer); writer.NextRecord(); converter.WriteCsv(null, writer, serializer); writer.NextRecord(); writer.Dispose(); target.Close(); string[] expected = new string[] { "Single,CompositeId,CompositeName,Double", // header "15,1,,52.1", // first record ",2,Strawberry,-15.2", // second record "0,,,0", // third record ",,,", // fourth null record "" // empty line after the last record }; Assert.AreEqual(String.Join(Environment.NewLine, expected), target.ToString()); }