diff --git a/.github/workflows/CI-Package-Release.yml b/.github/workflows/CI-Package-Release.yml index bef5b4c..725dd8d 100644 --- a/.github/workflows/CI-Package-Release.yml +++ b/.github/workflows/CI-Package-Release.yml @@ -52,7 +52,7 @@ jobs: - name: Step-04 Install .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 9.0.x - name: Step-05 Restore dependencies run: dotnet restore @@ -101,7 +101,7 @@ jobs: - name: Step-04 Install .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 8.0.x + dotnet-version: 9.0.x - name: Step-05 Restore dependencies run: dotnet restore diff --git a/.github/workflows/Master-Build.yml b/.github/workflows/Master-Build.yml index 32e7f77..cb1f876 100644 --- a/.github/workflows/Master-Build.yml +++ b/.github/workflows/Master-Build.yml @@ -18,7 +18,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 9.0.x - name: Restore dependencies run: dotnet restore - name: Build diff --git a/.github/workflows/Master-CodeQL.yml b/.github/workflows/Master-CodeQL.yml index adf920d..4360e22 100644 --- a/.github/workflows/Master-CodeQL.yml +++ b/.github/workflows/Master-CodeQL.yml @@ -8,7 +8,7 @@ # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. -# +# name: "Master-CodeQL" on: diff --git a/Ninja.FileUtil.Core.sln b/FileUtil.Core.sln similarity index 81% rename from Ninja.FileUtil.Core.sln rename to FileUtil.Core.sln index 757a97e..8061fe0 100644 --- a/Ninja.FileUtil.Core.sln +++ b/FileUtil.Core.sln @@ -5,14 +5,16 @@ VisualStudioVersion = 17.6.33712.159 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{4181FF50-7335-4293-8EE4-66E0C47C736E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ninja.FileUtil", "src\Ninja.FileUtil\Ninja.FileUtil.csproj", "{FD920B11-BA4F-4781-BD56-56CF362982CF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileUtil", "src\FileUtil\FileUtil.csproj", "{FD920B11-BA4F-4781-BD56-56CF362982CF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ninja.FileUtil.Tests", "test\Ninja.FileUtil.Tests\Ninja.FileUtil.Tests.csproj", "{95A1410C-6FB4-446D-A692-9BC018882298}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileUtil.Tests", "test\FileUtil.Tests\FileUtil.Tests.csproj", "{95A1410C-6FB4-446D-A692-9BC018882298}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{D549CC35-5318-45B0-ACCD-F28C543E482C}" ProjectSection(SolutionItems) = preProject - .github\workflows\CI-Build.yml = .github\workflows\CI-Build.yml - .github\workflows\codeql.yml = .github\workflows\codeql.yml + .github\workflows\Master-Build.yml = .github\workflows\Master-Build.yml + .github\workflows\CI-Package-Release.yml = .github\workflows\CI-Package-Release.yml + .github\workflows\Master-CodeQL.yml = .github\workflows\Master-CodeQL.yml + .github\workflows\PR-CodeQL.yml = .github\workflows\PR-CodeQL.yml EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8A1A1535-2928-4313-9AFC-9CA1892426E3}" diff --git a/GitVersion.yml b/GitVersion.yml index 2f85197..2ac57c8 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,4 +1,4 @@ -next-version: 3.0.0 +next-version: 4.0.0 tag-prefix: '[vV]' mode: ContinuousDeployment branches: diff --git a/README.md b/README.md index 6e11048..ab6a504 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,13 @@ -# ninja FileUtil v3.0.0 -[![NuGet version](https://badge.fury.io/nu/FixedWidth.FileParser.svg)](https://badge.fury.io/nu/FixedWidth.FileParser) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/CodeShayk/FileUtil.Core/blob/master/LICENSE.md) +# ninja FileUtil.Core v4.0.0 +[![NuGet version](https://badge.fury.io/nu/FixedWidth.FileParser.svg)](https://badge.fury.io/nu/FixedWidth.FileParser) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/CodeShayk/FileUtil.Core/blob/master/LICENSE.md) [![Master-Build](https://github.com/CodeShayk/FileUtil.Core/actions/workflows/Master-Build.yml/badge.svg)](https://github.com/CodeShayk/FileUtil.Core/actions/workflows/Master-Build.yml) [![GitHub Release](https://img.shields.io/github/v/release/CodeShayk/FileUtil.Core?logo=github&sort=semver)](https://github.com/CodeShayk/FileUtil.Core/releases/latest) [![Master-CodeQL](https://github.com/CodeShayk/FileUtil.Core/actions/workflows/Master-CodeQL.yml/badge.svg)](https://github.com/CodeShayk/FileUtil.Core/actions/workflows/Master-CodeQL.yml) [![.Net 8.0](https://img.shields.io/badge/.Net-8.0-blue)](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) - -#### .Net Library to read from fixed width or delimiter separated file using strongly typed objects. ------------- +#### .Net Library to read from fixed width or delimiter separated file using strongly typed objects. + **Fixed Width or Delimiter Separated File** ------------------------------------------------------------------------ @@ -47,7 +46,7 @@ NuGet\Install-Package FixedWidth.FileParser ### ii. Developer Guide -Please read [Developer Guide](https://github.com/CodeShayk/FileUtil.Core/blob/master/DeveloperGuide.md) for details on how to implement ApiAggregator in your project. +Please read [Developer Guide](https://github.com/CodeShayk/FileUtil.Core/blob/master/DeveloperGuide.md) for details on how to implement FileUtil.Core in your project. ## Support @@ -58,9 +57,10 @@ If you are having problems, please let me know by [raising a new issue](https:// This project is licensed with the [MIT license](LICENSE). ## Version History -The main branch is now on .NET 8.0. The following previous versions are available: +The main branch is now on .NET 9.0. The following previous versions are available: | Version | Release Notes | | -------- | --------| +| [`v4.0.0`](https://github.com/CodeShayk/FileUtil.Core/tree/v4.0.0) | [Notes](https://github.com/CodeShayk/FileUtil.Core/releases/tag/v4.0.0) | | [`v3.0.0`](https://github.com/CodeShayk/FileUtil.Core/tree/v3.0.0) | [Notes](https://github.com/CodeShayk/FileUtil.Core/releases/tag/v3.0.0) | | [`v2.0.0`](https://github.com/CodeShayk/FileUtil.Core/tree/v2.0.0) | [Notes](https://github.com/CodeShayk/FileUtil.Core/releases/tag/v2.0.0) | | [`v1.0.0`](https://github.com/CodeShayk/FileUtil.Core/tree/v1.0.0) | [Notes](https://github.com/CodeShayk/FileUtil.Core/releases/tag/v1.0.0) | diff --git a/src/FileUtil/AssemblyInfo.cs b/src/FileUtil/AssemblyInfo.cs new file mode 100644 index 0000000..ae4c1b7 --- /dev/null +++ b/src/FileUtil/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// In SDK-style projects such as this one, several assembly attributes that were historically +// defined in this file are now automatically added during build and populated with +// values defined in project properties. For details of which attributes are included +// and how to customise this process see: https://aka.ms/assembly-info-properties + +// 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)] +[assembly: InternalsVisibleTo("FileUtil.Tests")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] + +// The following GUID is for the ID of the typelib if this project is exposed to COM. + +[assembly: Guid("5188e472-36fc-4e3c-9978-17d5e32c9ee8")] \ No newline at end of file diff --git a/src/Ninja.FileUtil/ColumnAttribute.cs b/src/FileUtil/ColumnAttribute.cs similarity index 92% rename from src/Ninja.FileUtil/ColumnAttribute.cs rename to src/FileUtil/ColumnAttribute.cs index 5ffa9f0..b4ecf9f 100644 --- a/src/Ninja.FileUtil/ColumnAttribute.cs +++ b/src/FileUtil/ColumnAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ninja.FileUtil +namespace FileUtil { public class ColumnAttribute : Attribute { diff --git a/src/Ninja.FileUtil/Configuration/IConfigSettings.cs b/src/FileUtil/Configuration/IConfigSettings.cs similarity index 80% rename from src/Ninja.FileUtil/Configuration/IConfigSettings.cs rename to src/FileUtil/Configuration/IConfigSettings.cs index bf43be5..747575f 100644 --- a/src/Ninja.FileUtil/Configuration/IConfigSettings.cs +++ b/src/FileUtil/Configuration/IConfigSettings.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Configuration +namespace FileUtil.Configuration { public interface IConfigSettings { diff --git a/src/Ninja.FileUtil/Configuration/IDelimiter.cs b/src/FileUtil/Configuration/IDelimiter.cs similarity index 67% rename from src/Ninja.FileUtil/Configuration/IDelimiter.cs rename to src/FileUtil/Configuration/IDelimiter.cs index 188f40c..51363de 100644 --- a/src/Ninja.FileUtil/Configuration/IDelimiter.cs +++ b/src/FileUtil/Configuration/IDelimiter.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Configuration +namespace FileUtil.Configuration { public interface IDelimiter { diff --git a/src/Ninja.FileUtil/Configuration/ILineHeaders.cs b/src/FileUtil/Configuration/ILineHeaders.cs similarity index 62% rename from src/Ninja.FileUtil/Configuration/ILineHeaders.cs rename to src/FileUtil/Configuration/ILineHeaders.cs index f221ab0..f991a4b 100644 --- a/src/Ninja.FileUtil/Configuration/ILineHeaders.cs +++ b/src/FileUtil/Configuration/ILineHeaders.cs @@ -1,6 +1,6 @@ -namespace Ninja.FileUtil.Configuration +namespace FileUtil.Configuration { - public interface ILineHeaders + public interface ILineHeaders { string Header { get; set; } string Footer { get; set; } diff --git a/src/Ninja.FileUtil/Configuration/IParserSettings.cs b/src/FileUtil/Configuration/IParserSettings.cs similarity index 78% rename from src/Ninja.FileUtil/Configuration/IParserSettings.cs rename to src/FileUtil/Configuration/IParserSettings.cs index 5d7f35a..c9a6f35 100644 --- a/src/Ninja.FileUtil/Configuration/IParserSettings.cs +++ b/src/FileUtil/Configuration/IParserSettings.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Configuration +namespace FileUtil.Configuration { public interface IParserSettings { diff --git a/src/Ninja.FileUtil/Configuration/IProviderSettings.cs b/src/FileUtil/Configuration/IProviderSettings.cs similarity index 85% rename from src/Ninja.FileUtil/Configuration/IProviderSettings.cs rename to src/FileUtil/Configuration/IProviderSettings.cs index 7d70e85..a1d40de 100644 --- a/src/Ninja.FileUtil/Configuration/IProviderSettings.cs +++ b/src/FileUtil/Configuration/IProviderSettings.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Configuration +namespace FileUtil.Configuration { public interface IProviderSettings { diff --git a/src/Ninja.FileUtil/Engine.cs b/src/FileUtil/Engine.cs similarity index 83% rename from src/Ninja.FileUtil/Engine.cs rename to src/FileUtil/Engine.cs index b51f637..d5310ca 100644 --- a/src/Ninja.FileUtil/Engine.cs +++ b/src/FileUtil/Engine.cs @@ -1,11 +1,11 @@ -using System.Linq; -using Ninja.FileUtil.Configuration; -using Ninja.FileUtil.Parser; -using Ninja.FileUtil.Parser.Impl; -using Ninja.FileUtil.Provider; -using Ninja.FileUtil.Provider.Impl; +using System.Linq; +using FileUtil.Configuration; +using FileUtil.Parser; +using FileUtil.Parser.Impl; +using FileUtil.Provider; +using FileUtil.Provider.Impl; -namespace Ninja.FileUtil +namespace FileUtil { public class Engine { @@ -28,7 +28,6 @@ internal Engine(ILineParser lineParser, IFileProvider fileProvider) public Engine(IConfigSettings settings) : this(new LineParser(settings.ParserSettings), new DefaulProvider(settings.ProviderSettings, new FileHelper())) { - } /// @@ -39,8 +38,8 @@ public Engine(IConfigSettings settings) public Engine(IParserSettings parserSettings, IFileProvider fileProvider) : this(new LineParser(parserSettings), fileProvider) { - } + /// /// Get all single fixed format lines from a text file parsed into a strongly typed array /// Default delimiter is '|'. Override by specifying the delimiter in parser settings. @@ -56,27 +55,27 @@ public Engine(IParserSettings parserSettings, IFileProvider fileProvider) { var files = fileProvider.GetFiles(); return files.Select(file => new File + { + FileMeta = new FileMeta { - FileMeta = new FileMeta - { - FileName = file.FileName, - FilePath = file.FilePath, - FileSize = file.FileSize, - Lines = file.Lines, - }, + FileName = file.FileName, + FilePath = file.FilePath, + FileSize = file.FileSize, + Lines = file.Lines, + }, - Data = lineParser.Parse(file.Lines) - }) + Data = lineParser.Parse(file.Lines) + }) .ToArray(); } /// - /// Get all multi-format lines from a text file parsed into header, data and footer + /// Get all multi-format lines from a text file parsed into header, data and footer /// typed arrays respectively. /// Default delimiter is '|'. /// By default, Header line starts with H, data line starts with D and footer line starts with F. /// Override these values in parser settings. - /// Example File - + /// Example File - /// "H|22-10-2016|Employee Status" /// "D|John Walsh|456RT4|True" /// "D|Mark Walsh|456RT5|True" @@ -88,11 +87,11 @@ public Engine(IParserSettings parserSettings, IFileProvider fileProvider) /// /// Collection of Files each parsed with header, footer and data typed arrays /// - public File[] GetFiles() + public File[] GetFiles() where TH : FileLine, new() where TD : FileLine, new() where TF : FileLine, new() - { + { var files = fileProvider.GetFiles(); return files.Select(file => @@ -113,8 +112,7 @@ public File[] GetFiles() }; return parsed; - }).ToArray(); } } -} +} \ No newline at end of file diff --git a/src/Ninja.FileUtil/File.cs b/src/FileUtil/File.cs similarity index 94% rename from src/Ninja.FileUtil/File.cs rename to src/FileUtil/File.cs index c2232da..4d2bfbc 100644 --- a/src/Ninja.FileUtil/File.cs +++ b/src/FileUtil/File.cs @@ -1,6 +1,6 @@ -namespace Ninja.FileUtil +namespace FileUtil { - public class File where T: FileLine + public class File where T : FileLine { /// /// File meta data. @@ -10,7 +10,7 @@ public class File where T: FileLine /// Strongly typed parsed lines. /// public T[] Data { get; set; } - + } public class File where TH : FileLine, new() diff --git a/src/Ninja.FileUtil/FileLine.cs b/src/FileUtil/FileLine.cs similarity index 92% rename from src/Ninja.FileUtil/FileLine.cs rename to src/FileUtil/FileLine.cs index bdf9047..3d86839 100644 --- a/src/Ninja.FileUtil/FileLine.cs +++ b/src/FileUtil/FileLine.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Ninja.FileUtil +namespace FileUtil { public abstract class FileLine : IFileLine { diff --git a/src/Ninja.FileUtil/Ninja.FileUtil.csproj b/src/FileUtil/FileUtil.csproj similarity index 68% rename from src/Ninja.FileUtil/Ninja.FileUtil.csproj rename to src/FileUtil/FileUtil.csproj index 3ebedd1..db896bf 100644 --- a/src/Ninja.FileUtil/Ninja.FileUtil.csproj +++ b/src/FileUtil/FileUtil.csproj @@ -1,26 +1,31 @@ - net8.0 + net9.0 Public - https://github.com/TechNinjaLabs/FileUtil.Core + https://github.com/CodeShayk/FileUtil.Core csv tsv fixed-width delimiter-file delimiter file-parser file parser true true .Net Library to read from fixed width or delimiter separated file using strongly typed objects. Example: pipe delimited, csv, tsv, etc. en-GB - Tech Ninja Labs - Tech Ninja Labs + Code Shayk + Code Shayk FixedWidth.FileParser Fixed Width File Parser - https://github.com/TechNinjaLabs/FileUtil.Core + https://github.com/CodeShayk/FileUtil.Core/wiki https://1drv.ms/u/s!Aq_ncig7TU4551b5fzxOad-pDMfL - 3.0.0 + 4.0.0 FixedWidth.FileParser - © Copyright 2024 Tech Ninja Labs. + © Copyright 2024 Code Shayk. ninja-icon-16.png README.md License.md + True + True + + + True diff --git a/src/Ninja.FileUtil/IFileLine.cs b/src/FileUtil/IFileLine.cs similarity index 61% rename from src/Ninja.FileUtil/IFileLine.cs rename to src/FileUtil/IFileLine.cs index e495231..5bb8b7f 100644 --- a/src/Ninja.FileUtil/IFileLine.cs +++ b/src/FileUtil/IFileLine.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; -using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("Ninja.FileUtil.Tests")] -namespace Ninja.FileUtil +namespace FileUtil { internal interface IFileLine { diff --git a/src/Ninja.FileUtil/LineType.cs b/src/FileUtil/LineType.cs similarity index 81% rename from src/Ninja.FileUtil/LineType.cs rename to src/FileUtil/LineType.cs index 20c8d93..de840c7 100644 --- a/src/Ninja.FileUtil/LineType.cs +++ b/src/FileUtil/LineType.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil +namespace FileUtil { public enum LineType { diff --git a/src/Ninja.FileUtil/Parser/Extensions.cs b/src/FileUtil/Parser/Extensions.cs similarity index 81% rename from src/Ninja.FileUtil/Parser/Extensions.cs rename to src/FileUtil/Parser/Extensions.cs index 8aa59e7..884979e 100644 --- a/src/Ninja.FileUtil/Parser/Extensions.cs +++ b/src/FileUtil/Parser/Extensions.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Linq; -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; -namespace Ninja.FileUtil.Parser +namespace FileUtil.Parser { internal static class Extensions { @@ -13,7 +13,8 @@ public static bool In(this string input, params string[] values) public static void SetError(this IFileLine obj, string error) { - if (obj.Errors == null) obj.Errors = new List(); + if (obj.Errors == null) + obj.Errors = new List(); obj.Errors.Add(error); } @@ -32,7 +33,7 @@ public static string GetLineHead(this ILineHeaders lineHeaders, LineType type) case LineType.Footer: return lineHeaders?.Footer ?? "F"; default: - return lineHeaders?.Data ?? "D"; + return lineHeaders?.Data ?? "D"; } } } diff --git a/src/Ninja.FileUtil/Parser/ILineParser.cs b/src/FileUtil/Parser/ILineParser.cs similarity index 85% rename from src/Ninja.FileUtil/Parser/ILineParser.cs rename to src/FileUtil/Parser/ILineParser.cs index 9d6843f..cbf8b51 100644 --- a/src/Ninja.FileUtil/Parser/ILineParser.cs +++ b/src/FileUtil/Parser/ILineParser.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Parser +namespace FileUtil.Parser { internal interface ILineParser { diff --git a/src/Ninja.FileUtil/Parser/Impl/LineParser.cs b/src/FileUtil/Parser/Impl/LineParser.cs similarity index 82% rename from src/Ninja.FileUtil/Parser/Impl/LineParser.cs rename to src/FileUtil/Parser/Impl/LineParser.cs index 7412256..207cd28 100644 --- a/src/Ninja.FileUtil/Parser/Impl/LineParser.cs +++ b/src/FileUtil/Parser/Impl/LineParser.cs @@ -4,9 +4,10 @@ using System.Linq; using System.Reflection; using System.Threading.Tasks; -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; +using Ninja.FileUtil; -namespace Ninja.FileUtil.Parser.Impl +namespace FileUtil.Parser.Impl { internal class LineParser : ILineParser { @@ -30,7 +31,7 @@ public LineParser(IParserSettings parserSettings) private T[] Parse(string[] lines, LineType type, bool hasLineHeader) where T : IFileLine, new() { - + if (lines == null || lines.Length == 0) return Enumerable.Empty().ToArray(); @@ -39,13 +40,13 @@ public LineParser(IParserSettings parserSettings) var objLock = new object(); var index = 0; - var inputs = lines.Select(line => new { Line = line, Index = index++, Type = type}); + var inputs = lines.Select(line => new { Line = line, Index = index++, Type = type }); Parallel.ForEach(inputs, () => new List(), (obj, loopstate, localStorage) => { var parsed = ParseLine(obj.Line, hasLineHeader); - + parsed.Index = obj.Index; parsed.Type = obj.Type; @@ -54,18 +55,19 @@ public LineParser(IParserSettings parserSettings) }, finalStorage => { - if (finalStorage == null) return; + if (finalStorage == null) + return; lock (objLock) finalStorage.ForEach(f => list[f.Index] = f); }); - + return list; } - - private T ParseLine(string line, bool hasLineHeader) where T : IFileLine, new() + + private T ParseLine(string line, bool hasLineHeader) where T : IFileLine, new() { var obj = new T(); @@ -79,24 +81,23 @@ public LineParser(IParserSettings parserSettings) var propInfos = GetLineClassPropertyInfos(); - if(propInfos.Length == 0) + if (propInfos.Length == 0) { obj.SetError(string.Format(Resources.NoColumnAttributesFoundFormat, typeof(T).Name)); return obj; } - - if ((!hasLineHeader && propInfos.Length != (values.Length)) || - (hasLineHeader && propInfos.Length + 1 != values.Length)) + + if (!hasLineHeader && propInfos.Length != values.Length || + hasLineHeader && propInfos.Length + 1 != values.Length) { obj.SetError(Resources.InvalidLengthErrorFormat); return obj; } - + foreach (var propInfo in propInfos) - { try { - var attribute = (ColumnAttribute) propInfo.GetCustomAttributes(typeof (ColumnAttribute), true).First(); + var attribute = (ColumnAttribute)propInfo.GetCustomAttributes(typeof(ColumnAttribute), true).First(); var pvalue = values[!hasLineHeader ? attribute.Index : attribute.Index + 1]; @@ -130,17 +131,16 @@ public LineParser(IParserSettings parserSettings) } catch (Exception e) { - obj.SetError(string.Format(Resources.LineExceptionFormat, propInfo.Name, e.Message) ); + obj.SetError(string.Format(Resources.LineExceptionFormat, propInfo.Name, e.Message)); } - } return obj; } private static PropertyInfo[] GetLineClassPropertyInfos() where T : IFileLine, new() { - var propInfos = typeof (T).GetProperties() - .Where(p => p.GetCustomAttributes(typeof (ColumnAttribute), true).Any() && p.CanWrite) + var propInfos = typeof(T).GetProperties() + .Where(p => p.GetCustomAttributes(typeof(ColumnAttribute), true).Any() && p.CanWrite) .ToArray(); return propInfos; } @@ -148,7 +148,7 @@ public LineParser(IParserSettings parserSettings) private string[] GetDelimiterSeparatedValues(string line) { var values = line.Split(parserSettings.Delimiter.GetValue()) - .Select(x => !string.IsNullOrWhiteSpace(x)? x.Trim(): x) + .Select(x => !string.IsNullOrWhiteSpace(x) ? x.Trim() : x) .ToArray(); return values; } diff --git a/src/Ninja.FileUtil/Provider/IFileHelper.cs b/src/FileUtil/Provider/IFileHelper.cs similarity index 91% rename from src/Ninja.FileUtil/Provider/IFileHelper.cs rename to src/FileUtil/Provider/IFileHelper.cs index 7c9109b..f7681b9 100644 --- a/src/Ninja.FileUtil/Provider/IFileHelper.cs +++ b/src/FileUtil/Provider/IFileHelper.cs @@ -1,6 +1,6 @@ using System.IO; -namespace Ninja.FileUtil.Provider +namespace FileUtil.Provider { public interface IFileHelper { diff --git a/src/Ninja.FileUtil/Provider/IFileProvider.cs b/src/FileUtil/Provider/IFileProvider.cs similarity index 68% rename from src/Ninja.FileUtil/Provider/IFileProvider.cs rename to src/FileUtil/Provider/IFileProvider.cs index 4f75b28..29a35b9 100644 --- a/src/Ninja.FileUtil/Provider/IFileProvider.cs +++ b/src/FileUtil/Provider/IFileProvider.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Provider +namespace FileUtil.Provider { public interface IFileProvider { diff --git a/src/Ninja.FileUtil/Provider/Impl/DefaultProvider.cs b/src/FileUtil/Provider/Impl/DefaultProvider.cs similarity index 93% rename from src/Ninja.FileUtil/Provider/Impl/DefaultProvider.cs rename to src/FileUtil/Provider/Impl/DefaultProvider.cs index 6f8e071..7efae2f 100644 --- a/src/Ninja.FileUtil/Provider/Impl/DefaultProvider.cs +++ b/src/FileUtil/Provider/Impl/DefaultProvider.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; -namespace Ninja.FileUtil.Provider.Impl +namespace FileUtil.Provider.Impl { internal class DefaulProvider : IFileProvider { @@ -22,7 +22,8 @@ public FileMeta[] GetFiles() var paths = fileHelper.GetPathLists(settings.FolderPath, settings.FileNameFormat); - if (!paths.Any()) return files.ToArray(); + if (!paths.Any()) + return files.ToArray(); foreach (var path in paths) { diff --git a/src/Ninja.FileUtil/Provider/Impl/FileHelper.cs b/src/FileUtil/Provider/Impl/FileHelper.cs similarity index 95% rename from src/Ninja.FileUtil/Provider/Impl/FileHelper.cs rename to src/FileUtil/Provider/Impl/FileHelper.cs index 9afaa5c..4a91979 100644 --- a/src/Ninja.FileUtil/Provider/Impl/FileHelper.cs +++ b/src/FileUtil/Provider/Impl/FileHelper.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.IO; -namespace Ninja.FileUtil.Provider.Impl +namespace FileUtil.Provider.Impl { internal class FileHelper : IFileHelper { @@ -17,7 +17,7 @@ public bool TryMoveFile(FileInfo fileInfo, string destinationFile) fileInfo.MoveTo(destinationFile); return true; } - catch (IOException) + catch (IOException) { return false; } diff --git a/src/Ninja.FileUtil/Resources.Designer.cs b/src/FileUtil/Resources.Designer.cs similarity index 96% rename from src/Ninja.FileUtil/Resources.Designer.cs rename to src/FileUtil/Resources.Designer.cs index 3df68d5..195f184 100644 --- a/src/Ninja.FileUtil/Resources.Designer.cs +++ b/src/FileUtil/Resources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -44,7 +44,7 @@ internal Resources() { internal static ResourceManager ResourceManager { get { if (ReferenceEquals(resourceMan, null)) { - ResourceManager temp = new ResourceManager("Ninja.FileUtil.Resources", typeof(Resources).Assembly); + ResourceManager temp = new ResourceManager("FileUtil.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; diff --git a/src/Ninja.FileUtil/Resources.resx b/src/FileUtil/Resources.resx similarity index 100% rename from src/Ninja.FileUtil/Resources.resx rename to src/FileUtil/Resources.resx diff --git a/test/Ninja.FileUtil.Tests/Configuration/Delimiter.cs b/test/FileUtil.Tests/Configuration/Delimiter.cs similarity index 69% rename from test/Ninja.FileUtil.Tests/Configuration/Delimiter.cs rename to test/FileUtil.Tests/Configuration/Delimiter.cs index 659c292..16bdb0c 100644 --- a/test/Ninja.FileUtil.Tests/Configuration/Delimiter.cs +++ b/test/FileUtil.Tests/Configuration/Delimiter.cs @@ -1,6 +1,6 @@ -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; -namespace Ninja.FileUtil.Tests.Configuration +namespace FileUtil.Tests.Configuration { public class Delimiter : IDelimiter { diff --git a/test/Ninja.FileUtil.Tests/Configuration/LineHeaders.cs b/test/FileUtil.Tests/Configuration/LineHeaders.cs similarity index 82% rename from test/Ninja.FileUtil.Tests/Configuration/LineHeaders.cs rename to test/FileUtil.Tests/Configuration/LineHeaders.cs index 600c42d..e87fde3 100644 --- a/test/Ninja.FileUtil.Tests/Configuration/LineHeaders.cs +++ b/test/FileUtil.Tests/Configuration/LineHeaders.cs @@ -1,6 +1,6 @@ -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; -namespace Ninja.FileUtil.Tests.Configuration +namespace FileUtil.Tests.Configuration { public class LineHeaders : ILineHeaders { diff --git a/test/Ninja.FileUtil.Tests/Configuration/TestFullConfig.cs b/test/FileUtil.Tests/Configuration/TestFullConfig.cs similarity index 79% rename from test/Ninja.FileUtil.Tests/Configuration/TestFullConfig.cs rename to test/FileUtil.Tests/Configuration/TestFullConfig.cs index 9afb206..263d858 100644 --- a/test/Ninja.FileUtil.Tests/Configuration/TestFullConfig.cs +++ b/test/FileUtil.Tests/Configuration/TestFullConfig.cs @@ -1,6 +1,6 @@ -using Ninja.FileUtil.Configuration; +using FileUtil.Configuration; -namespace Ninja.FileUtil.Tests.Configuration +namespace FileUtil.Tests.Configuration { public class TestFullConfig : IParserSettings { diff --git a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/DataLine.cs b/test/FileUtil.Tests/Engine/MultiDelimited/DataLine.cs similarity index 66% rename from test/Ninja.FileUtil.Tests/Engine/MultiDelimited/DataLine.cs rename to test/FileUtil.Tests/Engine/MultiDelimited/DataLine.cs index 895e1b7..1cc5276 100644 --- a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/DataLine.cs +++ b/test/FileUtil.Tests/Engine/MultiDelimited/DataLine.cs @@ -1,9 +1,9 @@ -namespace Ninja.FileUtil.Tests.Engine.MultiDelimited +namespace FileUtil.Tests.Engine.MultiDelimited { public class DataLine : FileLine { [Column(0)] - public string Employee { get; set; } + public string Employee { get; set; } [Column(1)] public string Reference { get; set; } [Column(2)] diff --git a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs b/test/FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs similarity index 76% rename from test/Ninja.FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs rename to test/FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs index 7bc24e3..cf50335 100644 --- a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs +++ b/test/FileUtil.Tests/Engine/MultiDelimited/EngineFixture.cs @@ -1,10 +1,9 @@ -using System; +using FileUtil.Configuration; +using FileUtil.Provider; using Moq; -using Ninja.FileUtil.Configuration; -using Ninja.FileUtil.Provider; using NUnit.Framework; -namespace Ninja.FileUtil.Tests.Engine.MultiDelimited +namespace FileUtil.Tests.Engine.MultiDelimited { [TestFixture] public class EngineFixture @@ -32,57 +31,56 @@ public void Setup() [Test] public void TestGetFilesForNoFileFromProviderShouldReturnEmptyCollection() { - Assert.IsEmpty(engine.GetFiles()); + Assert.That(engine.GetFiles(), Is.Empty); } [Test] public void TestGetFilesForFileReceivedFromProviderShouldReturnEmptyCollection() { - var date = new DateTime(2016, 10,22); + var date = new DateTime(2016, 10, 22); var fileMeta = new FileMeta { FileName = "name", FilePath = "path", FileSize = 1234, - Lines = new[] {$"H|{date.ToShortDateString()}|Employee Status", "D|John Walsh|456RT4|True", "F|1" } + Lines = new[] { $"H|{date.ToShortDateString()}|Employee Status", "D|John Walsh|456RT4|True", "F|1" } }; provider.Setup(x => x.GetFiles()).Returns(new[] { fileMeta }); var parsedfiles = engine.GetFiles(); - Assert.IsNotEmpty(parsedfiles); + Assert.That(parsedfiles, Is.Not.Empty); Assert.That(parsedfiles[0].FileMeta.FileName, Is.EqualTo(fileMeta.FileName)); Assert.That(parsedfiles[0].FileMeta.FilePath, Is.EqualTo(fileMeta.FilePath)); Assert.That(parsedfiles[0].FileMeta.FileSize, Is.EqualTo(fileMeta.FileSize)); Assert.That(parsedfiles[0].FileMeta.Lines, Is.EqualTo(fileMeta.Lines)); - Assert.IsAssignableFrom(parsedfiles[0].Header); + Assert.That(parsedfiles[0].Header, Is.AssignableFrom()); Assert.That(parsedfiles[0].Header.Index, Is.EqualTo(0)); Assert.That(parsedfiles[0].Header.Type, Is.EqualTo(LineType.Header)); - Assert.IsEmpty(parsedfiles[0].Header.Errors); + Assert.That(parsedfiles[0].Header.Errors, Is.Empty); Assert.That(parsedfiles[0].Header.Date, Is.EqualTo(date)); Assert.That(parsedfiles[0].Header.Name, Is.EqualTo("Employee Status")); - - - Assert.IsAssignableFrom(parsedfiles[0].Data[0]); + + Assert.That(parsedfiles[0].Data[0], Is.AssignableFrom()); Assert.That(parsedfiles[0].Data[0].Index, Is.EqualTo(0)); Assert.That(parsedfiles[0].Data[0].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(parsedfiles[0].Data[0].Errors); + Assert.That(parsedfiles[0].Data[0].Errors, Is.Empty); Assert.That(parsedfiles[0].Data[0].Employee, Is.EqualTo("John Walsh")); Assert.That(parsedfiles[0].Data[0].Reference, Is.EqualTo("456RT4")); Assert.That(parsedfiles[0].Data[0].InService, Is.EqualTo(true)); - - Assert.IsAssignableFrom(parsedfiles[0].Footer); + + Assert.That(parsedfiles[0].Footer, Is.AssignableFrom()); Assert.That(parsedfiles[0].Footer.Index, Is.EqualTo(0)); Assert.That(parsedfiles[0].Footer.Type, Is.EqualTo(LineType.Footer)); - Assert.IsEmpty(parsedfiles[0].Footer.Errors); + Assert.That(parsedfiles[0].Footer.Errors, Is.Empty); Assert.That(parsedfiles[0].Footer.TotalRecords, Is.EqualTo(1)); } } -} +} \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs b/test/FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs similarity index 68% rename from test/Ninja.FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs rename to test/FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs index 42017d1..793f681 100644 --- a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs +++ b/test/FileUtil.Tests/Engine/MultiDelimited/FooterLine.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Tests.Engine.MultiDelimited +namespace FileUtil.Tests.Engine.MultiDelimited { public class FooterLine : FileLine { diff --git a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs b/test/FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs similarity index 71% rename from test/Ninja.FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs rename to test/FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs index 7ec8297..d153e3e 100644 --- a/test/Ninja.FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs +++ b/test/FileUtil.Tests/Engine/MultiDelimited/HeaderLine.cs @@ -1,6 +1,4 @@ -using System; - -namespace Ninja.FileUtil.Tests.Engine.MultiDelimited +namespace FileUtil.Tests.Engine.MultiDelimited { public class HeaderLine : FileLine { diff --git a/test/Ninja.FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs b/test/FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs similarity index 78% rename from test/Ninja.FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs rename to test/FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs index 730f515..b16811b 100644 --- a/test/Ninja.FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs +++ b/test/FileUtil.Tests/Engine/SingleDelimited/EngineFixture.cs @@ -1,9 +1,9 @@ -using Moq; -using Ninja.FileUtil.Configuration; -using Ninja.FileUtil.Provider; +using FileUtil.Configuration; +using FileUtil.Provider; +using Moq; using NUnit.Framework; -namespace Ninja.FileUtil.Tests.Engine.SingleDelimited +namespace FileUtil.Tests.Engine.SingleDelimited { [TestFixture] public class EngineFixture @@ -27,7 +27,7 @@ public void Setup() [Test] public void TestGetFilesForNoFileFromProviderShouldReturnEmptyCollection() { - Assert.IsEmpty(engine.GetFiles()); + Assert.That(engine.GetFiles(), Is.Empty); } [Test] @@ -38,37 +38,35 @@ public void TestGetFilesForFileReceivedFromProviderShouldReturnEmptyCollection() FileName = "name", FilePath = "path", FileSize = 1234, - Lines = new[] {"Jack Marias|false", "Samuel Dias|true"} + Lines = new[] { "Jack Marias|false", "Samuel Dias|true" } }; provider.Setup(x => x.GetFiles()).Returns(new[] { fileMeta }); var parsedfiles = engine.GetFiles(); - Assert.IsNotEmpty(parsedfiles); + Assert.That(parsedfiles, Is.Not.Empty); Assert.That(parsedfiles[0].FileMeta.FileName, Is.EqualTo(fileMeta.FileName)); Assert.That(parsedfiles[0].FileMeta.FilePath, Is.EqualTo(fileMeta.FilePath)); Assert.That(parsedfiles[0].FileMeta.FileSize, Is.EqualTo(fileMeta.FileSize)); Assert.That(parsedfiles[0].FileMeta.Lines, Is.EqualTo(fileMeta.Lines)); - - Assert.IsAssignableFrom(parsedfiles[0].Data[0]); - Assert.IsAssignableFrom(parsedfiles[0].Data[1]); + Assert.That(parsedfiles[0].Data[0], Is.AssignableFrom()); + Assert.That(parsedfiles[0].Data[1], Is.AssignableFrom()); Assert.That(parsedfiles[0].Data[0].Index, Is.EqualTo(0)); Assert.That(parsedfiles[0].Data[0].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(parsedfiles[0].Data[0].Errors); + Assert.That(parsedfiles[0].Data[0].Errors, Is.Empty); Assert.That(parsedfiles[0].Data[0].Name, Is.EqualTo("Jack Marias")); Assert.That(parsedfiles[0].Data[0].IsMember, Is.EqualTo(false)); - Assert.That(parsedfiles[0].Data[1].Index, Is.EqualTo(1)); Assert.That(parsedfiles[0].Data[1].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(parsedfiles[0].Data[0].Errors); + Assert.That(parsedfiles[0].Data[0].Errors, Is.Empty); Assert.That(parsedfiles[0].Data[1].Name, Is.EqualTo("Samuel Dias")); Assert.That(parsedfiles[0].Data[1].IsMember, Is.EqualTo(true)); } } -} +} \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs b/test/FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs similarity index 76% rename from test/Ninja.FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs rename to test/FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs index 53003ea..fe9bfbc 100644 --- a/test/Ninja.FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs +++ b/test/FileUtil.Tests/Engine/SingleDelimited/SingleLine.cs @@ -1,4 +1,4 @@ -namespace Ninja.FileUtil.Tests.Engine.SingleDelimited +namespace FileUtil.Tests.Engine.SingleDelimited { public class SingleLine : FileLine { diff --git a/test/FileUtil.Tests/FileUtil.Tests.csproj b/test/FileUtil.Tests/FileUtil.Tests.csproj new file mode 100644 index 0000000..ba4059b --- /dev/null +++ b/test/FileUtil.Tests/FileUtil.Tests.csproj @@ -0,0 +1,40 @@ + + + + net9.0 + enable + enable + + false + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Parser/InvalidTestLine.cs b/test/FileUtil.Tests/Parser/InvalidTestLine.cs similarity index 72% rename from test/Ninja.FileUtil.Tests/Parser/InvalidTestLine.cs rename to test/FileUtil.Tests/Parser/InvalidTestLine.cs index 5ef2403..150c746 100644 --- a/test/Ninja.FileUtil.Tests/Parser/InvalidTestLine.cs +++ b/test/FileUtil.Tests/Parser/InvalidTestLine.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace Ninja.FileUtil.Tests.Parser +namespace FileUtil.Tests.Parser { public class InvalidTestLine : IFileLine { diff --git a/test/FileUtil.Tests/Parser/LineParserFixture.cs b/test/FileUtil.Tests/Parser/LineParserFixture.cs new file mode 100644 index 0000000..8564ad1 --- /dev/null +++ b/test/FileUtil.Tests/Parser/LineParserFixture.cs @@ -0,0 +1,108 @@ +using FileUtil.Configuration; +using FileUtil.Parser.Impl; +using Moq; +using NUnit.Framework; + +namespace FileUtil.Tests.Parser +{ + [TestFixture] + internal class LineParserFixture + { + private Mock configuration; + private LineParser parser; + + [SetUp] + public void Setup() + { + configuration = new Mock(); + + configuration.Setup(x => x.Delimiter.Value).Returns('|'); + configuration.Setup(x => x.LineHeaders.Header).Returns("H"); + configuration.Setup(x => x.LineHeaders.Data).Returns("D"); + configuration.Setup(x => x.LineHeaders.Footer).Returns("F"); + parser = new LineParser(configuration.Object); + } + + [Test] + public void TestParseForNullInputShouldReturnEmptyArray() + { + Assert.That(parser.Parse(null), Is.Empty); + Assert.That(parser.Parse(null, LineType.Data), Is.Empty); + } + + [Test] + public void TestParseWithLineHeaderInputShouldReturnCorrectlyParsedArray() + { + var lines = new[] + { + "D|Bob Marley|True", + "D|John Walsh|False" + }; + + var parsed = parser.Parse(lines, LineType.Data); + + Assert.That(parsed.Length, Is.EqualTo(2)); + + Assert.That(parsed[0].Name, Is.EqualTo("Bob Marley")); + Assert.That(parsed[0].IsMember, Is.EqualTo(true)); + Assert.That(parsed[0].Type, Is.EqualTo(LineType.Data)); + Assert.That(parsed[0].Errors, Is.Empty); + + Assert.That(parsed[1].Name, Is.EqualTo("John Walsh")); + Assert.That(parsed[1].IsMember, Is.EqualTo(false)); + Assert.That(parsed[1].Type, Is.EqualTo(LineType.Data)); + Assert.That(parsed[1].Errors, Is.Empty); + } + + [Test] + public void TestParseWithNoLineHeaderInputShouldReturnCorrectlyParsedArray() + { + var lines = new[] + { + "Bob Marley|True", + "John Walsh|False" + }; + var prsed = parser.Parse(lines); + + Assert.That(prsed.Length, Is.EqualTo(2)); + + Assert.That(prsed[0].Name, Is.EqualTo("Bob Marley")); + Assert.That(prsed[0].IsMember, Is.EqualTo(true)); + Assert.That(prsed[0].Type, Is.EqualTo(LineType.Data)); + Assert.That(prsed[0].Errors, Is.Empty); + + Assert.That(prsed[1].Name, Is.EqualTo("John Walsh")); + Assert.That(prsed[1].IsMember, Is.EqualTo(false)); + Assert.That(prsed[1].Type, Is.EqualTo(LineType.Data)); + Assert.That(prsed[1].Errors, Is.Empty); + } + + [TestCase("hbtrb", true)] + [TestCase("hbtrb|ej ef|fer|", true)] + [TestCase("H|hbtrb", false)] + [TestCase("H|hbtrb|ej ef|fer|rc |", true)] + public void TestParseForInvalidInputShouldReturnError(string line, bool hasLineType) + { + if (!hasLineType) + parser = new LineParser(configuration.Object); + + var result = hasLineType + ? parser.Parse(new[] { line }) + : parser.Parse(new[] { line }, LineType.Header); + + Assert.That(result[0].Errors, Is.Not.Empty); + } + + [Test] + public void TestParseForInvalidFileLineWithNoColumnAttributesShouldReturnError() + { + var result = parser.Parse(new[] { "D|edndx|medmd" }, LineType.Data); + + Assert.That(result[0].Errors, Is.Not.Empty); + + result = parser.Parse(new[] { "edndx|medmd" }); + + Assert.That(result[0].Errors, Is.Not.Empty); + } + } +} \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Parser/TestLine.cs b/test/FileUtil.Tests/Parser/TestLine.cs similarity index 82% rename from test/Ninja.FileUtil.Tests/Parser/TestLine.cs rename to test/FileUtil.Tests/Parser/TestLine.cs index 5471e14..9fd78db 100644 --- a/test/Ninja.FileUtil.Tests/Parser/TestLine.cs +++ b/test/FileUtil.Tests/Parser/TestLine.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -namespace Ninja.FileUtil.Tests.Parser +namespace FileUtil.Tests.Parser { public class TestLine : IFileLine { @@ -30,6 +27,6 @@ public class HeaderLine : FileLine [Column(0)] public string Report { get; set; } [Column(1)] - public DateTime Date { get; set; } + public DateTime Date { get; set; } } } \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Provider/DefaultProviderFixture.cs b/test/FileUtil.Tests/Provider/DefaultProviderFixture.cs similarity index 85% rename from test/Ninja.FileUtil.Tests/Provider/DefaultProviderFixture.cs rename to test/FileUtil.Tests/Provider/DefaultProviderFixture.cs index a497775..4b7b110 100644 --- a/test/Ninja.FileUtil.Tests/Provider/DefaultProviderFixture.cs +++ b/test/FileUtil.Tests/Provider/DefaultProviderFixture.cs @@ -1,15 +1,13 @@ -using System.IO; -using System.Linq; +using FileUtil.Configuration; +using FileUtil.Provider; +using FileUtil.Provider.Impl; using Moq; -using Ninja.FileUtil.Configuration; -using Ninja.FileUtil.Provider; -using Ninja.FileUtil.Provider.Impl; using NUnit.Framework; -namespace Ninja.FileUtil.Tests.Provider +namespace FileUtil.Tests.Provider { [TestFixture] - class DefaultProviderFixture + internal class DefaultProviderFixture { private Mock settings; private Mock fileHelper; @@ -30,35 +28,33 @@ public void TestGetFilesForNoFilesShouldReturnEmptyFileCollection() fileHelper.Setup(x => x.GetPathLists(It.IsAny(), It.IsAny())) .Returns(Enumerable.Empty().ToArray()); - Assert.IsEmpty(provider.GetFiles()); + Assert.That(provider.GetFiles(), Is.Empty); } [Test] public void TestGetFilesForFileWhichDoesNotExistsShouldReturnEmptyFileCollection() { fileHelper.Setup(x => x.GetPathLists(It.IsAny(), It.IsAny())) - .Returns(new []{"path"}); + .Returns(new[] { "path" }); fileHelper.Setup(x => x.FileExists("path")).Returns(false); - - Assert.IsEmpty(provider.GetFiles()); + + Assert.That(provider.GetFiles(), Is.Empty); } [Test] public void TestGetFilesForFileWhichExistsAndWithNoArchiveSettingShouldReturnFileCollectionWithFileInfo() { - fileHelper.Setup(x => x.GetPathLists(It.IsAny(), It.IsAny())) .Returns(new[] { filePath }); fileHelper.Setup(x => x.FileExists(filePath)).Returns(true); fileHelper.Setup(x => x.ReadToLines(filePath)).Returns(new[] { "xyz, abc" }); - Assert.IsNotEmpty(provider.GetFiles()); + Assert.That(provider.GetFiles(), Is.Not.Empty); fileHelper.Verify(x => x.TryDeleteFile(It.IsAny()), Times.Exactly(1)); fileHelper.Verify(x => x.TryMoveFile(It.IsAny(), It.IsAny()), Times.Never()); fileHelper.Verify(x => x.EnsureFolderExist(It.IsAny()), Times.Never()); - } [Test] @@ -78,11 +74,10 @@ public void TestGetFilesForFileWhichExistsAndWithArchiveSettingShouldReturnFileC fileHelper.Setup(x => x.FileExists(filePath)).Returns(true); fileHelper.Setup(x => x.ReadToLines(filePath)).Returns(new[] { "xyz, abc" }); - Assert.IsNotEmpty(provider.GetFiles()); + Assert.That(provider.GetFiles(), Is.Not.Empty); fileHelper.Verify(x => x.TryDeleteFile(It.IsAny()), Times.Exactly(2)); fileHelper.Verify(x => x.TryMoveFile(It.IsAny(), It.IsAny()), Times.Exactly(1)); fileHelper.Verify(x => x.EnsureFolderExist(It.IsAny()), Times.Exactly(1)); - } } -} +} \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Provider/FileHelperFixture.cs b/test/FileUtil.Tests/Provider/FileHelperFixture.cs similarity index 72% rename from test/Ninja.FileUtil.Tests/Provider/FileHelperFixture.cs rename to test/FileUtil.Tests/Provider/FileHelperFixture.cs index ccfb26e..191a251 100644 --- a/test/Ninja.FileUtil.Tests/Provider/FileHelperFixture.cs +++ b/test/FileUtil.Tests/Provider/FileHelperFixture.cs @@ -1,21 +1,18 @@ -using System; -using System.IO; -using Ninja.FileUtil.Provider.Impl; +using FileUtil.Provider.Impl; using NUnit.Framework; -namespace Ninja.FileUtil.Tests.Provider +namespace FileUtil.Tests.Provider { - [TestFixture] - class FileHelperFixture + [TestFixture] + internal class FileHelperFixture { - private string filePath; + private string filePath; - private FileHelper fileHelper; + private FileHelper fileHelper; [SetUp] public void Setup() { - fileHelper = new FileHelper(); filePath = Path.Combine(Environment.CurrentDirectory, "TestFile.txt"); CreateFile(filePath); @@ -31,9 +28,7 @@ public void TestGetFilesForFileWhichDoesNotExistsShouldReturnEmptyFileCollection public void CreateFile(string path) { using (var sr = new StreamWriter(File.Open(path, FileMode.OpenOrCreate))) - { sr.Write("test one"); - } } } -} +} \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/TestFile.txt b/test/FileUtil.Tests/TestFile.txt similarity index 100% rename from test/Ninja.FileUtil.Tests/TestFile.txt rename to test/FileUtil.Tests/TestFile.txt diff --git a/test/Ninja.FileUtil.Tests/Ninja.FileUtil.Tests.csproj b/test/Ninja.FileUtil.Tests/Ninja.FileUtil.Tests.csproj deleted file mode 100644 index 3983934..0000000 --- a/test/Ninja.FileUtil.Tests/Ninja.FileUtil.Tests.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - - net8.0 - enable - enable - - false - - - - - - - - - - - - - - - - - - Always - - - - \ No newline at end of file diff --git a/test/Ninja.FileUtil.Tests/Parser/LineParserFixture.cs b/test/Ninja.FileUtil.Tests/Parser/LineParserFixture.cs deleted file mode 100644 index b286c03..0000000 --- a/test/Ninja.FileUtil.Tests/Parser/LineParserFixture.cs +++ /dev/null @@ -1,107 +0,0 @@ -using Moq; -using Ninja.FileUtil.Configuration; -using Ninja.FileUtil.Parser.Impl; -using NUnit.Framework; - -namespace Ninja.FileUtil.Tests.Parser -{ - [TestFixture] - class LineParserFixture - { - private Mock configuration; - private LineParser parser; - - [SetUp] - public void Setup() - { - configuration = new Mock(); - - configuration.Setup(x => x.Delimiter.Value).Returns('|'); - configuration.Setup(x => x.LineHeaders.Header).Returns("H"); - configuration.Setup(x => x.LineHeaders.Data).Returns("D"); - configuration.Setup(x => x.LineHeaders.Footer).Returns("F"); - parser = new LineParser(configuration.Object); - } - - [Test] - public void TestParseForNullInputShouldReturnEmptyArray() - { - Assert.IsEmpty(parser.Parse(null)); - Assert.IsEmpty(parser.Parse(null, LineType.Data)); - } - - [Test] - public void TestParseWithLineHeaderInputShouldReturnCorrectlyParsedArray() - { - var lines = new [] - { - "D|Bob Marley|True", - "D|John Walsh|False" - }; - - var parsed = parser.Parse(lines, LineType.Data); - - Assert.That(parsed.Length, Is.EqualTo(2)); - - Assert.That(parsed[0].Name, Is.EqualTo("Bob Marley")); - Assert.That(parsed[0].IsMember, Is.EqualTo(true)); - Assert.That(parsed[0].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(parsed[0].Errors); - - Assert.That(parsed[1].Name, Is.EqualTo("John Walsh")); - Assert.That(parsed[1].IsMember, Is.EqualTo(false)); - Assert.That(parsed[1].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(parsed[1].Errors); - } - - [Test] - public void TestParseWithNoLineHeaderInputShouldReturnCorrectlyParsedArray() - { - var lines = new[] - { - "Bob Marley|True", - "John Walsh|False" - }; - var prsed = parser.Parse(lines); - - Assert.That(prsed.Length, Is.EqualTo(2)); - - Assert.That(prsed[0].Name, Is.EqualTo("Bob Marley")); - Assert.That(prsed[0].IsMember, Is.EqualTo(true)); - Assert.That(prsed[0].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(prsed[0].Errors); - - Assert.That(prsed[1].Name, Is.EqualTo("John Walsh")); - Assert.That(prsed[1].IsMember, Is.EqualTo(false)); - Assert.That(prsed[1].Type, Is.EqualTo(LineType.Data)); - Assert.IsEmpty(prsed[1].Errors); - } - - [TestCase("hbtrb", true)] - [TestCase("hbtrb|ej ef|fer|", true)] - [TestCase("H|hbtrb", false)] - [TestCase("H|hbtrb|ej ef|fer|rc |", true)] - public void TestParseForInvalidInputShouldReturnError(string line, bool hasLineType) - { - if (!hasLineType) parser = new LineParser(configuration.Object); - - var result = hasLineType - ? parser.Parse(new[] {line}) - : parser.Parse(new[] {line}, LineType.Header); - - Assert.IsNotEmpty(result[0].Errors); - } - - [Test] - public void TestParseForInvalidFileLineWithNoColumnAttributesShouldReturnError() - { - var result = parser.Parse(new[] { "D|edndx|medmd" }, LineType.Data); - - Assert.IsNotEmpty(result[0].Errors); - - result = parser.Parse(new[] { "edndx|medmd" }); - - Assert.IsNotEmpty(result[0].Errors); - } - } -}