示例#1
0
        public void CsvContainer_SourceListIsValidAndSettingsParameterIsValid_RelevantSettingsParameterAsExpected()
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "11", "12"
                },
                new List <String>()
                {
                    "21", "22"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvSettings settings = new CsvSettings()
            {
                Culture  = CultureInfo.InvariantCulture,
                Mappings = new CsvMappings(),
                Heading  = true,
                Exactly  = true,
            };

            CsvContainer instance = new CsvContainer(content, settings);

            Assert.That(instance.Culture, Is.SameAs(settings.Culture));
            Assert.That(instance.Mappings, Is.SameAs(settings.Mappings));
            Assert.That(instance.Heading, Is.True);
            Assert.That(instance.Exactly, Is.True);
        }
示例#2
0
        public void SetValue_HeaderAndIndexAllTypesAreInt32_ResultAsExpected(String column, Int32 index)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            instance.SetValue <Int32>(999, column, index);

            Assert.That(instance[column, index], Is.EqualTo("999"));
        }
示例#3
0
        public void CsvContainer_SourceListIsValidAndSettingsParameterIsNull_RelevantSettingsParameterAsExpected()
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "11", "12"
                },
                new List <String>()
                {
                    "21", "22"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvSettings settings = null;

            CsvContainer instance = new CsvContainer(content, settings);

            Assert.That(instance.Culture, Is.EqualTo(CultureInfo.CurrentUICulture));
            Assert.That(instance.Mappings, Is.InstanceOf <CsvMappings>());
            Assert.That(instance.Heading, Is.False);
            Assert.That(instance.Exactly, Is.False);
        }
示例#4
0
        public void SetValue_InvalidHeaderAndOrInvalidIndex_ContentIsUnchanged(String column, Int32 index)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            String original = this.GetJoinedContent(instance.Content);

            instance.SetValue <Int32>(999, column, index);

            Assert.That(this.GetJoinedContent(instance.Content), Is.EqualTo(original));
        }
示例#5
0
        public void GetValue_InvalidHeaderAndOrInvalidIndex_ResultIsNull(String column, Int32 index)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            Assert.That(instance.GetValue <Int32>(column, index), Is.Null);
        }
示例#6
0
        public void GetColumnIndex_ValidHeaderValue_ResultAsExpected()
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            })
            {
                Compare = StringComparison.InvariantCulture
            };

            Assert.That(instance.GetColumnIndex("HA"), Is.EqualTo(0));
            Assert.That(instance.GetColumnIndex("HB"), Is.EqualTo(1));
            Assert.That(instance.GetColumnIndex("HC"), Is.EqualTo(2));
        }
示例#7
0
        public void CsvContainer_CombinationsOfWidthAndLength_ResultWidthAndLengthAsExpected(Int32 width, Int32 length, Int32 expectedWidth, Int32 expectedLength)
        {
            CsvContainer instance = new CsvContainer(width, length);

            Assert.That(instance.Width, Is.EqualTo(expectedWidth));
            Assert.That(instance.Length, Is.EqualTo(expectedLength));
        }
示例#8
0
        public void ListGetter_HeaderIsInvalid_ResultIsNull(String header)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            Assert.That(instance[header], Is.Null);
        }
        public void Serialize_ParametersValid_ResultAsExpected()
        {
            String expected = "HA,HB,HC,\r\n11,12,13,\r\n21,22,23,24\r\n31,32,,\r\n";

            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvSettings  settings  = new CsvSettings();
            CsvContainer container = new CsvContainer(content);

            String actual = container.Serialize(settings);

            Assert.That(actual, Is.EqualTo(expected));
        }
示例#10
0
        public void CsvContainer_SourceListInnerItemsAreNullOrEmptyOrValid_ResultContentAsExpected()
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>(),
                new List <String>()
                {
                    "21"
                },
                null,
                new List <String>()
                {
                    "41", "42"
                },
            };

            CsvContainer instance = new CsvContainer(content);

            Assert.That(instance.Width, Is.EqualTo(2));
            Assert.That(instance.Length, Is.EqualTo(4));

            Assert.That(instance[0, 0], Is.Null);
            Assert.That(instance[1, 0], Is.Null);

            Assert.That(instance[0, 1], Is.EqualTo("21"));
            Assert.That(instance[1, 1], Is.Null);

            Assert.That(instance[0, 2], Is.Null);
            Assert.That(instance[1, 2], Is.Null);

            Assert.That(instance[0, 3], Is.EqualTo("41"));
            Assert.That(instance[1, 3], Is.EqualTo("42"));
        }
示例#11
0
        public void Read_ColumnCountMismatch_ResultAsExpected()
        {
            String content =
                "Label,Enabled,Number,Currency\r\n" +
                "Label-1,true,42,\"1,234\"\r\n" +
                "Label-2,false,23\r\n";

            CsvSettings settings = new CsvSettings()
            {
                Heading = true
            };

            using (MemoryStream stream = new MemoryStream(settings.Encoding.GetBytes(content)))
            {
                CsvContainer actual = CsvReader.Read(stream, settings);

                Assert.That(actual.GetValue <String>("label", 0), Is.EqualTo("Label-1"));
                Assert.That(actual.GetValue <String>("label", 1), Is.EqualTo("Label-2"));

                Assert.That(actual.GetValue <Boolean>("ENABLED", 0), Is.EqualTo(true));
                Assert.That(actual.GetValue <Boolean>("ENABLED", 1), Is.EqualTo(false));

                Assert.That(actual.GetValue <Int32>("NumBER", 0), Is.EqualTo(42));
                Assert.That(actual.GetValue <Int32>("NumBER", 1), Is.EqualTo(23));

                Assert.That(actual.GetValue <Double>("Currency", 0), Is.EqualTo(1.234));
                Assert.That(actual.GetValue <Double>("Currency", 1), Is.EqualTo(null));
            }
        }
示例#12
0
        public void ListSetter_ColumnValueIsEmpty_ContentIsUnchanged(String header)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC", "HD"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            String expected = this.GetJoinedContent(instance.Content);

            List <String> values = new List <String>();

            instance[header] = values;

            Assert.That(this.GetJoinedContent(instance.Content), Is.EqualTo(expected));
        }
        public void Sort_HeaderOrderButHeaderIsInvalid_ThrowsNothing([Values(null, "", " ", "invalid")] String header)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvSettings settings = new CsvSettings()
            {
                Heading = true
            };
            CsvContainer container = new CsvContainer(content, settings);

            Assert.That(() => container.Sort(header, SortOrder.Ascending), Throws.Nothing);
        }
示例#14
0
        public void ListGetter_HeaderIsValid_ResultAsExpected(String header, String expected)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = true
            });

            Assert.That(String.Join(",", instance[header]), Is.EqualTo(expected));
        }
        public void Sort_ColumnOrderButColumnIsInvalid_ThrowsNothing([Values(-1, 4)] Int32 column)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer container = new CsvContainer(content);

            Assert.That(() => container.Sort(column, SortOrder.Ascending), Throws.Nothing);
        }
        public void Sort_DifferentParameters_ResultAsExpected(Int32 column, Boolean heading, SortOrder order, String expected)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvSettings settings = new CsvSettings()
            {
                Heading = heading
            };
            CsvContainer container = new CsvContainer(content, settings);

            container.Sort(column, order);

            Assert.That(this.GetActualContent(container), Is.EqualTo(expected));
        }
示例#17
0
        public void GetColumnIndex_InvalidHeaderValue_ResultAsExpected(Boolean heading, String header)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = heading
            });

            Assert.That(instance.GetColumnIndex(header), Is.EqualTo(-1));
        }
示例#18
0
        public void ListGetter_HeadingIsFalse_ResultIsNull()
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content);

            Assert.That(instance["HB"], Is.Null);
        }
        public void Serialize_CsvSettingsIsNull_ResultIsEmpty()
        {
            CsvSettings  settings  = null;
            CsvContainer container = new CsvContainer(1, 1);

            Assert.That(container.Serialize(settings), Is.Empty);
        }
示例#20
0
        public void ListSetter_ColumnValueIsEmpty_ContentIsUnchanged(Int32 column)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content);

            String expected = this.GetJoinedContent(instance.Content);

            List <String> values = new List <String>();

            instance[column] = values;

            Assert.That(this.GetJoinedContent(instance.Content), Is.EqualTo(expected));
        }
        public void Write_CsvContainerIsValid_ResultWrittenAsexpected()
        {
            String expected = "HA,HB,HC\r\n11,12,13\r\n21,22,23\r\n";

            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23"
                },
            };

            CsvContainer container = new CsvContainer(content);

            using (MemoryStream stream = new MemoryStream())
            {
                CsvWriter.Write(container, stream);

                Assert.That(Encoding.UTF8.GetString(stream.ToArray()), Is.EqualTo(expected));
            }
        }
示例#22
0
        public void Contains_InvalidHeaderValue_ResultIsFalse(Boolean heading, String header)
        {
            List <List <String> > content = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            };

            CsvContainer instance = new CsvContainer(content, new CsvSettings()
            {
                Heading = heading
            });

            Assert.That(instance.Contains(header), Is.False);
        }
示例#23
0
        public void ListSetter_ColumnValueListIsShorter_ContentChangedAsExpected(Int32 column, String header)
        {
            List <List <String> > expected = new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "11", "21", "31"
                },
                new List <String>()
                {
                    "HB", "12", "22", "32"
                },
                new List <String>()
                {
                    "HC", "13", "23", ""
                },
                new List <String>()
                {
                    "HD", "", "24", ""
                },
            };

            expected[column] = new List <String>()
            {
                "??", "AA", "BB", null
            };

            CsvContainer instance = new CsvContainer(new List <List <String> >()
            {
                new List <String>()
                {
                    "HA", "HB", "HC", "HD"
                },
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            }, new CsvSettings()
            {
                Heading = true
            });

            List <String> values = new List <String>()
            {
                "??", "AA", "BB"
            };

            instance[header] = values;

            Assert.That(this.GetJoinedContent(instance.Content), Is.EqualTo(this.GetJoinedContent(expected)));
        }
示例#24
0
        public void CsvContainer_SourceListIsEmpty_ResultContentIsEmpty()
        {
            List <List <String> > content = new List <List <String> >();

            CsvContainer instance = new CsvContainer(content);

            Assert.That(instance.Content, Is.Empty);
        }
示例#25
0
        /// <summary>
        /// Gets the transformed content from given container.
        /// </summary>
        /// <remarks>
        /// This method tries to get transformed content from source container.
        /// Such a transformation is necessary because of the container uses a
        /// "rotated table" for a better item access.
        /// </remarks>
        /// <param name="container">
        /// The source container to obtain transformed content from.
        /// </param>
        /// <returns>
        /// The transformed content, ready to write into its output.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// This exception is thrown if given container is &lt;null&gt;.
        /// </exception>
        private static List <List <String> > GetContentOrThrow(CsvContainer container)
        {
            if (container is null)
            {
                throw new ArgumentNullException(nameof(container), "Container to write may not be null.");
            }

            return(container.GetTransformedContent());
        }
示例#26
0
        public void CsvContainer_WidthAndLengthValidAndSettingsParameterIsNull_RelevantSettingsParameterAsExpected()
        {
            CsvSettings settings = null;

            CsvContainer instance = new CsvContainer(2, 3, settings);

            Assert.That(instance.Culture, Is.EqualTo(CultureInfo.CurrentUICulture));
            Assert.That(instance.Mappings, Is.InstanceOf <CsvMappings>());
            Assert.That(instance.Heading, Is.False);
            Assert.That(instance.Exactly, Is.False);
        }
示例#27
0
        public void CsvContainer_SourceListInnerItemsAreNull_ResultContentIsEmpty()
        {
            List <List <String> > content = new List <List <String> >()
            {
                null, null, null
            };

            CsvContainer instance = new CsvContainer(content);

            Assert.That(instance.Content, Is.Empty);
        }
示例#28
0
        public void ListSetter_ColumnValueListIsLonger_ContentChangedAsExpected(Int32 column)
        {
            List <List <String> > expected = new List <List <String> >()
            {
                new List <String>()
                {
                    "11", "21", "31"
                },
                new List <String>()
                {
                    "12", "22", "32"
                },
                new List <String>()
                {
                    "13", "23", ""
                },
                new List <String>()
                {
                    "", "24", ""
                },
            };

            expected[column] = new List <String>()
            {
                "AA", "BB", "CC"
            };

            CsvContainer instance = new CsvContainer(new List <List <String> >()
            {
                new List <String>()
                {
                    "11", "12", "13"
                },
                new List <String>()
                {
                    "21", "22", "23", "24"
                },
                new List <String>()
                {
                    "31", "32"
                },
            });

            List <String> values = new List <String>()
            {
                "AA", "BB", "CC", "DD"
            };

            instance[column] = values;

            Assert.That(this.GetJoinedContent(instance.Content), Is.EqualTo(this.GetJoinedContent(expected)));
        }
示例#29
0
        public void CsvContainer_DefaultConstructor_ResultIsDefaultSettings()
        {
            CsvContainer instance = new CsvContainer();

            Assert.That(instance.Content.Count, Is.EqualTo(0));
            Assert.That(instance.Compare, Is.EqualTo(StringComparison.OrdinalIgnoreCase));
            Assert.That(instance.Culture, Is.EqualTo(CultureInfo.CurrentUICulture));
            Assert.That(instance.Mappings, Is.InstanceOf <CsvMappings>());
            Assert.That(instance.Heading, Is.False);
            Assert.That(instance.Exactly, Is.False);
            Assert.That(instance.Width, Is.Zero);
            Assert.That(instance.Length, Is.Zero);
        }
示例#30
0
        /// <summary>
        /// This method tries to read all values from given stream using given settings.
        /// </summary>
        /// <remarks>
        /// The settings parameter describes how the data within given file should be
        /// processed. For example, users may define the expected culture, the expected
        /// file encoding, which separator is used and so on.
        /// </remarks>
        /// <param name="stream">
        /// The stream to read data from.
        /// </param>
        /// <param name="settings">
        /// The settings to be used to process file data.
        /// </param>
        /// <returns>
        /// An instance of class <see cref="CsvContainer"/> that contains all processed
        /// CSV data items.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// This exception is thrown in case of given stream is invalid.
        /// </exception>
        /// <exception cref="ArgumentException">
        /// This exception is thrown in case of given stream does not have read access.
        /// </exception>
        public static CsvContainer Read(Stream stream, CsvSettings settings)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream), $"The stream to read the data from is invalid.");
            }

            if (!stream.CanRead)
            {
                throw new ArgumentException("No read access to given stream.", nameof(stream));
            }

            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings), "The CSV settings are invalid.");
            }

            CsvContainer  result = new CsvContainer();
            List <String> lines  = new List <String>();

            using (StreamReader reader = new StreamReader(stream, settings.Encoding))
            {
                while (!reader.EndOfStream)
                {
                    String line = reader.ReadLine();
                    if (!String.IsNullOrWhiteSpace(line))
                    {
                        lines.Add(line);
                    }
                }
            }

            if (lines.Count > 0)
            {
                Char separator = settings.Separator;

                List <List <String> > content = new List <List <String> >();

                for (Int32 outer = 0; outer < lines.Count; outer++)
                {
                    content.Add(ProcessHelper.SplitIntoCells(lines[outer], separator));
                }

                result = new CsvContainer(content, settings);
            }

            return(result);
        }