diff options
author | chai <215380520@qq.com> | 2023-05-12 09:24:40 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-05-12 09:24:40 +0800 |
commit | 2a1cd4fda8a4a8e649910d16b4dfa1ce7ae63543 (patch) | |
tree | a471fafed72e80b4ac3ac3002e06c34220dd6058 /ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture | |
parent | b8a694746562b37dc8dc5b8b5aec8612bb0964fc (diff) |
*misc
Diffstat (limited to 'ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture')
-rw-r--r-- | ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs new file mode 100644 index 0000000..05997bc --- /dev/null +++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs @@ -0,0 +1,229 @@ +// Copyright 2009-2022 Josh Close +// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0. +// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0. +// https://github.com/JoshClose/CsvHelper +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using CsvHelper.Configuration; +using CsvHelper.TypeConversion; +using Xunit; + +namespace CsvHelper.Tests.Culture +{ + + public class TypeConverterOptionsFactoryTests + { + [Fact] + public void AddGetRemoveTest() + { + var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture); + var context = new CsvContext(config); + var customOptions = new TypeConverterOptions + { + Formats = new string[] { "custom" }, + }; + context.TypeConverterOptionsCache.AddOptions<string>(customOptions); + var options = context.TypeConverterOptionsCache.GetOptions<string>(); + + Assert.Equal(customOptions.Formats, options.Formats); + + context.TypeConverterOptionsCache.RemoveOptions<string>(); + + options = context.TypeConverterOptionsCache.GetOptions<string>(); + + Assert.NotEqual(customOptions.Formats, options.Formats); + } + + [Fact] + public void GetFieldTest() + { + var config = new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvReader = new CsvReader(reader, config)) + { + writer.WriteLine("\"1,234\",\"5,678\""); + writer.Flush(); + stream.Position = 0; + + var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands }; + csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvReader.Read(); + Assert.Equal(1234, csvReader.GetField<int>(0)); + Assert.Equal(5678, csvReader.GetField(typeof(int), 1)); + } + } + + [Fact] + public void GetFieldSwitchCulturesTest() + { + GetFieldForCultureTest("\"1234,32\",\"5678,44\"", "fr-FR", 1234.32M, 5678.44M); + GetFieldForCultureTest("\"9876.54\",\"3210.98\"", "en-GB", 9876.54M, 3210.98M); + GetFieldForCultureTest("\"4455,6677\",\"9988,77\"", "el-GR", 4455.6677M, 9988.77M); + } + + private static void GetFieldForCultureTest(string csvText, string culture, decimal expected1, decimal expected2) + { + var config = new CsvConfiguration(new CultureInfo(culture)) + { + HasHeaderRecord = false, + Delimiter = ",", + }; + using (var reader = new StringReader(csvText)) + using (var csvReader = new CsvReader(reader, config)) + { + csvReader.Read(); + Assert.Equal(expected1, csvReader.GetField<decimal>(0)); + Assert.Equal(expected2, csvReader.GetField(typeof(decimal), 1)); + } + } + + [Fact] + public void GetRecordsTest() + { + var config = new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvReader = new CsvReader(reader, config)) + { + writer.WriteLine("\"1,234\",\"5,678\""); + writer.Flush(); + stream.Position = 0; + + var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands }; + csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvReader.GetRecords<Test>().ToList(); + } + } + + [Fact] + public void GetRecordsAppliedWhenMappedTest() + { + var config = new CsvConfiguration(new CultureInfo("en-US")) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvReader = new CsvReader(reader, config)) + { + writer.WriteLine("\"1,234\",\"$5,678\""); + writer.Flush(); + stream.Position = 0; + + var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands }; + csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvReader.Context.RegisterClassMap<TestMap>(); + csvReader.GetRecords<Test>().ToList(); + } + } + + [Fact] + public void WriteFieldTest() + { + var config = new CsvConfiguration(new CultureInfo("en-US")) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvWriter = new CsvWriter(writer, config)) + { + var options = new TypeConverterOptions { Formats = new string[] { "c" } }; + csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvWriter.WriteField(1234); + csvWriter.NextRecord(); + writer.Flush(); + stream.Position = 0; + var record = reader.ReadToEnd(); + + Assert.Equal("\"$1,234.00\"\r\n", record); + } + } + + [Fact] + public void WriteRecordsTest() + { + var config = new CsvConfiguration(new CultureInfo("en-US")) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvWriter = new CsvWriter(writer, config)) + { + var list = new List<Test> + { + new Test { Number = 1234, NumberOverridenInMap = 5678 }, + }; + var options = new TypeConverterOptions { Formats = new string[] { "c" } }; + csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvWriter.WriteRecords(list); + writer.Flush(); + stream.Position = 0; + var record = reader.ReadToEnd(); + + Assert.Equal("\"$1,234.00\",\"$5,678.00\"\r\n", record); + } + } + + [Fact] + public void WriteRecordsAppliedWhenMappedTest() + { + var config = new CsvConfiguration(new CultureInfo("en-US")) + { + HasHeaderRecord = false, + }; + using (var stream = new MemoryStream()) + using (var reader = new StreamReader(stream)) + using (var writer = new StreamWriter(stream)) + using (var csvWriter = new CsvWriter(writer, config)) + { + var list = new List<Test> + { + new Test { Number = 1234, NumberOverridenInMap = 5678 }, + }; + var options = new TypeConverterOptions { Formats = new string[] { "c" } }; + csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options); + csvWriter.Context.RegisterClassMap<TestMap>(); + csvWriter.WriteRecords(list); + writer.Flush(); + stream.Position = 0; + var record = reader.ReadToEnd(); + + Assert.Equal("\"$1,234.00\",\"5,678.00\"\r\n", record); + } + } + + private class Test + { + public int Number { get; set; } + + public int NumberOverridenInMap { get; set; } + } + + private sealed class TestMap : ClassMap<Test> + { + public TestMap() + { + Map(m => m.Number); + Map(m => m.NumberOverridenInMap) + .TypeConverterOption.NumberStyles(NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol) + .TypeConverterOption.Format("N2"); + } + } + } +} |