Beispiel #1
0
        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]);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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());
        }