Index: Core/Common/src/Core.Common.Utils/FileUtils.cs =================================================================== diff -u -r4512af7782ee31b36941bb280b54d9da2953dd71 -r38916623f1906041a5309d5241f7672020d69b35 --- Core/Common/src/Core.Common.Utils/FileUtils.cs (.../FileUtils.cs) (revision 4512af7782ee31b36941bb280b54d9da2953dd71) +++ Core/Common/src/Core.Common.Utils/FileUtils.cs (.../FileUtils.cs) (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -20,7 +20,9 @@ // All rights reserved. using System; +using System.Collections; using System.IO; +using System.Security.Cryptography; using Core.Common.Utils.Builders; using Core.Common.Utils.Properties; @@ -62,5 +64,45 @@ throw new ArgumentException(message); } } + + /// + /// Compares with . + /// + /// Path to the original file. + /// Path to the file to compare to. + /// True if the files are structural equal, false otherwise. + /// Thrown when: + /// is invalid; + /// is invalid; + /// Failed to read file ; + /// Failed to read file ; + /// + public static bool CompareFiles(string pathA, string pathB) + { + ValidateFilePath(pathA); + ValidateFilePath(pathB); + + try + { + using (var md5 = MD5.Create()) + { + byte[] hashA; + byte[] hashB; + using (var stream = File.OpenRead(pathA)) + { + hashA = md5.ComputeHash(stream); + } + using (var stream = File.OpenRead(pathB)) + { + hashB = md5.ComputeHash(stream); + } + return StructuralComparisons.StructuralEqualityComparer.Equals(hashA, hashB); + } + } + catch (SystemException exception) + { + throw new ArgumentException(Resources.Error_General_IO_ErrorMessage, exception); + } + } } } \ No newline at end of file Index: Core/Common/src/Core.Common.Utils/Properties/Resources.Designer.cs =================================================================== diff -u -r71e6fa1d924328063813f357c9b737a8f9084491 -r38916623f1906041a5309d5241f7672020d69b35 --- Core/Common/src/Core.Common.Utils/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 71e6fa1d924328063813f357c9b737a8f9084491) +++ Core/Common/src/Core.Common.Utils/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -88,6 +88,15 @@ } /// + /// Looks up a localized string similar to Er is een onverwachte fout opgetreden tijdens het inlezen van het bestand.. + /// + public static string Error_General_IO_ErrorMessage { + get { + return ResourceManager.GetString("Error_General_IO_ErrorMessage", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Er is een onverwachte fout opgetreden tijdens het inlezen van het bestand: {0}. /// public static string Error_General_IO_ErrorMessage_0_ { Index: Core/Common/src/Core.Common.Utils/Properties/Resources.resx =================================================================== diff -u -r71e6fa1d924328063813f357c9b737a8f9084491 -r38916623f1906041a5309d5241f7672020d69b35 --- Core/Common/src/Core.Common.Utils/Properties/Resources.resx (.../Resources.resx) (revision 71e6fa1d924328063813f357c9b737a8f9084491) +++ Core/Common/src/Core.Common.Utils/Properties/Resources.resx (.../Resources.resx) (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -150,4 +150,7 @@ Regel bevat te veel tekst om in het RAM geheugen opgeslagen te worden. + + Er is een onverwachte fout opgetreden tijdens het inlezen van het bestand. + \ No newline at end of file Index: Core/Common/test/Core.Common.Utils.Test/FileUtilsTest.cs =================================================================== diff -u -r654d3a712eedbdeea718dc0448c5544f09e053cd -r38916623f1906041a5309d5241f7672020d69b35 --- Core/Common/test/Core.Common.Utils.Test/FileUtilsTest.cs (.../FileUtilsTest.cs) (revision 654d3a712eedbdeea718dc0448c5544f09e053cd) +++ Core/Common/test/Core.Common.Utils.Test/FileUtilsTest.cs (.../FileUtilsTest.cs) (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -68,5 +68,84 @@ var expectedMessage = String.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet naar een map verwijzen.", folderPath); Assert.AreEqual(expectedMessage, exception.Message); } + + [Test] + [TestCase(null, "FileToCompare_Original.txt")] + [TestCase("", "FileToCompare_Original.txt")] + [TestCase(" ", "FileToCompare_Original.txt")] + [TestCase("FileToCompare_Original.txt", null)] + [TestCase("FileToCompare_Original.txt", "")] + [TestCase("FileToCompare_Original.txt", " ")] + public void CompareFiles_InvalidPaths_ThrowsArgumentxception(string pathA, string pathB) + { + // Setup + var expectedMessage = string.Format("Fout bij het lezen van bestand '{0}': Bestandspad mag niet leeg of ongedefinieerd zijn.", + ("FileToCompare_Original.txt" == pathB) ? pathA : pathB); + + // Call + TestDelegate test = () => FileUtils.CompareFiles(pathA, pathB); + + // Assert + ArgumentException exception = Assert.Throws(test); + Assert.AreEqual(expectedMessage, exception.Message); + } + + [Test] + [TestCase("DoesNotExist", "FileToCompare_Original.txt")] + [TestCase("FileToCompare_Original.txt", "DoesNotExist")] + public void CompareFiles_NonExistingPaths_ThrowsArgumentException(string pathA, string pathB) + { + // Setup + const string expectedMessage = "Er is een onverwachte fout opgetreden tijdens het inlezen van het bestand."; + + // Call + TestDelegate test = () => FileUtils.CompareFiles(pathA, pathB); + + // Assert + ArgumentException exception = Assert.Throws(test); + Assert.AreEqual(expectedMessage, exception.Message); + } + + [Test] + public void CompareFiles_SameFiles_ReturnsTrue() + { + // Setup + var pathA = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Original.txt"); + var pathB = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Equal.txt"); + + // Call + bool areEqual = FileUtils.CompareFiles(pathA, pathB); + + // Assert + Assert.IsTrue(areEqual); + } + + [Test] + public void CompareFiles_EqualFiles_ReturnsTrue() + { + // Setup + var pathA = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Original.txt"); + var pathB = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Equal.txt"); + + // Call + bool areEqual = FileUtils.CompareFiles(pathA, pathB); + + // Assert + Assert.IsTrue(areEqual); + } + + [Test] + public void CompareFiles_DifferentFiles_ReturnsFalse() + { + // Setup + var pathA = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Original.txt"); + var pathB = TestHelper.GetTestDataPath(TestDataPath.Core.Common.Utils, "FileToCompare_Different.txt"); + + // Call + bool areEqual = FileUtils.CompareFiles(pathA, pathB); + + // Assert + Assert.IsFalse(areEqual); + } } } \ No newline at end of file Index: Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Different.txt =================================================================== diff -u --- Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Different.txt (revision 0) +++ Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Different.txt (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -0,0 +1 @@ +hello World \ No newline at end of file Index: Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Equal.txt =================================================================== diff -u --- Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Equal.txt (revision 0) +++ Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Equal.txt (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -0,0 +1 @@ +helloWorld \ No newline at end of file Index: Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Original.txt =================================================================== diff -u --- Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Original.txt (revision 0) +++ Core/Common/test/Core.Common.Utils.Test/test-data/FileToCompare_Original.txt (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -0,0 +1 @@ +helloWorld \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/PipingCharacteristicPointsCsvReader.cs =================================================================== diff -u -r6298a5e4fbc259636c874b25c847021c05baf033 -r38916623f1906041a5309d5241f7672020d69b35 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/PipingCharacteristicPointsCsvReader.cs (.../PipingCharacteristicPointsCsvReader.cs) (revision 6298a5e4fbc259636c874b25c847021c05baf033) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/PipingCharacteristicPointsCsvReader.cs (.../PipingCharacteristicPointsCsvReader.cs) (revision 38916623f1906041a5309d5241f7672020d69b35) @@ -24,7 +24,6 @@ using Core.Common.IO.Exceptions; using Core.Common.Utils; using Core.Common.Utils.Builders; -using Ringtoets.Piping.IO.Exceptions; using Ringtoets.Piping.IO.Properties; namespace Ringtoets.Piping.IO @@ -109,6 +108,15 @@ } } + public void Dispose() + { + if (fileReader != null) + { + fileReader.Dispose(); + fileReader = null; + } + } + /// /// Validates the header of the file. /// @@ -196,14 +204,5 @@ } return count; } - - public void Dispose() - { - if (fileReader != null) - { - fileReader.Dispose(); - fileReader = null; - } - } } } \ No newline at end of file