diff --git a/.gitignore b/.gitignore index 568cc03..e96e39b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ # Build results +.vs/ [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ @@ -17,7 +18,7 @@ build/ bld/ [Bb]in/ [Oo]bj/ - +.sonarqube/ # MSTest test Results [Tt]est[Rr]esult*/ @@ -69,6 +70,7 @@ _Chutzpah* ipch/ *.aps *.ncb +*.opendb *.opensdf *.sdf *.cachefile @@ -144,6 +146,12 @@ publish/ *.[Pp]ublish.xml *.azurePubxml +# Build tools/artifacts +.fake/ +.paket/paket.exe +paket.restore.targets +packages/ +paket-files/ # NuGet Packages Directory ## TODO: If you have NuGet Package Restore enabled, uncomment the next line @@ -178,7 +186,6 @@ ClientBin/ *.pfx *.publishsettings node_modules/ -tools/ # RIA/Silverlight projects @@ -223,4 +230,4 @@ Desktop.ini # Recycle Bin used on file shares -$RECYCLE.BIN/ +$RECYCLE.BIN/ \ No newline at end of file diff --git a/.paket/paket.bootstrapper.exe b/.paket/paket.bootstrapper.exe new file mode 100644 index 0000000..64fdf24 Binary files /dev/null and b/.paket/paket.bootstrapper.exe differ diff --git a/.paket/paket.targets b/.paket/paket.targets new file mode 100644 index 0000000..4a56ebb --- /dev/null +++ b/.paket/paket.targets @@ -0,0 +1,37 @@ + + + + + true + + true + $(MSBuildThisFileDirectory) + $(MSBuildThisFileDirectory)..\ + + + + $(PaketToolsPath)paket.exe + $(PaketToolsPath)paket.bootstrapper.exe + "$(PaketExePath)" + mono --runtime=v4.0.30319 $(PaketExePath) + "$(PaketBootStrapperExePath)" + mono --runtime=v4.0.30319 $(PaketBootStrapperExePath) + + $(MSBuildProjectDirectory)\paket.references + $(PaketCommand) restore --references-files $(PaketReferences) + $(PaketBootStrapperCommand) + + RestorePackages; $(BuildDependsOn); + + + + + + + + + + + + + \ No newline at end of file diff --git a/CsvReader.sln b/CsvReader.sln index 3c8f9c5..5407d39 100644 --- a/CsvReader.sln +++ b/CsvReader.sln @@ -22,8 +22,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution RELEASE_NOTES.md = RELEASE_NOTES.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lumenworks.Framework.IO.Pcl", "code\LumenWorks.Framework.IO\Lumenworks.Framework.IO.Pcl.csproj", "{E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -50,10 +48,6 @@ Global {800B3F74-702F-48C8-B3E9-AA658E3D5A05}.Debug|Any CPU.Build.0 = Debug|Any CPU {800B3F74-702F-48C8-B3E9-AA658E3D5A05}.Release|Any CPU.ActiveCfg = Release|Any CPU {800B3F74-702F-48C8-B3E9-AA658E3D5A05}.Release|Any CPU.Build.0 = Release|Any CPU - {E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index e49f233..a148640 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ You can see the version history [here](RELEASE_NOTES.md). ## Build the project * Windows: Run *build.cmd* -I have my tools in C:\Tools so I use *build.cmd Default tools=C:\Tools encoding=UTF-8* +The tooling should be automatically installed by paket/Fake. The default build will compile and test the project, and also produce a nuget package. ## Library License @@ -50,43 +50,43 @@ Having said that, there are some extensions built into this version of the libra ### Columns One addition is the addition of a Column list which holds the names and types of the data in the CSV file. If there are no headers present, we default the column names to Column1, Column2 etc; this can be overridden by setting the DefaultColumnHeader property e.g. ```csharp - using System.IO; - using LumenWorks.Framework.IO.Csv; +using System.IO; +using LumenWorks.Framework.IO.Csv; - void ReadCsv() +void ReadCsv() +{ + // open the file "data.csv" which is a CSV file with headers + using (var csv = new CachedCsvReader(new StreamReader("data.csv"), false)) { - // open the file "data.csv" which is a CSV file with headers - using (var csv = new CachedCsvReader(new StreamReader("data.csv"), false)) - { - csv.DefaultColumnHeader = "Fred" + csv.DefaultColumnHeader = "Fred" - // Field headers will now be Fred1, Fred2, etc - myDataGrid.DataSource = csv; - } + // Field headers will now be Fred1, Fred2, etc + myDataGrid.DataSource = csv; } +} ``` You can specify the columns yourself if there are none, and also specify the expected type; this is especially important when using against SqlBulkCopy which we will come back to later. ```csharp - using System.IO; - using LumenWorks.Framework.IO.Csv; +using System.IO; +using LumenWorks.Framework.IO.Csv; - void ReadCsv() +void ReadCsv() +{ + // open the file "data.csv" which is a CSV file with headers + using (var csv = new CachedCsvReader(new StreamReader("data.csv"), false)) { - // open the file "data.csv" which is a CSV file with headers - using (var csv = new CachedCsvReader(new StreamReader("data.csv"), false)) - { - csv.Columns.Add(new Column { Name = "PriceDate", Type = typeof(DateTime) }); - csv.Columns.Add(new Column { Name = "OpenPrice", Type = typeof(decimal) }); - csv.Columns.Add(new Column { Name = "HighPrice", Type = typeof(decimal) }); - csv.Columns.Add(new Column { Name = "LowPrice", Type = typeof(decimal) }); - csv.Columns.Add(new Column { Name = "ClosePrice", Type = typeof(decimal) }); - csv.Columns.Add(new Column { Name = "Volume", Type = typeof(int) }); - - // Field headers will now be picked from the Columns collection - myDataGrid.DataSource = csv; - } + csv.Columns.Add(new Column { Name = "PriceDate", Type = typeof(DateTime) }); + csv.Columns.Add(new Column { Name = "OpenPrice", Type = typeof(decimal) }); + csv.Columns.Add(new Column { Name = "HighPrice", Type = typeof(decimal) }); + csv.Columns.Add(new Column { Name = "LowPrice", Type = typeof(decimal) }); + csv.Columns.Add(new Column { Name = "ClosePrice", Type = typeof(decimal) }); + csv.Columns.Add(new Column { Name = "Volume", Type = typeof(int) }); + + // Field headers will now be picked from the Columns collection + myDataGrid.DataSource = csv; } +} ``` ### SQL Bulk Copy @@ -98,89 +98,89 @@ A couple of issues arise when using SBC Below is a example using the Columns collection to set up the correct metadata for SBC ```csharp - public void Import(string fileName, string connectionString) - { - using (var reader = new CsvReader(new StreamReader(fileName), false)) - { - reader.Columns = new List - { - new LumenWorks.Framework.IO.Csv.Column { Name = "PriceDate", Type = typeof(DateTime) }, - new LumenWorks.Framework.IO.Csv.Column { Name = "OpenPrice", Type = typeof(decimal) }, - new LumenWorks.Framework.IO.Csv.Column { Name = "HighPrice", Type = typeof(decimal) }, - new LumenWorks.Framework.IO.Csv.Column { Name = "LowPrice", Type = typeof(decimal) }, - new LumenWorks.Framework.IO.Csv.Column { Name = "ClosePrice", Type = typeof(decimal) }, - new LumenWorks.Framework.IO.Csv.Column { Name = "Volume", Type = typeof(int) }, - }; - - // Now use SQL Bulk Copy to move the data - using (var sbc = new SqlBulkCopy(connectionString)) - { - sbc.DestinationTableName = "dbo.DailyPrice"; - sbc.BatchSize = 1000; - - sbc.AddColumnMapping("PriceDate", "PriceDate"); - sbc.AddColumnMapping("OpenPrice", "OpenPrice"); - sbc.AddColumnMapping("HighPrice", "HighPrice"); - sbc.AddColumnMapping("LowPrice", "LowPrice"); - sbc.AddColumnMapping("ClosePrice", "ClosePrice"); - sbc.AddColumnMapping("Volume", "Volume"); - - sbc.WriteToServer(reader); - } - } - } +public void Import(string fileName, string connectionString) +{ + using (var reader = new CsvReader(new StreamReader(fileName), false)) + { + reader.Columns = new List + { + new LumenWorks.Framework.IO.Csv.Column { Name = "PriceDate", Type = typeof(DateTime) }, + new LumenWorks.Framework.IO.Csv.Column { Name = "OpenPrice", Type = typeof(decimal) }, + new LumenWorks.Framework.IO.Csv.Column { Name = "HighPrice", Type = typeof(decimal) }, + new LumenWorks.Framework.IO.Csv.Column { Name = "LowPrice", Type = typeof(decimal) }, + new LumenWorks.Framework.IO.Csv.Column { Name = "ClosePrice", Type = typeof(decimal) }, + new LumenWorks.Framework.IO.Csv.Column { Name = "Volume", Type = typeof(int) }, + }; + + // Now use SQL Bulk Copy to move the data + using (var sbc = new SqlBulkCopy(connectionString)) + { + sbc.DestinationTableName = "dbo.DailyPrice"; + sbc.BatchSize = 1000; + + sbc.AddColumnMapping("PriceDate", "PriceDate"); + sbc.AddColumnMapping("OpenPrice", "OpenPrice"); + sbc.AddColumnMapping("HighPrice", "HighPrice"); + sbc.AddColumnMapping("LowPrice", "LowPrice"); + sbc.AddColumnMapping("ClosePrice", "ClosePrice"); + sbc.AddColumnMapping("Volume", "Volume"); + + sbc.WriteToServer(reader); + } + } +} ``` The method AddColumnMapping is an extension I wrote to simplify adding mappings to SBC ```csharp - public static class SqlBulkCopyExtensions +public static class SqlBulkCopyExtensions +{ + public static SqlBulkCopyColumnMapping AddColumnMapping(this SqlBulkCopy sbc, int sourceColumnOrdinal, int targetColumnOrdinal) { - public static SqlBulkCopyColumnMapping AddColumnMapping(this SqlBulkCopy sbc, int sourceColumnOrdinal, int targetColumnOrdinal) - { - var map = new SqlBulkCopyColumnMapping(sourceColumnOrdinal, targetColumnOrdinal); - sbc.ColumnMappings.Add(map); + var map = new SqlBulkCopyColumnMapping(sourceColumnOrdinal, targetColumnOrdinal); + sbc.ColumnMappings.Add(map); - return map; - } + return map; + } - public static SqlBulkCopyColumnMapping AddColumnMapping(this SqlBulkCopy sbc, string sourceColumn, string targetColumn) - { - var map = new SqlBulkCopyColumnMapping(sourceColumn, targetColumn); - sbc.ColumnMappings.Add(map); + public static SqlBulkCopyColumnMapping AddColumnMapping(this SqlBulkCopy sbc, string sourceColumn, string targetColumn) + { + var map = new SqlBulkCopyColumnMapping(sourceColumn, targetColumn); + sbc.ColumnMappings.Add(map); - return map; - } + return map; } +} ``` One other issue recently arose where we wanted to use SBC but some of the data was not in the file itself, but metadata that needed to be included on every row. The solution was to amend the CSV reader and Columns collection to allow default values to be provided that are not in the data. The additional columns should be added at the end of the Columns collection to avoid interfering with the parsing, see the amended example below... ```csharp - public void Import(string fileName, string connectionString) - { - using (var reader = new CsvReader(new StreamReader(fileName), false)) - { - reader.Columns = new List - { - ... - new LumenWorks.Framework.IO.Csv.Column { Name = "Volume", Type = typeof(int) }, - // NB Fake column so bulk import works - new LumenWorks.Framework.IO.Csv.Column { Name = "Ticker", Type = typeof(string) }, - }; - - // Fix up the column defaults with the values we need - reader.UseColumnDefaults = true; - reader.Columns[reader.GetFieldIndex("Ticker")] = Path.GetFileNameWithoutExtension(fileName); - - // Now use SQL Bulk Copy to move the data - using (var sbc = new SqlBulkCopy(connectionString)) - { - ... - sbc.AddColumnMapping("Ticker", "Ticker"); - - sbc.WriteToServer(reader); - } - } - } +public void Import(string fileName, string connectionString) +{ + using (var reader = new CsvReader(new StreamReader(fileName), false)) + { + reader.Columns = new List + { + ... + new LumenWorks.Framework.IO.Csv.Column { Name = "Volume", Type = typeof(int) }, + // NB Fake column so bulk import works + new LumenWorks.Framework.IO.Csv.Column { Name = "Ticker", Type = typeof(string) }, + }; + + // Fix up the column defaults with the values we need + reader.UseColumnDefaults = true; + reader.Columns[reader.GetFieldIndex("Ticker")] = Path.GetFileNameWithoutExtension(fileName); + + // Now use SQL Bulk Copy to move the data + using (var sbc = new SqlBulkCopy(connectionString)) + { + ... + sbc.AddColumnMapping("Ticker", "Ticker"); + + sbc.WriteToServer(reader); + } + } +} ``` To give an idea of performance, this took a naive sample app using an ORM from 2m 27s to 1.37s using SBC and the full import took just over 11m to import 9.8m records. diff --git a/build.cmd b/build.cmd index 518f3fd..3c94de2 100644 --- a/build.cmd +++ b/build.cmd @@ -1,13 +1,23 @@ @echo off +SETLOCAL + cls -if not exist packages\FAKE\tools\Fake.exe ( - nuget\nuget.exe install FAKE -OutputDirectory packages -ExcludeVersion +.paket\paket.bootstrapper.exe +if errorlevel 1 ( + exit /b %errorlevel% ) -SET TARGET="Default" +.paket\paket.exe restore +if errorlevel 1 ( + exit /b %errorlevel% +) -if NOT [%1]==[] (set TARGET="%1") +SET FAKE_PATH=packages\build\FAKE\tools\Fake.exe +SET Platform= -"packages\FAKE\tools\FAKE.exe" "build.fsx" "target=%TARGET%" %* -pause \ No newline at end of file +IF [%1]==[] ( + "%FAKE_PATH%" "build.fsx" "Default" +) ELSE ( + "%FAKE_PATH%" "build.fsx" %* +) diff --git a/build.fsx b/build.fsx index f3fd8ea..cc0aebf 100644 --- a/build.fsx +++ b/build.fsx @@ -1,72 +1,76 @@ /// FAKE Build script -#r "packages/FAKE/tools/FakeLib.dll" +#r "packages/build/FAKE/tools/FakeLib.dll" open Fake open Fake.AssemblyInfoFile open Fake.Git -open Fake.NuGetHelper -open Fake.RestorePackageHelper open Fake.ReleaseNotesHelper +open Fake.Testing.NUnit3 // Version info -let projectName = "CsvReader" +let projectName = "LumenWorks.Framework.IO" let projectSummary = "" -let projectDescription = "An extended version of LumenWorks.Frameworks.IO" let authors = ["Sébastien Lorion"; "Paul Hatcher"] +let copyright = "Copyright © 2016 Paul Hatcher" let release = LoadReleaseNotes "RELEASE_NOTES.md" // Properties let buildDir = "./build" -let toolsDir = getBuildParamOrDefault "tools" "./tools" -let nugetDir = "./nuget" +let toolsDir = getBuildParamOrDefault "tools" "packages/build" +let solutionFile = "CsvReader.sln" -let nunitPath = toolsDir @@ "NUnit-2.6.3/bin" +let nunitPath = toolsDir @@ "/NUnit.ConsoleRunner/tools/nunit3-console.exe" // Targets Target "Clean" (fun _ -> - CleanDir buildDir + CleanDirs [buildDir;] ) Target "PackageRestore" (fun _ -> - RestorePackages() + !! solutionFile + |> MSBuildRelease buildDir "Restore" + |> Log "AppBuild-Output: " ) Target "SetVersion" (fun _ -> - let commitHash = Information.getCurrentHash() + let commitHash = + try + Information.getCurrentHash() + with + | ex -> printfn "Exception! (%s)" (ex.Message); "" let infoVersion = String.concat " " [release.AssemblyVersion; commitHash] CreateCSharpAssemblyInfo "./code/SolutionInfo.cs" - [Attribute.Version release.AssemblyVersion + [Attribute.Product projectName + Attribute.Copyright copyright + Attribute.Version release.AssemblyVersion Attribute.FileVersion release.AssemblyVersion Attribute.InformationalVersion infoVersion] ) Target "Build" (fun _ -> - !! "./code/**/*.csproj" - |> MSBuildRelease buildDir "Build" + !! solutionFile + |> MSBuild buildDir "Build" + [ + "Configuration", "Release" + "Platform", "Any CPU" + "Authors", authors |> String.concat ", " + "PackageVersion", release.AssemblyVersion + "PackageReleaseNotes", release.Notes |> toLines + "IncludeSymbols", "true" + "DefineConstants", "NET20" + ] |> Log "AppBuild-Output: " ) Target "Test" (fun _ -> !! (buildDir + "/*.Tests.Unit.dll") - |> NUnit (fun p -> + |> NUnit3 (fun p -> {p with ToolPath = nunitPath - DisableShadowCopy = true - OutputFile = buildDir @@ "TestResults.xml"}) -) - -Target "Pack" (fun _ -> - let nugetParams p = - { p with - Authors = authors - Version = release.AssemblyVersion - ReleaseNotes = release.Notes |> toLines - OutputPath = buildDir - AccessKey = getBuildParamOrDefault "nugetkey" "" - Publish = hasBuildParam "nugetkey" } - - NuGet nugetParams "nuget/LumenWorksCsvReader.nuspec" + // Oddity as this creates a build directory in the build directory + WorkingDir = buildDir + ShadowCopy = false}) ) Target "Release" (fun _ -> @@ -84,7 +88,6 @@ Target "Default" DoNothing ==> "Build" ==> "Test" ==> "Default" - ==> "Pack" ==> "Release" RunTargetOrDefault "Default" \ No newline at end of file diff --git a/code/CsvReaderBenchmarks/CsvReaderBenchmarks.csproj b/code/CsvReaderBenchmarks/CsvReaderBenchmarks.csproj index cbf64f6..7b5fdc4 100644 --- a/code/CsvReaderBenchmarks/CsvReaderBenchmarks.csproj +++ b/code/CsvReaderBenchmarks/CsvReaderBenchmarks.csproj @@ -1,121 +1,30 @@ - - + - Debug - AnyCPU - 9.0.30729 - 2.0 - {6BA5C01B-2F49-4432-8FCA-A3B1ADC6AFDA} - Exe - Properties - CsvReaderBenchmarks - CsvReaderBenchmarks - v2.0 - 512 - - - - - - - - - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - ..\ - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset + net20 - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset + + false + Exe + Benchmarking for Lumenworks.Framework.IO - - - - - - - - Properties\SolutionInfo.cs - - - - - - - - + - - {E3B83D68-C90C-4874-8E5F-DEC8D038BC7C} - LumenWorks.Framework.IO - + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + - - Always + + PreserveNewest + + + PreserveNewest + + + PreserveNewest - - - - - \ No newline at end of file diff --git a/code/CsvReaderBenchmarks/Properties/AssemblyInfo.cs b/code/CsvReaderBenchmarks/Properties/AssemblyInfo.cs index f5f46db..e548676 100644 --- a/code/CsvReaderBenchmarks/Properties/AssemblyInfo.cs +++ b/code/CsvReaderBenchmarks/Properties/AssemblyInfo.cs @@ -1,23 +1,15 @@ using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("CsvReaderBenchmarks")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CsvReaderBenchmarks")] -[assembly: AssemblyCopyright("Copyright © 2005 Sébastien Lorion")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("c9b93570-2128-4ca5-9126-7a197c380aa8")] +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif \ No newline at end of file diff --git a/code/CsvReaderBenchmarks/TextFieldParserBenchmark.cs b/code/CsvReaderBenchmarks/TextFieldParserBenchmark.cs index e315055..5a92e97 100644 --- a/code/CsvReaderBenchmarks/TextFieldParserBenchmark.cs +++ b/code/CsvReaderBenchmarks/TextFieldParserBenchmark.cs @@ -1,13 +1,7 @@ -#region Using directives - -using System; using System.IO; -using System.Text; using Microsoft.VisualBasic.FileIO; -#endregion - namespace CsvReaderDemo { public sealed class TextFieldParserBenchmark @@ -33,7 +27,7 @@ public static void Run(string path) public static void Run(string path, int field) { - using (TextFieldParser csv = new TextFieldParser(new StreamReader(path))) + using (var csv = new TextFieldParser(new StreamReader(path))) { csv.TextFieldType = FieldType.Delimited; csv.TrimWhiteSpace = true; diff --git a/code/CsvReaderDemo/Properties/AssemblyInfo.cs b/code/CsvReaderDemo/Properties/AssemblyInfo.cs index 3b9a377..b6e84d4 100644 --- a/code/CsvReaderDemo/Properties/AssemblyInfo.cs +++ b/code/CsvReaderDemo/Properties/AssemblyInfo.cs @@ -1,23 +1,15 @@ using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("CsvReaderDemo")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CsvReaderDemo")] -[assembly: AssemblyCopyright("Copyright © 2005 Sébastien Lorion")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2cda8e6b-c547-4e69-800c-174bf0c261f7")] +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif \ No newline at end of file diff --git a/code/CsvReaderDemoWeb/Properties/AssemblyInfo.cs b/code/CsvReaderDemoWeb/Properties/AssemblyInfo.cs index f20549e..914b2c3 100644 --- a/code/CsvReaderDemoWeb/Properties/AssemblyInfo.cs +++ b/code/CsvReaderDemoWeb/Properties/AssemblyInfo.cs @@ -1,23 +1,15 @@ using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("CsvReaderDemoWeb")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CsvReaderDemoWeb")] -[assembly: AssemblyCopyright("Copyright © 2005 Sébastien Lorion")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] \ No newline at end of file +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif \ No newline at end of file diff --git a/code/LumenWorks.Framework.IO/LumenWorks.Framework.IO.csproj b/code/LumenWorks.Framework.IO/LumenWorks.Framework.IO.csproj index bb36609..918c371 100644 --- a/code/LumenWorks.Framework.IO/LumenWorks.Framework.IO.csproj +++ b/code/LumenWorks.Framework.IO/LumenWorks.Framework.IO.csproj @@ -1,122 +1,42 @@ - - + - Debug - AnyCPU - 9.0.30729 - 2.0 - {E3B83D68-C90C-4874-8E5F-DEC8D038BC7C} - Library - Properties + net20 + + + false LumenWorks.Framework.IO - LumenWorks.Framework.IO - v2.0 - 512 - - - - - - - - + An extended version of LumenWorks.Frameworks.IO + true + LumenWorksCsvReader + LumenWorks CSV Reader + Copyright © 2005 Sébastien Lorion, 2014 Paul Hatcher + http://opensource.org/licenses/mit-license.php + https://github.com/phatcher/CsvReader + False + CSV + https://github.com/phatcher/CsvReader + git + Sébastien Lorion, Paul Hatcher true LumenWorks.Framework.snk - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - true - full - false - bin\Debug\ - TRACE;DEBUG;NET20 - prompt - 3 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE;NET20 - prompt - 4 - bin\Release\LumenWorks.Framework.IO.xml - AllRules.ruleset + + bin\$(Configuration)\$(TargetFramework)\CsvParser.xml - - - + - - Properties\SolutionInfo.cs + + True + True + ExceptionMessage.resx - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + ResXFileCodeGenerator + ExceptionMessage.Designer.cs + - - \ No newline at end of file diff --git a/code/LumenWorks.Framework.IO/Lumenworks.Framework.IO.Pcl.csproj b/code/LumenWorks.Framework.IO/Lumenworks.Framework.IO.Pcl.csproj deleted file mode 100644 index b74b17d..0000000 --- a/code/LumenWorks.Framework.IO/Lumenworks.Framework.IO.Pcl.csproj +++ /dev/null @@ -1,64 +0,0 @@ - - - - - 10.0 - Debug - AnyCPU - {E564BC5A-8C07-43B9-BBD5-18CD3B4EDCF1} - Library - Properties - LumenWorks.Framework.IO - LumenWorks.Framework.IO - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile24 - v4.0 - - - true - full - false - bin\Debug\ - TRACE;DEBUG;NET20 - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE;NET20 - prompt - 4 - - - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - ExceptionMessage1.Designer.cs - - - - - \ No newline at end of file diff --git a/code/LumenWorks.Framework.IO/Properties/AssemblyInfo.cs b/code/LumenWorks.Framework.IO/Properties/AssemblyInfo.cs index 5b59872..b84bfc8 100644 --- a/code/LumenWorks.Framework.IO/Properties/AssemblyInfo.cs +++ b/code/LumenWorks.Framework.IO/Properties/AssemblyInfo.cs @@ -4,11 +4,12 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("LumenWorks.Framework.IO")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("LumenWorks.Framework.IO")] -[assembly: AssemblyCopyright("Copyright © 2005 Sébastien Lorion")] +[assembly: AssemblyDescription("An extended version of LumenWorks.Frameworks.IO")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: System.CLSCompliant(true)] \ No newline at end of file + +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif \ No newline at end of file diff --git a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderIDataReaderTest.cs b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderIDataReaderTest.cs index 9253971..e04c1d3 100644 --- a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderIDataReaderTest.cs +++ b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderIDataReaderTest.cs @@ -20,11 +20,9 @@ // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System; -using System.Collections; using System.Data; using System.Globalization; using System.IO; -using System.Text; using NUnit.Framework; @@ -35,12 +33,10 @@ namespace LumenWorks.Framework.Tests.Unit.IO.Csv [TestFixture()] public class CsvReaderIDataReaderTest { - #region IDataReader interface - - [Test()] + [Test] public void CloseTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; @@ -53,14 +49,14 @@ public void CloseTest() } } - [Test()] + [Test] public void GetSchemaTableWithHeadersTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - DataTable schema = reader.GetSchemaTable(); + var schema = reader.GetSchemaTable(); Assert.AreEqual(CsvReaderSampleData.SampleData1RecordCount, schema.Rows.Count); @@ -69,9 +65,9 @@ public void GetSchemaTableWithHeadersTest() Assert.IsTrue(column.ReadOnly); } - for (int index = 0; index < schema.Rows.Count; index++) + for (var index = 0; index < schema.Rows.Count; index++) { - DataRow column = schema.Rows[index]; + var column = schema.Rows[index]; Assert.AreEqual(int.MaxValue, column["ColumnSize"]); Assert.AreEqual(DBNull.Value, column["NumericPrecision"]); @@ -128,14 +124,14 @@ public void GetSchemaTableWithHeadersTest() } } - [Test()] + [Test] public void GetSchemaTableWithoutHeadersTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) { IDataReader reader = csv; - DataTable schema = reader.GetSchemaTable(); + var schema = reader.GetSchemaTable(); Assert.AreEqual(CsvReaderSampleData.SampleData1RecordCount, schema.Rows.Count); @@ -144,9 +140,9 @@ public void GetSchemaTableWithoutHeadersTest() Assert.IsTrue(column.ReadOnly); } - for (int index = 0; index < schema.Rows.Count; index++) + for (var index = 0; index < schema.Rows.Count; index++) { - DataRow column = schema.Rows[index]; + var column = schema.Rows[index]; Assert.AreEqual(int.MaxValue, column["ColumnSize"]); Assert.AreEqual(DBNull.Value, column["NumericPrecision"]); @@ -176,24 +172,26 @@ public void GetSchemaTableWithoutHeadersTest() } } - [Test()] - [ExpectedException(typeof(InvalidOperationException))] + [Test] public void GetSchemaTableReaderClosedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) - { - IDataReader reader = csv; - csv.ReadNextRecord(); - reader.Close(); + Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + IDataReader reader = csv; + csv.ReadNextRecord(); + reader.Close(); - DataTable result = reader.GetSchemaTable(); - } + var result = reader.GetSchemaTable(); + } + }); } - [Test()] + [Test] public void NextResultTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; Assert.IsFalse(reader.NextResult()); @@ -203,52 +201,58 @@ public void NextResultTest() } } - [Test()] - [ExpectedException(typeof(InvalidOperationException))] + [Test] public void NextResultReaderClosedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) - { - IDataReader reader = csv; - csv.ReadNextRecord(); - reader.Close(); + Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + IDataReader reader = csv; + csv.ReadNextRecord(); + reader.Close(); - bool result = reader.NextResult(); - } + var result = reader.NextResult(); + } + }); } - [Test()] + [Test] public void ReadTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - for (int i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) - Assert.IsTrue(reader.Read()); + for (var i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) + { + Assert.IsTrue(reader.Read()); + } - Assert.IsFalse(reader.Read()); + Assert.IsFalse(reader.Read()); } } - [Test()] - [ExpectedException(typeof(InvalidOperationException))] + [Test] public void ReadReaderClosedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) - { - IDataReader reader = csv; - csv.ReadNextRecord(); - reader.Close(); + Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + IDataReader reader = csv; + csv.ReadNextRecord(); + reader.Close(); - bool result = reader.Read(); - } + var result = reader.Read(); + } + }); } - [Test()] + [Test] public void DepthTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; Assert.AreEqual(0, reader.Depth); @@ -258,24 +262,26 @@ public void DepthTest() } } - [Test()] - [ExpectedException(typeof(InvalidOperationException))] + [Test] public void DepthReaderClosedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) - { - IDataReader reader = csv; - csv.ReadNextRecord(); - reader.Close(); + Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + IDataReader reader = csv; + csv.ReadNextRecord(); + reader.Close(); - int result = reader.Depth; - } + var result = reader.Depth; + } + }); } - [Test()] + [Test] public void IsClosedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; Assert.IsFalse(reader.IsClosed); @@ -288,10 +294,10 @@ public void IsClosedTest() } } - [Test()] + [Test] public void RecordsAffectedTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; Assert.AreEqual(-1, reader.RecordsAffected); @@ -304,110 +310,106 @@ public void RecordsAffectedTest() } } - #endregion - - #region IDataRecord interface - - [Test()] + [Test] public void GetBooleanTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Boolean value = true; + var value = true; while (reader.Read()) { - Assert.AreEqual(value, reader.GetBoolean(reader.GetOrdinal(typeof(Boolean).FullName))); + Assert.AreEqual(value, reader.GetBoolean(reader.GetOrdinal(typeof(bool).FullName))); } } } - [Test()] + [Test] public void GetByteTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Byte value = 1; + byte value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetByte(reader.GetOrdinal(typeof(Byte).FullName))); + Assert.AreEqual(value, reader.GetByte(reader.GetOrdinal(typeof(byte).FullName))); } } } - [Test()] + [Test] public void GetBytesTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Char[] temp = "abc".ToCharArray(); - Byte[] value = new Byte[temp.Length]; + var temp = "abc".ToCharArray(); + var value = new byte[temp.Length]; - for (int i = 0; i < temp.Length; i++) + for (var i = 0; i < temp.Length; i++) value[i] = Convert.ToByte(temp[i]); while (reader.Read()) { - Byte[] csvValue = new Byte[value.Length]; + var csvValue = new byte[value.Length]; - long count = reader.GetBytes(reader.GetOrdinal(typeof(String).FullName), 0, csvValue, 0, value.Length); + var count = reader.GetBytes(reader.GetOrdinal(typeof(string).FullName), 0, csvValue, 0, value.Length); Assert.AreEqual(value.Length, count); Assert.AreEqual(value.Length, csvValue.Length); - for (int i = 0; i < value.Length; i++) + for (var i = 0; i < value.Length; i++) Assert.AreEqual(value[i], csvValue[i]); } } } - [Test()] + [Test] public void GetCharTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Char value = 'a'; + var value = 'a'; while (reader.Read()) { - Assert.AreEqual(value, reader.GetChar(reader.GetOrdinal(typeof(Char).FullName))); + Assert.AreEqual(value, reader.GetChar(reader.GetOrdinal(typeof(char).FullName))); } } } - [Test()] + [Test] public void GetCharsTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Char[] value = "abc".ToCharArray(); + var value = "abc".ToCharArray(); while (reader.Read()) { - Char[] csvValue = new Char[value.Length]; + var csvValue = new char[value.Length]; - long count = reader.GetChars(reader.GetOrdinal(typeof(String).FullName), 0, csvValue, 0, value.Length); + var count = reader.GetChars(reader.GetOrdinal(typeof(string).FullName), 0, csvValue, 0, value.Length); Assert.AreEqual(value.Length, count); Assert.AreEqual(value.Length, csvValue.Length); - for (int i = 0; i < value.Length; i++) + for (var i = 0; i < value.Length; i++) Assert.AreEqual(value[i], csvValue[i]); } } } - [Test()] + [Test] public void GetDataTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; @@ -415,35 +417,35 @@ public void GetDataTest() { Assert.AreSame(csv, reader.GetData(0)); - for (int i = 1; i < reader.FieldCount; i++) + for (var i = 1; i < reader.FieldCount; i++) Assert.IsNull(reader.GetData(i)); } } } - [Test()] + [Test] public void GetDataTypeNameTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; while (reader.Read()) { - for (int i = 0; i < reader.FieldCount; i++) + for (var i = 0; i < reader.FieldCount; i++) Assert.AreEqual(typeof(string).FullName, reader.GetDataTypeName(i)); } } } - [Test()] + [Test] public void GetDateTimeTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - DateTime value = new DateTime(2001, 1, 1); + var value = new DateTime(2001, 1, 1); while (reader.Read()) { Assert.AreEqual(value, reader.GetDateTime(reader.GetOrdinal(typeof(DateTime).FullName))); @@ -451,74 +453,74 @@ public void GetDateTimeTest() } } - [Test()] + [Test] public void GetDecimalTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Decimal value = 1; + decimal value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetDecimal(reader.GetOrdinal(typeof(Decimal).FullName))); + Assert.AreEqual(value, reader.GetDecimal(reader.GetOrdinal(typeof(decimal).FullName))); } } } - [Test()] + [Test] public void GetDoubleTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Double value = 1; + double value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetDouble(reader.GetOrdinal(typeof(Double).FullName))); + Assert.AreEqual(value, reader.GetDouble(reader.GetOrdinal(typeof(double).FullName))); } } } - [Test()] + [Test] public void GetFieldTypeTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; while (reader.Read()) { - for (int i = 0; i < reader.FieldCount; i++) + for (var i = 0; i < reader.FieldCount; i++) Assert.AreEqual(typeof(string), reader.GetFieldType(i)); } } } - [Test()] + [Test] public void GetFloatTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Single value = 1; + float value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetFloat(reader.GetOrdinal(typeof(Single).FullName))); + Assert.AreEqual(value, reader.GetFloat(reader.GetOrdinal(typeof(float).FullName))); } } } - [Test()] + [Test] public void GetGuidTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Guid value = new Guid("{11111111-1111-1111-1111-111111111111}"); + var value = new Guid("{11111111-1111-1111-1111-111111111111}"); while (reader.Read()) { Assert.AreEqual(value, reader.GetGuid(reader.GetOrdinal(typeof(Guid).FullName))); @@ -526,55 +528,55 @@ public void GetGuidTest() } } - [Test()] + [Test] public void GetInt16Test() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Int16 value = 1; + short value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetInt16(reader.GetOrdinal(typeof(Int16).FullName))); + Assert.AreEqual(value, reader.GetInt16(reader.GetOrdinal(typeof(short).FullName))); } } } - [Test()] + [Test] public void GetInt32Test() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Int32 value = 1; + var value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetInt32(reader.GetOrdinal(typeof(Int32).FullName))); + Assert.AreEqual(value, reader.GetInt32(reader.GetOrdinal(typeof(int).FullName))); } } } - [Test()] + [Test] public void GetInt64Test() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - Int64 value = 1; + long value = 1; while (reader.Read()) { - Assert.AreEqual(value, reader.GetInt64(reader.GetOrdinal(typeof(Int64).FullName))); + Assert.AreEqual(value, reader.GetInt64(reader.GetOrdinal(typeof(long).FullName))); } } } - [Test()] + [Test] public void GetNameTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; @@ -590,10 +592,10 @@ public void GetNameTest() } } - [Test()] + [Test] public void GetOrdinalTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; @@ -609,35 +611,35 @@ public void GetOrdinalTest() } } - [Test()] + [Test] public void GetStringTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; - String value = "abc"; + var value = "abc"; while (reader.Read()) { - Assert.AreEqual(value, reader.GetString(reader.GetOrdinal(typeof(String).FullName))); + Assert.AreEqual(value, reader.GetString(reader.GetOrdinal(typeof(string).FullName))); } } } - [Test()] + [Test] public void GetValueTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - string[] values = new string[CsvReaderSampleData.SampleData1RecordCount]; + var values = new string[CsvReaderSampleData.SampleData1RecordCount]; while (reader.Read()) { - for (int i = 0; i < reader.FieldCount; i++) + for (var i = 0; i < reader.FieldCount; i++) { - object value = reader.GetValue(i); + var value = reader.GetValue(i); if (string.IsNullOrEmpty(csv[i])) Assert.AreEqual(DBNull.Value, value); @@ -650,26 +652,28 @@ public void GetValueTest() } } - [Test()] + [Test] public void GetValuesTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - object[] objValues = new object[CsvReaderSampleData.SampleData1RecordCount]; - string[] values = new string[CsvReaderSampleData.SampleData1RecordCount]; + var objValues = new object[CsvReaderSampleData.SampleData1RecordCount]; + var values = new string[CsvReaderSampleData.SampleData1RecordCount]; while (reader.Read()) { Assert.AreEqual(CsvReaderSampleData.SampleData1RecordCount, reader.GetValues(objValues)); - for (int i = 0; i < reader.FieldCount; i++) + for (var i = 0; i < reader.FieldCount; i++) { - if (string.IsNullOrEmpty(csv[i])) - Assert.AreEqual(DBNull.Value, objValues[i]); + if (string.IsNullOrEmpty(csv[i])) + { + Assert.AreEqual(DBNull.Value, objValues[i]); + } - values[i] = objValues[i].ToString(); + values[i] = objValues[i].ToString(); } CsvReaderSampleData.CheckSampleData1(csv.HasHeaders, csv.CurrentRecordIndex, values); @@ -677,10 +681,10 @@ public void GetValuesTest() } } - [Test()] + [Test] public void IsDBNullTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true)) { IDataReader reader = csv; @@ -691,10 +695,10 @@ public void IsDBNullTest() } } - [Test()] + [Test] public void IsDBNullWithNullValueTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true, + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleTypedData1), true, CsvReader.DefaultDelimiter, CsvReader.DefaultQuote, CsvReader.DefaultEscape, CsvReader.DefaultComment, ValueTrimmingOptions.UnquotedOnly, CsvReaderSampleData.SampleNullValue)) { @@ -708,10 +712,10 @@ public void IsDBNullWithNullValueTest() } } - [Test()] + [Test] public void FieldCountTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; @@ -719,14 +723,14 @@ public void FieldCountTest() } } - [Test()] + [Test] public void IndexerByFieldNameTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - string[] values = new string[CsvReaderSampleData.SampleData1RecordCount]; + var values = new string[CsvReaderSampleData.SampleData1RecordCount]; while (reader.Read()) { @@ -742,25 +746,23 @@ public void IndexerByFieldNameTest() } } - [Test()] + [Test] public void IndexerByFieldIndexTest() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { IDataReader reader = csv; - string[] values = new string[CsvReaderSampleData.SampleData1RecordCount]; + var values = new string[CsvReaderSampleData.SampleData1RecordCount]; while (reader.Read()) { - for (int i = 0; i < reader.FieldCount; i++) + for (var i = 0; i < reader.FieldCount; i++) values[i] = (string) reader[i]; CsvReaderSampleData.CheckSampleData1(csv.HasHeaders, csv.CurrentRecordIndex, values); } } } - - #endregion } } diff --git a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderMalformedTest.cs b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderMalformedTest.cs index 5c50a03..cf2299d 100644 --- a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderMalformedTest.cs +++ b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderMalformedTest.cs @@ -22,9 +22,7 @@ // A special thanks goes to "shriop" at CodeProject for providing many of the standard and Unicode parsing tests. - using System; -using System.Globalization; using System.IO; using System.Text; @@ -37,8 +35,6 @@ namespace LumenWorks.Framework.Tests.Unit.IO.Csv [TestFixture()] public class CsvReaderMalformedTest { - #region Utilities - private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long badRecordIndex, int badFieldIndex, int bufferSize) { CheckMissingFieldUnquoted(recordCount, fieldCount, badRecordIndex, badFieldIndex, bufferSize, true, MissingFieldAction.ParseError); @@ -54,11 +50,11 @@ private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long ba { // construct the csv data with template "00,01,02\n10,11,12\n...." and calculate expected error position - long capacity = recordCount * (fieldCount * 2 + fieldCount - 1) + recordCount; + var capacity = recordCount * (fieldCount * 2 + fieldCount - 1) + recordCount; Assert.IsTrue(capacity <= int.MaxValue); - StringBuilder sb = new StringBuilder((int) capacity); - int expectedErrorPosition = 0; + var sb = new StringBuilder((int) capacity); + var expectedErrorPosition = 0; for (long i = 0; i < recordCount; i++) { @@ -69,7 +65,7 @@ private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long ba else realFieldCount = fieldCount; - for (int j = 0; j < realFieldCount; j++) + for (var j = 0; j < realFieldCount; j++) { sb.Append(i); sb.Append(j); @@ -91,7 +87,7 @@ private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long ba // test csv - using (CsvReader csv = new CsvReader(new StringReader(sb.ToString()), false, bufferSize)) + using (var csv = new CsvReader(new StringReader(sb.ToString()), false, bufferSize)) { csv.MissingFieldAction = action; Assert.AreEqual(fieldCount, csv.FieldCount); @@ -104,7 +100,7 @@ private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long ba if (!sequentialAccess) CheckMissingFieldValueUnquoted(csv, badFieldIndex, badRecordIndex, badFieldIndex, expectedErrorPosition, sequentialAccess, action); - for (int i = 0; i < csv.FieldCount; i++) + for (var i = 0; i < csv.FieldCount; i++) CheckMissingFieldValueUnquoted(csv, i, badRecordIndex, badFieldIndex, expectedErrorPosition, sequentialAccess, action); } } @@ -112,10 +108,10 @@ private void CheckMissingFieldUnquoted(long recordCount, int fieldCount, long ba private void CheckMissingFieldValueUnquoted(CsvReader csv, int fieldIndex, long badRecordIndex, int badFieldIndex, int expectedErrorPosition, bool sequentialAccess, MissingFieldAction action) { - const string Message = "RecordIndex={0}; FieldIndex={1}; Position={2}; Sequential={3}; Action={4}"; + const string message = "RecordIndex={0}; FieldIndex={1}; Position={2}; Sequential={3}; Action={4}"; // make sure s contains garbage as to not have false successes - string s = "asdfasdfasdf"; + var s = "asdfasdfasdf"; try { @@ -123,29 +119,31 @@ private void CheckMissingFieldValueUnquoted(CsvReader csv, int fieldIndex, long } catch (MissingFieldCsvException ex) { - Assert.AreEqual(badRecordIndex, ex.CurrentRecordIndex, Message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); - Assert.IsTrue(fieldIndex >= badFieldIndex, Message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); - Assert.AreEqual(expectedErrorPosition, ex.CurrentPosition, Message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); + Assert.AreEqual(badRecordIndex, ex.CurrentRecordIndex, message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); + Assert.IsTrue(fieldIndex >= badFieldIndex, message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); + Assert.AreEqual(expectedErrorPosition, ex.CurrentPosition, message, ex.CurrentRecordIndex, ex.CurrentFieldIndex, ex.CurrentPosition, sequentialAccess, action); return; } if (csv.CurrentRecordIndex != badRecordIndex || fieldIndex < badFieldIndex) - Assert.AreEqual(csv.CurrentRecordIndex.ToString() + fieldIndex.ToString(), s, Message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); + { + Assert.AreEqual(csv.CurrentRecordIndex.ToString() + fieldIndex.ToString(), s, message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); + } else { switch (action) { case MissingFieldAction.ReplaceByEmpty: - Assert.AreEqual(string.Empty, s, Message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); + Assert.AreEqual(string.Empty, s, message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); break; case MissingFieldAction.ReplaceByNull: - Assert.IsNull(s, Message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); + Assert.IsNull(s, message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); break; case MissingFieldAction.ParseError: - Assert.Fail("Failed to throw ParseError. - " + Message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); + Assert.Fail("Failed to throw ParseError. - " + message, csv.CurrentRecordIndex, fieldIndex, -1, sequentialAccess, action); break; default: @@ -155,230 +153,156 @@ private void CheckMissingFieldValueUnquoted(CsvReader csv, int fieldIndex, long } } - #endregion - - [Test()] + [Test] public void MissingFieldUnquotedTest1() { CheckMissingFieldUnquoted(4, 4, 2, 2, CsvReader.DefaultBufferSize); CheckMissingFieldUnquoted(4, 4, 2, 2, CsvReader.DefaultBufferSize); } - [Test()] + [Test] public void MissingFieldUnquotedTest2() { // With bufferSize = 16, faulty new line char is at the start of next buffer read CheckMissingFieldUnquoted(4, 4, 2, 3, 16); } - [Test()] + [Test] public void MissingFieldUnquotedTest3() { // test missing field when end of buffer has been reached CheckMissingFieldUnquoted(3, 4, 2, 3, 16); } - [Test()] - [ExpectedException(typeof(MissingFieldCsvException))] + [Test] public void MissingFieldAllQuotedFields_Issue_12() { - string sample = + var sample = "\"A\",\"B\"\n" + "\"1\",\"2\"\n" + "\"3\"\n" + "\"5\",\"6\""; - string[] buffer = new string[2]; + var buffer = new string[2]; - using (CsvReader csv = new CsvReader(new StringReader(sample), false)) + Assert.Throws(() => { - while (csv.ReadNextRecord()) + using (var csv = new CsvReader(new StringReader(sample), false)) { - csv.CopyCurrentRecordTo(buffer); + while (csv.ReadNextRecord()) + { + csv.CopyCurrentRecordTo(buffer); + } } - } + }); } - [Test()] - [ExpectedException(typeof(MissingFieldCsvException))] + [Test] public void MissingFieldQuotedTest1() { - const string Data = "a,b,c,d\n1,1,1,1\n2,\"2\"\n3,3,3,3"; + const string data = "a,b,c,d\n1,1,1,1\n2,\"2\"\n3,3,3,3"; - try + var ep = ParseException(data); + if (!(ep.CurrentRecordIndex == 2 && ep.CurrentFieldIndex == 2 && ep.CurrentPosition == 22)) { - using (CsvReader csv = new CsvReader(new StringReader(Data), false)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MissingFieldCsvException ex) - { - if (ex.CurrentRecordIndex == 2 && ex.CurrentFieldIndex == 2 && ex.CurrentPosition == 22) - throw ex; + throw ep; } } - [Test()] - [ExpectedException(typeof(MissingFieldCsvException))] + [Test] public void MissingFieldQuotedTest2() { - const string Data = "a,b,c,d\n1,1,1,1\n2,\"2\",\n3,3,3,3"; + const string data = "a,b,c,d\n1,1,1,1\n2,\"2\",\n3,3,3,3"; - try - { - using (CsvReader csv = new CsvReader(new StringReader(Data), false, 11)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MissingFieldCsvException ex) - { - if (ex.CurrentRecordIndex == 2 && ex.CurrentFieldIndex == 2 && ex.CurrentPosition == 1) - throw ex; - } + // NOTE: Buffer size affects reported error position - surely should be based on source doc position? + var ep = ParseException(data, 11); + if (!(ep.CurrentRecordIndex == 2 && ep.CurrentFieldIndex == 2 && ep.CurrentPosition == 1)) + throw ep; } - [Test()] - [ExpectedException(typeof(MissingFieldCsvException))] + [Test] public void MissingFieldQuotedTest3() { - const string Data = "a,b,c,d\n1,1,1,1\n2,\"2\"\n\"3\",3,3,3"; + const string data = "a,b,c,d\n1,1,1,1\n2,\"2\"\n\"3\",3,3,3"; - try - { - using (CsvReader csv = new CsvReader(new StringReader(Data), false)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MissingFieldCsvException ex) - { - if (ex.CurrentRecordIndex == 2 && ex.CurrentFieldIndex == 2 && ex.CurrentPosition == 22) - throw ex; - } + var ep = ParseException(data); + if (!(ep.CurrentRecordIndex == 2 && ep.CurrentFieldIndex == 2 && ep.CurrentPosition == 22)) + throw ep; } - [Test()] - [ExpectedException(typeof(MissingFieldCsvException))] + [Test] public void MissingFieldQuotedTest4() { - const string Data = "a,b,c,d\n1,1,1,1\n2,\"2\",\n\"3\",3,3,3"; + const string data = "a,b,c,d\n1,1,1,1\n2,\"2\",\n\"3\",3,3,3"; - try + // NOTE: Buffer size affects reported error position - surely should be based on source doc position? + var ep = ParseException(data, 11); + if (!(ep.CurrentRecordIndex == 2 && ep.CurrentFieldIndex == 2 && ep.CurrentPosition == 1)) { - using (CsvReader csv = new CsvReader(new StringReader(Data), false, 11)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MissingFieldCsvException ex) - { - if (ex.CurrentRecordIndex == 2 && ex.CurrentFieldIndex == 2 && ex.CurrentPosition == 1) - throw ex; + throw ep; } } - [Test()] - [ExpectedException(typeof(MalformedCsvException))] + [Test] public void MissingDelimiterAfterQuotedFieldTest1() { - const string Data = "\"111\",\"222\"\"333\""; + const string data = "\"111\",\"222\"\"333\""; - try + var ep = ParseExceptionTrimmingOptions(data); + if (!(ep.CurrentRecordIndex == 0 && ep.CurrentFieldIndex == 1 && ep.CurrentPosition == 11)) { - using (CsvReader csv = new CsvReader(new StringReader(Data), false, ',', '"', '\\', '#', ValueTrimmingOptions.UnquotedOnly)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MalformedCsvException ex) - { - if (ex.CurrentRecordIndex == 0 && ex.CurrentFieldIndex ==1 && ex.CurrentPosition == 11) - throw ex; + throw ep; } } - [Test()] - [ExpectedException(typeof(MalformedCsvException))] + [Test] public void MissingDelimiterAfterQuotedFieldTest2() { - const string Data = "\"111\",\"222\",\"333\"\n\"111\",\"222\"\"333\""; + const string data = "\"111\",\"222\",\"333\"\n\"111\",\"222\"\"333\""; - try - { - using (CsvReader csv = new CsvReader(new StringReader(Data), false, ',', '"', '\\', '#', ValueTrimmingOptions.UnquotedOnly)) - { - while (csv.ReadNextRecord()) - for (int i = 0; i < csv.FieldCount; i++) - { - string s = csv[i]; - } - } - } - catch (MalformedCsvException ex) + var ep = ParseExceptionTrimmingOptions(data); + if (!(ep.CurrentRecordIndex == 1 && ep.CurrentFieldIndex == 1 && ep.CurrentPosition == 29)) { - if (ex.CurrentRecordIndex == 1 && ex.CurrentFieldIndex == 1 && ex.CurrentPosition == 29) - throw ex; + throw ep; } } - [Test()] + [Test] public void MoreFieldsTest_AdvanceToNextLine() { - const string Data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; + const string data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(Data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { csv.SupportsMultiline = false; csv.DefaultParseErrorAction = ParseErrorAction.AdvanceToNextLine; while (csv.ReadNextRecord()) { - for (int i = 0; i < csv.FieldCount; i++) + for (var i = 0; i < csv.FieldCount; i++) { - string s = csv[i]; + var s = csv[i]; } } } } - [Test()] + [Test] public void MoreFieldsTest_RaiseEvent() { - const string Data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; + const string data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(Data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { - bool sawError = false; + var sawError = false; csv.SupportsMultiline = false; csv.DefaultParseErrorAction = ParseErrorAction.RaiseEvent; csv.ParseError += (obj, args) => sawError = true; while (csv.ReadNextRecord()) { - for (int i = 0; i < csv.FieldCount; i++) + for (var i = 0; i < csv.FieldCount; i++) { - string s = csv[i]; + var s = csv[i]; } } @@ -386,39 +310,40 @@ public void MoreFieldsTest_RaiseEvent() } } - [Test, ExpectedException(typeof(MalformedCsvException))] + [Test] public void MoreFieldsTest_ThrowsException() { - const string Data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; + const string data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(Data), false)) + Assert.Throws(() => { - bool sawError = false; - csv.SupportsMultiline = false; - csv.DefaultParseErrorAction = ParseErrorAction.ThrowException; - while (csv.ReadNextRecord()) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { - for (int i = 0; i < csv.FieldCount; i++) + csv.SupportsMultiline = false; + csv.DefaultParseErrorAction = ParseErrorAction.ThrowException; + while (csv.ReadNextRecord()) { - string s = csv[i]; + for (var i = 0; i < csv.FieldCount; i++) + { + var s = csv[i]; + } } } - - } + }); } - [Test()] + [Test] public void MoreFieldsMultilineTest() { - const string Data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; + const string data = "ORIGIN,DESTINATION\nPHL,FLL,kjhkj kjhkjh,eg,fhgf\nNYC,LAX"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(Data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { while (csv.ReadNextRecord()) { - for (int i = 0; i < csv.FieldCount; i++) + for (var i = 0; i < csv.FieldCount; i++) { - string s = csv[i]; + var s = csv[i]; } } } @@ -427,9 +352,9 @@ public void MoreFieldsMultilineTest() [Test] public void ParseErrorBeforeInitializeTest() { - const string Data = "\"0022 - SKABELON\";\"\"Tandremstrammer\";\"\";\"0,00\";\"\"\n\"15907\";\"\"BOLT TIL 2-05-405\";\"\";\"42,50\";\"4027816159070\"\n\"19324\";\"FJEDER TIL 2-05-405\";\"\";\"14,50\";\"4027816193241\""; + const string data = "\"0022 - SKABELON\";\"\"Tandremstrammer\";\"\";\"0,00\";\"\"\n\"15907\";\"\"BOLT TIL 2-05-405\";\"\";\"42,50\";\"4027816159070\"\n\"19324\";\"FJEDER TIL 2-05-405\";\"\";\"14,50\";\"4027816193241\""; - using (var csv = new CsvReader(new System.IO.StringReader(Data), false, ';')) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ';')) { csv.DefaultParseErrorAction = ParseErrorAction.AdvanceToNextLine; @@ -448,11 +373,11 @@ public void ParseErrorBeforeInitializeTest() [Test] public void LastFieldEmptyFollowedByMissingFieldsOnNextRecord() { - const string Data = "a,b,c,d,e" + const string data = "a,b,c,d,e" + "\na,b,c,d," + "\na,b,"; - using (var csv = new CsvReader(new StringReader(Data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { csv.MissingFieldAction = MissingFieldAction.ReplaceByNull; @@ -473,5 +398,65 @@ public void LastFieldEmptyFollowedByMissingFieldsOnNextRecord() Assert.IsFalse(csv.ReadNextRecord()); } } + + private T ParseException(string data) + where T : Exception + { + var ep = Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(data), false)) + { + while (csv.ReadNextRecord()) + { + for (var i = 0; i < csv.FieldCount; i++) + { + var s = csv[i]; + } + } + } + }); + + return ep; + } + + private T ParseException(string data, int bufferSize) + where T : Exception + { + var ep = Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(data), false, bufferSize)) + { + while (csv.ReadNextRecord()) + { + for (var i = 0; i < csv.FieldCount; i++) + { + var s = csv[i]; + } + } + } + }); + + return ep; + } + + private T ParseExceptionTrimmingOptions(string data, ValueTrimmingOptions options = ValueTrimmingOptions.UnquotedOnly) + where T : Exception + { + var ep = Assert.Throws(() => + { + using (var csv = new CsvReader(new StringReader(data), false, ',', '"', '\\', '#', options)) + { + while (csv.ReadNextRecord()) + { + for (var i = 0; i < csv.FieldCount; i++) + { + var s = csv[i]; + } + } + } + }); + + return ep; + } } } \ No newline at end of file diff --git a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderTest.cs b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderTest.cs index a8cadd3..7aadd56 100644 --- a/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderTest.cs +++ b/code/LumenWorks.Framework.Tests.Unit/IO/Csv/CsvReaderTest.cs @@ -24,232 +24,238 @@ using System; -using System.Collections; -using System.Globalization; using System.IO; using System.Text; -using System.Windows.Forms; + using NUnit.Framework; using LumenWorks.Framework.IO.Csv; namespace LumenWorks.Framework.Tests.Unit.IO.Csv { - [TestFixture()] + [TestFixture] public class CsvReaderTest { - #region Argument validation tests - - #region Constructors - - [Test] - [ExpectedException(typeof(ArgumentNullException))] - public void ArgumentTestCtor1() - { - using (CsvReader csv = new CsvReader(null, false)) - { - } - } - [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] - public void ArgumentTestCtor2() + public void ConstructorThrowsNull() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false, 0)) + Assert.Throws(() => { - } + using (var csv = new CsvReader(null, false)) + { + } + }); } - [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] - public void ArgumentTestCtor3() + [TestCase(0)] + [TestCase(-1)] + public void ConstructorThrowsOutOfRange(int bufferSize) { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false, -1)) + Assert.Throws(() => { - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false, bufferSize)) + { + } + }); } [Test] public void ArgumentTestCtor4() { - using (CsvReader csv = new CsvReader(new StringReader(""), false, 123)) + using (var csv = new CsvReader(new StringReader(""), false, 123)) { Assert.AreEqual(123, csv.BufferSize); } } - #endregion - - #region Indexers - [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArgumentTestIndexer1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[-1]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[-1]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArgumentTestIndexer2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[CsvReaderSampleData.SampleData1RecordCount]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[CsvReaderSampleData.SampleData1RecordCount]; + } + }); } [Test] - [ExpectedException(typeof(InvalidOperationException))] public void ArgumentTestIndexer3() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv["asdf"]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv["asdf"]; + } + }); } [Test] - [ExpectedException(typeof(InvalidOperationException))] public void ArgumentTestIndexer4() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[CsvReaderSampleData.SampleData1Header0]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[CsvReaderSampleData.SampleData1Header0]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentNullException))] public void ArgumentTestIndexer5() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[null]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[null]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentNullException))] public void ArgumentTestIndexer6() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[string.Empty]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[string.Empty]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentNullException))] public void ArgumentTestIndexer7() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + Assert.Throws(() => { - string s = csv[null]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + var s = csv[null]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentNullException))] public void ArgumentTestIndexer8() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + Assert.Throws(() => { - string s = csv[string.Empty]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + var s = csv[string.Empty]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentException))] public void ArgumentTestIndexer9() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + Assert.Throws(() => { - string s = csv["asdf"]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + var s = csv["asdf"]; + } + }); } [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArgumentTestIndexer10() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - string s = csv[-1, 0]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + var s = csv[-1, 0]; + } + }); } - #endregion - - #region CopyCurrentRecordTo - [Test] - [ExpectedException(typeof(ArgumentNullException))] public void ArgumentTestCopyCurrentRecordTo1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.CopyCurrentRecordTo(null); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.CopyCurrentRecordTo(null); + } + }); } [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArgumentTestCopyCurrentRecordTo2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.CopyCurrentRecordTo(new string[1], -1); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.CopyCurrentRecordTo(new string[1], -1); + } + }); } [Test] - [ExpectedException(typeof(ArgumentOutOfRangeException))] public void ArgumentTestCopyCurrentRecordTo3() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.CopyCurrentRecordTo(new string[1], 1); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.CopyCurrentRecordTo(new string[1], 1); + } + }); } [Test] - [ExpectedException(typeof(ArgumentException))] public void ArgumentTestCopyCurrentRecordTo4() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.ReadNextRecord(); - csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount - 1], 0); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.ReadNextRecord(); + csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount - 1], 0); + } + }); } [Test] - [ExpectedException(typeof(ArgumentException))] public void ArgumentTestCopyCurrentRecordTo5() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.ReadNextRecord(); - csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount], 1); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.ReadNextRecord(); + csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount], 1); + } + }); } - #endregion - - #endregion - - #region Parsing tests - [Test] public void ParsingTest1() { const string data = "1\r\n\r\n1"; - using (CsvReader csv = new CsvReader(new StringReader(data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -267,7 +273,7 @@ public void ParsingTest2() // ["Bob said, ""Hey!""",2, 3 ] const string data = "\"Bob said, \"\"Hey!\"\"\",2, 3 "; - using (CsvReader csv = new CsvReader(new StringReader(data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(@"Bob said, ""Hey!""", csv[0]); @@ -277,7 +283,7 @@ public void ParsingTest2() Assert.IsFalse(csv.ReadNextRecord()); } - using (CsvReader csv = new CsvReader(new StringReader(data), false, ',', '"', '"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new StringReader(data), false, ',', '"', '"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(@"Bob said, ""Hey!""", csv[0]); @@ -293,7 +299,7 @@ public void ParsingTest3() { const string data = "1\r2\n"; - using (CsvReader csv = new CsvReader(new StringReader(data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -310,7 +316,7 @@ public void ParsingTest4() { const string data = "\"\n\r\n\n\r\r\",,\t,\n"; - using (CsvReader csv = new CsvReader(new StringReader(data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); @@ -343,9 +349,9 @@ public void ParsingTest5() [Test] public void ParsingTest5_RandomBufferSizes() { - Random random = new Random(); + var random = new Random(); - for (int i = 0; i < 1000; i++) + for (var i = 0; i < 1000; i++) Checkdata5(random.Next(1, 512)); } @@ -355,7 +361,7 @@ public void Checkdata5(int bufferSize) try { - using (CsvReader csv = new CsvReader(new StringReader(data), true, bufferSize)) + using (var csv = new CsvReader(new StringReader(data), true, bufferSize)) { CsvReaderSampleData.CheckSampleData1(csv, true); } @@ -369,7 +375,7 @@ public void Checkdata5(int bufferSize) [Test] public void ParsingTest6() { - using (CsvReader csv = new CsvReader(new System.IO.StringReader("1,2"), false)) + using (var csv = new CsvReader(new System.IO.StringReader("1,2"), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -384,7 +390,7 @@ public void ParsingTest6() [Test] public void ParsingTest7() { - using (CsvReader csv = new CsvReader(new System.IO.StringReader("\r\n1\r\n"), false)) + using (var csv = new CsvReader(new System.IO.StringReader("\r\n1\r\n"), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(',', csv.Delimiter); @@ -400,7 +406,7 @@ public void ParsingTest8() { const string data = "\"bob said, \"\"Hey!\"\"\",2, 3 "; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("bob said, \"Hey!\"", csv[0]); @@ -418,7 +424,7 @@ public void ParsingTest9() { const string data = ","; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(String.Empty, csv[0]); @@ -435,7 +441,7 @@ public void ParsingTest10() { const string data = "1\r2"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -454,7 +460,7 @@ public void ParsingTest11() { const string data = "1\n2"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -473,7 +479,7 @@ public void ParsingTest12() { const string data = "1\r\n2"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -492,7 +498,7 @@ public void ParsingTest13() { const string data = "1\r"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -507,7 +513,7 @@ public void ParsingTest14() { const string data = "1\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -522,7 +528,7 @@ public void ParsingTest15() { const string data = "1\r\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -537,7 +543,7 @@ public void ParsingTest16() { const string data = "1\r2\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, '\r', '"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, '\r', '"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -553,7 +559,7 @@ public void ParsingTest17() { const string data = "\"July 4th, 2005\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("July 4th, 2005", csv[0]); @@ -568,7 +574,7 @@ public void ParsingTest18() { const string data = " 1"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(" 1", csv[0]); @@ -581,9 +587,9 @@ public void ParsingTest18() [Test] public void ParsingTest19() { - string data = String.Empty; + var data = String.Empty; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsFalse(csv.ReadNextRecord()); } @@ -594,7 +600,7 @@ public void ParsingTest20() { const string data = "user_id,name\r\n1,Bruce"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), true)) + using (var csv = new CsvReader(new System.IO.StringReader(data), true)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -613,7 +619,7 @@ public void ParsingTest21() { const string data = "\"data \r\n here\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("data \r\n here", csv[0]); @@ -628,7 +634,7 @@ public void ParsingTest22() { const string data = "\r\r\n1\r"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, '\r', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, '\r', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(3, csv.FieldCount); @@ -650,7 +656,7 @@ public void ParsingTest23() { const string data = "\"double\"\"\"\"double quotes\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("double\"\"double quotes", csv[0]); @@ -665,7 +671,7 @@ public void ParsingTest24() { const string data = "1\r"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -680,7 +686,7 @@ public void ParsingTest25() { const string data = "1\r\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -695,7 +701,7 @@ public void ParsingTest26() { const string data = "1\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -710,7 +716,7 @@ public void ParsingTest27() { const string data = "'bob said, ''Hey!''',2, 3 "; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\'', '\'', '#', ValueTrimmingOptions.UnquotedOnly)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\'', '\'', '#', ValueTrimmingOptions.UnquotedOnly)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("bob said, 'Hey!'", csv[0]); @@ -728,7 +734,7 @@ public void ParsingTest28() { const string data = "\"data \"\" here\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\0', '\\', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\0', '\\', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("\"data \"\" here\"", csv[0]); @@ -741,9 +747,9 @@ public void ParsingTest28() [Test] public void ParsingTest29() { - string data = new String('a', 75) + "," + new String('b', 75); + var data = new String('a', 75) + "," + new String('b', 75); - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(new String('a', 75), csv[0]); @@ -759,7 +765,7 @@ public void ParsingTest30() { const string data = "1\r\n\r\n1"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -778,7 +784,7 @@ public void ParsingTest31() { const string data = "1\r\n# bunch of crazy stuff here\r\n1"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -797,7 +803,7 @@ public void ParsingTest32() { const string data = "\"1\",Bruce\r\n\"2\n\",Toni\r\n\"3\",Brian\r\n"; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("1", csv[0]); @@ -823,7 +829,7 @@ public void ParsingTest33() { const string data = "\"double\\\\\\\\double backslash\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\\', '#', ValueTrimmingOptions.None)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\\', '#', ValueTrimmingOptions.None)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("double\\\\double backslash", csv[0]); @@ -839,7 +845,7 @@ public void ParsingTest34() const string data = "\"Chicane\", \"Love on the Run\", \"Knight Rider\", \"This field contains a comma, but it doesn't matter as the field is quoted\"\r\n" + "\"Samuel Barber\", \"Adagio for Strings\", \"Classical\", \"This field contains a double quote character, \"\", but it doesn't matter as it is escaped\""; - using (CsvReader csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) + using (var csv = new CsvReader(new System.IO.StringReader(data), false, ',', '\"', '\"', '#', ValueTrimmingOptions.UnquotedOnly)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("Chicane", csv[0]); @@ -862,7 +868,7 @@ public void ParsingTest34() [Test] public void ParsingTest35() { - using (CsvReader csv = new CsvReader(new StringReader("\t"), false, '\t')) + using (var csv = new CsvReader(new StringReader("\t"), false, '\t')) { Assert.AreEqual(2, csv.FieldCount); @@ -878,7 +884,7 @@ public void ParsingTest35() [Test] public void ParsingTest36() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { csv.SupportsMultiline = false; CsvReaderSampleData.CheckSampleData1(csv, true); @@ -888,7 +894,7 @@ public void ParsingTest36() [Test] public void ParsingTest37() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) { csv.SupportsMultiline = false; CsvReaderSampleData.CheckSampleData1(csv, true); @@ -898,9 +904,9 @@ public void ParsingTest37() [Test] public void ParsingTest38() { - using (CsvReader csv = new CsvReader(new StringReader("abc,def,ghi\n"), false)) + using (var csv = new CsvReader(new StringReader("abc,def,ghi\n"), false)) { - int fieldCount = csv.FieldCount; + var fieldCount = csv.FieldCount; Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("abc", csv[0]); @@ -914,9 +920,9 @@ public void ParsingTest38() [Test] public void ParsingTest39() { - using (CsvReader csv = new CsvReader(new StringReader("00,01, \n10,11, "), false, CsvReader.DefaultDelimiter, CsvReader.DefaultQuote, CsvReader.DefaultEscape, CsvReader.DefaultComment, ValueTrimmingOptions.UnquotedOnly, 1)) + using (var csv = new CsvReader(new StringReader("00,01, \n10,11, "), false, CsvReader.DefaultDelimiter, CsvReader.DefaultQuote, CsvReader.DefaultEscape, CsvReader.DefaultComment, ValueTrimmingOptions.UnquotedOnly, 1)) { - int fieldCount = csv.FieldCount; + var fieldCount = csv.FieldCount; Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual("00", csv[0]); @@ -935,7 +941,7 @@ public void ParsingTest39() [Test] public void ParsingTest40() { - using (CsvReader csv = new CsvReader(new StringReader("\"00\",\n\"10\","), false)) + using (var csv = new CsvReader(new StringReader("\"00\",\n\"10\","), false)) { Assert.AreEqual(2, csv.FieldCount); @@ -954,7 +960,7 @@ public void ParsingTest40() [Test] public void ParsingTest41() { - using (CsvReader csv = new CsvReader(new StringReader("First record ,Second record"), false, CsvReader.DefaultDelimiter, CsvReader.DefaultQuote, CsvReader.DefaultEscape, CsvReader.DefaultComment, ValueTrimmingOptions.UnquotedOnly, 16)) + using (var csv = new CsvReader(new StringReader("First record ,Second record"), false, CsvReader.DefaultDelimiter, CsvReader.DefaultQuote, CsvReader.DefaultEscape, CsvReader.DefaultComment, ValueTrimmingOptions.UnquotedOnly, 16)) { Assert.AreEqual(2, csv.FieldCount); @@ -997,17 +1003,19 @@ public void ParsingTest43() } } - [ExpectedException(typeof(MalformedCsvException))] [Test] public void ParsingTest44() { const string data = "\"01234567891\"\r\ntest"; - using (var csv = new CsvReader(new StringReader(data), false)) + Assert.Throws(() => { - csv.MaxQuotedFieldLength = 10; - csv.ReadNextRecord(); - } + using (var csv = new CsvReader(new StringReader(data), false)) + { + csv.MaxQuotedFieldLength = 10; + csv.ReadNextRecord(); + } + }); } [Test] @@ -1023,25 +1031,21 @@ public void ParsingTest45() } } - #endregion - - #region UnicodeParsing tests - [Test] public void UnicodeParsingTest1() { // control characters and comma are skipped - char[] raw = new char[65536 - 13]; + var raw = new char[65536 - 13]; - for (int i = 0; i < raw.Length; i++) + for (var i = 0; i < raw.Length; i++) raw[i] = (char)(i + 14); raw[44 - 14] = ' '; // skip comma - string data = new string(raw); + var data = new string(raw); - using (CsvReader csv = new CsvReader(new StringReader(data), false)) + using (var csv = new CsvReader(new StringReader(data), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(data, csv[0]); @@ -1054,9 +1058,9 @@ public void UnicodeParsingTest2() { byte[] buffer; - string test = "München"; + var test = "München"; - using (MemoryStream stream = new MemoryStream()) + using (var stream = new MemoryStream()) { using (TextWriter writer = new StreamWriter(stream, Encoding.Unicode)) { @@ -1066,7 +1070,7 @@ public void UnicodeParsingTest2() buffer = stream.ToArray(); } - using (CsvReader csv = new CsvReader(new StreamReader(new MemoryStream(buffer), Encoding.Unicode, false), false)) + using (var csv = new CsvReader(new StreamReader(new MemoryStream(buffer), Encoding.Unicode, false), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(test, csv[0]); @@ -1079,9 +1083,9 @@ public void UnicodeParsingTest3() { byte[] buffer; - string test = "München"; + var test = "München"; - using (MemoryStream stream = new MemoryStream()) + using (var stream = new MemoryStream()) { using (TextWriter writer = new StreamWriter(stream, Encoding.Unicode)) { @@ -1091,7 +1095,7 @@ public void UnicodeParsingTest3() buffer = stream.ToArray(); } - using (CsvReader csv = new CsvReader(new StreamReader(new MemoryStream(buffer), Encoding.Unicode, false), false)) + using (var csv = new CsvReader(new StreamReader(new MemoryStream(buffer), Encoding.Unicode, false), false)) { Assert.IsTrue(csv.ReadNextRecord()); Assert.AreEqual(test, csv[0]); @@ -1099,29 +1103,21 @@ public void UnicodeParsingTest3() } } - #endregion - - #region FieldCount - [Test] public void FieldCountTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) { CsvReaderSampleData.CheckSampleData1(csv, true); } } - #endregion - - #region GetFieldHeaders - [Test] public void GetFieldHeadersTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) { - string[] headers = csv.GetFieldHeaders(); + var headers = csv.GetFieldHeaders(); Assert.IsNotNull(headers); Assert.AreEqual(0, headers.Length); @@ -1131,9 +1127,9 @@ public void GetFieldHeadersTest1() [Test] public void GetFieldHeadersTest2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { - string[] headers = csv.GetFieldHeaders(); + var headers = csv.GetFieldHeaders(); Assert.IsNotNull(headers); Assert.AreEqual(CsvReaderSampleData.SampleData1RecordCount, headers.Length); @@ -1157,9 +1153,9 @@ public void GetFieldHeadersTest2() [Test] public void GetFieldHeadersTest_EmptyCsv() { - using (CsvReader csv = new CsvReader(new StringReader("#asdf\n\n#asdf,asdf"), true)) + using (var csv = new CsvReader(new StringReader("#asdf\n\n#asdf,asdf"), true)) { - string[] headers = csv.GetFieldHeaders(); + var headers = csv.GetFieldHeaders(); Assert.IsNotNull(headers); Assert.AreEqual(0, headers.Length); @@ -1181,7 +1177,7 @@ public void GetFieldHeaders_WithEmptyHeaderNames(string defaultHeaderName) Assert.IsFalse(csv.ReadNextRecord()); Assert.AreEqual(8, csv.FieldCount); - string[] headers = csv.GetFieldHeaders(); + var headers = csv.GetFieldHeaders(); Assert.AreEqual(csv.FieldCount, headers.Length); Assert.AreEqual("aaa", headers[3]); @@ -1190,27 +1186,23 @@ public void GetFieldHeaders_WithEmptyHeaderNames(string defaultHeaderName) } } - #endregion - [Test] public void CachedNoHeader() { var csv = new CachedCsvReader(new StringReader("12345678;Hello\r\n78945612;World"), false, ';'); - var dgv = new DataGridView(); + var dgv = new System.Windows.Forms.DataGridView(); dgv.DataSource = csv; dgv.Refresh(); } - #region HasHeader - [Test] public void HasHeader_NullHeader() { string header = null; - using (CsvReader csvReader = new CsvReader(new StringReader("Header1,Header2\r\nValue1,Value2"), true)) + using (var csvReader = new CsvReader(new StringReader("Header1,Header2\r\nValue1,Value2"), true)) { Assert.Throws(delegate { @@ -1222,9 +1214,9 @@ public void HasHeader_NullHeader() [Test] public void HasHeader_HeaderExists() { - string header = "First Name"; + var header = "First Name"; - using (CsvReader csvReader = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csvReader = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { Assert.IsTrue(csvReader.HasHeader(header)); } @@ -1233,9 +1225,9 @@ public void HasHeader_HeaderExists() [Test] public void HasHeader_HeaderDoesNotExist() { - string header = "Phone Number"; + var header = "Phone Number"; - using (CsvReader csvReader = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csvReader = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { Assert.IsFalse(csvReader.HasHeader(header)); } @@ -1244,38 +1236,32 @@ public void HasHeader_HeaderDoesNotExist() [Test] public void HasHeader_NullFieldHeaders() { - string header = "NonExistingHeader"; + var header = "NonExistingHeader"; - using (CsvReader csvReader = new CsvReader(new StringReader("Value1,Value2"), false)) + using (var csvReader = new CsvReader(new StringReader("Value1,Value2"), false)) { Assert.IsFalse(csvReader.HasHeader(header)); } } - #endregion - - #region CopyCurrentRecordTo - [Test] - [ExpectedException(typeof(InvalidOperationException))] public void CopyCurrentRecordToTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + Assert.Throws(() => { - csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount]); - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + { + csv.CopyCurrentRecordTo(new string[CsvReaderSampleData.SampleData1RecordCount]); + } + }); } - #endregion - - #region MoveTo tests - [Test] public void MoveToTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { - for (int i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) + for (var i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) { Assert.IsTrue(csv.MoveTo(i)); CsvReaderSampleData.CheckSampleData1(i, csv); @@ -1286,7 +1272,7 @@ public void MoveToTest1() [Test] public void MoveToTest2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { Assert.IsTrue(csv.MoveTo(1)); Assert.IsFalse(csv.MoveTo(0)); @@ -1296,7 +1282,7 @@ public void MoveToTest2() [Test] public void MoveToTest3() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { Assert.IsFalse(csv.MoveTo(CsvReaderSampleData.SampleData1RecordCount)); } @@ -1305,11 +1291,11 @@ public void MoveToTest3() [Test] public void MoveToTest4() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { csv.SupportsMultiline = false; - string[] headers = csv.GetFieldHeaders(); + var headers = csv.GetFieldHeaders(); Assert.IsTrue(csv.MoveTo(2)); Assert.AreEqual(2, csv.CurrentRecordIndex); @@ -1320,7 +1306,7 @@ public void MoveToTest4() [Test] public void MoveToTest5() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), false)) { Assert.IsTrue(csv.MoveTo(-1)); csv.MoveTo(0); @@ -1328,18 +1314,14 @@ public void MoveToTest5() } } - #endregion - - #region Iteration tests - [Test] public void IterationTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { - int index = 0; + var index = 0; - foreach (string[] record in csv) + foreach (var record in csv) { CsvReaderSampleData.CheckSampleData1(csv.HasHeaders, index, record); index++; @@ -1350,11 +1332,11 @@ public void IterationTest1() [Test] public void IterationTest2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { string[] previous = null; - foreach (string[] record in csv) + foreach (var record in csv) { Assert.IsFalse(object.ReferenceEquals(previous, record)); @@ -1363,52 +1345,48 @@ public void IterationTest2() } } - #endregion - - #region Indexer tests - [Test] public void IndexerTest1() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) { - for (int i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) + for (var i = 0; i < CsvReaderSampleData.SampleData1RecordCount; i++) { - string s = csv[i, 0]; + var s = csv[i, 0]; CsvReaderSampleData.CheckSampleData1(i, csv); } } } [Test] - [ExpectedException(typeof(InvalidOperationException))] public void IndexerTest2() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + Assert.Throws(() => { - string s = csv[1, 0]; - s = csv[0, 0]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + var s = csv[1, 0]; + s = csv[0, 0]; + } + }); } [Test] - [ExpectedException(typeof(InvalidOperationException))] public void IndexerTest3() { - using (CsvReader csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + Assert.Throws(() => { - string s = csv[CsvReaderSampleData.SampleData1RecordCount, 0]; - } + using (var csv = new CsvReader(new StringReader(CsvReaderSampleData.SampleData1), true)) + { + var s = csv[CsvReaderSampleData.SampleData1RecordCount, 0]; + } + }); } - #endregion - - #region SkipEmptyLines - [Test] public void SkipEmptyLinesTest1() { - using (CsvReader csv = new CsvReader(new StringReader("00\n\n10"), false)) + using (var csv = new CsvReader(new StringReader("00\n\n10"), false)) { csv.SkipEmptyLines = false; @@ -1430,7 +1408,7 @@ public void SkipEmptyLinesTest1() [Test] public void SkipEmptyLinesTest2() { - using (CsvReader csv = new CsvReader(new StringReader("00\n\n10"), false)) + using (var csv = new CsvReader(new StringReader("00\n\n10"), false)) { csv.SkipEmptyLines = true; @@ -1446,10 +1424,6 @@ public void SkipEmptyLinesTest2() } } - #endregion - - #region Trimming tests - [TestCase("", ValueTrimmingOptions.None, new string[] { })] [TestCase("", ValueTrimmingOptions.QuotedOnly, new string[] { })] [TestCase("", ValueTrimmingOptions.UnquotedOnly, new string[] { })] @@ -1475,7 +1449,5 @@ public void TrimFieldValuesTest(string data, ValueTrimmingOptions trimmingOption } } } - - #endregion } } \ No newline at end of file diff --git a/code/LumenWorks.Framework.Tests.Unit/LumenWorks.Framework.Tests.Unit.csproj b/code/LumenWorks.Framework.Tests.Unit/LumenWorks.Framework.Tests.Unit.csproj index d86adc5..7311020 100644 --- a/code/LumenWorks.Framework.Tests.Unit/LumenWorks.Framework.Tests.Unit.csproj +++ b/code/LumenWorks.Framework.Tests.Unit/LumenWorks.Framework.Tests.Unit.csproj @@ -1,118 +1,22 @@ - - + - Debug - AnyCPU - 9.0.21022 - 2.0 - {DBF22390-41BC-4E33-BC9E-F381621EBF01} - Library - Properties - LumenWorks.Framework.Tests.Unit - LumenWorks.Framework.Tests.Unit - v2.0 - 512 - - - - - - - - - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - ..\ - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - AllRules.ruleset + net20 + false - - ..\..\packages\NUnit.2.6.3\lib\nunit.framework.dll - - - - - + - - - Properties\SolutionInfo.cs - - - - - - - + + + - - {E3B83D68-C90C-4874-8E5F-DEC8D038BC7C} - LumenWorks.Framework.IO - + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + - + - - \ No newline at end of file diff --git a/code/LumenWorks.Framework.Tests.Unit/Properties/AssemblyInfo.cs b/code/LumenWorks.Framework.Tests.Unit/Properties/AssemblyInfo.cs index 3d9a402..283e80b 100644 --- a/code/LumenWorks.Framework.Tests.Unit/Properties/AssemblyInfo.cs +++ b/code/LumenWorks.Framework.Tests.Unit/Properties/AssemblyInfo.cs @@ -1,23 +1,15 @@ using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("LumenWorks.Framework.Tests.Unit")] [assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("LumenWorks.Framework.Tests.Unit")] -[assembly: AssemblyCopyright("Copyright © 2005 Sébastien Lorion")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ab333ada-16f6-494b-b5ba-08a058e4c65b")] \ No newline at end of file +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif \ No newline at end of file diff --git a/code/LumenWorks.Framework.Tests.Unit/packages.config b/code/LumenWorks.Framework.Tests.Unit/packages.config deleted file mode 100644 index a61d85f..0000000 --- a/code/LumenWorks.Framework.Tests.Unit/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/code/SolutionInfo.cs b/code/SolutionInfo.cs index fbec87f..00a7396 100644 --- a/code/SolutionInfo.cs +++ b/code/SolutionInfo.cs @@ -1,11 +1,17 @@ // using System.Reflection; +[assembly: AssemblyProductAttribute("LumenWorks.Framework.IO")] +[assembly: AssemblyCopyrightAttribute("Copyright © 2016 Paul Hatcher")] [assembly: AssemblyVersionAttribute("3.9.1")] [assembly: AssemblyFileVersionAttribute("3.9.1")] -[assembly: AssemblyInformationalVersionAttribute("3.9.1 758aaa")] +[assembly: AssemblyInformationalVersionAttribute("3.9.1 507a62")] namespace System { internal static class AssemblyVersionInformation { - internal const string Version = "3.9.1"; + internal const System.String AssemblyProduct = "LumenWorks.Framework.IO"; + internal const System.String AssemblyCopyright = "Copyright © 2016 Paul Hatcher"; + internal const System.String AssemblyVersion = "3.9.1"; + internal const System.String AssemblyFileVersion = "3.9.1"; + internal const System.String AssemblyInformationalVersion = "3.9.1 507a62"; } } diff --git a/nuget/LumenWorksCsvReader.nuspec b/nuget/LumenWorksCsvReader.nuspec index 95bab46..9124eab 100644 --- a/nuget/LumenWorksCsvReader.nuspec +++ b/nuget/LumenWorksCsvReader.nuspec @@ -3,20 +3,7 @@ LumenWorksCsvReader LumenWorks CSV Reader - An extended version of LumenWorks.Frameworks.IO 1.0.0 - http://opensource.org/licenses/mit-license.php - Copyright © 2005 Sébastien Lorion, 2014 Paul Hatcher Paul Hatcher - Sébastien Lorion, Paul Hatcher - https://github.com/phatcher/CsvReader - @releaseNotes@ - CSV - - - false - - - \ No newline at end of file diff --git a/nuget/NuGet.exe b/nuget/NuGet.exe deleted file mode 100644 index 9cba6ed..0000000 Binary files a/nuget/NuGet.exe and /dev/null differ diff --git a/paket.dependencies b/paket.dependencies new file mode 100644 index 0000000..af1f9df --- /dev/null +++ b/paket.dependencies @@ -0,0 +1,8 @@ +source http://nuget.org/api/v2 + +group Build + source http://nuget.org/api/v2 + + nuget FAKE + nuget Nuget.CommandLine + nuget NUnit.ConsoleRunner \ No newline at end of file diff --git a/paket.lock b/paket.lock new file mode 100644 index 0000000..d2dc204 --- /dev/null +++ b/paket.lock @@ -0,0 +1,8 @@ + + +GROUP Build +NUGET + remote: http://www.nuget.org/api/v2 + FAKE (4.64.3) + NuGet.CommandLine (4.4.1) + NUnit.ConsoleRunner (3.7)