From 503d983537c62208c8fb808dcab49a665c3f249b Mon Sep 17 00:00:00 2001 From: Joshua Hegedus <47304430+joshika39@users.noreply.github.com> Date: Sat, 4 Nov 2023 20:10:15 +0100 Subject: [PATCH] added parser and removed useless factory (#22) --- _src/Implementation/IO/DefaultDataParser.cs | 40 +++ _src/Implementation/IO/Factories/IOFactory.cs | 19 -- _src/Implementation/IO/Reader.cs | 87 +++--- _src/Implementation/Module/CoreModule.cs | 4 +- .../Infrastructure/IO/Factories/IIOFactory.cs | 11 - _src/Infrastructure/IO/IDataParser.cs | 17 ++ _src/Infrastructure/IO/IReader.cs | 32 +- _src/_Tests/ImplementationTest/ReaderTests.cs | 287 ++++++++++++------ _src/_Tests/ManualTests/Program.cs | 11 +- 9 files changed, 309 insertions(+), 199 deletions(-) create mode 100644 _src/Implementation/IO/DefaultDataParser.cs delete mode 100644 _src/Implementation/IO/Factories/IOFactory.cs delete mode 100644 _src/Infrastructure/IO/Factories/IIOFactory.cs create mode 100644 _src/Infrastructure/IO/IDataParser.cs diff --git a/_src/Implementation/IO/DefaultDataParser.cs b/_src/Implementation/IO/DefaultDataParser.cs new file mode 100644 index 0000000..37cfbb8 --- /dev/null +++ b/_src/Implementation/IO/DefaultDataParser.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Infrastructure.IO; + +namespace Implementation.IO +{ + internal class DefaultDataParser : IDataParser + { + public T TryParse(string input, IDataParser.TryParseHandler handler, out bool isOkay) + { + isOkay = handler(input, out var result); + return result; + } + + public IEnumerable TryParse(string input, IDataParser.TryParseHandler handler, out bool isOkay, char separator, params char[] separators) + { + isOkay = false; + separators = new[] + { + separator + }.Concat(separators).ToArray(); + + var lines = input.Split(separators, StringSplitOptions.RemoveEmptyEntries).ToList(); + lines.RemoveAll(c => c is "\r\n" or "\n" or "\r" or "\n\r"); + + var convertedLines = new List(); + foreach (var line in lines) + { + isOkay = handler(line, out var result); + if (isOkay) + { + convertedLines.Add(result); + } + } + + return convertedLines; + } + } +} diff --git a/_src/Implementation/IO/Factories/IOFactory.cs b/_src/Implementation/IO/Factories/IOFactory.cs deleted file mode 100644 index 84df049..0000000 --- a/_src/Implementation/IO/Factories/IOFactory.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Infrastructure.IO; -using Infrastructure.IO.Factories; -using Infrastructure.Logger; - -namespace Implementation.IO.Factories -{ - internal class IOFactory : IIOFactory - { - public IReader CreateReader(ILogger logger, IWriter writer) - { - return new Reader(logger, writer); - } - - public IWriter CreateWriter(ILogger logger) - { - return new Writer(logger); - } - } -} \ No newline at end of file diff --git a/_src/Implementation/IO/Reader.cs b/_src/Implementation/IO/Reader.cs index 49beffd..421c53a 100644 --- a/_src/Implementation/IO/Reader.cs +++ b/_src/Implementation/IO/Reader.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; using Infrastructure; using Infrastructure.IO; @@ -13,70 +12,58 @@ internal class Reader : IReader { private readonly ILogger _logger; private readonly IWriter _writer; + private readonly IDataParser _dataParser; - public Reader(ILogger logger, IWriter writer) + public Reader(ILogger logger, IWriter writer, IDataParser dataParser) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _writer = writer ?? throw new ArgumentNullException(nameof(writer)); + _dataParser = dataParser ?? throw new ArgumentNullException(nameof(dataParser)); } - public IEnumerable ReadLine(StreamReader streamReader, IReader.TryParseHandler handler, - out bool isOkay, params char[] separators) + public IEnumerable ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, + out bool isOkay, char separator, params char[] separators) { Console.SetIn(streamReader); - isOkay = false; var rawInput = ReadLine(streamReader, out var isConsole); if (isConsole) { _logger.LogWrite($"{rawInput}\n"); } - var lines = rawInput.Split(separators, StringSplitOptions.RemoveEmptyEntries).ToList(); - lines.RemoveAll(c => c is "\r\n" or "\n" or "\r" or "\n\r"); - - var convertedLines = new List(); - foreach (var line in lines) - { - isOkay = handler(line, out var result); - if (isOkay) - { - convertedLines.Add(result); - } - } - - return convertedLines; + + return _dataParser.TryParse(rawInput, handler, out isOkay, separator, separators); } - - public T ReadLine(StreamReader streamReader, IReader.TryParseHandler handler, out bool isOkay) + + public T? ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, out bool isOkay) { Console.SetIn(streamReader); - isOkay = false; var rawInput = ReadLine(streamReader, out var isConsole); if (isConsole) { _logger.LogWrite($"{rawInput}\n"); } - isOkay = handler(rawInput, out var result); - return isOkay ? result : default; + + return _dataParser.TryParse(rawInput, handler, out isOkay); } - public T ReadLine(IReader.TryParseHandler handler, string prompt) + public T? ReadLine(IDataParser.TryParseHandler handler, string prompt, out bool isOkay) { var reader = new StreamReader(Console.OpenStandardInput()); var time = DateTime.Now.ToString("HH:mm:ss"); _writer.Write(Constants.EscapeColors.CYAN, $"[ INPUT: {time}] {prompt}"); - var ans = ReadLine(reader, handler, out _); + var ans = ReadLine(reader, handler, out isOkay); return ans; } - public IEnumerable ReadLine(IReader.TryParseHandler handler, string prompt, params char[] separators) + public IEnumerable ReadLine(IDataParser.TryParseHandler handler, string prompt, char separator, params char[] separators) { var reader = new StreamReader(Console.OpenStandardInput()); var time = DateTime.Now.ToString("HH:mm:ss"); _writer.Write(Constants.EscapeColors.CYAN, $"[ INPUT: {time}] {prompt}"); - var ans = ReadLine(reader, handler, out _, separators); + var ans = ReadLine(reader, handler, out _, separator, separators); return ans; } @@ -85,7 +72,7 @@ public string ReadLine(string prompt, string errorMsg) return ReadLine(Dummy, prompt, errorMsg); } - public T ReadLine(IReader.TryParseHandler handler, string prompt, string errorMsg) + public T ReadLine(IDataParser.TryParseHandler handler, string prompt, string errorMsg) { var reader = new StreamReader(Console.OpenStandardInput()); while (true) @@ -94,7 +81,7 @@ public T ReadLine(IReader.TryParseHandler handler, string prompt, string e _writer.Write(Constants.EscapeColors.CYAN, $"[ INPUT: {time}] {prompt}"); var ans = ReadLine(reader, handler, out var isCorrect); - if (isCorrect) + if (isCorrect && ans is not null) { return ans; } @@ -103,15 +90,15 @@ public T ReadLine(IReader.TryParseHandler handler, string prompt, string e } } - public IEnumerable ReadLine(IReader.TryParseHandler handler, string prompt, string errorMsg, - params char[] separators) + public IEnumerable ReadLine(IDataParser.TryParseHandler handler, string prompt, string errorMsg, + char separator, params char[] separators) { var reader = new StreamReader(Console.OpenStandardInput()); while (true) { var time = DateTime.Now.ToString("HH:mm:ss"); _writer.Write(Constants.EscapeColors.CYAN, $"[ INPUT: {time}] {prompt}"); - var ans = ReadLine(reader, handler, out var isCorrect, separators); + var ans = ReadLine(reader, handler, out var isCorrect, separator, separators); if (isCorrect) { @@ -122,27 +109,22 @@ public T ReadLine(IReader.TryParseHandler handler, string prompt, string e } } - public T ReadLine(IReader.TryParseHandler handler) + public T? ReadLine(IDataParser.TryParseHandler handler, out bool isOkay) { var reader = new StreamReader(Console.OpenStandardInput()); - return ReadLine(reader, handler); + return ReadLine(reader, handler, out isOkay); } - public IEnumerable ReadLine(IReader.TryParseHandler handler, params char[] separators) + public IEnumerable ReadLine(IDataParser.TryParseHandler handler, char separator, params char[] separators) { var reader = new StreamReader(Console.OpenStandardInput()); - return ReadLine(reader, handler, separators); - } - - public T ReadLine(StreamReader streamReader, IReader.TryParseHandler handler) - { - return ReadLine(streamReader, handler, out _); + return ReadLine(reader, handler, separator, separators); } - public IEnumerable ReadLine(StreamReader streamReader, IReader.TryParseHandler handler, - params char[] separators) + public IEnumerable ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, + char separator, params char[] separators) { - return ReadLine(streamReader, handler, out _, separators); + return ReadLine(streamReader, handler, out _, separator, separators); } public string ReadAllLines(string prompt) @@ -155,24 +137,27 @@ public string ReadAllLines(string prompt) return ReadLine(streamReader, out _, true); } - public IEnumerable ReadAllLines(StreamReader streamReader, IReader.TryParseHandler handler) + public IEnumerable ReadAllLines(StreamReader streamReader, IDataParser.TryParseHandler handler) { var items = new List(); while (!streamReader.EndOfStream) { - items.Add(ReadLine(streamReader, handler)); + var item = ReadLine(streamReader, handler, out var isOkay); + if (isOkay && item is not null) + { + items.Add(item); + } } return items; } - public IEnumerable> ReadAllLines(StreamReader streamReader, - IReader.TryParseHandler handler, params char[] separators) + public IEnumerable> ReadAllLines(StreamReader streamReader, IDataParser.TryParseHandler handler, char separator, params char[] separators) { var items = new List>(); while (!streamReader.EndOfStream) { - items.Add(ReadLine(streamReader, handler, separators)); + items.Add(ReadLine(streamReader, handler, separator, separators)); } return items; @@ -180,7 +165,7 @@ public IEnumerable ReadAllLines(StreamReader streamReader, IReader.TryPars public static string ReadLine(StreamReader streamReader, out bool fromConsole, bool useEndOfFile=false) { - fromConsole = !(streamReader.BaseStream.GetType() == typeof(FileStream)); + fromConsole = streamReader.BaseStream.GetType() != typeof(FileStream); Console.SetIn(streamReader); var sb = new StringBuilder(); while (!streamReader.EndOfStream) diff --git a/_src/Implementation/Module/CoreModule.cs b/_src/Implementation/Module/CoreModule.cs index 537dab1..535053d 100644 --- a/_src/Implementation/Module/CoreModule.cs +++ b/_src/Implementation/Module/CoreModule.cs @@ -3,13 +3,11 @@ using Implementation.Application; using Implementation.Configuration.Factories; using Implementation.IO; -using Implementation.IO.Factories; using Implementation.Navigator.Factories; using Implementation.Repositories.Factories; using Infrastructure.Application; using Infrastructure.Configuration.Factories; using Infrastructure.IO; -using Infrastructure.IO.Factories; using Infrastructure.Logger; using Infrastructure.Module; using Infrastructure.Navigator.Factories; @@ -25,12 +23,12 @@ public void LoadModules(IServiceCollection collection, string projectNamespace) var mainFolder = Path.Join("joshika39", projectNamespace); var userFolder = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), mainFolder); collection.AddScoped(_ => new Logger.Logger(Guid.NewGuid())); - collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddScoped(); collection.AddScoped(); + collection.AddScoped(); collection.AddTransient(); collection.AddTransient(provider => new GeneralApplicationSettings(userFolder, provider.GetRequiredService()) diff --git a/_src/Infrastructure/IO/Factories/IIOFactory.cs b/_src/Infrastructure/IO/Factories/IIOFactory.cs deleted file mode 100644 index ba35902..0000000 --- a/_src/Infrastructure/IO/Factories/IIOFactory.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Infrastructure.Logger; - -namespace Infrastructure.IO.Factories -{ - public interface IIOFactory - { - IReader CreateReader(ILogger logger, IWriter writer); - - IWriter CreateWriter(ILogger logger); - } -} \ No newline at end of file diff --git a/_src/Infrastructure/IO/IDataParser.cs b/_src/Infrastructure/IO/IDataParser.cs new file mode 100644 index 0000000..1e34314 --- /dev/null +++ b/_src/Infrastructure/IO/IDataParser.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace Infrastructure.IO +{ + public interface IDataParser + { + /// + /// Used to specify the parser method for the ReadLine() method. + /// + /// Can be any ValueType. + delegate bool TryParseHandler(string value, out T result); + + T? TryParse(string input, TryParseHandler handler, out bool isOkay); + + IEnumerable TryParse(string input, TryParseHandler handler, out bool isOkay, char separator, params char[] separators); + } +} diff --git a/_src/Infrastructure/IO/IReader.cs b/_src/Infrastructure/IO/IReader.cs index 0baec72..5d71a9e 100644 --- a/_src/Infrastructure/IO/IReader.cs +++ b/_src/Infrastructure/IO/IReader.cs @@ -7,18 +7,13 @@ namespace Infrastructure.IO { public interface IReader { - /// - /// Used to specify the parser method for the ReadLine() method. - /// - /// Can be any ValueType. - delegate bool TryParseHandler(string value, out T result); - /// /// This is the core method. It is using Console.ReadLine method, to get the data /// /// /// A type parser method /// + /// /// /// /// This shows a conversion to int. @@ -28,29 +23,26 @@ public interface IReader /// /// The converted Type passed with the type parameter. /// Exception being thrown when the conversion is unsuccessful. - IEnumerable ReadLine(StreamReader streamReader, TryParseHandler handler, out bool isOkay, params char[] separators); - - T ReadLine(StreamReader streamReader, TryParseHandler handler, out bool isOkay); - + IEnumerable ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, out bool isOkay, char separator, params char[] separators); + T? ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, out bool isOkay); #region ReadLine - T ReadLine(TryParseHandler handler, string prompt); - IEnumerable ReadLine(TryParseHandler handler, string prompt, params char[] separators); + T? ReadLine(IDataParser.TryParseHandler handler, string prompt, out bool isOkay); + IEnumerable ReadLine(IDataParser.TryParseHandler handler, string prompt, char separator, params char[] separators); string ReadLine(string prompt, string errorMsg); - T ReadLine(TryParseHandler handler, string prompt, string errorMsg); - IEnumerable ReadLine(TryParseHandler handler, string prompt, string errorMsg, params char[] separators); + T ReadLine(IDataParser.TryParseHandler handler, string prompt, string errorMsg); + IEnumerable ReadLine(IDataParser.TryParseHandler handler, string prompt, string errorMsg, char separator, params char[] separators); - T ReadLine(TryParseHandler handler); - IEnumerable ReadLine(TryParseHandler handler, params char[] separators); - T ReadLine(StreamReader streamReader, TryParseHandler handler); - IEnumerable ReadLine(StreamReader streamReader, TryParseHandler handler, params char[] separators); + T? ReadLine(IDataParser.TryParseHandler handler, out bool isOkay); + IEnumerable ReadLine(IDataParser.TryParseHandler handler, char separator, params char[] separators); + IEnumerable ReadLine(StreamReader streamReader, IDataParser.TryParseHandler handler, char separator, params char[] separators); #endregion #region ReadAllLines string ReadAllLines(string prompt); - IEnumerable ReadAllLines(StreamReader streamReader, TryParseHandler handler); - IEnumerable> ReadAllLines(StreamReader streamReader, TryParseHandler handler, params char[] separators); + IEnumerable ReadAllLines(StreamReader streamReader, IDataParser.TryParseHandler handler); + IEnumerable> ReadAllLines(StreamReader streamReader, IDataParser.TryParseHandler handler, char separator, params char[] separators); #endregion diff --git a/_src/_Tests/ImplementationTest/ReaderTests.cs b/_src/_Tests/ImplementationTest/ReaderTests.cs index 0f1c74f..5374d83 100644 --- a/_src/_Tests/ImplementationTest/ReaderTests.cs +++ b/_src/_Tests/ImplementationTest/ReaderTests.cs @@ -3,15 +3,24 @@ using System.IO; using System.Linq; using Implementation.IO; -using Implementation.IO.Factories; -using Implementation.Logger.Factories; -using Infrastructure.Logger; +using Implementation.Module; +using Infrastructure.IO; +using Microsoft.Extensions.DependencyInjection; using Xunit; namespace ImplementationTest { public class ReaderTests { + private readonly ServiceProvider _provider; + + public ReaderTests() + { + var collection = new ServiceCollection(); + new CoreModule().LoadModules(collection, "reader-tests"); + _provider = collection.BuildServiceProvider(); + } + [Theory] [InlineData(@"Resources\RT\0001_0.txt", 0)] [InlineData(@"Resources\RT\0001_1.txt", 1)] @@ -20,55 +29,65 @@ public class ReaderTests public void RT_0001_Given_FileWithValidData_When_ReadLineWithSingleValue_Then_ReturnsCorrectValue(string path, int expected) { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); - var result = reader.ReadLine(stream, int.TryParse); + var result = reader.ReadLine(stream, int.TryParse, out _); Assert.Equal(expected, result); } - finally - { - logger.Dispose(); - } } public static IEnumerable RT_0011_MemberData() { - yield return new object[] { @"Resources\RT\0002_0.txt", new List { 0, 1, 2, 3, 4 } }; - yield return new object[] { @"Resources\RT\0002_1.txt", new List { 4, 2, 5, 8 } }; + yield return new object[] + { + @"Resources\RT\0002_0.txt", + new List + { + 0, + 1, + 2, + 3, + 4 + } + }; + yield return new object[] + { + @"Resources\RT\0002_1.txt", + new List + { + 4, + 2, + 5, + 8 + } + }; } [Theory] [MemberData(nameof(RT_0011_MemberData))] public void RT_0011_Given_FileWithValidData_When_ReadLineWithMultipleValues_Then_ReturnsCorrectValue( string path, IEnumerable elements) { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); var result = reader.ReadLine(stream, int.TryParse, ' '); Assert.Equal(elements, result); } - finally - { - logger.Dispose(); - } } [Fact] public void RT_0021_Given_FileWithValidData_When_ReadLine_Then_ReturnsTheString() { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(@"Resources\RT\readlineTest.txt"); const string contents = "test String"; @@ -76,16 +95,31 @@ public void RT_0021_Given_FileWithValidData_When_ReadLine_Then_ReturnsTheString( Assert.Equal(contents, result); } - finally - { - logger.Dispose(); - } } public static IEnumerable RT_0031_MemberData() { - yield return new object[] { @"Resources\RT\0031_0.txt", new List { 1, 2, 3 } }; - yield return new object[] { @"Resources\RT\0031_1.txt", new List { 4, 2, 5, 8 } }; + yield return new object[] + { + @"Resources\RT\0031_0.txt", + new List + { + 1, + 2, + 3 + } + }; + yield return new object[] + { + @"Resources\RT\0031_1.txt", + new List + { + 4, + 2, + 5, + 8 + } + }; } [Theory] [MemberData(nameof(RT_0031_MemberData))] @@ -93,54 +127,104 @@ public void RT_0031_Given_FileWithValidDataWithDifferentSeparator_When_ReadLineIsCalled_Then_ReturnsCorrectValue( string path, IEnumerable elements) { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); var result = reader.ReadLine(stream, int.TryParse, ' ', '\t'); Assert.Equal(elements, result); } - finally - { - logger.Dispose(); - } } public static IEnumerable RT_0041_MemberData() { - yield return new object[] { @"Resources\RT\0041_0.txt", new List { 4, 2, 5, 8 } }; - yield return new object[] { @"Resources\RT\0041_1.txt", new List { 1, 2, 3 } }; + yield return new object[] + { + @"Resources\RT\0041_0.txt", + new List + { + 4, + 2, + 5, + 8 + } + }; + yield return new object[] + { + @"Resources\RT\0041_1.txt", + new List + { + 1, + 2, + 3 + } + }; } [Theory] [MemberData(nameof(RT_0041_MemberData))] public void RT_0041_Given_FileWithValidData_When_ReadAllLinesForOneValue_Then_ReturnsCorrectValue(string path, IEnumerable elements) { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); var result = reader.ReadAllLines(stream, int.TryParse); Assert.Equal(elements, result); } - finally - { - logger.Dispose(); - } } public static IEnumerable RT_0051_MemberData() { yield return new object[] - { @"Resources\RT\0051_0.txt", new List> { new() { 4, 2, 5, 8 }, new() { 1, 1, 1 } } }; + { + @"Resources\RT\0051_0.txt", + new List> + { + new() + { + 4, + 2, + 5, + 8 + }, + new() + { + 1, + 1, + 1 + } + } + }; yield return new object[] { @"Resources\RT\0051_1.txt", - new List> { new() { 4, 2, 5, 8 }, new() { 1, 2, 3 }, new() { 7, 8, 9, 4, 5 } } + new List> + { + new() + { + 4, + 2, + 5, + 8 + }, + new() + { + 1, + 2, + 3 + }, + new() + { + 7, + 8, + 9, + 4, + 5 + } + } }; } [Theory] @@ -148,56 +232,88 @@ public static IEnumerable RT_0051_MemberData() public void RT_0051_Given_FileWithValidData_When_ReadAllLinesForMultipleValues_Then_ReturnsCorrectValue( string path, IEnumerable> elements) { - var reader = InitializeReader(out var logger); - - try + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); var result = reader.ReadAllLines(stream, int.TryParse, ' ', '\t'); Assert.Equal(elements, result); } - finally - { - logger.Dispose(); - } } public static IEnumerable RT_0061_MemberData() { yield return new object[] { - @"Resources\RT\0061_0.txt", new List + @"Resources\RT\0061_0.txt", + new List { new("YQMHWO") { Subjects = new List() { - new() { Code = "INVMEG-23", Credit = 3, Grade = 5 }, - new() { Code = "IP-asd", Credit = 6, Grade = 5 } + new() + { + Code = "INVMEG-23", + Credit = 3, + Grade = 5 + }, + new() + { + Code = "IP-asd", + Credit = 6, + Grade = 5 + } } } } }; yield return new object[] { - @"Resources\RT\0061_1.txt", new List + @"Resources\RT\0061_1.txt", + new List { new("YQMHWO") { Subjects = new List() { - new() { Code = "INVMEG-23", Credit = 3, Grade = 5 }, - new() { Code = "IP-asd", Credit = 6, Grade = 5 } + new() + { + Code = "INVMEG-23", + Credit = 3, + Grade = 5 + }, + new() + { + Code = "IP-asd", + Credit = 6, + Grade = 5 + } } }, new("ASD123") { Subjects = new List() { - new() { Code = "IP-asd", Credit = 6, Grade = 5 }, - new() { Code = "INVMEG-23-123", Credit = 5, Grade = 2 }, - new() { Code = "TEST-0", Credit = 1, Grade = 4 } + new() + { + Code = "IP-asd", + Credit = 6, + Grade = 5 + }, + new() + { + Code = "INVMEG-23-123", + Credit = 5, + Grade = 2 + }, + new() + { + Code = "TEST-0", + Credit = 1, + Grade = 4 + } } } } @@ -208,34 +324,28 @@ public static IEnumerable RT_0061_MemberData() public void RT_0061_Given_FileWithValidData_When_ReadAllLinesWithCustomConverter_Then_ReturnsCorrectValue( string path, IEnumerable students) { - var reader = InitializeReader(out var logger); - try + + using (var scope = _provider.CreateScope()) { + var reader = scope.ServiceProvider.GetRequiredService(); using var stream = new StreamReader(path); var result = reader.ReadAllLines( stream, TestClasses.TestStudent.TryParse); var test = false; - foreach (var zipElem in students.Zip(result, (e, a) => new { Expected = e, Actual = a })) + foreach (var zipElem in students.Zip(result, (e, a) => new + { + Expected = e, + Actual = a + })) { test = zipElem.Expected.Equals(zipElem.Actual); } Assert.True(test); } - finally - { - logger.Dispose(); - } - } - private static Reader InitializeReader(out ILogger logger) - { - var id = Guid.NewGuid(); - logger = new LoggerFactory().CreateLogger(id); - var ioFactory = new IOFactory(); - return new Reader(logger, ioFactory.CreateWriter(logger)); } #pragma warning disable CS0659 // Type overrides Object.Equals(object o) but does not override Object.GetHashCode() @@ -248,8 +358,7 @@ public class TestSubject public double Grade { get; set; } public TestSubject() - { - } + { } public TestSubject(string code, int credit, double grade) { @@ -300,7 +409,11 @@ public TestStudent(string neptunId) public static bool TryParse(string line, out TestStudent student) { - var data = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); + var data = line.Split(new[] + { + ' ', + '\t' + }, StringSplitOptions.RemoveEmptyEntries); var tmpStudent = new TestStudent(data[0]); var dataList = data.ToList(); dataList.RemoveAt(0); @@ -343,14 +456,18 @@ public override bool Equals(object obj) private bool Equals(TestStudent other) { return _subjects - .Zip(other._subjects, (s, o) => new { Self = s, Other = o }) - .All(z => z.Self.Equals(z.Other)) - && NeptunId == other.NeptunId - && Avg.Equals(other.Avg) + .Zip(other._subjects, (s, o) => new + { + Self = s, + Other = o + }) + .All(z => z.Self.Equals(z.Other)) + && NeptunId == other.NeptunId + && Avg.Equals(other.Avg) && CreditSum == other.CreditSum; } } } #pragma warning restore CS0659 // Type overrides Object.Equals(object o) but does not override Object.GetHashCode() } -} \ No newline at end of file +} diff --git a/_src/_Tests/ManualTests/Program.cs b/_src/_Tests/ManualTests/Program.cs index febe34d..9326592 100644 --- a/_src/_Tests/ManualTests/Program.cs +++ b/_src/_Tests/ManualTests/Program.cs @@ -1,14 +1,5 @@ -using System; -using System.Collections.Generic; -using Implementation.IO.Factories; -using Implementation.Logger.Factories; -using Implementation.Navigator; -using Implementation.Navigator.Factories; -using Infrastructure; -using Infrastructure.Application; +using Infrastructure.Application; using Infrastructure.IO; -using Infrastructure.Logger; -using Infrastructure.Navigator; using Infrastructure.Navigator.Factories; using Microsoft.Extensions.DependencyInjection;