Skip to content

Commit 8a67d50

Browse files
committed
Don't use reflection in tests
1 parent 3c87242 commit 8a67d50

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,32 @@ protected override IReader CreateReaderForSolidExtraction() =>
212212
public override long TotalSize =>
213213
_database?._packSizes.Aggregate(0L, (total, packSize) => total + packSize) ?? 0;
214214

215-
private sealed class SevenZipReader : AbstractReader<SevenZipEntry, SevenZipVolume>
215+
internal sealed class SevenZipReader : AbstractReader<SevenZipEntry, SevenZipVolume>
216216
{
217217
private readonly SevenZipArchive _archive;
218218
private SevenZipEntry? _currentEntry;
219219
private Stream? _currentFolderStream;
220220
private CFolder? _currentFolder;
221221

222+
/// <summary>
223+
/// Enables internal diagnostics for tests.
224+
/// When disabled (default), diagnostics properties return null to avoid exposing internal state.
225+
/// </summary>
226+
internal bool DiagnosticsEnabled { get; set; }
227+
228+
/// <summary>
229+
/// Current folder instance used to decide whether the solid folder stream should be reused.
230+
/// Only available when <see cref="DiagnosticsEnabled"/> is true.
231+
/// </summary>
232+
internal object? DiagnosticsCurrentFolder => DiagnosticsEnabled ? _currentFolder : null;
233+
234+
/// <summary>
235+
/// Current shared folder stream instance.
236+
/// Only available when <see cref="DiagnosticsEnabled"/> is true.
237+
/// </summary>
238+
internal Stream? DiagnosticsCurrentFolderStream =>
239+
DiagnosticsEnabled ? _currentFolderStream : null;
240+
222241
internal SevenZipReader(ReaderOptions readerOptions, SevenZipArchive archive)
223242
: base(readerOptions, ArchiveType.SevenZip) => this._archive = archive;
224243

tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.IO;
33
using System.Linq;
4-
using System.Reflection;
54
using SharpCompress.Archives;
65
using SharpCompress.Archives.SevenZip;
76
using SharpCompress.Common;
@@ -288,19 +287,8 @@ public void SevenZipArchive_Solid_VerifyStreamReuse()
288287

289288
using var reader = archive.ExtractAllEntries();
290289

291-
// Use reflection to access the private fields
292-
var readerType = reader.GetType();
293-
var folderStreamField = readerType.GetField(
294-
"_currentFolderStream",
295-
BindingFlags.NonPublic | BindingFlags.Instance
296-
);
297-
var currentFolderField = readerType.GetField(
298-
"_currentFolder",
299-
BindingFlags.NonPublic | BindingFlags.Instance
300-
);
301-
302-
Assert.NotNull(folderStreamField);
303-
Assert.NotNull(currentFolderField);
290+
var sevenZipReader = Assert.IsType<SevenZipArchive.SevenZipReader>(reader);
291+
sevenZipReader.DiagnosticsEnabled = true;
304292

305293
Stream? currentFolderStreamInstance = null;
306294
object? currentFolder = null;
@@ -322,9 +310,8 @@ public void SevenZipArchive_Solid_VerifyStreamReuse()
322310

323311
entryCount++;
324312

325-
// Get the current folder and folder stream via reflection
326-
var folderStream = folderStreamField.GetValue(reader) as Stream;
327-
var folder = currentFolderField.GetValue(reader);
313+
var folderStream = sevenZipReader.DiagnosticsCurrentFolderStream;
314+
var folder = sevenZipReader.DiagnosticsCurrentFolder;
328315

329316
Assert.NotNull(folderStream); // Folder stream should exist
330317

@@ -356,9 +343,6 @@ public void SevenZipArchive_Solid_VerifyStreamReuse()
356343
Assert.True(entryCount > 1, "Test should have multiple entries to verify stream reuse");
357344

358345
// The critical check: within a single folder, the stream should NEVER be recreated
359-
Assert.Equal(
360-
0,
361-
streamRecreationsWithinFolder
362-
); // Folder stream should remain the same for all entries in the same folder
346+
Assert.Equal(0, streamRecreationsWithinFolder); // Folder stream should remain the same for all entries in the same folder
363347
}
364348
}

0 commit comments

Comments
 (0)