Skip to content

Conversation

@vbreuss
Copy link
Member

@vbreuss vbreuss commented Jul 18, 2025

This PR ensures that directories with trailing slashes are properly enumerated.

  • Adds logic to trim trailing directory separators before calling GetFileName in enumeration
  • Includes a test case to verify empty directories with trailing slashes are properly enumerated

@vbreuss vbreuss self-assigned this Jul 18, 2025
@vbreuss vbreuss added the bug Something isn't working label Jul 18, 2025
@vbreuss vbreuss requested a review from Copilot July 18, 2025 17:09
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes issue #802 by ensuring that directories with trailing slashes are properly enumerated. The fix addresses a bug where GetFileName was not handling directory paths with trailing separators correctly.

  • Adds logic to trim trailing directory separators before calling GetFileName in enumeration
  • Includes a test case to verify empty directories with trailing slashes are properly enumerated
  • Contains an unrelated formatting change to lambda expression formatting

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
EnumerateDirectoriesTests.cs Adds test case to verify directories with trailing slashes are enumerated correctly
InMemoryStorage.cs Fixes enumeration logic to handle trailing directory separators and includes minor formatting change
Comments suppressed due to low confidence (1)

Source/Testably.Abstractions.Testing/Storage/InMemoryStorage.cs:255

  • [nitpick] The variable name 'itemPath' is somewhat redundant since it's derived from 'item.Key.FullPath'. Consider a more descriptive name like 'normalizedPath' or 'pathWithoutTrailingSlash' to better reflect its purpose after the trimming operation.
				string? itemPath = item.Key.FullPath;

@sonarqubecloud
Copy link

sonarqubecloud bot commented Jul 18, 2025

@vbreuss vbreuss merged commit a1d26e7 into main Jul 18, 2025
14 of 15 checks passed
@vbreuss vbreuss deleted the topic/fix-enumeratedirectories-with-trailing-slash branch July 18, 2025 17:37
@github-actions
Copy link

Test Results

    37 files  ± 0      37 suites  ±0   15m 47s ⏱️ -2s
43 081 tests + 7  40 702 ✅ + 7  2 379 💤 ±0  0 ❌ ±0 
84 320 runs  +32  75 530 ✅ +32  8 790 💤 ±0  0 ❌ ±0 

Results for commit 0e55b41. ± Comparison against base commit d3f8cdb.

This pull request removes 35206 and adds 35213 tests. Note that renamed tests count towards both.
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path3c9831c0-210e-4989-b900-5fb083d2763c")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path6f86fa31-c0b0-4add-9e5b-187ecf1a40c3")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7cd799cf-589d-4b26-a701-0d6770bd5907")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path89c7871b-73f1-42dc-8e31-8e64ebb3217d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path93c5a63f-40ae-4d10-9468-90ba35252d63")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "patha826fb75-7130-4780-ac96-fb01f9740c53")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathd32495c7-e6ab-4e05-8526-f52444a04b0e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path102b28d9-7d52-4363-847d-a1da72be3309")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path1ed09196-af63-488f-8fbe-93e353a5a07e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path80769afb-c19e-4e11-a733-52d4737af2e2")
…
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7c575555-3bf3-41fa-9941-7c59b96ae068")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7db1a060-9a7d-48b4-969f-5b8169933cc7")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path8778da6c-0522-4a8f-a1cb-91ecc677b337")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path9080ba2c-4acd-4b1f-bc7a-0e19b81bfc26")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path91992b48-5718-4c93-9e50-26f41cbc509d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "patha96ec30a-2a66-4f88-9287-13886d24e226")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathfa3f59f0-c181-48d3-9164-7fd5c0f51a25")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path116e31e1-3649-4acf-a5f0-20f18f11d5a7")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path1b422f43-9ba4-4a24-85eb-c9617bad0452")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path35d0bb9d-fcc3-4cc7-97ca-3da4501e28d1")
…
This pull request removes 1754 skipped tests and adds 1754 skipped tests. Note that renamed tests count towards both.
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path3c9831c0-210e-4989-b900-5fb083d2763c")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7cd799cf-589d-4b26-a701-0d6770bd5907")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path89c7871b-73f1-42dc-8e31-8e64ebb3217d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathd32495c7-e6ab-4e05-8526-f52444a04b0e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path1ed09196-af63-488f-8fbe-93e353a5a07e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathb3b9b279-ec42-4728-9e05-dc5816a622bb")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathc70d36e1-f7fc-4102-b1b8-06f1031f4a0d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathcd952073-9b80-4342-bc8c-46363527595c")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "path0cbde5a3-e14f-4763-b34d-91e0d61e12da")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "path4a7ef798-c545-4578-9925-9ec4a3b36e85")
…
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path8778da6c-0522-4a8f-a1cb-91ecc677b337")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path9080ba2c-4acd-4b1f-bc7a-0e19b81bfc26")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "patha96ec30a-2a66-4f88-9287-13886d24e226")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathfa3f59f0-c181-48d3-9164-7fd5c0f51a25")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path116e31e1-3649-4acf-a5f0-20f18f11d5a7")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path35d0bb9d-fcc3-4cc7-97ca-3da4501e28d1")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path6151ac97-3410-4b95-b6c6-03f303ad7471")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathfb0a2f92-5e0a-4096-baed-a7a5efbbbd62")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "path3073abcf-687d-414b-8c6e-212c2c853a63")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "path3935bbbc-ebab-4343-a8db-d9ac11676c22")
…

@github-actions
Copy link

This is addressed in release v4.2.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working state: released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MockFileSystem.Directory.EnumerateDirectories() doesn't return empty directories

2 participants