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