Beispiel #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CsvWriter"/> class.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="configuration">The configuration.</param>
        public CsvWriter(TextWriter writer, CsvConfiguration configuration)
        {
            this.writer        = writer;
            Configuration      = configuration;
            context            = new CsvContext(this);
            typeConverterCache = context.TypeConverterCache;
            recordManager      = new Lazy <RecordManager>(() => ObjectResolver.Current.Resolve <RecordManager>(this));

            comment                  = configuration.Comment;
            bufferSize               = configuration.BufferSize;
            delimiter                = configuration.Delimiter;
            cultureInfo              = configuration.CultureInfo;
            doubleQuoteString        = configuration.DoubleQuoteString;
            dynamicPropertySort      = configuration.DynamicPropertySort;
            hasHeaderRecord          = configuration.HasHeaderRecord;
            includePrivateMembers    = configuration.IncludePrivateMembers;
            injectionCharacters      = configuration.InjectionCharacters;
            injectionEscapeCharacter = configuration.InjectionEscapeCharacter;
            leaveOpen                = configuration.LeaveOpen;
            newLine                  = configuration.NewLine;
            quote                = configuration.Quote;
            quoteString          = configuration.QuoteString;
            sanitizeForInjection = configuration.SanitizeForInjection;
            shouldQuote          = configuration.ShouldQuote;
            trimOptions          = configuration.TrimOptions;

            buffer = new char[bufferSize];
        }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CsvWriter"/> class.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="configuration">The configuration.</param>
        public CsvWriter(TextWriter writer, CsvConfiguration configuration)
        {
            configuration.Validate();

            this.writer        = writer;
            Configuration      = configuration;
            context            = new CsvContext(this);
            typeConverterCache = context.TypeConverterCache;
            recordManager      = new Lazy <RecordManager>(() => ObjectResolver.Current.Resolve <RecordManager>(this));

            comment                  = configuration.Comment;
            bufferSize               = configuration.BufferSize;
            delimiter                = configuration.Delimiter;
            cultureInfo              = configuration.CultureInfo;
            dynamicPropertySort      = configuration.DynamicPropertySort;
            escapeDelimiterString    = new string(configuration.Delimiter.SelectMany(c => new[] { configuration.Escape, c }).ToArray());
            escapeNewlineString      = new string(configuration.NewLine.SelectMany(c => new[] { configuration.Escape, c }).ToArray());
            escapeQuoteString        = new string(new[] { configuration.Escape, configuration.Quote });
            hasHeaderRecord          = configuration.HasHeaderRecord;
            includePrivateMembers    = configuration.IncludePrivateMembers;
            injectionCharacters      = configuration.InjectionCharacters;
            injectionEscapeCharacter = configuration.InjectionEscapeCharacter;
            leaveOpen                = configuration.LeaveOpen;
            mode                 = configuration.Mode;
            newLine              = configuration.NewLine;
            quote                = configuration.Quote;
            quoteString          = configuration.Quote.ToString();
            sanitizeForInjection = configuration.SanitizeForInjection;
            shouldQuote          = configuration.ShouldQuote;
            trimOptions          = configuration.TrimOptions;

            buffer = new char[bufferSize];
        }
        public void Constructor_AllArguments_SetsProperites()
        {
            BadDataFound       badDataFound        = (context) => { };
            IComparer <string> dynamicPropertySort = Comparer <string> .Create((x, y) => x.CompareTo(y));

            GetConstructor           getConstructor           = (type) => type.GetConstructor(null);
            GetDynamicPropertyName   getDynamicPropertyName   = (context, field) => string.Empty;
            HeaderValidated          headerValidated          = (invalidHeaders, context) => { };
            MissingFieldFound        missingFieldFound        = (headerNames, index, context) => { };
            PrepareHeaderForMatch    prepareHeaderForMatch    = (header, fieldIndex) => header;
            ReadingExceptionOccurred readingExceptionOccurred = (ex) => true;
            ReferenceHeaderPrefix    referenceHeaderPrefix    = (type, memberName) => string.Empty;
            ShouldQuote      shouldQuote      = (_, _, _) => true;
            ShouldSkipRecord shouldSkipRecord = (record) => true;
            ShouldUseConstructorParameters shouldUseConstructorParameters = (parameterType) => true;

            var config = new CsvConfiguration(CultureInfo.CurrentCulture,
                                              allowComments: true,
                                              badDataFound: badDataFound,
                                              bufferSize: 1,
                                              cacheFields: true,
                                              comment: '^',
                                              countBytes: true,
                                              delimiter: ":",
                                              detectColumnCountChanges: true,
                                              dynamicPropertySort: dynamicPropertySort,
                                              encoding: Encoding.ASCII,
                                              escape: '\\',
                                              getConstructor: getConstructor,
                                              getDynamicPropertyName: getDynamicPropertyName,
                                              hasHeaderRecord: false,
                                              headerValidated: headerValidated,
                                              ignoreBlankLines: false,
                                              ignoreReferences: true,
                                              includePrivateMembers: true,
                                              injectionCharacters: new char[] { '*' },
                                              injectionEscapeCharacter: '`',
                                              leaveOpen: true,
                                              lineBreakInQuotedFieldIsBadData: true,
                                              memberTypes: MemberTypes.Fields,
                                              missingFieldFound: missingFieldFound,
                                              mode: CsvMode.Escape,
                                              newLine: "\n",
                                              prepareHeaderForMatch: prepareHeaderForMatch,
                                              quote: '\'',
                                              readingExceptionOccurred: readingExceptionOccurred,
                                              referenceHeaderPrefix: referenceHeaderPrefix,
                                              sanitizeForInjection: true,
                                              shouldQuote: shouldQuote,
                                              shouldSkipRecord: shouldSkipRecord,
                                              shouldUseConstructorParameters: shouldUseConstructorParameters,
                                              trimOptions: TrimOptions.InsideQuotes,
                                              useNewObjectForNullReferenceMembers: false,
                                              whiteSpaceChars: new char[] { '~' }
                                              );

            Assert.IsTrue(config.AllowComments);
            Assert.AreEqual(badDataFound, config.BadDataFound);
            Assert.AreEqual(1, config.BufferSize);
            Assert.IsTrue(config.CacheFields);
            Assert.AreEqual('^', config.Comment);
            Assert.IsTrue(config.CountBytes);
            Assert.AreEqual(CultureInfo.CurrentCulture, config.CultureInfo);
            Assert.AreEqual(":", config.Delimiter);
            Assert.IsTrue(config.DetectColumnCountChanges);
            Assert.AreEqual(dynamicPropertySort, config.DynamicPropertySort);
            Assert.AreEqual(Encoding.ASCII, config.Encoding);
            Assert.AreEqual('\\', config.Escape);
            Assert.AreEqual(getConstructor, config.GetConstructor);
            Assert.AreEqual(getDynamicPropertyName, config.GetDynamicPropertyName);
            Assert.IsFalse(config.HasHeaderRecord);
            Assert.AreEqual(headerValidated, config.HeaderValidated);
            Assert.IsFalse(config.IgnoreBlankLines);
            Assert.IsTrue(config.IgnoreReferences);
            Assert.IsTrue(config.IncludePrivateMembers);
            Assert.AreEqual('*', config.InjectionCharacters[0]);
            Assert.AreEqual('`', config.InjectionEscapeCharacter);
            Assert.IsTrue(config.IsNewLineSet);
            Assert.IsTrue(config.LeaveOpen);
            Assert.IsTrue(config.LineBreakInQuotedFieldIsBadData);
            Assert.AreEqual(MemberTypes.Fields, config.MemberTypes);
            Assert.AreEqual(missingFieldFound, config.MissingFieldFound);
            Assert.AreEqual(CsvMode.Escape, config.Mode);
            Assert.AreEqual("\n", config.NewLine);
            Assert.AreEqual(prepareHeaderForMatch, config.PrepareHeaderForMatch);
            Assert.AreEqual('\'', config.Quote);
            Assert.AreEqual(readingExceptionOccurred, config.ReadingExceptionOccurred);
            Assert.AreEqual(referenceHeaderPrefix, config.ReferenceHeaderPrefix);
            Assert.IsTrue(config.SanitizeForInjection);
            Assert.AreEqual(shouldQuote, config.ShouldQuote);
            Assert.AreEqual(shouldSkipRecord, config.ShouldSkipRecord);
            Assert.AreEqual(shouldUseConstructorParameters, config.ShouldUseConstructorParameters);
            Assert.AreEqual(TrimOptions.InsideQuotes, config.TrimOptions);
            Assert.IsFalse(config.UseNewObjectForNullReferenceMembers);
            Assert.AreEqual('~', config.WhiteSpaceChars[0]);
        }