From fd657e415963036a53f1bb48de9965f7ae4b834d Mon Sep 17 00:00:00 2001 From: Mithilesh Zavar Date: Sun, 24 Mar 2024 09:14:36 +0000 Subject: [PATCH 1/2] Remove the logic to add to readbytes as the statement would never be hit --- .../framework/Constraints/Comparers/StreamsComparer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NUnitFramework/framework/Constraints/Comparers/StreamsComparer.cs b/src/NUnitFramework/framework/Constraints/Comparers/StreamsComparer.cs index d1fb1939ae..96a88b7ca2 100644 --- a/src/NUnitFramework/framework/Constraints/Comparers/StreamsComparer.cs +++ b/src/NUnitFramework/framework/Constraints/Comparers/StreamsComparer.cs @@ -64,7 +64,7 @@ public static EqualMethodResult Equal(object x, object y, ref Tolerance toleranc if (MemoryExtensions.SequenceEqual(bufferExpected, bufferActual)) { - readByte += BUFFER_SIZE; + readByte += readActual; continue; } @@ -82,7 +82,6 @@ public static EqualMethodResult Equal(object x, object y, ref Tolerance toleranc return EqualMethodResult.ComparedNotEqual; } } - readByte += BUFFER_SIZE; } } finally From ca33756e176de6e76569e215528c5cd68654df98 Mon Sep 17 00:00:00 2001 From: Mithilesh Zavar Date: Mon, 25 Mar 2024 19:25:17 +0000 Subject: [PATCH 2/2] Add a test case for a custom memory stream implementation --- .../StreamsComparerBenchmark.cs | 2 +- .../tests/Constraints/EqualConstraintTests.cs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/NUnitFramework/benchmarks/nunit.framework.benchmarks/StreamsComparerBenchmark.cs b/src/NUnitFramework/benchmarks/nunit.framework.benchmarks/StreamsComparerBenchmark.cs index fbb0044853..6e6b5ebc32 100644 --- a/src/NUnitFramework/benchmarks/nunit.framework.benchmarks/StreamsComparerBenchmark.cs +++ b/src/NUnitFramework/benchmarks/nunit.framework.benchmarks/StreamsComparerBenchmark.cs @@ -153,7 +153,7 @@ public static EqualMethodResult Equal_Enhanced(Stream xStream, Stream yStream, o if (MemoryExtensions.SequenceEqual(bufferExpected, bufferActual)) { - readByte += BUFFER_SIZE; + readByte += readActual; continue; } diff --git a/src/NUnitFramework/tests/Constraints/EqualConstraintTests.cs b/src/NUnitFramework/tests/Constraints/EqualConstraintTests.cs index 38d161cb30..4c9f44b7c9 100644 --- a/src/NUnitFramework/tests/Constraints/EqualConstraintTests.cs +++ b/src/NUnitFramework/tests/Constraints/EqualConstraintTests.cs @@ -190,6 +190,20 @@ public void UnSeekableLargeActualStreamUnequal() Assert.That(entryStream, Is.Not.EqualTo(expectedStream)); } + [Test] + public void ShortReadingMemoryStream_AssertErrorMessageFailurePointIsCorrect() + { + var unequalStream = HelloString.Remove(HelloString.Length - 1, 1) + "."; + + using var expectedStream = new ShortReadingMemoryStream(Encoding.UTF8.GetBytes(HelloString)); + + using var entryStream = new ShortReadingMemoryStream(Encoding.UTF8.GetBytes(unequalStream)); + + var ex = Assert.Throws(() => Assert.That(entryStream, Is.EqualTo(expectedStream))); + + Assert.That(ex?.Message, Does.Contain("Stream lengths are both 9. Streams differ at offset 8.")); + } + private static ZipArchive CreateZipArchive(string content) { var archiveContents = new MemoryStream(); @@ -206,6 +220,18 @@ private static ZipArchive CreateZipArchive(string content) return new ZipArchive(archiveContents, ZipArchiveMode.Read, leaveOpen: false); } + + private class ShortReadingMemoryStream : MemoryStream + { + public ShortReadingMemoryStream(byte[] bytes) : base(bytes) + { + } + + public override int Read(byte[] buffer, int offset, int count) + { + return base.Read(buffer, offset, 2); + } + } } #endregion