main a091ac7f9655 cached
268 files
1.7 MB
390.5k tokens
2090 symbols
1 requests
Download .txt
Showing preview only (1,859K chars total). Download the full file or copy to clipboard to get everything.
Repository: System-IO-Abstractions/System.IO.Abstractions
Branch: main
Commit: a091ac7f9655
Files: 268
Total size: 1.7 MB

Directory structure:
gitextract_mxqetcdw/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── copilot-instructions.md
│   ├── mergify.yml
│   └── workflows/
│       ├── build.yml
│       └── ci.yml
├── .gitignore
├── .idea/
│   └── .idea.System.IO.Abstractions/
│       └── .idea/
│           ├── .gitignore
│           ├── encodings.xml
│           ├── indexLayout.xml
│           └── vcs.xml
├── .nuke/
│   ├── build.schema.json
│   └── parameters.json
├── .remarkrc.yaml
├── .vscode/
│   └── extensions.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── Pipeline/
│   ├── .editorconfig
│   ├── Build.ApiChecks.cs
│   ├── Build.CodeAnalysis.cs
│   ├── Build.CodeCoverage.cs
│   ├── Build.Compile.cs
│   ├── Build.Pack.cs
│   ├── Build.UnitTest.cs
│   ├── Build.cs
│   ├── Build.csproj
│   ├── Build.csproj.DotSettings
│   ├── BuildExtensions.cs
│   ├── Configuration.cs
│   ├── Directory.Build.props
│   └── Directory.Build.targets
├── README.md
├── StrongName.snk
├── System.IO.Abstractions.slnx
├── benchmarks/
│   └── TestableIO.System.IO.Abstractions.Benchmarks/
│       ├── FileSystemAbstractionBenchmarks.cs
│       ├── MockFileSystemBenchmarks.cs
│       ├── Program.cs
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── Support/
│       │   ├── DirectorySupport.cs
│       │   ├── DirectorySupportStatic.cs
│       │   ├── FileSupport.cs
│       │   └── FileSupportStatic.cs
│       └── TestableIO.System.IO.Abstractions.Benchmarks.csproj
├── build.cmd
├── build.ps1
├── build.sh
├── global.json
├── nuget.config
├── renovate.json5
├── src/
│   ├── Directory.Build.props
│   ├── System.IO.Abstractions/
│   │   └── System.IO.Abstractions.csproj
│   ├── System.IO.Abstractions.TestingHelpers/
│   │   └── System.IO.Abstractions.TestingHelpers.csproj
│   ├── TestableIO.System.IO.Abstractions/
│   │   ├── AssemblyRedirects.cs
│   │   └── TestableIO.System.IO.Abstractions.csproj
│   ├── TestableIO.System.IO.Abstractions.TestingHelpers/
│   │   ├── CommonExceptions.cs
│   │   ├── FileHandles.cs
│   │   ├── IMockFileDataAccessor.cs
│   │   ├── MockDirectory.cs
│   │   ├── MockDirectoryData.cs
│   │   ├── MockDirectoryInfo.cs
│   │   ├── MockDirectoryInfoFactory.cs
│   │   ├── MockDriveData.cs
│   │   ├── MockDriveInfo.cs
│   │   ├── MockDriveInfoFactory.cs
│   │   ├── MockFile.Async.cs
│   │   ├── MockFile.cs
│   │   ├── MockFileData.cs
│   │   ├── MockFileInfo.cs
│   │   ├── MockFileInfoFactory.cs
│   │   ├── MockFileStream.cs
│   │   ├── MockFileStreamFactory.cs
│   │   ├── MockFileSystem.cs
│   │   ├── MockFileSystemOptions.cs
│   │   ├── MockFileSystemWatcherFactory.cs
│   │   ├── MockFileVersionInfo.cs
│   │   ├── MockFileVersionInfoFactory.cs
│   │   ├── MockPath.cs
│   │   ├── MockUnixSupport.cs
│   │   ├── PathVerifier.cs
│   │   ├── Polyfills/
│   │   │   └── SupportedOSPlatformAttribute.cs
│   │   ├── ProductVersionParser.cs
│   │   ├── Properties/
│   │   │   └── Resources.resx
│   │   ├── StringExtensions.cs
│   │   ├── StringOperations.cs
│   │   ├── StringResources.cs
│   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers.csproj
│   │   └── TimeAdjustments.cs
│   └── TestableIO.System.IO.Abstractions.Wrappers/
│       ├── Converters.cs
│       ├── DirectoryAclExtensions.cs
│       ├── DirectoryBase.cs
│       ├── DirectoryInfoAclExtensions.cs
│       ├── DirectoryInfoBase.cs
│       ├── DirectoryInfoFactory.cs
│       ├── DirectoryInfoWrapper.cs
│       ├── DirectoryWrapper.cs
│       ├── DriveInfoBase.cs
│       ├── DriveInfoFactory.cs
│       ├── DriveInfoWrapper.cs
│       ├── FileAclExtensions.cs
│       ├── FileBase.Async.cs
│       ├── FileBase.cs
│       ├── FileInfoAclExtensions.cs
│       ├── FileInfoBase.cs
│       ├── FileInfoFactory.cs
│       ├── FileInfoWrapper.cs
│       ├── FileStreamAclExtensions.cs
│       ├── FileStreamFactory.cs
│       ├── FileStreamWrapper.cs
│       ├── FileSystem.cs
│       ├── FileSystemBase.cs
│       ├── FileSystemInfoBase.cs
│       ├── FileSystemWatcherBase.cs
│       ├── FileSystemWatcherFactory.cs
│       ├── FileSystemWatcherWrapper.cs
│       ├── FileVersionInfoBase.cs
│       ├── FileVersionInfoFactory.cs
│       ├── FileVersionInfoWrapper.cs
│       ├── FileWrapper.Async.cs
│       ├── FileWrapper.cs
│       ├── PathBase.cs
│       ├── PathWrapper.cs
│       ├── Polyfills/
│       │   └── SupportedOSPlatformAttribute.cs
│       └── TestableIO.System.IO.Abstractions.Wrappers.csproj
└── tests/
    ├── Directory.Build.props
    ├── TestableIO.System.IO.Abstractions.Api.Tests/
    │   ├── ApiAcceptance.cs
    │   ├── ApiApprovalTests.cs
    │   ├── Expected/
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net10.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net472.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net6.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net8.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net9.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.1.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net10.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net472.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net6.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net8.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net9.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_netstandard2.0.txt
    │   │   └── TestableIO.System.IO.Abstractions.Wrappers_netstandard2.1.txt
    │   ├── Helper.cs
    │   ├── TestableIO.System.IO.Abstractions.Api.Tests.csproj
    │   └── Usings.cs
    ├── TestableIO.System.IO.Abstractions.Parity.Tests/
    │   ├── ApiParityTests.cs
    │   ├── TestableIO.System.IO.Abstractions.Parity.Tests.csproj
    │   └── __snapshots__/
    │       ├── ApiParityTests.DirectoryInfo_.NET 10.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 6.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 8.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 9.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.Directory_.NET 10.0.snap
    │       ├── ApiParityTests.Directory_.NET 6.0.snap
    │       ├── ApiParityTests.Directory_.NET 8.0.snap
    │       ├── ApiParityTests.Directory_.NET 9.0.snap
    │       ├── ApiParityTests.Directory_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.DriveInfo_.NET 10.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 6.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 8.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 9.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileInfo_.NET 10.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 6.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 8.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 9.0.snap
    │       ├── ApiParityTests.FileInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 10.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 6.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 8.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 9.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 10.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 6.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 8.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 9.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.File_.NET 10.0.snap
    │       ├── ApiParityTests.File_.NET 6.0.snap
    │       ├── ApiParityTests.File_.NET 8.0.snap
    │       ├── ApiParityTests.File_.NET 9.0.snap
    │       ├── ApiParityTests.File_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.Path_.NET 10.0.snap
    │       ├── ApiParityTests.Path_.NET 6.0.snap
    │       ├── ApiParityTests.Path_.NET 8.0.snap
    │       ├── ApiParityTests.Path_.NET 9.0.snap
    │       └── ApiParityTests.Path_.NET Framework 4.7.2.snap
    ├── TestableIO.System.IO.Abstractions.TestingHelpers.Tests/
    │   ├── MockDirectoryArgumentPathTests.cs
    │   ├── MockDirectoryGetAccessControlTests.cs
    │   ├── MockDirectoryInfoAccessControlTests.cs
    │   ├── MockDirectoryInfoFactoryTests.cs
    │   ├── MockDirectoryInfoSymlinkTests.cs
    │   ├── MockDirectoryInfoTests.cs
    │   ├── MockDirectorySetAccessControlTests.cs
    │   ├── MockDirectorySymlinkTests.cs
    │   ├── MockDirectoryTests.cs
    │   ├── MockDriveInfoFactoryTests.cs
    │   ├── MockDriveInfoTests.cs
    │   ├── MockFileAdjustTimesTest.cs
    │   ├── MockFileAppendAllLinesTests.cs
    │   ├── MockFileAppendAllTextTests.cs
    │   ├── MockFileArgumentPathTests.cs
    │   ├── MockFileCopyTests.cs
    │   ├── MockFileCreateTests.cs
    │   ├── MockFileDeleteTests.cs
    │   ├── MockFileExistsTests.cs
    │   ├── MockFileGetAccessControlTests.cs
    │   ├── MockFileGetCreationTimeTests.cs
    │   ├── MockFileGetCreationTimeUtcTests.cs
    │   ├── MockFileGetLastAccessTimeTests.cs
    │   ├── MockFileGetLastAccessTimeUtcTests.cs
    │   ├── MockFileGetLastWriteTimeTests.cs
    │   ├── MockFileGetLastWriteTimeUtcTests.cs
    │   ├── MockFileGetUnixFileModeTests.cs
    │   ├── MockFileInfoAccessControlTests.cs
    │   ├── MockFileInfoFactoryTests.cs
    │   ├── MockFileInfoSymlinkTests.cs
    │   ├── MockFileInfoTests.cs
    │   ├── MockFileLockTests.cs
    │   ├── MockFileMoveTests.cs
    │   ├── MockFileOpenTests.cs
    │   ├── MockFileReadAllBytesTests.cs
    │   ├── MockFileReadAllLinesTests.cs
    │   ├── MockFileReadLinesTests.cs
    │   ├── MockFileSetAccessControlTests.cs
    │   ├── MockFileSetAttributesTests.cs
    │   ├── MockFileSetUnixFileModeTests.cs
    │   ├── MockFileStreamFactoryTests.cs
    │   ├── MockFileStreamTests.cs
    │   ├── MockFileSymlinkTests.cs
    │   ├── MockFileSystemOptionTests.cs
    │   ├── MockFileSystemSerializationTests.cs
    │   ├── MockFileSystemTests.cs
    │   ├── MockFileSystemWatcherFactoryTests.cs
    │   ├── MockFileTests.cs
    │   ├── MockFileVersionInfoFactoryTests.cs
    │   ├── MockFileVersionInfoTests.cs
    │   ├── MockFileWriteAllBytesTests.cs
    │   ├── MockFileWriteAllLinesTests.cs
    │   ├── MockFileWriteAllTextTests.cs
    │   ├── MockPathTests.cs
    │   ├── MockUnixSupportTests.cs
    │   ├── Polyfills/
    │   │   └── SupportedOSPlatformAttribute.cs
    │   ├── ProductVersionParserTests.cs
    │   ├── Shared.cs
    │   ├── TestFiles/
    │   │   ├── SecondTestFile.txt
    │   │   └── TestFile.txt
    │   ├── TestableIO.System.IO.Abstractions.TestingHelpers.Tests.csproj
    │   ├── UnixOnlyAttribute.cs
    │   ├── UnixSpecifics.cs
    │   ├── Usings.cs
    │   ├── WindowsOnlyAttribute.cs
    │   └── WindowsSpecifics.cs
    └── TestableIO.System.IO.Abstractions.Wrappers.Tests/
        ├── DirectoryInfoFactoryTests.cs
        ├── DirectoryInfoTests.cs
        ├── DirectoryWrapperTests.cs
        ├── DriveInfoFactoryTests.cs
        ├── FileInfoBaseConversionTests.cs
        ├── FileInfoFactoryTests.cs
        ├── FileSystemTests.cs
        ├── FileSystemWatcherFactoryTests.cs
        ├── FileVersionInfoBaseConversionTests.cs
        ├── TestableIO.System.IO.Abstractions.Wrappers.Tests.csproj
        └── Usings.cs

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/devcontainer.json
================================================
{
    "name": "C# (.NET Core)",
    "image": "mcr.microsoft.com/vscode/devcontainers/dotnet:10.0",
    "settings": {
        "terminal.integrated.shell.linux": "/bin/bash"
    },
    "postCreateCommand": "dotnet restore"
}

================================================
FILE: .editorconfig
================================================
; This file is for unifying the coding style for different editors and IDEs.
; More information at http://EditorConfig.org

root = true

[*]
end_of_line = CRLF

[*.cs]
indent_style = space
indent_size = 4


================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs     diff=csharp
*.sln    merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union

# Standard to msysgit
*.doc	 diff=astextplain
*.DOC	 diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot  diff=astextplain
*.DOT  diff=astextplain
*.pdf  diff=astextplain
*.PDF	 diff=astextplain
*.rtf	 diff=astextplain
*.RTF	 diff=astextplain


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'state: needs discussion, type: bug'
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'state: needs discussion, type: enhancement'
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/copilot-instructions.md
================================================
# System.IO.Abstractions Development Guide

System.IO.Abstractions is a .NET library that provides testable abstractions for System.IO operations, enabling developers to write unit tests that don't rely on the actual file system.

**ALWAYS reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.**

## Working Effectively

### Bootstrap and Build Process
- **CRITICAL**: Install .NET SDK 9.0.304 (required version specified in global.json):
  ```bash
  curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 9.0.304
  export PATH="$HOME/.dotnet:$PATH"
  ```
- Verify installation: `dotnet --version` should return `9.0.304`
- **Build the solution**: `dotnet build` -- takes ~70 seconds. NEVER CANCEL. Set timeout to 120+ minutes.
- **Run all tests**: `dotnet test --configuration Release` -- takes ~30 seconds. NEVER CANCEL. Set timeout to 60+ minutes.

### Code Quality and Formatting
- **ALWAYS run code formatting before committing**: `dotnet format` 
- **Verify formatting compliance**: `dotnet format --verify-no-changes` -- takes ~40 seconds. NEVER CANCEL.
- The codebase uses EditorConfig with CRLF line endings and 4-space indentation for C# files
- **CRITICAL**: All formatting issues must be resolved before CI will pass

### Build System Details
- **Primary build method**: `dotnet build` and `dotnet test` commands work reliably
- **NUKE build script**: `./build.sh` available but may have GitVersion issues with shallow clones
- **Available NUKE targets**: UnitTests, ApiChecks, CodeCoverage, CodeAnalysis, Pack
- **Build artifacts**: Generated in `Artifacts/` and `TestResults/` directories

## Project Structure

### Key Projects
- **System.IO.Abstractions**: Core abstractions and interfaces
- **TestableIO.System.IO.Abstractions**: Main implementation
- **TestableIO.System.IO.Abstractions.Wrappers**: Wrapper implementations
- **TestableIO.System.IO.Abstractions.TestingHelpers**: Mock implementations for testing
- **Multiple test projects**: Comprehensive test coverage across different scenarios

### Target Frameworks
- .NET Framework 4.7.2 (net472)
- .NET Standard 2.0, 2.1 (netstandard2.0, netstandard2.1)  
- .NET 6.0, 8.0, 9.0 (net6.0, net8.0, net9.0)

### Important Directories
- `src/`: All source code projects
- `tests/`: All test projects including unit tests, API tests, and parity tests
- `benchmarks/`: Performance benchmarking projects
- `Pipeline/`: NUKE build system configuration
- `.github/workflows/`: CI/CD pipeline definitions

## Validation

### Manual Validation Steps
After making changes, ALWAYS validate functionality by:

1. **Build verification**: `dotnet build` must succeed
2. **Test execution**: `dotnet test --configuration Release` must pass
3. **Code formatting**: `dotnet format --verify-no-changes` must pass
4. **Functional validation**: Create a test scenario to verify your changes work:

```csharp
using System.IO.Abstractions;
using System.IO.Abstractions.TestingHelpers;

// Test MockFileSystem functionality
var mockFileSystem = new MockFileSystem();
mockFileSystem.File.WriteAllText(@"C:\test.txt", "Test content");
var content = mockFileSystem.File.ReadAllText(@"C:\test.txt");

// Test real FileSystem functionality  
var realFileSystem = new FileSystem();
var tempFile = "/tmp/test.txt";
realFileSystem.File.WriteAllText(tempFile, "Real test");
var realContent = realFileSystem.File.ReadAllText(tempFile);
realFileSystem.File.Delete(tempFile);
```

### Test Suite Information
- **Total tests**: ~2,234 tests across all projects
- **Expected passing**: ~1,993 tests (some platform-specific tests are skipped on Linux)
- **Test categories**: Unit tests, API compatibility tests, parity tests
- **Platform considerations**: Some Windows-specific functionality is skipped on Linux/macOS

### Continuous Integration Requirements
The CI pipeline (.github/workflows/ci.yml) requires:
- All unit tests to pass on Ubuntu, Windows, and macOS
- API compatibility checks to succeed
- Code formatting compliance
- Static code analysis (SonarCloud) to pass

## Common Development Tasks

### Adding New Functionality
- Implement abstractions in the main System.IO.Abstractions project
- Add wrapper implementations in TestableIO.System.IO.Abstractions.Wrappers
- Create mock implementations in TestableIO.System.IO.Abstractions.TestingHelpers
- Add comprehensive tests covering all target frameworks
- Update XML documentation for all public APIs

### Debugging Build Issues
- Check .NET SDK version compatibility first
- Verify all package references are properly restored
- For NUKE build issues, use direct `dotnet` commands instead
- Review build logs in Artifacts/ directory for detailed error information

### Package Management
- Uses Central Package Management (Directory.Packages.props)
- NuGet source: nuget.org only (configured in nuget.config)
- Package versioning uses Nerdbank.GitVersioning

## Pull Request Guidelines

### Pull Request Title
To communicate intent to the consumers of your library, the title of the pull requests is prefixed with one of the following elements:
- `fix:`: patches a bug
- `feat:`: introduces a new feature
- `refactor:`: improves internal structure without changing the observable behavior
- `docs:`: updates documentation or XML comments
- `chore:`: updates to dependencies, build pipelines, ...

## Performance Expectations

### Command Timing (with appropriate timeouts)
- **dotnet build**: ~70 seconds (set timeout: 120+ minutes)
- **dotnet test**: ~30 seconds (set timeout: 60+ minutes) 
- **dotnet format**: ~40 seconds (set timeout: 10+ minutes)
- **NUKE build restore**: ~30 seconds (set timeout: 10+ minutes)

### **NEVER CANCEL** long-running operations
Builds and tests may occasionally take longer than expected. Always wait for completion rather than canceling operations.

## Troubleshooting

### Common Issues
- **GitVersion errors**: Use direct `dotnet` commands instead of NUKE build script
- **Shallow clone issues**: Expected in GitHub Actions environment, doesn't affect functionality
- **Platform-specific test failures**: Normal for Windows-specific functionality on Linux/macOS
- **Code formatting failures**: Run `dotnet format` to fix automatically

### SDK Installation Issues
If .NET SDK 9.0.304 is not available:
- Check global.json for exact version requirement
- Use dotnet-install script with specific version
- Ensure PATH includes the installed SDK location

**Remember**: This is a mature, well-tested library with extensive CI/CD. Focus on maintaining compatibility across all target frameworks and ensuring comprehensive test coverage for any changes.

================================================
FILE: .github/mergify.yml
================================================
pull_request_rules:
  - name: Automatic merge on approval
    conditions:
      - "#approved-reviews-by>=1"
    actions:
      merge:
        method: squash
        commit_message_template: |-
          {{ title }} (#{{ number }})
          {{ body }}
  - name: Automatic merge for Renovate pull requests
    conditions:
      - author=renovate[bot]
    actions:
      merge:
        method: squash


================================================
FILE: .github/workflows/build.yml
================================================
name: Build

on:
  push:
    branches: [ main ]
    tags: [ 'v[0-9]+.[0-9]+.[0-9]+*' ]

jobs:
  unit-tests:
    name: "Unit tests"
    strategy:
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: Run unit tests (windows)
        if: matrix.os == 'windows-latest'
        run: ./build.ps1 CodeCoverage
      - name: Run unit tests (ubuntu|macos)
        if: matrix.os != 'windows-latest'
        run: ./build.sh CodeCoverage
      - name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: ${{ runner.os }}-artifacts
          path: |
            ./Artifacts/*
            ./TestResults/*.trx
  
  api-tests:
    name: "API tests"
    runs-on: ubuntu-latest
    env:
      DOTNET_NOLOGO: true
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: API checks
        run: ./build.sh ApiChecks
      - name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: API-tests
          path: |
            ./Artifacts/*
            ./TestResults/*.trx
  
  static-code-analysis:
    name: "Static code analysis"
    runs-on: ubuntu-latest
    env:
      REPORTGENERATOR_LICENSE: ${{ secrets.REPORTGENERATOR_LICENSE }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      DOTNET_NOLOGO: true
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: Run sonarcloud analysis
        run: ./build.sh CodeAnalysis
  
  publish-test-results:
    name: "Publish Tests Results"
    needs: [ api-tests, unit-tests ]
    runs-on: ubuntu-latest
    permissions:
      checks: write
      pull-requests: write
    if: always()
    steps:
      - name: Download Artifacts
        uses: actions/download-artifact@v8
        with:
          path: artifacts
      - name: Publish Test Results
        uses: EnricoMi/publish-unit-test-result-action@v2
        with:
          comment_mode: always
          files: "artifacts/**/**/*.trx"
  
  pack:
    name: "Pack"
    runs-on: ubuntu-latest
    needs: [ publish-test-results, static-code-analysis ]
    env:
      DOTNET_NOLOGO: true
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: Pack nuget packages
        run: ./build.sh Pack
      - name: Upload packages
        if: always()
        uses: actions/upload-artifact@v7
        with:
          path: Artifacts/Packages
          name: Packages
  
  push:
    name: "Push"
    if: ${{ startsWith(github.ref, 'refs/tags/v') }}
    runs-on: macos-latest
    environment: production
    needs: [ pack ]
    permissions:
      contents: write
    steps:
      - name: Download packages
        uses: actions/download-artifact@v8
        with:
          name: Packages
          path: Artifacts/Packages
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
      - name: Publish
        run: |
          echo "Found the following packages to push:"
          search_dir=Artifacts/Packages
          for entry in Artifacts/Packages/*.nupkg
          do
            echo "- $entry"
          done
          for entry in Artifacts/Packages/*.nupkg
          do
            dotnet nuget push $entry --source https://api.nuget.org/v3/index.json --api-key "${{secrets.NUGET_API_KEY}}" --skip-duplicate
          done
      - name: Check pre-release
        id: check-pre-release
        run: |
          if [[ ${{ github.event.ref }} =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "release=true" >> $GITHUB_OUTPUT
          fi
      - name: Create GitHub release
        if: steps.check-pre-release.outputs.release == 'true'
        continue-on-error: true
        uses: softprops/action-gh-release@v2
        with:
          name: ${{ steps.tag.outputs.release_version }}
          tag_name: ${{ steps.tag.outputs.release_version }}
          token: ${{ secrets.GITHUB_TOKEN }}
          generate_release_notes: true
  
  finalize-release:
    name: "Finalize release"
    if: startsWith(github.ref, 'refs/tags/v')
    runs-on: ubuntu-latest
    needs: [ push ]
    permissions:
      contents: read
      issues: write
      pull-requests: write
    steps:
      - name: Check pre-release
        id: check-pre-release
        run: |
          if [[ ${{ github.event.ref }} =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "release=true" >> $GITHUB_OUTPUT
          fi
      - name: Comment relevant issues and pull requests
        if: steps.check-pre-release.outputs.release == 'true'
        continue-on-error: true
        uses: apexskier/github-release-commenter@v1.4.1
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          comment-template: |
            This is addressed in release {release_link}.
          label-template: |
            state: released
          skip-label: |
            state: released


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  workflow_dispatch:
  pull_request:
    branches: [ main ]

jobs:
  unit-tests:
    name: "Unit tests"
    strategy:
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: Run unit tests (windows)
        if: matrix.os == 'windows-latest'
        run: ./build.ps1 CodeCoverage
      - name: Run unit tests (ubuntu|macos)
        if: matrix.os != 'windows-latest'
        run: ./build.sh CodeCoverage
      - name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: ${{ runner.os }}-artifacts
          path: |
            ./Artifacts/*
            ./TestResults/*.trx
  
  api-tests:
    name: "API tests"
    runs-on: ubuntu-latest
    env:
      DOTNET_NOLOGO: true
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: API checks
        run: ./build.sh ApiChecks
      - name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@v7
        with:
          name: API-tests
          path: |
            ./Artifacts/*
            ./TestResults/*.trx
  
  static-code-analysis:
    name: "Static code analysis"
    if: ${{ github.actor != 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
    runs-on: ubuntu-latest
    env:
      REPORTGENERATOR_LICENSE: ${{ secrets.REPORTGENERATOR_LICENSE }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      DOTNET_NOLOGO: true
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Setup .NET SDKs
        uses: actions/setup-dotnet@v5
        with:
          dotnet-version: |
            6.0.x
            7.0.x
            8.0.x
            9.0.x
            10.0.x
      - name: Run sonarcloud analysis
        run: ./build.sh CodeAnalysis
  
  publish-test-results:
    name: "Publish Tests Results"
    needs: [ api-tests, unit-tests ]
    runs-on: ubuntu-latest
    permissions:
      checks: write
      pull-requests: write
    if: always()
    steps:
      - name: Download Artifacts
        uses: actions/download-artifact@v8
        with:
          path: artifacts
      - name: Publish Test Results
        uses: EnricoMi/publish-unit-test-result-action@v2
        with:
          comment_mode: always
          files: "artifacts/**/**/*.trx"


================================================
FILE: .gitignore
================================================
# Artifact and test results directories
/Artifacts
/TestResults

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates
*.ide/
.vs/

# Build results

[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc

# Benchmarks results
BenchmarkDotNet.Artifacts

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
*.ncrunch*
.*crunch*.local.xml

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.Publish.xml
*.pubxml

# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
packages/

# Windows Azure Build Output
csx
*.build.csdef

# Windows Store app package directory
AppPackages/

# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

# =========================
# Windows detritus
# =========================

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac crap
.DS_Store

#System.IO.Abstractions specific ignores
Releases
System.IO.Abstractions.*.nupkg

# Common IntelliJ Platform excludes
# https://github.com/JetBrains/resharper-rider-samples/blob/master/.gitignore

# User specific
**/.idea/**/workspace.xml
**/.idea/**/tasks.xml
**/.idea/shelf/*
**/.idea/dictionaries
**/.idea/httpRequests/

# Sensitive or high-churn files
**/.idea/**/dataSources/
**/.idea/**/dataSources.ids
**/.idea/**/dataSources.xml
**/.idea/**/dataSources.local.xml
**/.idea/**/sqlDataSources.xml
**/.idea/**/dynamic.xml

# Rider
# Rider auto-generates .iml files, and contentModel.xml
**/.idea/**/*.iml
**/.idea/**/contentModel.xml
**/.idea/**/modules.xml

================================================
FILE: .idea/.idea.System.IO.Abstractions/.idea/.gitignore
================================================
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/contentModel.xml
/projectSettingsUpdater.xml
/.idea.System.IO.Abstractions.iml
/modules.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml


================================================
FILE: .idea/.idea.System.IO.Abstractions/.idea/encodings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

================================================
FILE: .idea/.idea.System.IO.Abstractions/.idea/indexLayout.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="UserContentModel">
    <attachedFolders />
    <explicitIncludes />
    <explicitExcludes />
  </component>
</project>

================================================
FILE: .idea/.idea.System.IO.Abstractions/.idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$" vcs="Git" />
  </component>
</project>

================================================
FILE: .nuke/build.schema.json
================================================
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "Host": {
      "type": "string",
      "enum": [
        "AppVeyor",
        "AzurePipelines",
        "Bamboo",
        "Bitbucket",
        "Bitrise",
        "GitHubActions",
        "GitLab",
        "Jenkins",
        "Rider",
        "SpaceAutomation",
        "TeamCity",
        "Terminal",
        "TravisCI",
        "VisualStudio",
        "VSCode"
      ]
    },
    "ExecutableTarget": {
      "type": "string",
      "enum": [
        "ApiChecks",
        "CalculateNugetVersion",
        "Clean",
        "CodeAnalysis",
        "CodeAnalysisBegin",
        "CodeAnalysisEnd",
        "CodeCoverage",
        "Compile",
        "DotNetFrameworkUnitTests",
        "DotNetUnitTests",
        "Pack",
        "Restore",
        "UnitTests",
        "UpdateReadme"
      ]
    },
    "Verbosity": {
      "type": "string",
      "description": "",
      "enum": [
        "Verbose",
        "Normal",
        "Minimal",
        "Quiet"
      ]
    },
    "NukeBuild": {
      "properties": {
        "Continue": {
          "type": "boolean",
          "description": "Indicates to continue a previously failed build attempt"
        },
        "Help": {
          "type": "boolean",
          "description": "Shows the help text for this build assembly"
        },
        "Host": {
          "description": "Host for execution. Default is 'automatic'",
          "$ref": "#/definitions/Host"
        },
        "NoLogo": {
          "type": "boolean",
          "description": "Disables displaying the NUKE logo"
        },
        "Partition": {
          "type": "string",
          "description": "Partition to use on CI"
        },
        "Plan": {
          "type": "boolean",
          "description": "Shows the execution plan (HTML)"
        },
        "Profile": {
          "type": "array",
          "description": "Defines the profiles to load",
          "items": {
            "type": "string"
          }
        },
        "Root": {
          "type": "string",
          "description": "Root directory during build execution"
        },
        "Skip": {
          "type": "array",
          "description": "List of targets to be skipped. Empty list skips all dependencies",
          "items": {
            "$ref": "#/definitions/ExecutableTarget"
          }
        },
        "Target": {
          "type": "array",
          "description": "List of targets to be invoked. Default is '{default_target}'",
          "items": {
            "$ref": "#/definitions/ExecutableTarget"
          }
        },
        "Verbosity": {
          "description": "Logging verbosity during build execution. Default is 'Normal'",
          "$ref": "#/definitions/Verbosity"
        }
      }
    }
  },
  "allOf": [
    {
      "properties": {
        "Configuration": {
          "type": "string",
          "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)",
          "enum": [
            "Debug",
            "Release"
          ]
        },
        "GithubToken": {
          "type": "string",
          "description": "Github Token"
        },
        "Solution": {
          "type": "string",
          "description": "Path to a solution file that is automatically loaded"
        },
        "SonarToken": {
          "type": "string",
          "description": "The key to push to sonarcloud",
          "default": "Secrets must be entered via 'nuke :secrets [profile]'"
        }
      }
    },
    {
      "$ref": "#/definitions/NukeBuild"
    }
  ]
}


================================================
FILE: .nuke/parameters.json
================================================
{
  "$schema": "build.schema.json",
  "Solution": "System.IO.Abstractions.slnx"
}


================================================
FILE: .remarkrc.yaml
================================================
plugins:
  - remark-preset-lint-consistent
  - remark-preset-lint-markdown-style-guide

================================================
FILE: .vscode/extensions.json
================================================
{
    "recommendations": [
        "ms-vscode-remote.remote-containers",
        "ms-dotnettools.csharp"
    ]
}

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at code-of-conduct@testably.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: CONTRIBUTING.md
================================================
# Contributor guide

## Versioning

This library uses [Nerdbank.GitVersioning](https://github.com/AArnott/Nerdbank.GitVersioning) for generating stable and reproducible version numbers.

The base version is manually maintained in [the version config](version.json). Every build calculates its final version number based on the base version and the number of changes that occured since the last change to the version config.

The base version represents the MAJOR and MINOR parts of [SemVer](https://semver.org). If a PR contains breaking changes or new features the base version has to be changed accordingly. If a PR solely contains minor changes (bug fixes, code improvements) nothing needs to be done as the PATCH number will automatically increment with each commit.

## Branches / tags

- `main` contains the latest sources. Each merge there triggers a deploy to `nuget.org`.
- All versions on `nuget.org` have a matching GitHub release/tag.

## Commits and PR title

- Please use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) to name your commits and PR title.
  We use [action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request?tab=readme-ov-file#configuration) to enforce this policy, feel free to have a closer look.
- Available prefixes:
  - `feat:` A new feature
  - `fix:` A bug fix
  - `docs:` Documentation only changes
  - `style:` Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  - `refactor:` A code change that neither fixes a bug nor adds a feature
  - `perf:` A code change that improves performance
  - `test:` Adding missing tests or correcting existing tests
  - `build:` Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
  - `ci:` Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
  - `chore:` Other changes that don't modify src or test files
  - `revert:` Reverts a previous commit


================================================
FILE: Directory.Build.props
================================================
<Project>
  <PropertyGroup>
    <Product>System.IO.Abstractions</Product>
    <Copyright>Copyright © Tatham Oddie &amp; friends 2010-$([System.DateTime]::Now.ToString('yyyy'))</Copyright>
    <Authors>Tatham Oddie &amp; friends</Authors>
    <SignAssembly Condition="'$(Configuration)' == 'Release'">True</SignAssembly>
    <PublicKey>00240000048000009400000006020000002400005253413100040000010001001160c7a0f907c400c5392975b66d2f3752fb82625d5674d386b83896d4d4ae8d0ef8319ef391fbb3466de0058ad2f361b8f5cb8a32ecb4e908bece5c519387552cedd2ca0250e36b59c6d6dc3dc260ca73a7e27c3add4ae22d5abaa562225d7ba34d427e8f3f52928a46a674deb0208eca7d379aa22712355b91a55a5ce521d2</PublicKey>
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)StrongName.snk</AssemblyOriginatorKeyFile>
    <LangVersion>latest</LangVersion>
    <PackageTags>testing</PackageTags>
    <NoWarn>CS1591</NoWarn>
    <PackageProjectUrl>https://github.com/TestableIO/System.IO.Abstractions</PackageProjectUrl>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <PackageReadmeFile>README.md</PackageReadmeFile>
    <DefineConstants Condition="'$(TargetFramework)' != 'net472'">$(DefineConstants);FEATURE_FILE_SYSTEM_ACL_EXTENSIONS</DefineConstants>
    <DefineConstants Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net9.0' OR '$(TargetFramework)' == 'net8.0' OR '$(TargetFramework)' == 'net6.0' OR '$(TargetFramework)' == 'netstandard2.1'">$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONS;FEATURE_PATH_JOIN_WITH_SPAN;FEATURE_SPAN</DefineConstants>
    <DefineConstants Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net9.0' OR '$(TargetFramework)' == 'net8.0' OR '$(TargetFramework)' == 'net6.0'">$(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE;FEATURE_SUPPORTED_OS_ATTRIBUTE;FEATURE_FILE_SYSTEM_WATCHER_FILTERS;FEATURE_ENDS_IN_DIRECTORY_SEPARATOR;FEATURE_PATH_JOIN_WITH_PARAMS;FEATURE_PATH_JOIN_WITH_FOUR_PATHS;FEATURE_FILE_SYSTEM_INFO_LINK_TARGET;FEATURE_CREATE_SYMBOLIC_LINK;FEATURE_FILESTREAM_OPTIONS</DefineConstants>
    <DefineConstants Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net9.0' OR '$(TargetFramework)' == 'net8.0'">$(DefineConstants);FEATURE_PATH_EXISTS;FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN;FEATURE_FILE_ATTRIBUTES_VIA_HANDLE;FEATURE_CREATE_TEMP_SUBDIRECTORY;FEATURE_READ_LINES_ASYNC;FEATURE_UNIX_FILE_MODE</DefineConstants>
    <DefineConstants Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net9.0'">$(DefineConstants);FEATURE_PATH_SPAN;FEATURE_FILE_SPAN</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE</DefineConstants>
  </PropertyGroup>
  <PropertyGroup>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  </PropertyGroup>
  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath=""/>
  </ItemGroup>
</Project>


================================================
FILE: Directory.Packages.props
================================================
<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
    <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
        <PackageVersion Include="System.Text.Json" Version="[6.0.11]"/>
    </ItemGroup>
    <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
        <PackageVersion Include="System.Text.Json" Version="[8.0.6]"/>
    </ItemGroup>
    <ItemGroup Condition=" '$(TargetFramework)' != 'net8.0' And '$(TargetFramework)' != 'net6.0' ">
        <PackageVersion Include="System.Text.Json" Version="10.0.5"/>
    </ItemGroup>
  <ItemGroup>
    <PackageVersion Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
    <PackageVersion Include="IsExternalInit" Version="1.0.3" />
    <PackageVersion Include="Nullable" Version="1.3.1" />
    <PackageVersion Include="Testably.Abstractions.FileSystem.Interface" Version="10.1.0" />
  </ItemGroup>
  <ItemGroup>
    <PackageVersion Include="BenchmarkDotNet" Version="0.15.8" />
    <PackageVersion Include="coverlet.collector" Version="8.0.1" />
    <PackageVersion Include="GitHubActionsTestLogger" Version="3.0.1" />
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
    <PackageVersion Include="Mockolate" Version="2.4.0" />
    <PackageVersion Include="NUnit" Version="4.5.1" />
    <PackageVersion Include="NUnit.Analyzers" Version="4.12.0" />
    <PackageVersion Include="NUnit3TestAdapter" Version="6.1.0" />
    <PackageVersion Include="PublicApiGenerator" Version="11.5.4"/>
    <PackageVersion Include="aweXpect" Version="2.31.0"/>
    <PackageVersion Include="aweXpect.Testably" Version="0.13.0"/>
    <PackageVersion Include="aweXpect.Mockolate" Version="2.3.0"/>
  </ItemGroup>
  <ItemGroup>
    <PackageVersion Include="Nuke.Common" Version="10.1.0"/>
    <PackageVersion Include="Nuke.Components" Version="10.1.0"/>
    <PackageVersion Include="LibGit2Sharp" Version="0.31.0"/>
    <PackageVersion Include="SharpCompress" Version="0.47.1"/>
  </ItemGroup>
</Project>


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) Tatham Oddie and Contributors

All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Pipeline/.editorconfig
================================================
[*.cs]
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning
dotnet_style_require_accessibility_modifiers = never:warning

csharp_style_expression_bodied_methods = true:silent
csharp_style_expression_bodied_properties = true:warning
csharp_style_expression_bodied_indexers = true:warning
csharp_style_expression_bodied_accessors = true:warning


================================================
FILE: Pipeline/Build.ApiChecks.cs
================================================
using Nuke.Common;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using static Nuke.Common.Tools.DotNet.DotNetTasks;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
	Target ApiChecks => _ => _
		.DependsOn(Compile)
		.Executes(() =>
		{
			Project project = Solution.Tests.TestableIO_System_IO_Abstractions_Api_Tests;

			DotNetTest(s => s
				.SetConfiguration(Configuration == Configuration.Debug ? "Debug" : "Release")
				.SetProcessEnvironmentVariable("DOTNET_CLI_UI_LANGUAGE", "en-US")
				.EnableNoBuild()
				.SetResultsDirectory(TestResultsDirectory)
				.CombineWith(cc => cc
					.SetProjectFile(project)
					.AddLoggers($"trx;LogFileName={project.Name}.trx")), completeOnFailure: true);
		});
}


================================================
FILE: Pipeline/Build.CodeAnalysis.cs
================================================
using Nuke.Common;
using Nuke.Common.Tools.SonarScanner;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
	[Parameter("The key to push to sonarcloud")] [Secret] readonly string SonarToken;

	Target CodeAnalysisBegin => _ => _
		.Unlisted()
		.Before(Compile)
		.Before(CodeCoverage)
		.Executes(() =>
		{
			SonarScannerTasks.SonarScannerBegin(s => s
				.SetOrganization("testableio")
				.SetProjectKey("TestableIO_System.IO.Abstractions")
				.AddVSTestReports(TestResultsDirectory / "*.trx")
				.AddOpenCoverPaths(TestResultsDirectory / "reports" / "OpenCover.xml")
				.SetPullRequestOrBranchName(GitHubActions, GitVersion)
				.SetVersion(GitVersion.SemVer)
				.SetToken(SonarToken));
		});

	Target CodeAnalysisEnd => _ => _
		.Unlisted()
		.DependsOn(Compile)
		.DependsOn(CodeCoverage)
		.OnlyWhenDynamic(() => IsServerBuild)
		.Executes(() =>
		{
			SonarScannerTasks.SonarScannerEnd(s => s
				.SetToken(SonarToken));
		});

	Target CodeAnalysis => _ => _
		.DependsOn(CodeAnalysisBegin)
		.DependsOn(CodeAnalysisEnd);
}


================================================
FILE: Pipeline/Build.CodeCoverage.cs
================================================
using Nuke.Common;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.ReportGenerator;
using static Nuke.Common.Tools.ReportGenerator.ReportGeneratorTasks;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
	Target CodeCoverage => _ => _
		.DependsOn(UnitTests)
		.Executes(() =>
		{
			ReportGenerator(s => s
				.SetProcessToolPath(NuGetToolPathResolver.GetPackageExecutable("ReportGenerator", "ReportGenerator.dll",
					framework: "net8.0"))
				.SetTargetDirectory(TestResultsDirectory / "reports")
				.AddReports(TestResultsDirectory / "**/coverage.cobertura.xml")
				.AddReportTypes(ReportTypes.OpenCover)
				.AddFileFilters("-*.g.cs")
				.SetAssemblyFilters("+TestableIO*", "+System.IO.Abstractions*"));
		});
}


================================================
FILE: Pipeline/Build.Compile.cs
================================================
using System;
using System.Linq;
using Nuke.Common;
using Nuke.Common.IO;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.GitVersion;
using Nuke.Common.Utilities;
using Nuke.Common.Utilities.Collections;
using Serilog;
using static Nuke.Common.Tools.DotNet.DotNetTasks;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
	string BranchName;
	string SemVer;
    AssemblyVersion MainVersion;

	Target CalculateNugetVersion => _ => _
		.Unlisted()
		.Executes(() =>
		{
            string preRelease = "-CI";
            if (GitHubActions == null)
            {
                preRelease = "-DEV";
            }
            else if (GitHubActions.Ref.StartsWith("refs/tags/", StringComparison.OrdinalIgnoreCase))
            {
                int preReleaseIndex = GitHubActions.Ref.IndexOf('-');
                preRelease = preReleaseIndex > 0 ? GitHubActions.Ref[preReleaseIndex..] : "";
            }
            
			SemVer = GitVersion.SemVer;
			BranchName = GitVersion.BranchName;
            MainVersion = AssemblyVersion.FromGitVersion(GitVersion, preRelease);

			if (GitHubActions?.IsPullRequest == true)
			{
				string buildNumber = GitHubActions.RunNumber.ToString();
				Console.WriteLine(
					$"Branch spec is a pull request. Adding build number {buildNumber}");

				SemVer = string.Join('.', GitVersion.SemVer.Split('.').Take(3).Union([buildNumber,]));
			}

			Console.WriteLine($"SemVer = {SemVer}");
		});

	Target Clean => _ => _
		.Unlisted()
		.Before(Restore)
		.Executes(() =>
		{
			ArtifactsDirectory.CreateOrCleanDirectory();
			Log.Information("Cleaned {path}...", ArtifactsDirectory);

			TestResultsDirectory.CreateOrCleanDirectory();
			Log.Information("Cleaned {path}...", TestResultsDirectory);
		});

	Target Restore => _ => _
		.Unlisted()
		.DependsOn(Clean)
		.Executes(() =>
		{
			DotNetRestore(s => s
				.SetProjectFile(Solution)
				.EnableNoCache()
				.SetConfigFile(RootDirectory / "nuget.config"));
		});

	Target Compile => _ => _
		.DependsOn(Restore)
		.DependsOn(CalculateNugetVersion)
		.Executes(() =>
		{
			string preRelease = "-CI";
			if (GitHubActions == null)
			{
				preRelease = "-DEV";
			}
			else if (GitHubActions.Ref.StartsWith("refs/tags/", StringComparison.OrdinalIgnoreCase))
			{
				int preReleaseIndex = GitHubActions.Ref.IndexOf('-');
				preRelease = preReleaseIndex > 0 ? GitHubActions.Ref[preReleaseIndex..] : "";
			}

			ReportSummary(s => s
				.WhenNotNull(SemVer, (summary, semVer) => summary
					.AddPair("Version", MainVersion.FileVersion + MainVersion.PreRelease)));

			DotNetBuild(s => s
				.SetProjectFile(Solution)
				.SetConfiguration(Configuration)
				.EnableNoLogo()
				.EnableNoRestore()
                .SetVersion(MainVersion.FileVersion + MainVersion.PreRelease)
                .SetAssemblyVersion(MainVersion.FileVersion)
                .SetFileVersion(MainVersion.FileVersion)
                .SetInformationalVersion(MainVersion.InformationalVersion));
		});

    public record AssemblyVersion(string FileVersion, string InformationalVersion, string PreRelease)
    {
        public static AssemblyVersion FromGitVersion(GitVersion gitVersion, string preRelease)
        {
            if (gitVersion is null)
            {
                return null;
            }

            return new AssemblyVersion(gitVersion.AssemblySemVer, gitVersion.InformationalVersion, preRelease);
        }
    }
}


================================================
FILE: Pipeline/Build.Pack.cs
================================================
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Nuke.Common;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Utilities;
using Nuke.Common.Utilities.Collections;
using static Serilog.Log;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
	Target UpdateReadme => _ => _
		.DependsOn(Clean)
		.Before(Compile)
		.Executes(() =>
		{
			string version = string.Join('.', GitVersion.SemVer.Split('.').Take(3));
			if (version.IndexOf('-') != -1)
			{
				version = version.Substring(0, version.IndexOf('-'));
			}

			StringBuilder sb = new();
			string[] lines = File.ReadAllLines(Solution.Directory / "README.md");
			sb.AppendLine(lines.First());
			sb.AppendLine(
				$"[![Changelog](https://img.shields.io/badge/Changelog-v{version}-blue)](https://github.com/TestableIO/System.IO.Abstractions/releases/tag/v{version})");
			foreach (string line in lines.Skip(1))
			{
				if (line.StartsWith("[![Build](https://github.com/TestableIO/System.IO.Abstractions/actions/workflows/build.yml") ||
				    line.StartsWith("[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure"))
				{
					continue;
				}

				if (line.StartsWith("[![Coverage](https://sonarcloud.io/api/project_badges/measure"))
				{
					sb.AppendLine(line
						.Replace(")", $"&branch=release/v{version})"));
					continue;
				}

				if (line.StartsWith("[![Mutation testing badge](https://img.shields.io/endpoint"))
				{
					sb.AppendLine(line
						.Replace("%2Fmain)", $"%2Frelease%2Fv{version})")
						.Replace("/main)", $"/release/v{version})"));
					continue;
				}

				sb.AppendLine(line);
			}

			File.WriteAllText(ArtifactsDirectory / "README.md", sb.ToString());
		});

	Target Pack => _ => _
		.DependsOn(UpdateReadme)
		.DependsOn(Compile)
		.Executes(() =>
		{
			AbsolutePath packagesDirectory = ArtifactsDirectory / "Packages";
			packagesDirectory.CreateOrCleanDirectory();

            List<string> packages = new();
			foreach (Project project in new[]
			         {
                         Solution.TestableIO_System_IO_Abstractions_Wrappers,
                         Solution.TestableIO_System_IO_Abstractions_TestingHelpers,
                         Solution.Meta.TestableIO_System_IO_Abstractions,
                         Solution.Meta.System_IO_Abstractions,
                         Solution.Meta.System_IO_Abstractions_TestingHelpers,
			         })
			{
				foreach (string package in
				         Directory.EnumerateFiles(project.Directory / "bin", "*.nupkg", SearchOption.AllDirectories))
				{
					File.Move(package, packagesDirectory / Path.GetFileName(package));
					Debug("Found nuget package: {PackagePath}", package);
                    packages.Add(Path.GetFileName(package));
				}

				foreach (string symbolPackage in
				         Directory.EnumerateFiles(project.Directory / "bin", "*.snupkg", SearchOption.AllDirectories))
				{
					File.Move(symbolPackage, packagesDirectory / Path.GetFileName(symbolPackage));
					Debug("Found symbol package: {PackagePath}", symbolPackage);
				}
			}
            ReportSummary(s => s
                .AddPair("Packages", string.Join(", ", packages)));
		});
}


================================================
FILE: Pipeline/Build.UnitTest.cs
================================================
using System.IO;
using System.Linq;
using Nuke.Common;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.NUnit;
using static Nuke.Common.Tools.DotNet.DotNetTasks;

// ReSharper disable AllUnderscoreLocalParameterName

namespace Build;

partial class Build
{
    Target UnitTests => _ => _
        .DependsOn(DotNetFrameworkUnitTests)
        .DependsOn(DotNetUnitTests);

    Project[] UnitTestProjects =>
    [
        Solution.Tests.TestableIO_System_IO_Abstractions_Wrappers_Tests,
        Solution.Tests.TestableIO_System_IO_Abstractions_TestingHelpers_Tests,
        Solution.Tests.TestableIO_System_IO_Abstractions_Parity_Tests,
    ];

    Target DotNetFrameworkUnitTests => _ => _
        .Unlisted()
        .DependsOn(Compile)
        .OnlyWhenDynamic(() => EnvironmentInfo.IsWin)
        .Executes(() =>
        {
            var testAssemblies = UnitTestProjects
                .SelectMany(project =>
                    project.Directory.GlobFiles(
                        $"bin/{(Configuration == Configuration.Debug ? "Debug" : "Release")}/net472/*.Tests.dll"))
                .Select(p => p.ToString())
                .ToArray();

            Assert.NotEmpty(testAssemblies.ToList());
            
            foreach (var testAssembly in testAssemblies)
            {
                var currentDirectory = Path.GetDirectoryName(testAssembly);

                NUnitTasks.NUnit3(s => s
                    .SetInputFiles(testAssembly)
                    .SetProcessWorkingDirectory(currentDirectory)
                );
            }
        });

    Target DotNetUnitTests => _ => _
        .Unlisted()
        .DependsOn(Compile)
        .Executes(() =>
        {
            string[] excludedFrameworks = ["net48",];
            DotNetTest(s => s
                    .SetConfiguration(Configuration)
                    .SetProcessEnvironmentVariable("DOTNET_CLI_UI_LANGUAGE", "en-US")
                    .EnableNoBuild()
                    .SetDataCollector("XPlat Code Coverage")
                    .SetResultsDirectory(TestResultsDirectory)
                    .CombineWith(
                        UnitTestProjects,
                        (settings, project) => settings
                            .SetProjectFile(project)
                            .CombineWith(
                                project.GetTargetFrameworks()?.Except(excludedFrameworks),
                                (frameworkSettings, framework) => frameworkSettings
                                    .SetFramework(framework)
                                    .AddLoggers($"trx;LogFileName={project.Name}_{framework}.trx")
                            )
                    ), completeOnFailure: true
            );
        });
}

================================================
FILE: Pipeline/Build.cs
================================================
using Nuke.Common;
using Nuke.Common.CI.GitHubActions;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tools.GitVersion;

namespace Build;

[GitHubActions(
	"Build",
	GitHubActionsImage.UbuntuLatest,
	AutoGenerate = false,
	ImportSecrets = [nameof(GithubToken),]
)]
partial class Build : NukeBuild
{
	[Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
	readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;

	[Parameter("Github Token")] readonly string GithubToken;

	[Required] [GitVersion(Framework = "net8.0", NoCache = true, NoFetch = true)] readonly GitVersion GitVersion;

	[Solution(GenerateProjects = true)] readonly Solution Solution;

	AbsolutePath ArtifactsDirectory => RootDirectory / "Artifacts";
	AbsolutePath TestResultsDirectory => RootDirectory / "TestResults";
	GitHubActions GitHubActions => GitHubActions.Instance;

	public static int Main() => Execute<Build>(x => x.UnitTests, x => x.Pack);
}


================================================
FILE: Pipeline/Build.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <RootNamespace></RootNamespace>
    <NoWarn>CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006</NoWarn>
    <NukeRootDirectory>..</NukeRootDirectory>
    <NukeScriptDirectory>..</NukeScriptDirectory>
    <NukeTelemetryVersion>1</NukeTelemetryVersion>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="LibGit2Sharp" />
    <PackageReference Include="Nuke.Common" />
    <PackageReference Include="Nuke.Components" />
    <PackageReference Include="SharpCompress" />
  </ItemGroup>

  <ItemGroup>
    <PackageDownload Include="coverlet.console" Version="[3.1.2]" />
    <PackageDownload Include="dotnet-sonarscanner" Version="[9.0.2]" />
    <PackageDownload Include="dotnet-stryker" Version="[4.4.1]" />
    <PackageDownload Include="GitVersion.Tool" Version="[6.0.5]" />
    <PackageDownload Include="NUnit.ConsoleRunner" Version="[3.19.2]" />
    <PackageDownload Include="ReportGenerator" Version="[5.4.1]" />
    <PackageDownload Include="xunit.runner.console" Version="[2.9.2]" />
  </ItemGroup>

</Project>


================================================
FILE: Pipeline/Build.csproj.DotSettings
================================================
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=HeapView_002EDelegateAllocation/@EntryIndexedValue">DO_NOT_SHOW</s:String>
	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=VariableHidesOuterVariable/@EntryIndexedValue">DO_NOT_SHOW</s:String>
	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=MemberCanBeMadeStatic_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
    <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=InterpolatedStringExpressionIsNotIFormattable/@EntryIndexedValue">DO_NOT_SHOW</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_INTERNAL_MODIFIER/@EntryValue">Implicit</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_PRIVATE_MODIFIER/@EntryValue">Implicit</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/METHOD_OR_OPERATOR_BODY/@EntryValue">ExpressionBody</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_MEMBERS/@EntryValue">0</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_USER_LINEBREAKS/@EntryValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">False</s:Boolean>
	<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/MAX_ATTRIBUTE_LENGTH_FOR_SAME_LINE/@EntryValue">120</s:Int64>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">IF_OWNER_IS_SINGLE_LINE</s:String>
	<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue">WRAP_IF_LONG</s:String>
	<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>


================================================
FILE: Pipeline/BuildExtensions.cs
================================================
using System;
using Nuke.Common.CI.GitHubActions;
using Nuke.Common.Tools.GitVersion;
using Nuke.Common.Tools.SonarScanner;
using Serilog;

namespace Build;

public static class BuildExtensions
{
	public static SonarScannerBeginSettings SetPullRequestOrBranchName(
		this SonarScannerBeginSettings settings,
		GitHubActions gitHubActions,
		GitVersion gitVersion)
	{
		if (gitHubActions?.IsPullRequest == true)
		{
			Log.Information("Use pull request analysis");
			return settings
				.SetPullRequestKey(gitHubActions.PullRequestNumber.ToString())
				.SetPullRequestBranch(gitHubActions.Ref)
				.SetPullRequestBase(gitHubActions.BaseRef);
		}

		if (gitHubActions?.Ref.StartsWith("refs/tags/", StringComparison.OrdinalIgnoreCase) == true)
		{
			string version = gitHubActions.Ref.Substring("refs/tags/".Length);
			string branchName = "release/" + version;
			Log.Information("Use release branch analysis for '{BranchName}'", branchName);
			return settings.SetBranchName(branchName);
		}

		Log.Information("Use branch analysis for '{BranchName}'", gitVersion.BranchName);
		return settings.SetBranchName(gitVersion.BranchName);
	}
}


================================================
FILE: Pipeline/Configuration.cs
================================================
using System;
using System.ComponentModel;
using System.Linq;
using Nuke.Common.Tooling;

[TypeConverter(typeof(TypeConverter<Configuration>))]
public class Configuration : Enumeration
{
    public static Configuration Debug = new Configuration { Value = nameof(Debug) };
    public static Configuration Release = new Configuration { Value = nameof(Release) };

    public static implicit operator string(Configuration configuration)
    {
        return configuration.Value;
    }
}


================================================
FILE: Pipeline/Directory.Build.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- This file prevents unintended imports of unrelated MSBuild files -->
  <!-- Uncomment to include parent Directory.Build.props file -->
  <!--<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />-->

</Project>


================================================
FILE: Pipeline/Directory.Build.targets
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- This file prevents unintended imports of unrelated MSBuild files -->
  <!-- Uncomment to include parent Directory.Build.targets file -->
  <!--<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))" />-->

</Project>


================================================
FILE: README.md
================================================
![System.IO.Abstractions](https://socialify.git.ci/TestableIO/System.IO.Abstractions/image?description=1&font=Source%20Code%20Pro&forks=1&issues=1&pattern=Charlie%20Brown&pulls=1&stargazers=1&theme=Dark)
[![NuGet](https://img.shields.io/nuget/v/TestableIO.System.IO.Abstractions.svg)](https://www.nuget.org/packages/TestableIO.System.IO.Abstractions)
[![Build](https://github.com/TestableIO/System.IO.Abstractions/actions/workflows/build.yml/badge.svg)](https://github.com/TestableIO/System.IO.Abstractions/actions/workflows/build.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=TestableIO_System.IO.Abstractions&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=TestableIO_System.IO.Abstractions)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=TestableIO_System.IO.Abstractions&metric=coverage)](https://sonarcloud.io/summary/new_code?id=TestableIO_System.IO.Abstractions)
[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FTestableIO%2FSystem.IO.Abstractions.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FTestableIO%2FSystem.IO.Abstractions?ref=badge_shield)

At the core of the library is `IFileSystem` and `FileSystem`. Instead of calling methods like `File.ReadAllText` directly, use `IFileSystem.File.ReadAllText`. We have exactly the same API, except that ours is injectable and testable.

## Usage

```shell
dotnet add package TestableIO.System.IO.Abstractions.Wrappers
```

*Note: This NuGet package is also published as `System.IO.Abstractions` but we suggest to use the prefix to make clear that this is not an official .NET package.*

```csharp
public class MyComponent
{
    readonly IFileSystem fileSystem;

    // <summary>Create MyComponent with the given fileSystem implementation</summary>
    public MyComponent(IFileSystem fileSystem)
    {
        this.fileSystem = fileSystem;
    }
    /// <summary>Create MyComponent</summary>
    public MyComponent() : this(
        fileSystem: new FileSystem() //use default implementation which calls System.IO
    )
    {
    }

    public void Validate()
    {
        foreach (var textFile in fileSystem.Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly))
        {
            var text = fileSystem.File.ReadAllText(textFile);
            if (text != "Testing is awesome.")
                throw new NotSupportedException("We can't go on together. It's not me, it's you.");
        }
    }
}
```

### Test helpers

The library also ships with a series of test helpers to save you from having to mock out every call, for basic scenarios. They are not a complete copy of a real-life file system, but they'll get you most of the way there.

```shell
dotnet add package TestableIO.System.IO.Abstractions.TestingHelpers
```

*Note: This NuGet package is also published as `System.IO.Abstractions.TestingHelpers` but we suggest to use the prefix to make clear that this is not an official .NET package.*

```csharp
[Test]
public void MyComponent_Validate_ShouldThrowNotSupportedExceptionIfTestingIsNotAwesome()
{
    // Arrange
    var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
    {
        { @"c:\myfile.txt", new MockFileData("Testing is meh.") },
        { @"c:\demo\jQuery.js", new MockFileData("some js") },
        { @"c:\demo\image.gif", new MockFileData(new byte[] { 0x12, 0x34, 0x56, 0xd2 }) }
    });
    var component = new MyComponent(fileSystem);

    try
    {
        // Act
        component.Validate();
    }
    catch (NotSupportedException ex)
    {
        // Assert
        Assert.That(ex.Message, Is.EqualTo("We can't go on together. It's not me, it's you."));
        return;
    }

    Assert.Fail("The expected exception was not thrown.");
}
```

We even support casting from the .NET Framework's untestable types to our testable wrappers:

```csharp
FileInfo SomeApiMethodThatReturnsFileInfo()
{
    return new FileInfo("a");
}

void MyFancyMethod()
{
    var testableFileInfo = (FileInfoBase)SomeApiMethodThatReturnsFileInfo();
    ...
}
```

### Mock support

Since version 4.0 the top-level APIs expose interfaces instead of abstract base classes (these still exist, though), allowing you to completely mock the file system. Here's a small example, using [Mockolate](https://github.com/aweXpect/Mockolate):

```csharp
[Test]
public void Test1()
{
    var watcher = Mock.Create<IFileSystemWatcher>();
    var file = Mock.Create<IFile>();

    file.SetupMock.Method.Exists(It.IsAny<string>()).Returns(true);
    file.SetupMock.Method.ReadAllText(It.IsAny<string>()).Throws<OutOfMemoryException>();

    var unitUnderTest = new SomeClassUsingFileSystemWatcher(watcher, file);

    Assert.Throws<OutOfMemoryException>(() => {
        watcher.RaiseOnMock.Created(null, new System.IO.FileSystemEventArgs(System.IO.WatcherChangeTypes.Created, @"C:\Some\Directory", "Some.File"));
    });

    file.VerifyMock.Invoked.Exists(It.IsAny<string>()).Once();

    Assert.That(unitUnderTest.FileWasCreated, Is.True);
}

public class SomeClassUsingFileSystemWatcher
{
    private readonly IFileSystemWatcher _watcher;
    private readonly IFile _file;

    public bool FileWasCreated { get; private set; }

    public SomeClassUsingFileSystemWatcher(IFileSystemWatcher watcher, IFile file)
    {
        this._file = file;
        this._watcher = watcher;
        this._watcher.Created += Watcher_Created;
    }

    private void Watcher_Created(object sender, System.IO.FileSystemEventArgs e)
    {
        FileWasCreated = true;

        if(_file.Exists(e.FullPath))
        {
            var text = _file.ReadAllText(e.FullPath);
        }
    }
}
```

## Relationship with Testably.Abstractions

[`Testably.Abstractions`](https://github.com/Testably/Testably.Abstractions) is a complementary project that uses the same interfaces as TestableIO. This means **no changes to your production code are necessary** when switching between the testing libraries.

Both projects share the same maintainer, but active development and new features are primarily focused on the Testably.Abstractions project. TestableIO.System.IO.Abstractions continues to be maintained for stability and compatibility, but significant new functionality is unlikely to be added.

### When to use Testably.Abstractions vs TestableIO
- **Use TestableIO.System.IO.Abstractions** if you need:
  - Basic file system mocking capabilities
  - Direct manipulation of stored file entities (MockFileData, MockDirectoryData)
  - Established codebase with existing TestableIO integration

- **Use Testably.Abstractions** if you need:
  - Advanced testing scenarios (FileSystemWatcher, SafeFileHandles, multiple drives)
  - Additional abstractions (ITimeSystem, IRandomSystem)
  - Cross-platform file system simulation (Linux, MacOS, Windows)
  - More extensive and consistent behavior validation
  - Active development and new features

### Migrating from TestableIO
Switching from TestableIO to Testably only requires changes in your test projects:

1. Replace the NuGet package reference in your test projects:
   ```xml
   <!-- Remove -->
   <PackageReference Include="TestableIO.System.IO.Abstractions.TestingHelpers" />
   <!-- Add -->
   <PackageReference Include="Testably.Abstractions.Testing" />
   ```

2. Update your test code to use the new `MockFileSystem`:
   ```csharp
   // Before (TestableIO)
   var fileSystem = new MockFileSystem();
   fileSystem.AddDirectory("some-directory");
   fileSystem.AddFile("some-file.txt", new MockFileData("content"));

   // After (Testably)
   var fileSystem = new MockFileSystem();
   fileSystem.Directory.CreateDirectory("some-directory");
   fileSystem.File.WriteAllText("some-file.txt", "content");
   // or using fluent initialization:
   fileSystem.Initialize()
       .WithSubdirectory("some-directory")
       .WithFile("some-file.txt").Which(f => f
           .HasStringContent("content"));
   ```

Your production code using `IFileSystem` remains unchanged.

## Other related projects

-   [`System.IO.Abstractions.Extensions`](https://github.com/TestableIO/System.IO.Abstractions.Extensions)
    provides convenience functionality on top of the core abstractions.

-   [`System.IO.Abstractions.Analyzers`](https://github.com/TestableIO/System.IO.Abstractions.Analyzers)
    provides Roslyn analyzers to help use abstractions over static methods.

================================================
FILE: System.IO.Abstractions.slnx
================================================
<Solution>
  <Folder Name="/Benchmarks/">
    <Project Path="benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/TestableIO.System.IO.Abstractions.Benchmarks.csproj" />
  </Folder>
  <Folder Name="/Meta/">
    <Project Path="src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj" />
    <Project Path="src/System.IO.Abstractions/System.IO.Abstractions.csproj" />
    <Project Path="src/TestableIO.System.IO.Abstractions/TestableIO.System.IO.Abstractions.csproj" />
  </Folder>
  <Folder Name="/Pipeline/">
    <Project Path="Pipeline/Build.csproj">
      <Build Project="false" />
    </Project>
  </Folder>
  <Folder Name="/Tests/">
    <Project Path="tests/TestableIO.System.IO.Abstractions.Api.Tests/TestableIO.System.IO.Abstractions.Api.Tests.csproj" />
    <Project Path="tests/TestableIO.System.IO.Abstractions.Parity.Tests/TestableIO.System.IO.Abstractions.Parity.Tests.csproj" />
    <Project Path="tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests.csproj" />
    <Project Path="tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/TestableIO.System.IO.Abstractions.Wrappers.Tests.csproj" />
  </Folder>
  <Folder Name="/_/">
    <File Path=".gitignore" />
    <File Path="Directory.Build.props" />
    <File Path="Directory.Packages.props" />
    <File Path="global.json" />
    <File Path="README.md" />
  </Folder>
  <Folder Name="/_/.github/" />
  <Folder Name="/_/.github/workflows/">
    <File Path=".github/workflows/build.yml" />
    <File Path=".github/workflows/ci.yml" />
  </Folder>
  <Folder Name="/_/src/">
    <File Path="src/Directory.Build.props" />
  </Folder>
  <Folder Name="/_/tests/">
    <File Path="tests/Directory.Build.props" />
  </Folder>
  <Project Path="src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj" />
  <Project Path="src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj" />
</Solution>


================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/FileSystemAbstractionBenchmarks.cs
================================================
using System.IO.Abstractions.Benchmarks.Support;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Order;

namespace System.IO.Abstractions.Benchmarks;

//[SimpleJob(launchCount: 3, warmupCount: 10, targetCount: 30)]
[RPlotExporter]
[MemoryDiagnoser]
[Orderer(summaryOrderPolicy: SummaryOrderPolicy.FastestToSlowest)]
[RankColumn]
public class FileSystemAbstractionBenchmarks
{
    /// <summary>
    /// FileSupport type to avoid counting object initialisation on the benchmark
    /// </summary>
    private readonly FileSupport _fileSupport;
    private readonly DirectorySupport _directorySupport;

    private readonly string _path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

    public FileSystemAbstractionBenchmarks()
    {
        // Initialize file support
        _fileSupport = new FileSupport();
        _directorySupport = new DirectorySupport();
    }

    #region File IsFile
    [Benchmark]
    public void FileExists_DotNet() => FileSupportStatic.IsFile(_path);

    [Benchmark]
    public void FileExists_Abstraction() => _fileSupport.IsFile(_path);
    #endregion

    #region Directory Exists
    [Benchmark]
    public void DirectoryExists_DotNet() => DirectorySupportStatic.Exists(_path);

    [Benchmark]
    public void DirectoryExists_Abstraction() => _directorySupport.Exists(_path);
    #endregion
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/MockFileSystemBenchmarks.cs
================================================
using BenchmarkDotNet.Attributes;
using System.Collections.Generic;
using System.IO.Abstractions.TestingHelpers;
using System.Linq;
using XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;

namespace System.IO.Abstractions.Benchmarks;

[RPlotExporter]
[MemoryDiagnoser]
public class MockFileSystemBenchmarks
{
    private readonly Dictionary<string, MockFileData> testData = CreateTestData();

    private static Dictionary<string, MockFileData> CreateTestData()
    {
        var filesCount = 100000;
        var maxDirectoryDepth = 8;
        return Enumerable.Range(0, filesCount).ToDictionary(
            i => XFS.Path(@$"C:\{string.Join(@"\", Enumerable.Range(0, i % maxDirectoryDepth + 1).Select(i => i.ToString()))}\{i}.bin"),
            i => new MockFileData(i.ToString()));
    }

    [Benchmark]
    public MockFileSystem MockFileSystem_Constructor() => new(testData);
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Program.cs
================================================
namespace System.IO.Abstractions.Benchmarks;

using BenchmarkDotNet.Running;

static class Program
{
    public static void Main(string[] args)
    {
        BenchmarkRunner.Run(typeof(Program).Assembly);
    }
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Properties/launchSettings.json
================================================
{
  "profiles": {
    "yapm": {
      "commandName": "Project",
      "commandLineArgs": "apply"
    }
  }
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupport.cs
================================================
namespace System.IO.Abstractions.Benchmarks.Support;

public class DirectorySupport
{
    private readonly IFileSystem _fileSystem;

    public DirectorySupport(IFileSystem fileSystem)
    {
        _fileSystem = fileSystem;
    }

    public DirectorySupport() : this(new FileSystem())
    {
        // Default implementation for FileSystem
    }

    public bool IsDirectory(string path)
    {
        return _fileSystem.Directory.Exists(path);
    }

    private static string GetRandomTempDirectory()
    {
        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
    }

    public string CreateRandomDirectory()
    {
        var randomPath = GetRandomTempDirectory();
        _fileSystem.Directory.CreateDirectory(randomPath);
        return randomPath;
    }

    private void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)
    {
        // Get the subdirectories for the specified directory.
        var dir = _fileSystem.DirectoryInfo.New(sourceDirName);
        if (!dir.Exists)
        {
            throw new DirectoryNotFoundException(
                "Source directory does not exist or could not be found: "
                + sourceDirName);
        }

        var dirs = dir.GetDirectories();
        // If the destination directory doesn't exist, create it.
        if (!_fileSystem.Directory.Exists(destDirName))
        {
            _fileSystem.Directory.CreateDirectory(destDirName);
        }

        // Get the files in the directory and copy them to the new location.
        var files = dir.GetFiles();
        foreach (var file in files)
        {
            string temppath = Path.Combine(destDirName, file.Name);
            file.CopyTo(temppath, overwrite);
        }

        // If copying subdirectories, copy them and their contents to new location.
        if (copySubDirs)
        {
            foreach (var subdir in dirs)
            {
                string temppath = Path.Combine(destDirName, subdir.Name);
                DirectoryCopy(subdir.FullName, temppath, copySubDirs);
            }
        }
    }

    public void CreateIfNotExists(string directory)
    {
        if (!_fileSystem.Directory.Exists(directory))
        {
            _fileSystem.Directory.CreateDirectory(directory);
        }
    }

    public bool Exists(string directory)
    {
        return _fileSystem.Directory.Exists(directory);
    }
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupportStatic.cs
================================================
namespace System.IO.Abstractions.Benchmarks.Support;

public static class DirectorySupportStatic
{
    public static bool IsDirectory(string path)
    {
        return Directory.Exists(path);
    }

    private static string GetRandomTempDirectory()
    {
        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
    }

    public static string CreateDirectory()
    {
        var randomPath = GetRandomTempDirectory();
        Directory.CreateDirectory(randomPath);
        return randomPath;
    }

    private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)
    {
        // Get the subdirectories for the specified directory.
        DirectoryInfo dir = new DirectoryInfo(sourceDirName);

        if (!dir.Exists)
        {
            throw new DirectoryNotFoundException(
                "Source directory does not exist or could not be found: "
                + sourceDirName);
        }

        DirectoryInfo[] dirs = dir.GetDirectories();
        // If the destination directory doesn't exist, create it.
        if (!Directory.Exists(destDirName))
        {
            Directory.CreateDirectory(destDirName);
        }

        // Get the files in the directory and copy them to the new location.
        FileInfo[] files = dir.GetFiles();
        foreach (FileInfo file in files)
        {
            string temppath = Path.Combine(destDirName, file.Name);
            file.CopyTo(temppath, overwrite);
        }

        // If copying subdirectories, copy them and their contents to new location.
        if (copySubDirs)
        {
            foreach (DirectoryInfo subdir in dirs)
            {
                string temppath = Path.Combine(destDirName, subdir.Name);
                DirectoryCopy(subdir.FullName, temppath, copySubDirs);
            }
        }
    }

    public static void CreateIfNotExists(string directory)
    {
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
    }

    public static bool Exists(string directory) => Directory.Exists(directory);
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupport.cs
================================================
namespace System.IO.Abstractions.Benchmarks.Support;

public class FileSupport
{
    private readonly IFileSystem _fileSystem;

    public FileSupport(IFileSystem fileSystem)
    {
        _fileSystem = fileSystem;
    }

    public FileSupport() : this(new FileSystem())
    {
        // Default implementation for FileSystem
    }

    private static string GetRandomTempFile()
    {
        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
    }

    public bool IsFile(string path)
    {
        return _fileSystem.File.Exists(path);
    }

    /// <summary>
    /// Checks and deletes given file if it does exists.
    /// </summary>
    /// <param name="filePath">Path of the file</param>
    public void DeleteIfExists(string filePath)
    {
        if (_fileSystem.File.Exists(filePath))
        {
            _fileSystem.File.Delete(filePath);
        }
    }
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupportStatic.cs
================================================
namespace System.IO.Abstractions.Benchmarks.Support;

public static class FileSupportStatic
{
    public static string GetRandomTempFile()
    {
        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
    }

    public static bool IsFile(string path)
    {
        return File.Exists(path);
    }

    /// <summary>
    /// Checks and deletes given file if it does exists.
    /// </summary>
    /// <param name="filePath">Path of the file</param>
    public static void DeleteIfExists(string filePath)
    {
        if (File.Exists(filePath))
        {
            File.Delete(filePath);
        }
    }
}

================================================
FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/TestableIO.System.IO.Abstractions.Benchmarks.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<AssemblyName>TestableIO.System.IO.Abstractions.Benchmarks</AssemblyName>
		<RootNamespace>TestableIO.System.IO.Abstractions.Benchmarks</RootNamespace>
		<Description>Bencharmks comparisons.</Description>
		<TargetFramework>net9.0</TargetFramework>
		<PackageProjectUrl>https://github.com/TestableIO/System.IO.Abstractions</PackageProjectUrl>
		<PackageLicenseExpression>MIT</PackageLicenseExpression>
		<PackageTags>testing</PackageTags>
		<IsPackable>false</IsPackable>
		<IsTestable>false</IsTestable>
		<OutputType>Exe</OutputType>
		<OutputType>Exe</OutputType>
	</PropertyGroup>
	<ItemGroup>
		<ProjectReference Include="../../src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj" />
		<ProjectReference Include="../../src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj" />
	</ItemGroup>
	<ItemGroup>
		<PackageReference Include="BenchmarkDotNet" />
	</ItemGroup>
</Project>


================================================
FILE: build.cmd
================================================
:; set -eo pipefail
:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
:; ${SCRIPT_DIR}/build.sh "$@"
:; exit $?

@ECHO OFF
powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %*


================================================
FILE: build.ps1
================================================
[CmdletBinding()]
Param(
    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
    [string[]]$BuildArguments
)

Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"

Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent

###########################################################################
# CONFIGURATION
###########################################################################

$BuildProjectFile = "$PSScriptRoot\Pipeline\Build.csproj"
$TempDirectory = "$PSScriptRoot\\.nuke\temp"

$DotNetGlobalFile = "$PSScriptRoot\\global.json"
$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
$DotNetChannel = "STS"

$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
$env:DOTNET_NOLOGO = 1

###########################################################################
# EXECUTION
###########################################################################

function ExecSafe([scriptblock] $cmd) {
    & $cmd
    if ($LASTEXITCODE) { exit $LASTEXITCODE }
}

# If dotnet CLI is installed globally and it matches requested version, use for execution
if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
     $(dotnet --version) -and $LASTEXITCODE -eq 0) {
    $env:DOTNET_EXE = (Get-Command "dotnet").Path
}
else {
    # Download install script
    $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
    New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)

    # If global.json exists, load expected version
    if (Test-Path $DotNetGlobalFile) {
        $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
        if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
            $DotNetVersion = $DotNetGlobal.sdk.version
        }
    }

    # Install by channel or version
    $DotNetDirectory = "$TempDirectory\dotnet-win"
    if (!(Test-Path variable:DotNetVersion)) {
        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
    } else {
        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
    }
    $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
    $env:PATH = "$DotNetDirectory;$env:PATH"
}

Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)"

if (Test-Path env:NUKE_ENTERPRISE_TOKEN) {
    & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null
    & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null
}

ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }
ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }


================================================
FILE: build.sh
================================================
#!/usr/bin/env bash

bash --version 2>&1 | head -n 1

set -eo pipefail
SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)

###########################################################################
# CONFIGURATION
###########################################################################

BUILD_PROJECT_FILE="$SCRIPT_DIR/Pipeline/Build.csproj"
TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp"

DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh"
DOTNET_CHANNEL="STS"

export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_NOLOGO=1

###########################################################################
# EXECUTION
###########################################################################

function FirstJsonValue {
    perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}"
}

# If dotnet CLI is installed globally and it matches requested version, use for execution
if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then
    export DOTNET_EXE="$(command -v dotnet)"
else
    # Download install script
    DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh"
    mkdir -p "$TEMP_DIRECTORY"
    curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL"
    chmod +x "$DOTNET_INSTALL_FILE"

    # If global.json exists, load expected version
    if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then
        DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")")
        if [[ "$DOTNET_VERSION" == ""  ]]; then
            unset DOTNET_VERSION
        fi
    fi

    # Install by channel or version
    DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix"
    if [[ -z ${DOTNET_VERSION+x} ]]; then
        "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path
    else
        "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path
    fi
    export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet"
    export PATH="$DOTNET_DIRECTORY:$PATH"
fi

echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)"

if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then
    "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true
    "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true
fi

"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet
"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@"


================================================
FILE: global.json
================================================
{
  "sdk": {
    "version": "10.0.201",
    "rollForward": "latestMinor"
  }
}


================================================
FILE: nuget.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

================================================
FILE: renovate.json5
================================================
{
  extends: ["config:base"],
  ignorePaths: [
    // Clear the default list to enable Renovate for all files
  ],
}


================================================
FILE: src/Directory.Build.props
================================================
<Project>

    <Import Project="$(MSBuildThisFileDirectory)/../Directory.Build.props"
            Condition="Exists('$(MSBuildThisFileDirectory)/../Directory.Build.props')"/>

    <PropertyGroup>
        <TargetFrameworks>net472;netstandard2.0;netstandard2.1;net6.0;net8.0;net9.0;net10.0</TargetFrameworks>
    </PropertyGroup>

    <PropertyGroup>
        <RepositoryUrl>https://github.com/TestableIO/System.IO.Abstractions.git</RepositoryUrl>
        <IncludeSymbols>true</IncludeSymbols>
        <SymbolPackageFormat>snupkg</SymbolPackageFormat>
        <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
    </PropertyGroup>

    <PropertyGroup>
        <PackageIcon>icon_256x256.png</PackageIcon>
    </PropertyGroup>
    <ItemGroup>
        <None Include="$(SolutionDir)/images/icon_256x256.png" Pack="true" PackagePath="/" Link="/icon_256x256.png"/>
    </ItemGroup>

    <ItemGroup>
        <PackageReference Include="IsExternalInit">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
    </ItemGroup>

</Project>


================================================
FILE: src/System.IO.Abstractions/System.IO.Abstractions.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <AssemblyName>System.IO.Abstractions</AssemblyName>
        <RootNamespace>System.IO.Abstractions</RootNamespace>
        <Description>A set of abstractions to help make file system interactions testable.</Description>
    </PropertyGroup>

    <ItemGroup>
        <ProjectReference Include="..\TestableIO.System.IO.Abstractions\TestableIO.System.IO.Abstractions.csproj"/>
        <ProjectReference Include="..\TestableIO.System.IO.Abstractions.Wrappers\TestableIO.System.IO.Abstractions.Wrappers.csproj"/>
    </ItemGroup>

</Project>


================================================
FILE: src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
    
    <PropertyGroup>
        <AssemblyName>System.IO.Abstractions.TestingHelpers</AssemblyName>
        <RootNamespace>System.IO.Abstractions.TestingHelpers</RootNamespace>
        <Description>A set of pre-built mocks to help when testing file system interactions.</Description>
    </PropertyGroup>
    
    <ItemGroup>
        <ProjectReference Include="..\TestableIO.System.IO.Abstractions.TestingHelpers\TestableIO.System.IO.Abstractions.TestingHelpers.csproj"/>
    </ItemGroup>
    
</Project>


================================================
FILE: src/TestableIO.System.IO.Abstractions/AssemblyRedirects.cs
================================================
using System.IO.Abstractions;
using System.Runtime.CompilerServices;

[assembly: TypeForwardedTo(typeof(FileSystemStream))]
[assembly: TypeForwardedTo(typeof(IDirectory))]
[assembly: TypeForwardedTo(typeof(IDirectoryInfo))]
[assembly: TypeForwardedTo(typeof(IDirectoryInfoFactory))]
[assembly: TypeForwardedTo(typeof(IDriveInfo))]
[assembly: TypeForwardedTo(typeof(IDriveInfoFactory))]
[assembly: TypeForwardedTo(typeof(IFile))]
[assembly: TypeForwardedTo(typeof(IFileInfo))]
[assembly: TypeForwardedTo(typeof(IFileInfoFactory))]
[assembly: TypeForwardedTo(typeof(IFileStreamFactory))]
[assembly: TypeForwardedTo(typeof(IFileSystem))]
[assembly: TypeForwardedTo(typeof(IFileSystemAclSupport))]
[assembly: TypeForwardedTo(typeof(IFileSystemEntity))]
[assembly: TypeForwardedTo(typeof(IFileSystemInfo))]
[assembly: TypeForwardedTo(typeof(IFileSystemWatcher))]
[assembly: TypeForwardedTo(typeof(IFileSystemWatcherFactory))]
[assembly: TypeForwardedTo(typeof(IFileVersionInfo))]
[assembly: TypeForwardedTo(typeof(IFileVersionInfoFactory))]
[assembly: TypeForwardedTo(typeof(IPath))]
[assembly: TypeForwardedTo(typeof(IWaitForChangedResult))]


================================================
FILE: src/TestableIO.System.IO.Abstractions/TestableIO.System.IO.Abstractions.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <AssemblyName>TestableIO.System.IO.Abstractions</AssemblyName>
        <RootNamespace>System.IO.Abstractions</RootNamespace>
        <Description>A set of abstractions to help make file system interactions testable.</Description>
        <Nullable>enable</Nullable>
        <LangVersion>preview</LangVersion>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Nullable">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include="Testably.Abstractions.FileSystem.Interface"/>
    </ItemGroup>

</Project>


================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/CommonExceptions.cs
================================================
using System.Globalization;
using System.Runtime.InteropServices;

namespace System.IO.Abstractions.TestingHelpers;

internal static class CommonExceptions
{
    private const int _fileLockHResult = unchecked((int)0x80070020);
        
    public static FileNotFoundException FileNotFound(string path) =>
        new FileNotFoundException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("COULD_NOT_FIND_FILE_EXCEPTION"),
                path
            ),
            path
        );

    public static DirectoryNotFoundException CouldNotFindPartOfPath(string path) =>
        new DirectoryNotFoundException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("COULD_NOT_FIND_PART_OF_PATH_EXCEPTION"),
                path
            )
        );

    public static UnauthorizedAccessException AccessDenied(string path) =>
        new UnauthorizedAccessException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("ACCESS_TO_THE_PATH_IS_DENIED"),
                path
            )
        );

    public static NotSupportedException InvalidUseOfVolumeSeparator() =>
        new NotSupportedException(StringResources.Manager.GetString("THE_PATH_IS_NOT_OF_A_LEGAL_FORM"));

    public static ArgumentException PathIsNotOfALegalForm(string paramName) =>
        new ArgumentException(
            StringResources.Manager.GetString("THE_PATH_IS_NOT_OF_A_LEGAL_FORM"),
            paramName
        );

    public static ArgumentNullException FilenameCannotBeNull(string paramName) =>
        new ArgumentNullException(
            paramName,
            StringResources.Manager.GetString("FILENAME_CANNOT_BE_NULL")
        );

    public static ArgumentException IllegalCharactersInPath(string paramName = null) =>
        paramName != null
            ? new ArgumentException(StringResources.Manager.GetString("ILLEGAL_CHARACTERS_IN_PATH_EXCEPTION"), paramName)
            : new ArgumentException(StringResources.Manager.GetString("ILLEGAL_CHARACTERS_IN_PATH_EXCEPTION"));

    public static ArgumentException InvalidUncPath(string paramName) =>
        RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
            ? new ArgumentException(@"The UNC path should be of the form \\server\share.", paramName)
            : new ArgumentException(@"The UNC path should be of the form //server/share.", paramName);

    public static IOException ProcessCannotAccessFileInUse(string paramName = null) =>
        paramName != null
            ? new IOException(string.Format(StringResources.Manager.GetString("PROCESS_CANNOT_ACCESS_FILE_IN_USE_WITH_FILENAME"), paramName), _fileLockHResult)
            : new IOException(StringResources.Manager.GetString("PROCESS_CANNOT_ACCESS_FILE_IN_USE"), _fileLockHResult);

    public static IOException FileAlreadyExists(string paramName) =>
        new IOException(string.Format(StringResources.Manager.GetString("FILE_ALREADY_EXISTS"), paramName));

    public static ArgumentException InvalidAccessCombination(FileMode mode, FileAccess access)
        => new ArgumentException(string.Format(StringResources.Manager.GetString("INVALID_ACCESS_COMBINATION"), mode, access), nameof(access));

    public static ArgumentException AppendAccessOnlyInWriteOnlyMode()
        => new ArgumentException(string.Format(StringResources.Manager.GetString("APPEND_ACCESS_ONLY_IN_WRITE_ONLY_MODE")), "access");

    public static NotImplementedException NotImplemented() =>
        new NotImplementedException(StringResources.Manager.GetString("NOT_IMPLEMENTED_EXCEPTION"));

    public static IOException CannotCreateBecauseSameNameAlreadyExists(string path) =>
        new IOException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("CANNOT_CREATE_BECAUSE_SAME_NAME_ALREADY_EXISTS"),
                path
            )
        );

    public static IOException NameCannotBeResolvedByTheSystem(string path) =>
        new IOException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("NAME_CANNOT_BE_RESOLVED_BY_THE_SYSTEM"),
                path
            )
        );

    public static DirectoryNotFoundException PathDoesNotExistOrCouldNotBeFound(string path) =>
        new DirectoryNotFoundException(
            string.Format(
                CultureInfo.InvariantCulture,
                StringResources.Manager.GetString("PATH_DOES_NOT_EXIST_OR_COULD_NOT_BE_FOUND"),
                path
            )
        );
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/FileHandles.cs
================================================
using System;
using System.Collections.Concurrent;
using System.IO;
using System.IO.Abstractions.TestingHelpers;

public class FileHandles
{
    private readonly ConcurrentDictionary<string, ConcurrentDictionary<Guid, (FileAccess access, FileShare share)>> handles = new();

    public void AddHandle(string path, Guid guid, FileAccess access, FileShare share)
    {
        var pathHandles = handles.GetOrAdd(
            path, 
            _ => new ConcurrentDictionary<Guid, (FileAccess, FileShare)>());

        var requiredShare = AccessToShare(access);
        foreach (var (existingAccess, existingShare) in pathHandles.Values)
        {
            var existingRequiredShare = AccessToShare(existingAccess);
            var existingBlocksNew = (existingShare & requiredShare) != requiredShare;
            var newBlocksExisting = (share & existingRequiredShare) != existingRequiredShare;
            if (existingBlocksNew || newBlocksExisting)
            {
                throw CommonExceptions.ProcessCannotAccessFileInUse(path);
            }
        }
        
        pathHandles[guid] = (access, share);
    }

    public void RemoveHandle(string path, Guid guid)
    {
        if (handles.TryGetValue(path, out var pathHandles))
        {
            pathHandles.TryRemove(guid, out _);
            if (pathHandles.IsEmpty)
            {
                handles.TryRemove(path, out _);
            }
        }
    }

    private static FileShare AccessToShare(FileAccess access)
    {
        var share = FileShare.None;
        if (access.HasFlag(FileAccess.Read))
        {
            share |= FileShare.Read;
        }
        if (access.HasFlag(FileAccess.Write))
        {
            share |= FileShare.Write;
        }
        return share;
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/IMockFileDataAccessor.cs
================================================
using System.Collections.Generic;
using System.Reflection;

namespace System.IO.Abstractions.TestingHelpers;

/// <summary>
/// Provides access to the file system storage.
/// </summary>
public interface IMockFileDataAccessor : IFileSystem
{
    /// <summary>
    /// Adjust the times of the <paramref name="fileData"/>.
    /// </summary>
    /// <param name="fileData">The <see cref="MockFileData"/> for which the times should be adjusted.</param>
    /// <param name="timeAdjustments">The adjustments to make on the <see cref="MockFileData"/>.</param>
    /// <returns>The adjusted file.</returns>
    MockFileData AdjustTimes(MockFileData fileData, TimeAdjustments timeAdjustments);

    /// <summary>
    /// Gets a file.
    /// </summary>
    /// <param name="path">The path of the file to get.</param>
    /// <returns>The file. <see langword="null"/> if the file does not exist.</returns>
    MockFileData GetFile(string path);

    /// <summary>
    /// Gets a drive.
    /// </summary>
    /// <param name="name">The name of the drive to get.</param>
    /// <returns>The drive. <see langword="null"/> if the drive does not exist.</returns>
    MockDriveData GetDrive(string name);

    /// <summary>
    /// Adds the file.
    /// </summary>
    /// <param name="path">The path of the file to add.</param>
    /// <param name="mockFile">The file data to add.</param>
    /// <param name="verifyAccess">Flag indicating if the access conditions should be verified.</param>
    void AddFile(string path, MockFileData mockFile, bool verifyAccess = true);

    /// <summary>
    /// </summary>
    void AddDirectory(string path);

    /// <summary>
    /// </summary>
    void AddDrive(string name, MockDriveData mockDrive);

    /// <summary>
    /// </summary>
    void AddFileFromEmbeddedResource(string path, Assembly resourceAssembly, string embeddedResourcePath);

    /// <summary>
    /// </summary>
    void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssembly, string embeddedResourcePath);

    /// <summary>
    /// </summary>
    void MoveDirectory(string sourcePath, string destPath);

    /// <summary>
    /// Removes the file.
    /// </summary>
    /// <param name="path">The file to remove.</param>
    /// <param name="verifyAccess">Flag indicating if the access conditions should be verified.</param>
    /// <remarks>
    /// The file must not exist.
    /// </remarks>
    void RemoveFile(string path, bool verifyAccess = true);

    /// <summary>
    /// Determines whether the file exists.
    /// </summary>
    /// <param name="path">The file to check. </param>
    /// <returns><see langword="true"/> if the file exists; otherwise, <see langword="false"/>.</returns>
    bool FileExists(string path);

    /// <summary>
    /// Gets all unique paths of all files and directories.
    /// </summary>
    IEnumerable<string> AllPaths { get; }

    /// <summary>
    /// Gets the paths of all files.
    /// </summary>
    IEnumerable<string> AllFiles { get; }

    /// <summary>
    /// Gets the paths of all directories.
    /// </summary>
    IEnumerable<string> AllDirectories { get; }

    /// <summary>
    /// Gets the names of all drives.
    /// </summary>
    IEnumerable<string> AllDrives { get; }

    /// <summary>
    /// Gets a helper for string operations.
    /// </summary>

    StringOperations StringOperations { get; }

    /// <summary>
    /// Gets a helper for verifying file system paths.
    /// </summary>
    PathVerifier PathVerifier { get; }

    /// <summary>
    /// Gets a reference to the underlying file system. 
    /// </summary>
    IFileSystem FileSystem { get; }

    /// <summary>
    /// Gets a reference to the open file handles.
    /// </summary>
    FileHandles FileHandles { get; }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs
================================================
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;

namespace System.IO.Abstractions.TestingHelpers;

using XFS = MockUnixSupport;



/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDirectory : DirectoryBase
{
    private readonly IMockFileDataAccessor mockFileDataAccessor;
    private string currentDirectory;

    /// <inheritdoc />
    public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, FileBase fileBase, string currentDirectory) :
        this(mockFileDataAccessor, currentDirectory)
    {
    }

    /// <inheritdoc />
    public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) : base(
        mockFileDataAccessor?.FileSystem)
    {
        this.currentDirectory = currentDirectory;
        this.mockFileDataAccessor =
            mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));
    }


    /// <inheritdoc />
    public override IDirectoryInfo CreateDirectory(string path)
    {
        return CreateDirectoryInternal(path);
    }

#if FEATURE_UNIX_FILE_MODE
        /// <inheritdoc />
        public override IDirectoryInfo CreateDirectory(string path, UnixFileMode unixCreateMode)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    private IDirectoryInfo CreateDirectoryInternal(string path)
    {
        if (path == null)
        {
            throw new ArgumentNullException(nameof(path));
        }

        if (path.Length == 0)
        {
            throw new ArgumentException(
                StringResources.Manager.GetString("PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE"), "path");
        }

        if (mockFileDataAccessor.PathVerifier.HasIllegalCharacters(path, true))
        {
            throw CommonExceptions.IllegalCharactersInPath(nameof(path));
        }

        path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes();
        if (XFS.IsWindowsPlatform())
        {
            path = path.TrimEnd(' ');
        }

        var existingFile = mockFileDataAccessor.GetFile(path);
        if (existingFile == null)
        {
            mockFileDataAccessor.AddDirectory(path);
        }
        else if (!existingFile.IsDirectory)
        {
            throw CommonExceptions.FileAlreadyExists("path");
        }

        var created = new MockDirectoryInfo(mockFileDataAccessor, path);

        return created;
    }

#if FEATURE_CREATE_SYMBOLIC_LINK
        /// <inheritdoc />
        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)
        {
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(pathToTarget, nameof(pathToTarget));

            if (Exists(path))
            {
                throw CommonExceptions.FileAlreadyExists(nameof(path));
            }

            mockFileDataAccessor.AddDirectory(path);
            mockFileDataAccessor.GetFile(path).LinkTarget = pathToTarget;

            var directoryInfo = new MockDirectoryInfo(mockFileDataAccessor, path);
            directoryInfo.Attributes |= FileAttributes.ReparsePoint;
            return directoryInfo;
        }
#endif

#if FEATURE_CREATE_TEMP_SUBDIRECTORY
        /// <inheritdoc />
        public override IDirectoryInfo CreateTempSubdirectory(string prefix = null)
        {
            prefix ??= "";
            string potentialTempDirectory;

            // Perform directory name generation in a loop, just in case the randomly generated name already exists.
            do
            {
                var randomDir = $"{prefix}{FileSystem.Path.GetRandomFileName()}";
                potentialTempDirectory = Path.Combine(FileSystem.Path.GetTempPath(), randomDir);
            } while (Exists(potentialTempDirectory));

            return CreateDirectoryInternal(potentialTempDirectory);
        }
#endif

    /// <inheritdoc />
    public override void Delete(string path)
    {
        Delete(path, false);
    }


    /// <inheritdoc />
    public override void Delete(string path, bool recursive)
    {
        path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes();

        var stringOps = mockFileDataAccessor.StringOperations;
        var pathWithDirectorySeparatorChar = $"{path}{Path.DirectorySeparatorChar}";

        var affectedPaths = mockFileDataAccessor
            .AllPaths
            .Where(p => stringOps.Equals(p, path) || stringOps.StartsWith(p, pathWithDirectorySeparatorChar))
            .ToList();

        if (!affectedPaths.Any())
        {
            throw CommonExceptions.PathDoesNotExistOrCouldNotBeFound(path);
        }

        if (!recursive && affectedPaths.Count > 1)
        {
            throw new IOException("The directory specified by " + path +
                                  " is read-only, or recursive is false and " + path +
                                  " is not an empty directory.");
        }

        bool isFile = !mockFileDataAccessor.GetFile(path).IsDirectory;
        if (isFile)
        {
            throw new IOException("The directory name is invalid.");
        }

        foreach (var affectedPath in affectedPaths)
        {
            mockFileDataAccessor.RemoveFile(affectedPath);
        }
    }


    /// <inheritdoc />
    public override bool Exists(string path)
    {
        if (path == "/")
        {
            return true;
        }

        try
        {
            path = path.TrimSlashes();
            path = mockFileDataAccessor.Path.GetFullPath(path);
            return mockFileDataAccessor.GetFile(path)?.IsDirectory ?? false;
        }
        catch (Exception)
        {
            return false;
        }
    }


    /// <inheritdoc />
    public override DateTime GetCreationTime(string path)
    {
        return mockFileDataAccessor.File.GetCreationTime(path);
    }


    /// <inheritdoc />
    public override DateTime GetCreationTimeUtc(string path)
    {
        return mockFileDataAccessor.File.GetCreationTimeUtc(path);
    }

    /// <inheritdoc />
    public override string GetCurrentDirectory()
    {
        return currentDirectory;
    }

    /// <inheritdoc />
    public override string[] GetDirectories(string path)
    {
        return GetDirectories(path, "*");
    }

    /// <inheritdoc />
    public override string[] GetDirectories(string path, string searchPattern)
    {
        return GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);
    }

    /// <inheritdoc />
    public override string[] GetDirectories(string path, string searchPattern, SearchOption searchOption)
    {
        return EnumerateDirectories(path, searchPattern, searchOption).ToArray();
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override string[] GetDirectories(string path, string searchPattern,
            EnumerationOptions enumerationOptions)
        {
            return GetDirectories(path, "*", EnumerationOptionsToSearchOption(enumerationOptions));
        }
#endif

    /// <inheritdoc />
    public override string GetDirectoryRoot(string path)
    {
        return Path.GetPathRoot(path);
    }

    /// <inheritdoc />
    public override string[] GetFiles(string path)
    {
        // Same as what the real framework does
        return GetFiles(path, "*");
    }

    /// <inheritdoc />
    public override string[] GetFiles(string path, string searchPattern)
    {
        // Same as what the real framework does
        return GetFiles(path, searchPattern, SearchOption.TopDirectoryOnly);
    }

    /// <inheritdoc />
    public override string[] GetFiles(string path, string searchPattern, SearchOption searchOption)
    {
        return GetFilesInternal(mockFileDataAccessor.AllFiles, path, searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override string[] GetFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)
        {
            return GetFiles(path, searchPattern, EnumerationOptionsToSearchOption(enumerationOptions));
        }
#endif

    private string[] GetFilesInternal(
        IEnumerable<string> files,
        string path,
        string searchPattern,
        SearchOption searchOption)
    {
        if (path == null)
        {
            throw new ArgumentNullException(nameof(path));
        }

        if (path.Any(c => Path.GetInvalidPathChars().Contains(c)))
        {
            throw new ArgumentException("Invalid character(s) in path", nameof(path));
        }

        CheckSearchPattern(searchPattern);
        if (searchPattern.Equals(string.Empty, StringComparison.OrdinalIgnoreCase))
        {
            searchPattern = "*";
        }

        path = path.TrimSlashes();
        path = path.NormalizeSlashes();
        path = mockFileDataAccessor.Path.GetFullPath(path);

        if (!Exists(path))
        {
            throw CommonExceptions.CouldNotFindPartOfPath(path);
        }

        if (!path.EndsWith(Path.DirectorySeparatorChar.ToString()))
        {
            path += Path.DirectorySeparatorChar;
        }

        var isUnix = XFS.IsUnixPlatform();

        var allDirectoriesPattern = isUnix
            ? @"([^<>:""/|?*]*/)*"
            : @"([^<>:""/\\|?*]*\\)*";

        var searchEndInStarDot = searchPattern.EndsWith(@"*.");

        string fileNamePattern;
        string pathPatternNoExtension = string.Empty;
        string pathPatternEndsInDot = string.Empty;
        string pathPatternSpecial = null;

        if (searchPattern == "*")
        {
            fileNamePattern = isUnix ? @"[^/]*?/?" : @"[^\\]*?\\?";
        }
        else
        {
            fileNamePattern = Regex.Escape(searchPattern)
                .Replace(@"\*", isUnix ? @"[^<>:""/|?*]*?" : @"[^<>:""/\\|?*]*?")
                .Replace(@"\?", isUnix ? @"[^<>:""/|?*]?" : @"[^<>:""/\\|?*]?");

            var extension = Path.GetExtension(searchPattern);
            bool hasExtensionLengthOfThree = extension != null && extension.Length == 4 &&
                                             !extension.Contains("*") && !extension.Contains("?");
            if (hasExtensionLengthOfThree)
            {
                var fileNamePatternSpecial =
                    string.Format(CultureInfo.InvariantCulture, "{0}[^.]", fileNamePattern);
                pathPatternSpecial = string.Format(
                    CultureInfo.InvariantCulture,
                    isUnix ? @"(?i:^{0}{1}{2}(?:/?)$)" : @"(?i:^{0}{1}{2}(?:\\?)$)",
                    Regex.Escape(path),
                    searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty,
                    fileNamePatternSpecial);
            }
        }

        var pathPattern = string.Format(
            CultureInfo.InvariantCulture,
            isUnix ? @"(?i:^{0}{1}{2}(?:/?)$)" : @"(?i:^{0}{1}{2}(?:\\?)$)",
            Regex.Escape(path),
            searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty,
            fileNamePattern);

        if (searchEndInStarDot)
        {
            pathPatternNoExtension = ReplaceLastOccurrence(pathPattern, @"]*?\.", @"\.]*?[.]*");
            pathPatternEndsInDot = ReplaceLastOccurrence(pathPattern, @"]*?\.", @"]*?[.]{1,}");
        }

        return files.Where(p =>
                !searchEndInStarDot
                    ? (Regex.IsMatch(p, pathPattern) ||
                       (pathPatternSpecial != null && Regex.IsMatch(p, pathPatternSpecial)))
                    : (Regex.IsMatch(p, pathPatternNoExtension) || Regex.IsMatch(p, pathPatternEndsInDot))
            )
            .ToArray();
    }

    /// <inheritdoc />
    public override string[] GetFileSystemEntries(string path)
    {
        return GetFileSystemEntries(path, "*");
    }

    /// <inheritdoc />
    public override string[] GetFileSystemEntries(string path, string searchPattern)
    {
        var dirs = GetDirectories(path, searchPattern);
        var files = GetFiles(path, searchPattern);

        return dirs.Union(files).ToArray();
    }

    /// <inheritdoc />
    public override string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
    {
        var dirs = GetDirectories(path, searchPattern, searchOption);
        var files = GetFiles(path, searchPattern, searchOption);

        return dirs.Union(files).ToArray();
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override string[] GetFileSystemEntries(string path, string searchPattern,
            EnumerationOptions enumerationOptions)
        {
            return GetFileSystemEntries(path, "*", EnumerationOptionsToSearchOption(enumerationOptions));
        }
#endif

    /// <inheritdoc />
    public override DateTime GetLastAccessTime(string path)
    {
        return mockFileDataAccessor.File.GetLastAccessTime(path);
    }

    /// <inheritdoc />
    public override DateTime GetLastAccessTimeUtc(string path)
    {
        return mockFileDataAccessor.File.GetLastAccessTimeUtc(path);
    }

    /// <inheritdoc />
    public override DateTime GetLastWriteTime(string path)
    {
        return mockFileDataAccessor.File.GetLastWriteTime(path);
    }

    /// <inheritdoc />
    public override DateTime GetLastWriteTimeUtc(string path)
    {
        return mockFileDataAccessor.File.GetLastWriteTimeUtc(path);
    }

    /// <inheritdoc />
    public override string[] GetLogicalDrives()
    {
        return mockFileDataAccessor
            .AllDirectories
            .Select(d => new MockDirectoryInfo(mockFileDataAccessor, d).Root.FullName)
            .Select(r => mockFileDataAccessor.StringOperations.ToUpper(r))
            .Distinct()
            .ToArray();
    }

    /// <inheritdoc />
    public override IDirectoryInfo GetParent(string path)
    {
        if (path == null)
        {
            throw new ArgumentNullException(nameof(path));
        }

        if (path.Length == 0)
        {
            throw new ArgumentException(
                StringResources.Manager.GetString("PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE"), "path");
        }

        if (mockFileDataAccessor.PathVerifier.HasIllegalCharacters(path, false))
        {
            throw new ArgumentException("Path contains invalid path characters.", "path");
        }

        var absolutePath = mockFileDataAccessor.Path.GetFullPath(path);
        var sepAsString = mockFileDataAccessor.Path.DirectorySeparatorChar.ToString();
        var lastIndex = 0;

        if (absolutePath != sepAsString)
        {
            var startIndex = mockFileDataAccessor.StringOperations.EndsWith(absolutePath, sepAsString)
                ? absolutePath.Length - 1
                : absolutePath.Length;
            lastIndex = absolutePath.LastIndexOf(mockFileDataAccessor.Path.DirectorySeparatorChar, startIndex - 1);

            if (lastIndex < 0)
            {
                return null;
            }
        }

        var parentPath = absolutePath.Substring(0, lastIndex);

        if (string.IsNullOrEmpty(parentPath))
        {
            // On the Unix platform, the parent of a path consisting of a slash followed by
            // non-slashes is the root, '/'.
            if (XFS.IsUnixPlatform())
            {
                absolutePath = absolutePath.TrimSlashes();

                if (absolutePath.Length > 1 &&
                    absolutePath.LastIndexOf(mockFileDataAccessor.Path.DirectorySeparatorChar) == 0)
                {
                    return new MockDirectoryInfo(mockFileDataAccessor,
                        mockFileDataAccessor.Path.DirectorySeparatorChar.ToString());
                }
            }

            return null;
        }

        return new MockDirectoryInfo(mockFileDataAccessor, parentPath);
    }

    /// <inheritdoc />
    public override void Move(string sourceDirName, string destDirName)
    {
        var fullSourcePath = mockFileDataAccessor.Path.GetFullPath(sourceDirName).TrimSlashes();
        var fullDestPath = mockFileDataAccessor.Path.GetFullPath(destDirName).TrimSlashes();

        if (string.Equals(fullSourcePath, fullDestPath, StringComparison.Ordinal))
        {
            throw new IOException("Source and destination path must be different.");
        }

        //if we're moving a file, not a directory, call the appropriate file moving function.
        var fileData = mockFileDataAccessor.GetFile(fullSourcePath);
        if (fileData?.Attributes.HasFlag(FileAttributes.Directory) == false)
        {
            mockFileDataAccessor.File.Move(fullSourcePath, fullDestPath);
            return;
        }

        var sourceRoot = mockFileDataAccessor.Path.GetPathRoot(fullSourcePath);
        var destinationRoot = mockFileDataAccessor.Path.GetPathRoot(fullDestPath);

        if (!mockFileDataAccessor.StringOperations.Equals(sourceRoot, destinationRoot))
        {
            throw new IOException(
                "Source and destination path must have identical roots. Move will not work across volumes.");
        }

        if (!mockFileDataAccessor.Directory.Exists(fullSourcePath))
        {
            throw CommonExceptions.CouldNotFindPartOfPath(sourceDirName);
        }

        if (!mockFileDataAccessor.Directory.GetParent(fullDestPath).Exists)
        {
            throw CommonExceptions.CouldNotFindPartOfPath(destDirName);
        }

        if (mockFileDataAccessor.Directory.Exists(fullDestPath) || mockFileDataAccessor.File.Exists(fullDestPath))
        {
            // In Windows, file/dir names are case sensetive, C:\\temp\\src and C:\\temp\\SRC and treated different
            if (XFS.IsUnixPlatform() ||
                !string.Equals(fullSourcePath, fullDestPath, StringComparison.OrdinalIgnoreCase))
            {
                throw CommonExceptions.CannotCreateBecauseSameNameAlreadyExists(fullDestPath);
            }
        }
        mockFileDataAccessor.MoveDirectory(fullSourcePath, fullDestPath);
    }

#if FEATURE_CREATE_SYMBOLIC_LINK
        /// <inheritdoc />
        public override IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)
        {
            var initialContainer = mockFileDataAccessor.GetFile(linkPath);
            if (initialContainer.LinkTarget != null)
            {
                var nextLocation = initialContainer.LinkTarget;
                var nextContainer = mockFileDataAccessor.GetFile(nextLocation);

                if (returnFinalTarget)
                {
                    // The maximum number of symbolic links that are followed:
                    // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks
                    int maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;
                    for (int i = 1; i < maxResolveLinks; i++)
                    {
                        if (nextContainer.LinkTarget == null)
                        {
                            break;
                        }
                        nextLocation = nextContainer.LinkTarget;
                        nextContainer = mockFileDataAccessor.GetFile(nextLocation);
                    }

                    if (nextContainer.LinkTarget != null)
                    {
                        throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);
                    }
                }

                if (nextContainer.IsDirectory)
                {
                    return new MockDirectoryInfo(mockFileDataAccessor, nextLocation);
                }
                else
                {
                    return new MockFileInfo(mockFileDataAccessor, nextLocation);
                }
            }
            throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);
        }
    
#endif

    /// <inheritdoc />
    public override void SetCreationTime(string path, DateTime creationTime)
    {
        mockFileDataAccessor.File.SetCreationTime(path, creationTime);
    }

    /// <inheritdoc />
    public override void SetCreationTimeUtc(string path, DateTime creationTimeUtc)
    {
        mockFileDataAccessor.File.SetCreationTimeUtc(path, creationTimeUtc);
    }

    /// <inheritdoc />
    public override void SetCurrentDirectory(string path)
    {
        currentDirectory = mockFileDataAccessor.Path.GetFullPath(path);
    }

    /// <inheritdoc />
    public override void SetLastAccessTime(string path, DateTime lastAccessTime)
    {
        mockFileDataAccessor.File.SetLastAccessTime(path, lastAccessTime);
    }

    /// <inheritdoc />
    public override void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc)
    {
        mockFileDataAccessor.File.SetLastAccessTimeUtc(path, lastAccessTimeUtc);
    }

    /// <inheritdoc />
    public override void SetLastWriteTime(string path, DateTime lastWriteTime)
    {
        mockFileDataAccessor.File.SetLastWriteTime(path, lastWriteTime);
    }

    /// <inheritdoc />
    public override void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc)
    {
        mockFileDataAccessor.File.SetLastWriteTimeUtc(path, lastWriteTimeUtc);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateDirectories(string path)
    {
        return EnumerateDirectories(path, "*");
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern)
    {
        return EnumerateDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
        var originalPath = path;
        path = path.TrimSlashes();
        path = mockFileDataAccessor.Path.GetFullPath(path);
        return GetFilesInternal(mockFileDataAccessor.AllDirectories, path, searchPattern, searchOption)
            .Where(p => !mockFileDataAccessor.StringOperations.Equals(p, path))
            .Select(p => FixPrefix(p, originalPath));
    }

    private string FixPrefix(string path, string originalPath)
    {
        var normalizedOriginalPath = mockFileDataAccessor.Path.GetFullPath(originalPath);
        var pathWithoutOriginalPath = path.Substring(normalizedOriginalPath.Length)
            .TrimStart(mockFileDataAccessor.Path.DirectorySeparatorChar);
        return mockFileDataAccessor.Path.Combine(originalPath, pathWithoutOriginalPath);
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)
        {
            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            return EnumerateDirectories(path, searchPattern, searchOption);
        }
#endif

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFiles(string path)
    {
        return GetFiles(path);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern)
    {
        return GetFiles(path, searchPattern);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption)
    {
        return GetFiles(path, searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)
        {
            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            return GetFiles(path, searchPattern, searchOption);
        }
#endif

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFileSystemEntries(string path)
    {
        return GetFileSystemEntries(path);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern)
    {
        return GetFileSystemEntries(path, searchPattern);
    }

    /// <inheritdoc />
    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
    {
        return GetFileSystemEntries(path, searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
        /// <inheritdoc />
        public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)
        {
            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            var fileSystemEntries = new List<string>(GetFiles(path, searchPattern, searchOption));
            fileSystemEntries.AddRange(GetDirectories(path, searchPattern, searchOption));
            return fileSystemEntries;
        }
#endif

    private string EnsureAbsolutePath(string path)
    {
        return Path.IsPathRooted(path)
            ? path
            : Path.Combine(GetCurrentDirectory(), path);
    }

    private void CheckSearchPattern(string searchPattern)
    {
        if (searchPattern == null)
        {
            throw new ArgumentNullException(nameof(searchPattern));
        }

        const string TWO_DOTS = "..";
        Func<ArgumentException> createException = () => new ArgumentException(@"Search pattern cannot contain "".."" to move up directories and can be contained only internally in file/directory names, as in ""a..b"".", searchPattern);

        if (mockFileDataAccessor.StringOperations.EndsWith(searchPattern, TWO_DOTS))
        {
            throw createException();
        }

        var position = mockFileDataAccessor.StringOperations.IndexOf(searchPattern, TWO_DOTS);

        if (position >= 0)
        {
            var characterAfterTwoDots = searchPattern[position + 2];

            if (characterAfterTwoDots == Path.DirectorySeparatorChar || characterAfterTwoDots == Path.AltDirectorySeparatorChar)
            {
                throw createException();
            }
        }

        var invalidPathChars = Path.GetInvalidPathChars();
        if (searchPattern.IndexOfAny(invalidPathChars) > -1)
        {
            throw CommonExceptions.IllegalCharactersInPath(nameof(searchPattern));
        }
    }

    private string ReplaceLastOccurrence(string source, string find, string replace)
    {
        if (source == null)
        {
            return source;
        }

        var place = source.LastIndexOf(find);

        if (place == -1)
        {
            return source;
        }

        var result = source.Remove(place, find.Length).Insert(place, replace);
        return result;
    }

#if FEATURE_ENUMERATION_OPTIONS
        private SearchOption EnumerationOptionsToSearchOption(EnumerationOptions enumerationOptions)
        {
            static Exception CreateExceptionForUnsupportedProperty(string propertyName)
            {
                return new NotSupportedException(
                    $"Changing EnumerationOptions.{propertyName} is not yet implemented for the mock file system."
                );
            }

            if (enumerationOptions.AttributesToSkip != (FileAttributes.System | FileAttributes.Hidden))
            {
                throw CreateExceptionForUnsupportedProperty("AttributesToSkip");
            }
            if (!enumerationOptions.IgnoreInaccessible)
            {
                throw CreateExceptionForUnsupportedProperty("IgnoreInaccessible");
            }
            if (enumerationOptions.MatchCasing != MatchCasing.PlatformDefault)
            {
                throw CreateExceptionForUnsupportedProperty("MatchCasing");
            }
            if (enumerationOptions.MatchType != MatchType.Simple)
            {
                throw CreateExceptionForUnsupportedProperty("MatchType");
            }
            if (enumerationOptions.ReturnSpecialDirectories)
            {
                throw CreateExceptionForUnsupportedProperty("ReturnSpecialDirectories");
            }

            return enumerationOptions.RecurseSubdirectories
                ? SearchOption.AllDirectories
                : SearchOption.TopDirectoryOnly;
        }
#endif
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs
================================================
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions.TestingHelpers;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDirectoryData : MockFileData
{
#if FEATURE_SERIALIZABLE
    [NonSerialized]
#endif
    private DirectorySecurity accessControl;

    /// <inheritdoc />
    public MockDirectoryData() : base(string.Empty)
    {
        Attributes = FileAttributes.Directory;
    }

    /// <inheritdoc />
    [SupportedOSPlatform("windows")]
    public new DirectorySecurity AccessControl
    {
        get
        {
            // DirectorySecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way.
            // This let's us use this class as long as we don't use AccessControl property.
            return accessControl ?? (accessControl = new DirectorySecurity());
        }
        set { accessControl = value; }
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs
================================================
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;

namespace System.IO.Abstractions.TestingHelpers;

using XFS = MockUnixSupport;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDirectoryInfo : DirectoryInfoBase, IFileSystemAclSupport
{
    private readonly IMockFileDataAccessor mockFileDataAccessor;
    private string directoryPath;
    private string originalPath;
    private MockFileData cachedMockFileData;
    private bool refreshOnNextRead;

    /// <summary>
    /// Initializes a new instance of the <see cref="MockDirectoryInfo"/> class.
    /// </summary>
    /// <param name="mockFileDataAccessor">The mock file data accessor.</param>
    /// <param name="directoryPath">The directory path.</param>
    /// <exception cref="ArgumentNullException">Thrown if <paramref name="mockFileDataAccessor"/> or <paramref name="directoryPath"/> is <see langref="null"/>.</exception>
    public MockDirectoryInfo(IMockFileDataAccessor mockFileDataAccessor, string directoryPath) : base(mockFileDataAccessor?.FileSystem)
    {
        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));

        if (directoryPath == null)
        {
            throw new ArgumentNullException("path", StringResources.Manager.GetString("VALUE_CANNOT_BE_NULL"));
        }
        if (directoryPath.Trim() == string.Empty)
        {
            throw CommonExceptions.PathIsNotOfALegalForm("path");
        }
            
        SetDirectoryPath(directoryPath);
        Refresh();
    }

#if FEATURE_CREATE_SYMBOLIC_LINK
    /// <inheritdoc />
    public override void CreateAsSymbolicLink(string pathToTarget)
    {
        FileSystem.Directory.CreateSymbolicLink(FullName, pathToTarget);
    }
#endif

    /// <inheritdoc />
    public override void Delete()
    {
        mockFileDataAccessor.Directory.Delete(directoryPath);
        refreshOnNextRead = true;
    }

    /// <inheritdoc />
    public override void Refresh()
    {
        var mockFileData = mockFileDataAccessor.GetFile(directoryPath) ?? MockFileData.NullObject;
        cachedMockFileData = mockFileData.Clone();
    }

#if FEATURE_CREATE_SYMBOLIC_LINK
    /// <inheritdoc />
    public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
    {
        return FileSystem.Directory.ResolveLinkTarget(FullName, returnFinalTarget);
    }
#endif

    /// <inheritdoc />
    public override FileAttributes Attributes
    {
        get { return GetMockFileDataForRead().Attributes; }
        set { GetMockFileDataForWrite().Attributes = value | FileAttributes.Directory; }
    }

    /// <inheritdoc />
    public override DateTime CreationTime
    {
        get { return GetMockFileDataForRead().CreationTime.LocalDateTime; }
        set { GetMockFileDataForWrite().CreationTime = value; }
    }

    /// <inheritdoc />
    public override DateTime CreationTimeUtc
    {
        get { return GetMockFileDataForRead().CreationTime.UtcDateTime; }
        set { GetMockFileDataForWrite().CreationTime = value; }
    }

    /// <inheritdoc />
    public override bool Exists
    {
        get {
            var mockFileData = GetMockFileDataForRead();
            return (int)mockFileData.Attributes != -1 && mockFileData.IsDirectory;
        }
    }

    /// <inheritdoc />
    public override string Extension
    {
        get
        {
            // System.IO.Path.GetExtension does only string manipulation,
            // so it's safe to delegate.
            return Path.GetExtension(directoryPath);
        }
    }

    /// <inheritdoc />
    public override string FullName
    {
        get
        {
            var root = mockFileDataAccessor.Path.GetPathRoot(directoryPath);

            if (mockFileDataAccessor.StringOperations.Equals(directoryPath, root))
            {
                // drives have the trailing slash
                return directoryPath;
            }

            // directories do not have a trailing slash
            return directoryPath.TrimEnd('\\').TrimEnd('/');
        }
    }

    /// <inheritdoc />
    public override DateTime LastAccessTime
    {
        get { return GetMockFileDataForRead().LastAccessTime.LocalDateTime; }
        set { GetMockFileDataForWrite().LastAccessTime = value; }
    }

    /// <inheritdoc />
    public override DateTime LastAccessTimeUtc
    {
        get { return GetMockFileDataForRead().LastAccessTime.UtcDateTime; }
        set { GetMockFileDataForWrite().LastAccessTime = value; }
    }

    /// <inheritdoc />
    public override DateTime LastWriteTime
    {
        get { return GetMockFileDataForRead().LastWriteTime.LocalDateTime; }
        set { GetMockFileDataForWrite().LastWriteTime = value; }
    }

    /// <inheritdoc />
    public override DateTime LastWriteTimeUtc
    {
        get { return GetMockFileDataForRead().LastWriteTime.UtcDateTime; }
        set { GetMockFileDataForWrite().LastWriteTime = value; }
    }

#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET
    /// <inheritdoc />
    public override string LinkTarget
    {
        get { return GetMockFileDataForRead().LinkTarget; }
    }
#endif

    /// <inheritdoc />
    public override string Name
    {
        get
        {
            var mockPath = new MockPath(mockFileDataAccessor);
            return string.Equals(mockPath.GetPathRoot(directoryPath), directoryPath) ? directoryPath : mockPath.GetFileName(directoryPath.TrimEnd(mockFileDataAccessor.Path.DirectorySeparatorChar));
        }
    }

    /// <inheritdoc />
    public override void Create()
    {
        mockFileDataAccessor.Directory.CreateDirectory(FullName);
        refreshOnNextRead = true;
    }
        
    /// <inheritdoc />
    public override IDirectoryInfo CreateSubdirectory(string path)
    {
        return mockFileDataAccessor.Directory.CreateDirectory(Path.Combine(FullName, path));
    }

    /// <inheritdoc />
    public override void Delete(bool recursive)
    {
        mockFileDataAccessor.Directory.Delete(directoryPath, recursive);
        refreshOnNextRead = true;
    }

    /// <inheritdoc />
    public override IEnumerable<IDirectoryInfo> EnumerateDirectories()
    {
        return GetDirectories();
    }

    /// <inheritdoc />
    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern)
    {
        return GetDirectories(searchPattern);
    }

    /// <inheritdoc />
    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption)
    {
        return GetDirectories(searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return GetDirectories(searchPattern, enumerationOptions);
    }
#endif

    /// <inheritdoc />
    public override IEnumerable<IFileInfo> EnumerateFiles()
    {
        return GetFiles();
    }

    /// <inheritdoc />
    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern)
    {
        return GetFiles(searchPattern);
    }

    /// <inheritdoc />
    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption)
    {
        return GetFiles(searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return GetFiles(searchPattern, enumerationOptions);
    }
#endif

    /// <inheritdoc />
    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos()
    {
        return GetFileSystemInfos();
    }

    /// <inheritdoc />
    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern)
    {
        return GetFileSystemInfos(searchPattern);
    }

    /// <inheritdoc />
    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption)
    {
        return GetFileSystemInfos(searchPattern, searchOption);
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return GetFileSystemInfos(searchPattern, enumerationOptions);
    }
#endif
        
    /// <inheritdoc />
    public override IDirectoryInfo[] GetDirectories()
    {
        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath));
    }

    /// <inheritdoc />
    public override IDirectoryInfo[] GetDirectories(string searchPattern)
    {
        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern));
    }

    /// <inheritdoc />
    public override IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption)
    {
        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern, searchOption));
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IDirectoryInfo[] GetDirectories(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern, enumerationOptions));
    }
#endif

    private DirectoryInfoBase[] ConvertStringsToDirectories(IEnumerable<string> paths)
    {
        return paths
            .Select(path => new MockDirectoryInfo(mockFileDataAccessor, path))
            .Cast<DirectoryInfoBase>()
            .ToArray();
    }

    /// <inheritdoc />
    public override IFileInfo[] GetFiles()
    {
        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName));
    }

    /// <inheritdoc />
    public override IFileInfo[] GetFiles(string searchPattern)
    {
        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern));
    }

    /// <inheritdoc />
    public override IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption)
    {
        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern, searchOption));
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IFileInfo[] GetFiles(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern, enumerationOptions));
    }
#endif

    IFileInfo[] ConvertStringsToFiles(IEnumerable<string> paths)
    {
        return paths
            .Select(mockFileDataAccessor.FileInfo.New)
            .ToArray();
    }

    /// <inheritdoc />
    public override IFileSystemInfo[] GetFileSystemInfos()
    {
        return GetFileSystemInfos("*");
    }

    /// <inheritdoc />
    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern)
    {
        return GetFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly);
    }

    /// <inheritdoc />
    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption)
    {
        return GetDirectories(searchPattern, searchOption).OfType<IFileSystemInfo>().Concat(GetFiles(searchPattern, searchOption)).ToArray();
    }

#if FEATURE_ENUMERATION_OPTIONS
    /// <inheritdoc />
    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)
    {
        return GetDirectories(searchPattern, enumerationOptions).OfType<IFileSystemInfo>().Concat(GetFiles(searchPattern, enumerationOptions)).ToArray();
    }
#endif

    /// <inheritdoc />
    public override void MoveTo(string destDirName)
    {
        mockFileDataAccessor.Directory.Move(directoryPath, destDirName);
        SetDirectoryPath(destDirName);
    }
        
    /// <inheritdoc />
    public override IDirectoryInfo Parent
    {
        get
        {
            return mockFileDataAccessor.Directory.GetParent(directoryPath);
        }
    }

    /// <inheritdoc />
    public override IDirectoryInfo Root
    {
        get
        {
            return new MockDirectoryInfo(mockFileDataAccessor, mockFileDataAccessor.Directory.GetDirectoryRoot(FullName));
        }
    }

    private MockFileData GetMockFileDataForRead()
    {
        if (refreshOnNextRead)
        {
            Refresh();
            refreshOnNextRead = false;
        }
        return cachedMockFileData;
    }

    private MockFileData GetMockFileDataForWrite()
    {
        refreshOnNextRead = true;
        return mockFileDataAccessor.GetFile(directoryPath)
               ?? throw CommonExceptions.CouldNotFindPartOfPath(directoryPath);
    }

    /// <inheritdoc />
    public override string ToString()
    {
        return originalPath;
    }

    /// <inheritdoc cref="IFileSystemAclSupport.GetAccessControl()" />
    [SupportedOSPlatform("windows")]
    public object GetAccessControl()
    {
        return GetMockDirectoryData().AccessControl;
    }

    /// <inheritdoc cref="IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)" />
    [SupportedOSPlatform("windows")]
    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)
    {
        return GetMockDirectoryData().AccessControl;
    }

    /// <inheritdoc cref="IFileSystemAclSupport.SetAccessControl(object)" />
    [SupportedOSPlatform("windows")]
    public void SetAccessControl(object value)
    {
        GetMockDirectoryData().AccessControl = value as DirectorySecurity;
    }
        
    private void SetDirectoryPath(string path)
    {
        originalPath = path;
        path = mockFileDataAccessor.Path.GetFullPath(path);

        path = path.TrimSlashes();
        if (XFS.IsWindowsPlatform())
        {
            path = path.TrimEnd(' ');
        }
        this.directoryPath = path;
    }

    private MockDirectoryData GetMockDirectoryData()
    {
        return mockFileDataAccessor.GetFile(directoryPath) as MockDirectoryData
               ?? throw CommonExceptions.CouldNotFindPartOfPath(directoryPath);
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs
================================================
namespace System.IO.Abstractions.TestingHelpers;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDirectoryInfoFactory : IDirectoryInfoFactory
{
    readonly IMockFileDataAccessor mockFileSystem;

    /// <inheritdoc />
    public MockDirectoryInfoFactory(IMockFileDataAccessor mockFileSystem)
    {
        this.mockFileSystem = mockFileSystem;
    }

    /// <inheritdoc />
    public IFileSystem FileSystem
        => mockFileSystem;

    /// <inheritdoc />
    public IDirectoryInfo New(string path)
    {
        return new MockDirectoryInfo(mockFileSystem, path);
    }

    /// <inheritdoc />
    public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)
    {
        if (directoryInfo == null)
        {
            return null;
        }

        return new MockDirectoryInfo(mockFileSystem, directoryInfo.FullName);
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveData.cs
================================================

namespace System.IO.Abstractions.TestingHelpers;

/// <summary>
/// The class represents the associated data of a drive.
/// </summary>
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDriveData
{
    /// <summary>
    /// Initializes a new instance of the <see cref="MockDriveData"/> class.
    /// </summary>
    public MockDriveData()
    {
        IsReady = true;
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="MockDriveData"/> class by copying the given <see cref="MockDriveData"/>.
    /// </summary>
    /// <param name="template">The template instance.</param>
    /// <exception cref="ArgumentNullException">Thrown if <paramref name="template"/> is <see langword="null"/>.</exception>
    public MockDriveData(MockDriveData template)
    {
        if (template == null)
        {
            throw new ArgumentNullException(nameof(template));
        }

        AvailableFreeSpace = template.AvailableFreeSpace;
        DriveFormat = template.DriveFormat;
        DriveType = template.DriveType;
        IsReady = template.IsReady;
        TotalFreeSpace = template.TotalFreeSpace;
        TotalSize = template.TotalSize;
        VolumeLabel = template.VolumeLabel;
    }

    /// <summary>
    /// Gets or sets the amount of available free space of the <see cref="MockDriveData"/>, in bytes.
    /// </summary>
    public long AvailableFreeSpace { get; set; }

    /// <summary>
    /// Gets or sets the name of the file system of the <see cref="MockDriveData"/>, such as NTFS or FAT32.
    /// </summary>
    public string DriveFormat { get; set; }

    /// <summary>
    /// Gets or sets the drive type of the <see cref="MockDriveData"/>, such as CD-ROM, removable, network, or fixed.
    /// </summary>
    public DriveType DriveType { get; set; }

    /// <summary>
    /// Gets or sets the value that indicates whether the <see cref="MockDriveData"/> is ready.
    /// </summary>
    public bool IsReady { get; set; }

    /// <summary>
    /// Gets or sets the total amount of free space available on the <see cref="MockDriveData"/>, in bytes.
    /// </summary>
    public long TotalFreeSpace { get; set; }

    /// <summary>
    /// Gets or sets the total size of storage space on the <see cref="MockDriveData"/>, in bytes.
    /// </summary>
    public long TotalSize { get; set; }

    /// <summary>
    /// Gets or sets the volume label of the <see cref="MockDriveData"/>.
    /// </summary>
    public string VolumeLabel { get; set; }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfo.cs
================================================
namespace System.IO.Abstractions.TestingHelpers;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDriveInfo : DriveInfoBase
{
    private readonly IMockFileDataAccessor mockFileDataAccessor;
    private readonly string name;

    /// <inheritdoc />
    public MockDriveInfo(IMockFileDataAccessor mockFileDataAccessor, string name) : base(mockFileDataAccessor?.FileSystem)
    {
        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));
        this.name = mockFileDataAccessor.PathVerifier.NormalizeDriveName(name);
    }

    /// <inheritdoc />
    public override long AvailableFreeSpace
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.AvailableFreeSpace;
        }
    }

    /// <inheritdoc />
    public override string DriveFormat
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.DriveFormat;
        }
    }

    /// <inheritdoc />
    public override DriveType DriveType
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.DriveType;
        }
    }

    /// <inheritdoc />
    public override bool IsReady
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.IsReady;
        }
    }

    /// <inheritdoc />
    public override string Name
    {
        get { return name; }
    }

    /// <inheritdoc />
    public override IDirectoryInfo RootDirectory
    {
        get
        {
            return mockFileDataAccessor.DirectoryInfo.New(Name);
        }
    }

    /// <inheritdoc />
    public override long TotalFreeSpace
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.TotalFreeSpace;
        }
    }

    /// <inheritdoc />
    public override long TotalSize
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.TotalSize;
        }
    }

    /// <inheritdoc />
    public override string VolumeLabel
    {
        get
        {
            var mockDriveData = GetMockDriveData();
            return mockDriveData.VolumeLabel;
        }
        set
        {
            var mockDriveData = GetMockDriveData();
            mockDriveData.VolumeLabel = value;
        }
    }

    /// <inheritdoc />
    public override string ToString()
    {
        return Name;
    }

    private MockDriveData GetMockDriveData()
    {
        return mockFileDataAccessor.GetDrive(name)
               ?? throw CommonExceptions.FileNotFound(name);
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfoFactory.cs
================================================
using System.Collections.Generic;

namespace System.IO.Abstractions.TestingHelpers;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public class MockDriveInfoFactory : IDriveInfoFactory
{
    private readonly IMockFileDataAccessor mockFileSystem;

    /// <inheritdoc />
    public MockDriveInfoFactory(IMockFileDataAccessor mockFileSystem)
    {
        this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));
    }

    /// <inheritdoc />
    public IFileSystem FileSystem
        => mockFileSystem;

    /// <inheritdoc />
    public IDriveInfo[] GetDrives()
    {
        var result = new List<DriveInfoBase>();
        foreach (string driveLetter in mockFileSystem.AllDrives)
        {
            try
            {
                var mockDriveInfo = new MockDriveInfo(mockFileSystem, driveLetter);
                result.Add(mockDriveInfo);
            }
            catch (ArgumentException)
            {
                // invalid drives should be ignored
            }
        }

        return result.ToArray();
    }

    /// <inheritdoc />
    public IDriveInfo New(string driveName)
    {
        var drive = mockFileSystem.Path.GetPathRoot(driveName);

        return new MockDriveInfo(mockFileSystem, drive);
    }

    /// <inheritdoc />
    public IDriveInfo Wrap(DriveInfo driveInfo)
    {
        if (driveInfo == null)
        {
            return null;
        }

        return New(driveInfo.Name);
    }

    private string NormalizeDriveName(string driveName)
    {
        if (driveName.Length == 3 && mockFileSystem.StringOperations.EndsWith(driveName, @":\"))
        {
            return mockFileSystem.StringOperations.ToUpper(driveName[0]) + @":\";
        }

        if (mockFileSystem.StringOperations.StartsWith(driveName, @"\\"))
        {
            return null;
        }

        return driveName;
    }

    private class DriveEqualityComparer : IEqualityComparer<string>
    {
        private readonly IMockFileDataAccessor mockFileSystem;

        public DriveEqualityComparer(IMockFileDataAccessor mockFileSystem)
        {
            this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));
        }

        public bool Equals(string x, string y)
        {
            return ReferenceEquals(x, y) ||
                   (HasDrivePrefix(x) && HasDrivePrefix(y) && mockFileSystem.StringOperations.Equals(x[0], y[0]));
        }

        private static bool HasDrivePrefix(string x)
        {
            return x != null && x.Length >= 2 && x[1] == ':';
        }

        public int GetHashCode(string obj)
        {
            return mockFileSystem.StringOperations.ToUpper(obj).GetHashCode();
        }
    }
}

================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.Async.cs
================================================
#if FEATURE_ASYNC_FILE

using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace System.IO.Abstractions.TestingHelpers
{
    partial class MockFile
    {
#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.AppendAllBytesAsync(string,byte[],CancellationToken)"/>
        public override Task AppendAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            AppendAllBytes(path, bytes);
            return Task.CompletedTask;
        }

        /// <inheritdoc cref="IFile.AppendAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)"/>
        public override Task AppendAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)
        {
            return AppendAllBytesAsync(path, bytes.ToArray(), cancellationToken);
        }
#endif
        /// <inheritdoc />
        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default) =>
            AppendAllLinesAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);

        /// <inheritdoc />
        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            AppendAllLines(path, contents, encoding);
            return Task.CompletedTask;
        }

        /// <inheritdoc />
        public override Task AppendAllTextAsync(string path, string contents, CancellationToken cancellationToken = default) =>
            AppendAllTextAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);


        /// <inheritdoc />
        public override Task AppendAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            AppendAllText(path, contents, encoding);
            return Task.CompletedTask;
        }
        
#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)"/>
        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)
        {
            return AppendAllTextAsync(path, contents.ToString(), cancellationToken);
        }

        /// <inheritdoc cref="IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)"/>
        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,
            CancellationToken cancellationToken = default)
        {
            return AppendAllTextAsync(path, contents.ToString(), encoding, cancellationToken);
        }
#endif

        /// <inheritdoc />
        public override Task<byte[]> ReadAllBytesAsync(string path, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            return Task.FromResult(ReadAllBytes(path));
        }

        /// <inheritdoc />
        public override Task<string[]> ReadAllLinesAsync(string path, CancellationToken cancellationToken = default) =>
            ReadAllLinesAsync(path, MockFileData.DefaultEncoding, cancellationToken);

        /// <inheritdoc />

        public override Task<string[]> ReadAllLinesAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            return Task.FromResult(ReadAllLines(path, encoding));
        }

        /// <inheritdoc />
        public override Task<string> ReadAllTextAsync(string path, CancellationToken cancellationToken = default) =>
            ReadAllTextAsync(path, MockFileData.DefaultEncoding, cancellationToken);


        /// <inheritdoc />
        public override Task<string> ReadAllTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            return Task.FromResult(ReadAllText(path, encoding));
        }

#if FEATURE_READ_LINES_ASYNC
        /// <inheritdoc />
        public override IAsyncEnumerable<string> ReadLinesAsync(string path, CancellationToken cancellationToken = default) =>
            ReadLinesAsync(path, MockFileData.DefaultEncoding, cancellationToken);

        /// <inheritdoc />
        public override async IAsyncEnumerable<string> ReadLinesAsync(string path, Encoding encoding,
            [EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            var lines = await ReadAllLinesAsync(path, encoding, cancellationToken);
            foreach (var line in lines)
                yield return line;
        }
#endif

        /// <inheritdoc />
        public override Task WriteAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            WriteAllBytes(path, bytes);
            return Task.CompletedTask;
        }
        
#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.WriteAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)"/>
        public override Task WriteAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)
        {
            return WriteAllBytesAsync(path, bytes.ToArray(), cancellationToken);
        }
#endif

        /// <inheritdoc />
        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default) =>
            WriteAllLinesAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);

        /// <inheritdoc />
        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            WriteAllLines(path, contents, encoding);
            return Task.CompletedTask;
        }

        /// <inheritdoc />
        public override Task WriteAllTextAsync(string path, string contents, CancellationToken cancellationToken = default) =>
            WriteAllTextAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);

        /// <inheritdoc />
        public override Task WriteAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            WriteAllText(path, contents, encoding);
            return Task.CompletedTask;
        }
        
#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)"/>
        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)
        {
            return WriteAllTextAsync(path, contents.ToString(), cancellationToken);
        }

        /// <inheritdoc cref="IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)"/>
        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,
            CancellationToken cancellationToken = default)
        {
            return WriteAllTextAsync(path, contents.ToString(), encoding, cancellationToken);
        }
#endif
    }
}

#endif


================================================
FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs
================================================
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using Microsoft.Win32.SafeHandles;

namespace System.IO.Abstractions.TestingHelpers;

using XFS = MockUnixSupport;

/// <inheritdoc />
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
public partial class MockFile : FileBase
{
    private readonly IMockFileDataAccessor mockFileDataAccessor;

    /// <inheritdoc />
    public MockFile(IMockFileDataAccessor mockFileDataAccessor) : base(mockFileDataAccessor?.FileSystem)
    {
        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));
    }

#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.AppendAllBytes(string,byte[])"/>
        public override void AppendAllBytes(string path, byte[] bytes)
        {
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

            if (!mockFileDataAccessor.FileExists(path))
            {
                VerifyDirectoryExists(path);
                mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(new MockFileData(bytes), TimeAdjustments.All));
            }
            else
            {
                var file = mockFileDataAccessor.GetFile(path);
                file.CheckFileAccess(path, FileAccess.Write);
                mockFileDataAccessor.AdjustTimes(file, TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);
                file.Contents = file.Contents.Concat(bytes).ToArray();
            }
        }

        /// <inheritdoc cref="IFile.AppendAllBytes(string,ReadOnlySpan{byte})"/>
        public override void AppendAllBytes(string path, ReadOnlySpan<byte> bytes)
        {
            AppendAllBytes(path, bytes.ToArray());
        }
#endif

    /// <inheritdoc />
    public override void AppendAllLines(string path, IEnumerable<string> contents)
    {
        AppendAllLines(path, contents, MockFileData.DefaultEncoding);
    }

    /// <inheritdoc />
    public override void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
        VerifyValueIsNotNull(contents, nameof(contents));
        VerifyValueIsNotNull(encoding, nameof(encoding));

        var concatContents = contents.Aggregate("", (a, b) => a + b + Environment.NewLine);
        AppendAllText(path, concatContents, encoding);
    }

    /// <inheritdoc />
    public override void AppendAllText(string path, string contents)
    {
        AppendAllText(path, contents, MockFileData.DefaultEncoding);
    }

    /// <inheritdoc />
    public override void AppendAllText(string path, string contents, Encoding encoding)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        if (encoding == null)
        {
            throw new ArgumentNullException(nameof(encoding));
        }

        if (!mockFileDataAccessor.FileExists(path))
        {
            VerifyDirectoryExists(path);
            mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(new MockFileData(contents, encoding), TimeAdjustments.All));
        }
        else
        {
            var file = mockFileDataAccessor.GetFile(path);
            file.CheckFileAccess(path, FileAccess.Write);
            mockFileDataAccessor.AdjustTimes(file, TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);
            var bytesToAppend = encoding.GetBytes(contents);
            file.Contents = file.Contents.Concat(bytesToAppend).ToArray();
        }
    }

#if FEATURE_FILE_SPAN
        /// <inheritdoc cref="IFile.AppendAllText(string,ReadOnlySpan{char})"/>
        public override void AppendAllText(string path, ReadOnlySpan<char> contents)
        {
            AppendAllText(path, contents.ToString());
        }

        /// <inheritdoc cref="IFile.AppendAllText(string,ReadOnlySpan{char},Encoding)"/>
        public override void AppendAllText(string path, ReadOnlySpan<char> contents, Encoding encoding)
        {
            AppendAllText(path, contents.ToString(), encoding);
        }
#endif

    /// <inheritdoc />
    public override StreamWriter AppendText(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        if (mockFileDataAccessor.FileExists(path))
        {
            StreamWriter sw = new StreamWriter(OpenWrite(path));
            sw.BaseStream.Seek(0, SeekOrigin.End); //push the stream pointer at the end for append.
            return sw;
        }

        return new StreamWriter(Create(path));
    }

    /// <inheritdoc />
    public override void Copy(string sourceFileName, string destFileName)
    {
        Copy(sourceFileName, destFileName, false);
    }

    /// <inheritdoc />
    public override void Copy(string sourceFileName, string destFileName, bool overwrite)
    {
        if (sourceFileName == null)
        {
            throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));
        }

        if (destFileName == null)
        {
            throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));
        }

        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));

        if (!Exists(sourceFileName))
        {
            throw CommonExceptions.FileNotFound(sourceFileName);
        }

        VerifyDirectoryExists(destFileName);

        var fileExists = mockFileDataAccessor.FileExists(destFileName);
        if (fileExists)
        {
            if (!overwrite)
            {
                throw CommonExceptions.FileAlreadyExists(destFileName);
            }

            if (string.Equals(sourceFileName, destFileName, StringComparison.OrdinalIgnoreCase) && XFS.IsWindowsPlatform())
            {
                throw CommonExceptions.ProcessCannotAccessFileInUse(destFileName);
            }

            mockFileDataAccessor.RemoveFile(destFileName);
        }

        var sourceFileData = mockFileDataAccessor.GetFile(sourceFileName);
        sourceFileData.CheckFileAccess(sourceFileName, FileAccess.Read);
        var destFileData = new MockFileData(sourceFileData);
        mockFileDataAccessor.AdjustTimes(destFileData, TimeAdjustments.CreationTime | TimeAdjustments.LastAccessTime);
        mockFileDataAccessor.AddFile(destFileName, destFileData);
    }

    /// <inheritdoc />
    public override FileSystemStream Create(string path) =>
        Create(path, 4096);

    /// <inheritdoc />
    public override FileSystemStream Create(string path, int bufferSize) =>
        Create(path, bufferSize, FileOptions.None);

    /// <inheritdoc />
    public override FileSystemStream Create(string path, int bufferSize, FileOptions options) =>
        CreateInternal(path, FileAccess.ReadWrite, options);

    private FileSystemStream CreateInternal(string path, FileAccess access, FileOptions options)
    {
        if (path == null)
        {
            throw new ArgumentNullException(nameof(path), "Path cannot be null.");
        }

        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));
        VerifyDirectoryExists(path);

        var mockFileData = new MockFileData(new byte[0]);
        mockFileDataAccessor.AdjustTimes(mockFileData, TimeAdjustments.All);
        mockFileDataAccessor.AddFile(path, mockFileData);
        return OpenInternal(path, FileMode.Open, access, options);
    }

#if FEATURE_CREATE_SYMBOLIC_LINK
        /// <inheritdoc />
        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)
        {
            if (path == null)
            {
                throw CommonExceptions.FilenameCannotBeNull(nameof(path));
            }

            if (pathToTarget == null)
            {
                throw CommonExceptions.FilenameCannotBeNull(nameof(pathToTarget));
            }

            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(pathToTarget, nameof(pathToTarget));

            if (Exists(path))
            {
                throw CommonExceptions.FileAlreadyExists(nameof(path));
            }

            VerifyDirectoryExists(path);

            var fileExists = mockFileDataAccessor.FileExists(pathToTarget);
            if (!fileExists)
            {
                throw CommonExceptions.FileNotFound(pathToTarget);
            }

            var sourceFileData = mockFileDataAccessor.GetFile(pathToTarget);
            sourceFileData.CheckFileAccess(pathToTarget, FileAccess.Read);
            var destFileData = new MockFileData(new byte[0]);
            mockFileDataAccessor.AdjustTimes(destFileData, TimeAdjustments.CreationTime | TimeAdjustments.LastAccessTime);
            destFileData.LinkTarget = pathToTarget;
            mockFileDataAccessor.AddFile(path, destFileData);

            var mockFileInfo = new MockFileInfo(mockFileDataAccessor, path);
            mockFileInfo.Attributes |= FileAttributes.ReparsePoint;
            return mockFileInfo;
        }
#endif
    /// <inheritdoc />
    public override StreamWriter CreateText(string path)
    {
        return new StreamWriter(Create(path));
    }

    /// <inheritdoc />
    public override void Decrypt(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        new MockFileInfo(mockFileDataAccessor, path).Decrypt();
    }
    /// <inheritdoc />
    public override void Delete(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        // We mimic exact behavior of the standard File.Delete() method
        // which throws exception only if the folder does not exist,
        // but silently returns if deleting a non-existing file in an existing folder.
        VerifyDirectoryExists(path);

        var file = mockFileDataAccessor.GetFile(path);
        if (file != null && !file.AllowedFileShare.HasFlag(FileShare.Delete))
        {
            throw CommonExceptions.ProcessCannotAccessFileInUse(path);
        }

        if (file != null && file.IsDirectory)
        {
            throw new UnauthorizedAccessException($"Access to the path '{path}' is denied.");
        }

        mockFileDataAccessor.RemoveFile(path);
    }

    /// <inheritdoc />
    public override void Encrypt(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        new MockFileInfo(mockFileDataAccessor, path).Encrypt();
    }

    /// <inheritdoc />
    public override bool Exists(string path)
    {
        if (path == null)
        {
            return false;
        }

        if (path.Trim() == string.Empty)
        {
            return false;
        }

        //Not handling exceptions here so that mock behaviour is as similar as possible to System.IO.File.Exists (See #810)
        try
        {
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));

            var file = mockFileDataAccessor.GetFile(path);
            return file != null && !file.IsDirectory;
        }
        catch (ArgumentException) { }
        catch (NotSupportedException) { }
        catch (IOException) { }
        catch (UnauthorizedAccessException) { }

        return false;
    }

    /// <summary>
    /// Gets the <see cref="FileAttributes"/> of the file on the path.
    /// </summary>
    /// <param name="path">The path to the file.</param>
    /// <returns>The <see cref="FileAttributes"/> of the file on the path.</returns>
    /// <exception cref="ArgumentException"><paramref name="path"/> is empty, contains only white spaces, or contains invalid characters.</exception>
    /// <exception cref="PathTooLongException">The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.</exception>
    /// <exception cref="NotSupportedException"><paramref name="path"/> is in an invalid format.</exception>
    /// <exception cref="FileNotFoundException"><paramref name="path"/> represents a file and is invalid, such as being on an unmapped drive, or the file cannot be found.</exception>
    /// <exception cref="DirectoryNotFoundException"><paramref name="path"/> represents a directory and is invalid, such as being on an unmapped drive, or the directory cannot be found.</exception>
    /// <exception cref="IOException">This file is being used by another process.</exception>
    /// <exception cref="UnauthorizedAccessException">The caller does not have the required permission.</exception>
    public override FileAttributes GetAttributes(string path)
    {
        if (path != null && path.Length == 0)
        {
            throw CommonExceptions.PathIsNotOfALegalForm(nameof(path));
        }

        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        var possibleFileData = mockFileDataAccessor.GetFile(path);
        FileAttributes result;
        if (possibleFileData != null)
        {
            result = possibleFileData.Attributes;
        }
        else
        {
            var directoryInfo = mockFileDataAccessor.DirectoryInfo.New(path);
            if (directoryInfo.Exists)
            {
                result = directoryInfo.Attributes;
            }
            else
            {
                VerifyDirectoryExists(path);

                throw CommonExceptions.FileNotFound(path);
            }
        }

        return result;
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override FileAttributes GetAttributes(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetCreationTime(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.CreationTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetCreationTime(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetCreationTimeUtc(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.CreationTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetCreationTimeUtc(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetLastAccessTime(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.LastAccessTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetLastAccessTime(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetLastAccessTimeUtc(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.LastAccessTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetLastWriteTime(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.LastWriteTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetLastWriteTime(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    /// <inheritdoc />
    public override DateTime GetLastWriteTimeUtc(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return GetTimeFromFile(path, data => data.LastWriteTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);
    }

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

#if FEATURE_UNIX_FILE_MODE
        /// <inheritdoc />
        public override UnixFileMode GetUnixFileMode(string path)
        {
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

            if (!mockFileDataAccessor.FileExists(path))
            {
                throw CommonExceptions.FileNotFound(path);
            }
            
            var mockFileData = mockFileDataAccessor.GetFile(path);
            return mockFileData.UnixMode;
        }
#endif

#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE
        /// <inheritdoc />
        public override UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle)
        {
            throw CommonExceptions.NotImplemented();
        }
#endif

    private DateTime GetTimeFromFile(string path, Func<MockFileData, DateTime> existingFileFunction, Func<DateTime> nonExistingFileFunction)
    {
        DateTime result;
        MockFileData file = mockFileDataAccessor.GetFile(path);
        if (file != null)
        {
            result = existingFileFunction(file);
        }
        else
        {
            result = nonExistingFileFunction();
        }

        return result;
    }

    /// <inheritdoc />
    public override void Move(string sourceFileName, string destFileName)
    {
        if (sourceFileName == null)
        {
            throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));
        }

        if (destFileName == null)
        {
            throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));
        }

        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));

        var sourceFile = mockFileDataAccessor.GetFile(sourceFileName);

        if (sourceFile == null)
        {
            throw CommonExceptions.FileNotFound(sourceFileName);
        }

        if (!sourceFile.AllowedFileShare.HasFlag(FileShare.Delete))
        {
            throw CommonExceptions.ProcessCannotAccessFileInUse();
        }

        VerifyDirectoryExists(destFileName);

        if (mockFileDataAccessor.GetFile(destFileName) != null)
        {
            if (mockFileDataAccessor.StringOperations.Equals(destFileName, sourceFileName))
            {
                if (XFS.IsWindowsPlatform())
                {
                    mockFileDataAccessor.RemoveFile(sourceFileName);
                    mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime), false);
                }
                return;
            }
            else
            {
                throw new IOException("A file can not be created if it already exists.");
            }
        }

        mockFileDataAccessor.RemoveFile(sourceFileName, false);
        mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime), false);
    }

#if FEATURE_FILE_MOVE_WITH_OVERWRITE
        /// <inheritdoc />
        public override void Move(string sourceFileName, string destFileName, bool overwrite)
        {
            if (sourceFileName == null)
            {
                throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));
            }

            if (destFileName == null)
            {
                throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));
            }

            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));
            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));

            if (mockFileDataAccessor.GetFile(destFileName) != null)
            {
                if (destFileName.Equals(sourceFileName))
                {
                    return;
                }
                else if (!overwrite)
                {
                    throw new IOException("A file can not be created if it already exists.");
                }
            }


            var sourceFile = mockFileDataAccessor.GetFile(sourceFileName);

            if (sourceFile == null)
            {
                throw CommonExceptions.FileNotFound(sourceFileName);
            }
            if (!sourceFile.AllowedFileShare.HasFlag(FileShare.Delete))
            {
                throw CommonExceptions.ProcessCannotAccessFileInUse();
            }
            VerifyDirectoryExists(destFileName);
            
            mockFileDataAccessor.RemoveFile(sourceFileName);
            mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime));
        }
#endif

    /// <inheritdoc />
    public override FileSystemStream Open(string path, FileMode mode)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return Open(path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None);
    }

    /// <inheritdoc />
    public override FileSystemStream Open(string path, FileMode mode, FileAccess access)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return Open(path, mode, access, FileShare.None);
    }

    /// <inheritdoc />
    public override FileSystemStream Open(string path, FileMode mode, FileAccess access, FileShare share) =>
        OpenInternal(path, mode, access, FileOptions.None);

#if FEATURE_FILESTREAM_OPTIONS
        /// <inheritdoc />
        public override FileSystemStream Open(string path, FileStreamOptions options)
        {
            return OpenInternal(path, options.Mode, options.Access, options.Options);
        }
#endif

    private FileSystemStream OpenInternal(
        string path,
        FileMode mode,
        FileAccess access,
        FileOptions options)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        bool exists = mockFileDataAccessor.FileExists(path);

        if (mode == FileMode.CreateNew && exists)
        {
            throw CommonExceptions.FileAlreadyExists(path);
        }

        if ((mode == FileMode.Open || mode == FileMode.Truncate) && !exists)
        {
            throw CommonExceptions.FileNotFound(path);
        }

        if (!exists || mode == FileMode.CreateNew)
        {
            return CreateInternal(path, access, options);
        }

        if (mode == FileMode.Create || mode == FileMode.Truncate)
        {
            Delete(path);
            return CreateInternal(path, access, options);
        }

        var mockFileData = mockFileDataAccessor.GetFile(path);
        mockFileData.CheckFileAccess(path, access);
        var timeAdjustments = TimeAdjustments.LastAccessTime;
        if (access.HasFlag(FileAccess.Write))
        {
            timeAdjustments |= TimeAdjustments.LastWriteTime;
        }
        mockFileDataAccessor.AdjustTimes(mockFileData, timeAdjustments);

        return new MockFileStream(mockFileDataAccessor, path, mode, access, FileShare.Read, options);
    }

    /// <inheritdoc />
    public override FileSystemStream OpenRead(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
    }

    /// <inheritdoc />
    public override StreamReader OpenText(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        return new StreamReader(OpenRead(path));
    }

    /// <inheritdoc />
    public override FileSystemStream OpenWrite(string path) => OpenWriteInternal(path, FileOptions.None);

    private FileSystemStream OpenWriteInternal(string path, FileOptions options)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
        return OpenInternal(path, FileMode.OpenOrCreate, FileAccess.Write, options);
    }

    /// <inheritdoc />
    public override byte[] ReadAllBytes(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        if (!mockFileDataAccessor.FileExists(path))
        {
            throw CommonExceptions.FileNotFound(path);
        }
        mockFileDataAccessor.GetFile(path).CheckFileAccess(path, FileAccess.Read);
        var fileData = mockFileDataAccessor.GetFile(path);
        mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);
        return fileData.Contents.ToArray();
    }

    /// <inheritdoc />
    public override string[] ReadAllLines(string path)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        if (!mockFileDataAccessor.FileExists(path))
        {
            throw CommonExceptions.FileNotFound(path);
        }
        var fileData = mockFileDataAccessor.GetFile(path);
        fileData.CheckFileAccess(path, FileAccess.Read);
        mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);

        return fileData
            .TextContents
            .SplitLines();
    }

    /// <inheritdoc />
    public override string[] ReadAllLines(string path, Encoding encoding)
    {
        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

        if (encoding == null)
        {
            throw new ArgumentNullException(nameof(encoding));
        }

        if (!mockFileDataAccessor.FileExists(pat
Download .txt
gitextract_mxqetcdw/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── copilot-instructions.md
│   ├── mergify.yml
│   └── workflows/
│       ├── build.yml
│       └── ci.yml
├── .gitignore
├── .idea/
│   └── .idea.System.IO.Abstractions/
│       └── .idea/
│           ├── .gitignore
│           ├── encodings.xml
│           ├── indexLayout.xml
│           └── vcs.xml
├── .nuke/
│   ├── build.schema.json
│   └── parameters.json
├── .remarkrc.yaml
├── .vscode/
│   └── extensions.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── Pipeline/
│   ├── .editorconfig
│   ├── Build.ApiChecks.cs
│   ├── Build.CodeAnalysis.cs
│   ├── Build.CodeCoverage.cs
│   ├── Build.Compile.cs
│   ├── Build.Pack.cs
│   ├── Build.UnitTest.cs
│   ├── Build.cs
│   ├── Build.csproj
│   ├── Build.csproj.DotSettings
│   ├── BuildExtensions.cs
│   ├── Configuration.cs
│   ├── Directory.Build.props
│   └── Directory.Build.targets
├── README.md
├── StrongName.snk
├── System.IO.Abstractions.slnx
├── benchmarks/
│   └── TestableIO.System.IO.Abstractions.Benchmarks/
│       ├── FileSystemAbstractionBenchmarks.cs
│       ├── MockFileSystemBenchmarks.cs
│       ├── Program.cs
│       ├── Properties/
│       │   └── launchSettings.json
│       ├── Support/
│       │   ├── DirectorySupport.cs
│       │   ├── DirectorySupportStatic.cs
│       │   ├── FileSupport.cs
│       │   └── FileSupportStatic.cs
│       └── TestableIO.System.IO.Abstractions.Benchmarks.csproj
├── build.cmd
├── build.ps1
├── build.sh
├── global.json
├── nuget.config
├── renovate.json5
├── src/
│   ├── Directory.Build.props
│   ├── System.IO.Abstractions/
│   │   └── System.IO.Abstractions.csproj
│   ├── System.IO.Abstractions.TestingHelpers/
│   │   └── System.IO.Abstractions.TestingHelpers.csproj
│   ├── TestableIO.System.IO.Abstractions/
│   │   ├── AssemblyRedirects.cs
│   │   └── TestableIO.System.IO.Abstractions.csproj
│   ├── TestableIO.System.IO.Abstractions.TestingHelpers/
│   │   ├── CommonExceptions.cs
│   │   ├── FileHandles.cs
│   │   ├── IMockFileDataAccessor.cs
│   │   ├── MockDirectory.cs
│   │   ├── MockDirectoryData.cs
│   │   ├── MockDirectoryInfo.cs
│   │   ├── MockDirectoryInfoFactory.cs
│   │   ├── MockDriveData.cs
│   │   ├── MockDriveInfo.cs
│   │   ├── MockDriveInfoFactory.cs
│   │   ├── MockFile.Async.cs
│   │   ├── MockFile.cs
│   │   ├── MockFileData.cs
│   │   ├── MockFileInfo.cs
│   │   ├── MockFileInfoFactory.cs
│   │   ├── MockFileStream.cs
│   │   ├── MockFileStreamFactory.cs
│   │   ├── MockFileSystem.cs
│   │   ├── MockFileSystemOptions.cs
│   │   ├── MockFileSystemWatcherFactory.cs
│   │   ├── MockFileVersionInfo.cs
│   │   ├── MockFileVersionInfoFactory.cs
│   │   ├── MockPath.cs
│   │   ├── MockUnixSupport.cs
│   │   ├── PathVerifier.cs
│   │   ├── Polyfills/
│   │   │   └── SupportedOSPlatformAttribute.cs
│   │   ├── ProductVersionParser.cs
│   │   ├── Properties/
│   │   │   └── Resources.resx
│   │   ├── StringExtensions.cs
│   │   ├── StringOperations.cs
│   │   ├── StringResources.cs
│   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers.csproj
│   │   └── TimeAdjustments.cs
│   └── TestableIO.System.IO.Abstractions.Wrappers/
│       ├── Converters.cs
│       ├── DirectoryAclExtensions.cs
│       ├── DirectoryBase.cs
│       ├── DirectoryInfoAclExtensions.cs
│       ├── DirectoryInfoBase.cs
│       ├── DirectoryInfoFactory.cs
│       ├── DirectoryInfoWrapper.cs
│       ├── DirectoryWrapper.cs
│       ├── DriveInfoBase.cs
│       ├── DriveInfoFactory.cs
│       ├── DriveInfoWrapper.cs
│       ├── FileAclExtensions.cs
│       ├── FileBase.Async.cs
│       ├── FileBase.cs
│       ├── FileInfoAclExtensions.cs
│       ├── FileInfoBase.cs
│       ├── FileInfoFactory.cs
│       ├── FileInfoWrapper.cs
│       ├── FileStreamAclExtensions.cs
│       ├── FileStreamFactory.cs
│       ├── FileStreamWrapper.cs
│       ├── FileSystem.cs
│       ├── FileSystemBase.cs
│       ├── FileSystemInfoBase.cs
│       ├── FileSystemWatcherBase.cs
│       ├── FileSystemWatcherFactory.cs
│       ├── FileSystemWatcherWrapper.cs
│       ├── FileVersionInfoBase.cs
│       ├── FileVersionInfoFactory.cs
│       ├── FileVersionInfoWrapper.cs
│       ├── FileWrapper.Async.cs
│       ├── FileWrapper.cs
│       ├── PathBase.cs
│       ├── PathWrapper.cs
│       ├── Polyfills/
│       │   └── SupportedOSPlatformAttribute.cs
│       └── TestableIO.System.IO.Abstractions.Wrappers.csproj
└── tests/
    ├── Directory.Build.props
    ├── TestableIO.System.IO.Abstractions.Api.Tests/
    │   ├── ApiAcceptance.cs
    │   ├── ApiApprovalTests.cs
    │   ├── Expected/
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net10.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net472.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net6.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net8.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_net9.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.1.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net10.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net472.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net6.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net8.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_net9.0.txt
    │   │   ├── TestableIO.System.IO.Abstractions.Wrappers_netstandard2.0.txt
    │   │   └── TestableIO.System.IO.Abstractions.Wrappers_netstandard2.1.txt
    │   ├── Helper.cs
    │   ├── TestableIO.System.IO.Abstractions.Api.Tests.csproj
    │   └── Usings.cs
    ├── TestableIO.System.IO.Abstractions.Parity.Tests/
    │   ├── ApiParityTests.cs
    │   ├── TestableIO.System.IO.Abstractions.Parity.Tests.csproj
    │   └── __snapshots__/
    │       ├── ApiParityTests.DirectoryInfo_.NET 10.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 6.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 8.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET 9.0.snap
    │       ├── ApiParityTests.DirectoryInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.Directory_.NET 10.0.snap
    │       ├── ApiParityTests.Directory_.NET 6.0.snap
    │       ├── ApiParityTests.Directory_.NET 8.0.snap
    │       ├── ApiParityTests.Directory_.NET 9.0.snap
    │       ├── ApiParityTests.Directory_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.DriveInfo_.NET 10.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 6.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 8.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET 9.0.snap
    │       ├── ApiParityTests.DriveInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileInfo_.NET 10.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 6.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 8.0.snap
    │       ├── ApiParityTests.FileInfo_.NET 9.0.snap
    │       ├── ApiParityTests.FileInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 10.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 6.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 8.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET 9.0.snap
    │       ├── ApiParityTests.FileSystemWatcher_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 10.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 6.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 8.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET 9.0.snap
    │       ├── ApiParityTests.FileVersionInfo_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.File_.NET 10.0.snap
    │       ├── ApiParityTests.File_.NET 6.0.snap
    │       ├── ApiParityTests.File_.NET 8.0.snap
    │       ├── ApiParityTests.File_.NET 9.0.snap
    │       ├── ApiParityTests.File_.NET Framework 4.7.2.snap
    │       ├── ApiParityTests.Path_.NET 10.0.snap
    │       ├── ApiParityTests.Path_.NET 6.0.snap
    │       ├── ApiParityTests.Path_.NET 8.0.snap
    │       ├── ApiParityTests.Path_.NET 9.0.snap
    │       └── ApiParityTests.Path_.NET Framework 4.7.2.snap
    ├── TestableIO.System.IO.Abstractions.TestingHelpers.Tests/
    │   ├── MockDirectoryArgumentPathTests.cs
    │   ├── MockDirectoryGetAccessControlTests.cs
    │   ├── MockDirectoryInfoAccessControlTests.cs
    │   ├── MockDirectoryInfoFactoryTests.cs
    │   ├── MockDirectoryInfoSymlinkTests.cs
    │   ├── MockDirectoryInfoTests.cs
    │   ├── MockDirectorySetAccessControlTests.cs
    │   ├── MockDirectorySymlinkTests.cs
    │   ├── MockDirectoryTests.cs
    │   ├── MockDriveInfoFactoryTests.cs
    │   ├── MockDriveInfoTests.cs
    │   ├── MockFileAdjustTimesTest.cs
    │   ├── MockFileAppendAllLinesTests.cs
    │   ├── MockFileAppendAllTextTests.cs
    │   ├── MockFileArgumentPathTests.cs
    │   ├── MockFileCopyTests.cs
    │   ├── MockFileCreateTests.cs
    │   ├── MockFileDeleteTests.cs
    │   ├── MockFileExistsTests.cs
    │   ├── MockFileGetAccessControlTests.cs
    │   ├── MockFileGetCreationTimeTests.cs
    │   ├── MockFileGetCreationTimeUtcTests.cs
    │   ├── MockFileGetLastAccessTimeTests.cs
    │   ├── MockFileGetLastAccessTimeUtcTests.cs
    │   ├── MockFileGetLastWriteTimeTests.cs
    │   ├── MockFileGetLastWriteTimeUtcTests.cs
    │   ├── MockFileGetUnixFileModeTests.cs
    │   ├── MockFileInfoAccessControlTests.cs
    │   ├── MockFileInfoFactoryTests.cs
    │   ├── MockFileInfoSymlinkTests.cs
    │   ├── MockFileInfoTests.cs
    │   ├── MockFileLockTests.cs
    │   ├── MockFileMoveTests.cs
    │   ├── MockFileOpenTests.cs
    │   ├── MockFileReadAllBytesTests.cs
    │   ├── MockFileReadAllLinesTests.cs
    │   ├── MockFileReadLinesTests.cs
    │   ├── MockFileSetAccessControlTests.cs
    │   ├── MockFileSetAttributesTests.cs
    │   ├── MockFileSetUnixFileModeTests.cs
    │   ├── MockFileStreamFactoryTests.cs
    │   ├── MockFileStreamTests.cs
    │   ├── MockFileSymlinkTests.cs
    │   ├── MockFileSystemOptionTests.cs
    │   ├── MockFileSystemSerializationTests.cs
    │   ├── MockFileSystemTests.cs
    │   ├── MockFileSystemWatcherFactoryTests.cs
    │   ├── MockFileTests.cs
    │   ├── MockFileVersionInfoFactoryTests.cs
    │   ├── MockFileVersionInfoTests.cs
    │   ├── MockFileWriteAllBytesTests.cs
    │   ├── MockFileWriteAllLinesTests.cs
    │   ├── MockFileWriteAllTextTests.cs
    │   ├── MockPathTests.cs
    │   ├── MockUnixSupportTests.cs
    │   ├── Polyfills/
    │   │   └── SupportedOSPlatformAttribute.cs
    │   ├── ProductVersionParserTests.cs
    │   ├── Shared.cs
    │   ├── TestFiles/
    │   │   ├── SecondTestFile.txt
    │   │   └── TestFile.txt
    │   ├── TestableIO.System.IO.Abstractions.TestingHelpers.Tests.csproj
    │   ├── UnixOnlyAttribute.cs
    │   ├── UnixSpecifics.cs
    │   ├── Usings.cs
    │   ├── WindowsOnlyAttribute.cs
    │   └── WindowsSpecifics.cs
    └── TestableIO.System.IO.Abstractions.Wrappers.Tests/
        ├── DirectoryInfoFactoryTests.cs
        ├── DirectoryInfoTests.cs
        ├── DirectoryWrapperTests.cs
        ├── DriveInfoFactoryTests.cs
        ├── FileInfoBaseConversionTests.cs
        ├── FileInfoFactoryTests.cs
        ├── FileSystemTests.cs
        ├── FileSystemWatcherFactoryTests.cs
        ├── FileVersionInfoBaseConversionTests.cs
        ├── TestableIO.System.IO.Abstractions.Wrappers.Tests.csproj
        └── Usings.cs
Download .txt
Showing preview only (216K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2090 symbols across 157 files)

FILE: Pipeline/Build.ApiChecks.cs
  class Build (line 11) | partial class Build

FILE: Pipeline/Build.CodeAnalysis.cs
  class Build (line 8) | partial class Build

FILE: Pipeline/Build.CodeCoverage.cs
  class Build (line 10) | partial class Build

FILE: Pipeline/Build.Compile.cs
  class Build (line 16) | partial class Build
    type AssemblyVersion (line 107) | public record AssemblyVersion(string FileVersion, string Informational...

FILE: Pipeline/Build.Pack.cs
  class Build (line 16) | partial class Build

FILE: Pipeline/Build.UnitTest.cs
  class Build (line 15) | partial class Build

FILE: Pipeline/Build.cs
  class Build (line 9) | [GitHubActions(
    method Main (line 30) | public static int Main() => Execute<Build>(x => x.UnitTests, x => x.Pa...

FILE: Pipeline/BuildExtensions.cs
  class BuildExtensions (line 9) | public static class BuildExtensions
    method SetPullRequestOrBranchName (line 11) | public static SonarScannerBeginSettings SetPullRequestOrBranchName(

FILE: Pipeline/Configuration.cs
  class Configuration (line 6) | [TypeConverter(typeof(TypeConverter<Configuration>))]

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/FileSystemAbstractionBenchmarks.cs
  class FileSystemAbstractionBenchmarks (line 8) | [RPlotExporter]
    method FileSystemAbstractionBenchmarks (line 22) | public FileSystemAbstractionBenchmarks()
    method FileExists_DotNet (line 30) | [Benchmark]
    method FileExists_Abstraction (line 33) | [Benchmark]
    method DirectoryExists_DotNet (line 38) | [Benchmark]
    method DirectoryExists_Abstraction (line 41) | [Benchmark]

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/MockFileSystemBenchmarks.cs
  class MockFileSystemBenchmarks (line 9) | [RPlotExporter]
    method CreateTestData (line 15) | private static Dictionary<string, MockFileData> CreateTestData()
    method MockFileSystem_Constructor (line 24) | [Benchmark]

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Program.cs
  class Program (line 5) | static class Program
    method Main (line 7) | public static void Main(string[] args)

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupport.cs
  class DirectorySupport (line 3) | public class DirectorySupport
    method DirectorySupport (line 7) | public DirectorySupport(IFileSystem fileSystem)
    method DirectorySupport (line 12) | public DirectorySupport() : this(new FileSystem())
    method IsDirectory (line 17) | public bool IsDirectory(string path)
    method GetRandomTempDirectory (line 22) | private static string GetRandomTempDirectory()
    method CreateRandomDirectory (line 27) | public string CreateRandomDirectory()
    method DirectoryCopy (line 34) | private void DirectoryCopy(string sourceDirName, string destDirName, b...
    method CreateIfNotExists (line 71) | public void CreateIfNotExists(string directory)
    method Exists (line 79) | public bool Exists(string directory)

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupportStatic.cs
  class DirectorySupportStatic (line 3) | public static class DirectorySupportStatic
    method IsDirectory (line 5) | public static bool IsDirectory(string path)
    method GetRandomTempDirectory (line 10) | private static string GetRandomTempDirectory()
    method CreateDirectory (line 15) | public static string CreateDirectory()
    method DirectoryCopy (line 22) | private static void DirectoryCopy(string sourceDirName, string destDir...
    method CreateIfNotExists (line 60) | public static void CreateIfNotExists(string directory)
    method Exists (line 68) | public static bool Exists(string directory) => Directory.Exists(direct...

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupport.cs
  class FileSupport (line 3) | public class FileSupport
    method FileSupport (line 7) | public FileSupport(IFileSystem fileSystem)
    method FileSupport (line 12) | public FileSupport() : this(new FileSystem())
    method GetRandomTempFile (line 17) | private static string GetRandomTempFile()
    method IsFile (line 22) | public bool IsFile(string path)
    method DeleteIfExists (line 31) | public void DeleteIfExists(string filePath)

FILE: benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupportStatic.cs
  class FileSupportStatic (line 3) | public static class FileSupportStatic
    method GetRandomTempFile (line 5) | public static string GetRandomTempFile()
    method IsFile (line 10) | public static bool IsFile(string path)
    method DeleteIfExists (line 19) | public static void DeleteIfExists(string filePath)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/CommonExceptions.cs
  class CommonExceptions (line 6) | internal static class CommonExceptions
    method FileNotFound (line 10) | public static FileNotFoundException FileNotFound(string path) =>
    method CouldNotFindPartOfPath (line 20) | public static DirectoryNotFoundException CouldNotFindPartOfPath(string...
    method AccessDenied (line 29) | public static UnauthorizedAccessException AccessDenied(string path) =>
    method InvalidUseOfVolumeSeparator (line 38) | public static NotSupportedException InvalidUseOfVolumeSeparator() =>
    method PathIsNotOfALegalForm (line 41) | public static ArgumentException PathIsNotOfALegalForm(string paramName...
    method FilenameCannotBeNull (line 47) | public static ArgumentNullException FilenameCannotBeNull(string paramN...
    method IllegalCharactersInPath (line 53) | public static ArgumentException IllegalCharactersInPath(string paramNa...
    method InvalidUncPath (line 58) | public static ArgumentException InvalidUncPath(string paramName) =>
    method ProcessCannotAccessFileInUse (line 63) | public static IOException ProcessCannotAccessFileInUse(string paramNam...
    method FileAlreadyExists (line 68) | public static IOException FileAlreadyExists(string paramName) =>
    method InvalidAccessCombination (line 71) | public static ArgumentException InvalidAccessCombination(FileMode mode...
    method AppendAccessOnlyInWriteOnlyMode (line 74) | public static ArgumentException AppendAccessOnlyInWriteOnlyMode()
    method NotImplemented (line 77) | public static NotImplementedException NotImplemented() =>
    method CannotCreateBecauseSameNameAlreadyExists (line 80) | public static IOException CannotCreateBecauseSameNameAlreadyExists(str...
    method NameCannotBeResolvedByTheSystem (line 89) | public static IOException NameCannotBeResolvedByTheSystem(string path) =>
    method PathDoesNotExistOrCouldNotBeFound (line 98) | public static DirectoryNotFoundException PathDoesNotExistOrCouldNotBeF...

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/FileHandles.cs
  class FileHandles (line 6) | public class FileHandles
    method AddHandle (line 10) | public void AddHandle(string path, Guid guid, FileAccess access, FileS...
    method RemoveHandle (line 31) | public void RemoveHandle(string path, Guid guid)
    method AccessToShare (line 43) | private static FileShare AccessToShare(FileAccess access)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/IMockFileDataAccessor.cs
  type IMockFileDataAccessor (line 9) | public interface IMockFileDataAccessor : IFileSystem
    method AdjustTimes (line 17) | MockFileData AdjustTimes(MockFileData fileData, TimeAdjustments timeAd...
    method GetFile (line 24) | MockFileData GetFile(string path);
    method GetDrive (line 31) | MockDriveData GetDrive(string name);
    method AddFile (line 39) | void AddFile(string path, MockFileData mockFile, bool verifyAccess = t...
    method AddDirectory (line 43) | void AddDirectory(string path);
    method AddDrive (line 47) | void AddDrive(string name, MockDriveData mockDrive);
    method AddFileFromEmbeddedResource (line 51) | void AddFileFromEmbeddedResource(string path, Assembly resourceAssembl...
    method AddFilesFromEmbeddedNamespace (line 55) | void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssem...
    method MoveDirectory (line 59) | void MoveDirectory(string sourcePath, string destPath);
    method RemoveFile (line 69) | void RemoveFile(string path, bool verifyAccess = true);
    method FileExists (line 76) | bool FileExists(string path);

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs
  class MockDirectory (line 13) | #if FEATURE_SERIALIZABLE
    method MockDirectory (line 22) | public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, FileB...
    method MockDirectory (line 28) | public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, strin...
    method CreateDirectory (line 38) | public override IDirectoryInfo CreateDirectory(string path)
    method CreateDirectory (line 45) | public override IDirectoryInfo CreateDirectory(string path, UnixFileMo...
    method CreateDirectoryInternal (line 51) | private IDirectoryInfo CreateDirectoryInternal(string path)
    method CreateSymbolicLink (line 92) | public override IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateTempSubdirectory (line 113) | public override IDirectoryInfo CreateTempSubdirectory(string prefix = ...
    method Delete (line 130) | public override void Delete(string path)
    method Delete (line 137) | public override void Delete(string path, bool recursive)
    method Exists (line 175) | public override bool Exists(string path)
    method GetCreationTime (line 196) | public override DateTime GetCreationTime(string path)
    method GetCreationTimeUtc (line 203) | public override DateTime GetCreationTimeUtc(string path)
    method GetCurrentDirectory (line 209) | public override string GetCurrentDirectory()
    method GetDirectories (line 215) | public override string[] GetDirectories(string path)
    method GetDirectories (line 221) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 227) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 234) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectoryRoot (line 242) | public override string GetDirectoryRoot(string path)
    method GetFiles (line 248) | public override string[] GetFiles(string path)
    method GetFiles (line 255) | public override string[] GetFiles(string path, string searchPattern)
    method GetFiles (line 262) | public override string[] GetFiles(string path, string searchPattern, S...
    method GetFiles (line 269) | public override string[] GetFiles(string path, string searchPattern, E...
    method GetFilesInternal (line 275) | private string[] GetFilesInternal(
    method GetFileSystemEntries (line 373) | public override string[] GetFileSystemEntries(string path)
    method GetFileSystemEntries (line 379) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 388) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 398) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetLastAccessTime (line 406) | public override DateTime GetLastAccessTime(string path)
    method GetLastAccessTimeUtc (line 412) | public override DateTime GetLastAccessTimeUtc(string path)
    method GetLastWriteTime (line 418) | public override DateTime GetLastWriteTime(string path)
    method GetLastWriteTimeUtc (line 424) | public override DateTime GetLastWriteTimeUtc(string path)
    method GetLogicalDrives (line 430) | public override string[] GetLogicalDrives()
    method GetParent (line 441) | public override IDirectoryInfo GetParent(string path)
    method Move (line 501) | public override void Move(string sourceDirName, string destDirName)
    method ResolveLinkTarget (line 552) | public override IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetCreationTime (line 596) | public override void SetCreationTime(string path, DateTime creationTime)
    method SetCreationTimeUtc (line 602) | public override void SetCreationTimeUtc(string path, DateTime creation...
    method SetCurrentDirectory (line 608) | public override void SetCurrentDirectory(string path)
    method SetLastAccessTime (line 614) | public override void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTimeUtc (line 620) | public override void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastWriteTime (line 626) | public override void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTimeUtc (line 632) | public override void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method EnumerateDirectories (line 638) | public override IEnumerable<string> EnumerateDirectories(string path)
    method EnumerateDirectories (line 644) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateDirectories (line 650) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method FixPrefix (line 661) | private string FixPrefix(string path, string originalPath)
    method EnumerateDirectories (line 671) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateFiles (line 679) | public override IEnumerable<string> EnumerateFiles(string path)
    method EnumerateFiles (line 685) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 691) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 698) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFileSystemEntries (line 706) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 712) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 718) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 725) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnsureAbsolutePath (line 734) | private string EnsureAbsolutePath(string path)
    method CheckSearchPattern (line 741) | private void CheckSearchPattern(string searchPattern)
    method ReplaceLastOccurrence (line 775) | private string ReplaceLastOccurrence(string source, string find, strin...
    method EnumerationOptionsToSearchOption (line 794) | private SearchOption EnumerationOptionsToSearchOption(EnumerationOptio...

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs
  class MockDirectoryData (line 7) | #if FEATURE_SERIALIZABLE
    method MockDirectoryData (line 18) | public MockDirectoryData() : base(string.Empty)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs
  class MockDirectoryInfo (line 11) | #if FEATURE_SERIALIZABLE
    method MockDirectoryInfo (line 28) | public MockDirectoryInfo(IMockFileDataAccessor mockFileDataAccessor, s...
    method CreateAsSymbolicLink (line 47) | public override void CreateAsSymbolicLink(string pathToTarget)
    method Delete (line 54) | public override void Delete()
    method Refresh (line 61) | public override void Refresh()
    method ResolveLinkTarget (line 69) | public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
    method Create (line 181) | public override void Create()
    method CreateSubdirectory (line 188) | public override IDirectoryInfo CreateSubdirectory(string path)
    method Delete (line 194) | public override void Delete(bool recursive)
    method EnumerateDirectories (line 201) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories()
    method EnumerateDirectories (line 207) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 213) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 220) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateFiles (line 227) | public override IEnumerable<IFileInfo> EnumerateFiles()
    method EnumerateFiles (line 233) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 239) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 246) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFileSystemInfos (line 253) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos()
    method EnumerateFileSystemInfos (line 259) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 265) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 272) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method GetDirectories (line 279) | public override IDirectoryInfo[] GetDirectories()
    method GetDirectories (line 285) | public override IDirectoryInfo[] GetDirectories(string searchPattern)
    method GetDirectories (line 291) | public override IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method GetDirectories (line 298) | public override IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method ConvertStringsToDirectories (line 304) | private DirectoryInfoBase[] ConvertStringsToDirectories(IEnumerable<st...
    method GetFiles (line 313) | public override IFileInfo[] GetFiles()
    method GetFiles (line 319) | public override IFileInfo[] GetFiles(string searchPattern)
    method GetFiles (line 325) | public override IFileInfo[] GetFiles(string searchPattern, SearchOptio...
    method GetFiles (line 332) | public override IFileInfo[] GetFiles(string searchPattern, Enumeration...
    method ConvertStringsToFiles (line 338) | IFileInfo[] ConvertStringsToFiles(IEnumerable<string> paths)
    method GetFileSystemInfos (line 346) | public override IFileSystemInfo[] GetFileSystemInfos()
    method GetFileSystemInfos (line 352) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 358) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 365) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method MoveTo (line 372) | public override void MoveTo(string destDirName)
    method GetMockFileDataForRead (line 396) | private MockFileData GetMockFileDataForRead()
    method GetMockFileDataForWrite (line 406) | private MockFileData GetMockFileDataForWrite()
    method ToString (line 414) | public override string ToString()
    method GetAccessControl (line 420) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 427) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 434) | [SupportedOSPlatform("windows")]
    method SetDirectoryPath (line 440) | private void SetDirectoryPath(string path)
    method GetMockDirectoryData (line 453) | private MockDirectoryData GetMockDirectoryData()

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs
  class MockDirectoryInfoFactory (line 4) | #if FEATURE_SERIALIZABLE
    method MockDirectoryInfoFactory (line 12) | public MockDirectoryInfoFactory(IMockFileDataAccessor mockFileSystem)
    method New (line 22) | public IDirectoryInfo New(string path)
    method Wrap (line 28) | public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveData.cs
  class MockDriveData (line 7) | #if FEATURE_SERIALIZABLE
    method MockDriveData (line 15) | public MockDriveData()
    method MockDriveData (line 25) | public MockDriveData(MockDriveData template)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfo.cs
  class MockDriveInfo (line 4) | #if FEATURE_SERIALIZABLE
    method MockDriveInfo (line 13) | public MockDriveInfo(IMockFileDataAccessor mockFileDataAccessor, strin...
    method ToString (line 110) | public override string ToString()
    method GetMockDriveData (line 115) | private MockDriveData GetMockDriveData()

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfoFactory.cs
  class MockDriveInfoFactory (line 6) | #if FEATURE_SERIALIZABLE
    method MockDriveInfoFactory (line 14) | public MockDriveInfoFactory(IMockFileDataAccessor mockFileSystem)
    method GetDrives (line 24) | public IDriveInfo[] GetDrives()
    method New (line 44) | public IDriveInfo New(string driveName)
    method Wrap (line 52) | public IDriveInfo Wrap(DriveInfo driveInfo)
    method NormalizeDriveName (line 62) | private string NormalizeDriveName(string driveName)
    class DriveEqualityComparer (line 77) | private class DriveEqualityComparer : IEqualityComparer<string>
      method DriveEqualityComparer (line 81) | public DriveEqualityComparer(IMockFileDataAccessor mockFileSystem)
      method Equals (line 86) | public bool Equals(string x, string y)
      method HasDrivePrefix (line 92) | private static bool HasDrivePrefix(string x)
      method GetHashCode (line 97) | public int GetHashCode(string obj)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.Async.cs
  class MockFile (line 11) | partial class MockFile
    method AppendAllBytesAsync (line 15) | public override Task AppendAllBytesAsync(string path, byte[] bytes, Ca...
    method AppendAllBytesAsync (line 23) | public override Task AppendAllBytesAsync(string path, ReadOnlyMemory<b...
    method AppendAllLinesAsync (line 29) | public override Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllLinesAsync (line 33) | public override Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllTextAsync (line 41) | public override Task AppendAllTextAsync(string path, string contents, ...
    method AppendAllTextAsync (line 46) | public override Task AppendAllTextAsync(string path, string contents, ...
    method AppendAllTextAsync (line 55) | public override Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method AppendAllTextAsync (line 61) | public override Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method ReadAllBytesAsync (line 69) | public override Task<byte[]> ReadAllBytesAsync(string path, Cancellati...
    method ReadAllLinesAsync (line 76) | public override Task<string[]> ReadAllLinesAsync(string path, Cancella...
    method ReadAllLinesAsync (line 81) | public override Task<string[]> ReadAllLinesAsync(string path, Encoding...
    method ReadAllTextAsync (line 88) | public override Task<string> ReadAllTextAsync(string path, Cancellatio...
    method ReadAllTextAsync (line 93) | public override Task<string> ReadAllTextAsync(string path, Encoding en...
    method ReadLinesAsync (line 101) | public override IAsyncEnumerable<string> ReadLinesAsync(string path, C...
    method ReadLinesAsync (line 105) | public override async IAsyncEnumerable<string> ReadLinesAsync(string p...
    method WriteAllBytesAsync (line 115) | public override Task WriteAllBytesAsync(string path, byte[] bytes, Can...
    method WriteAllBytesAsync (line 124) | public override Task WriteAllBytesAsync(string path, ReadOnlyMemory<by...
    method WriteAllLinesAsync (line 131) | public override Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllLinesAsync (line 135) | public override Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllTextAsync (line 143) | public override Task WriteAllTextAsync(string path, string contents, C...
    method WriteAllTextAsync (line 147) | public override Task WriteAllTextAsync(string path, string contents, E...
    method WriteAllTextAsync (line 156) | public override Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...
    method WriteAllTextAsync (line 162) | public override Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs
  class MockFile (line 12) | #if FEATURE_SERIALIZABLE
    method MockFile (line 20) | public MockFile(IMockFileDataAccessor mockFileDataAccessor) : base(moc...
    method AppendAllBytes (line 27) | public override void AppendAllBytes(string path, byte[] bytes)
    method AppendAllBytes (line 46) | public override void AppendAllBytes(string path, ReadOnlySpan<byte> by...
    method AppendAllLines (line 53) | public override void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllLines (line 59) | public override void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllText (line 70) | public override void AppendAllText(string path, string contents)
    method AppendAllText (line 76) | public override void AppendAllText(string path, string contents, Encod...
    method AppendAllText (line 102) | public override void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendAllText (line 108) | public override void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendText (line 115) | public override StreamWriter AppendText(string path)
    method Copy (line 130) | public override void Copy(string sourceFileName, string destFileName)
    method Copy (line 136) | public override void Copy(string sourceFileName, string destFileName, ...
    method Create (line 182) | public override FileSystemStream Create(string path) =>
    method Create (line 186) | public override FileSystemStream Create(string path, int bufferSize) =>
    method Create (line 190) | public override FileSystemStream Create(string path, int bufferSize, F...
    method CreateInternal (line 193) | private FileSystemStream CreateInternal(string path, FileAccess access...
    method CreateSymbolicLink (line 211) | public override IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateText (line 252) | public override StreamWriter CreateText(string path)
    method Decrypt (line 258) | public override void Decrypt(string path)
    method Delete (line 265) | public override void Delete(string path)
    method Encrypt (line 289) | public override void Encrypt(string path)
    method Exists (line 297) | public override bool Exists(string path)
    method GetAttributes (line 337) | public override FileAttributes GetAttributes(string path)
    method GetAttributes (line 372) | public override FileAttributes GetAttributes(SafeFileHandle fileHandle)
    method GetCreationTime (line 379) | public override DateTime GetCreationTime(string path)
    method GetCreationTime (line 388) | public override DateTime GetCreationTime(SafeFileHandle fileHandle)
    method GetCreationTimeUtc (line 395) | public override DateTime GetCreationTimeUtc(string path)
    method GetCreationTimeUtc (line 404) | public override DateTime GetCreationTimeUtc(SafeFileHandle fileHandle)
    method GetLastAccessTime (line 411) | public override DateTime GetLastAccessTime(string path)
    method GetLastAccessTime (line 420) | public override DateTime GetLastAccessTime(SafeFileHandle fileHandle)
    method GetLastAccessTimeUtc (line 427) | public override DateTime GetLastAccessTimeUtc(string path)
    method GetLastAccessTimeUtc (line 436) | public override DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle)
    method GetLastWriteTime (line 443) | public override DateTime GetLastWriteTime(string path)
    method GetLastWriteTime (line 452) | public override DateTime GetLastWriteTime(SafeFileHandle fileHandle)
    method GetLastWriteTimeUtc (line 459) | public override DateTime GetLastWriteTimeUtc(string path)
    method GetLastWriteTimeUtc (line 468) | public override DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle)
    method GetUnixFileMode (line 476) | public override UnixFileMode GetUnixFileMode(string path)
    method GetUnixFileMode (line 492) | public override UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle)
    method GetTimeFromFile (line 498) | private DateTime GetTimeFromFile(string path, Func<MockFileData, DateT...
    method Move (line 515) | public override void Move(string sourceFileName, string destFileName)
    method Move (line 567) | public override void Move(string sourceFileName, string destFileName, ...
    method Open (line 613) | public override FileSystemStream Open(string path, FileMode mode)
    method Open (line 621) | public override FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 629) | public override FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 634) | public override FileSystemStream Open(string path, FileStreamOptions o...
    method OpenInternal (line 640) | private FileSystemStream OpenInternal(
    method OpenRead (line 684) | public override FileSystemStream OpenRead(string path)
    method OpenText (line 692) | public override StreamReader OpenText(string path)
    method OpenWrite (line 700) | public override FileSystemStream OpenWrite(string path) => OpenWriteIn...
    method OpenWriteInternal (line 702) | private FileSystemStream OpenWriteInternal(string path, FileOptions op...
    method ReadAllBytes (line 709) | public override byte[] ReadAllBytes(string path)
    method ReadAllLines (line 724) | public override string[] ReadAllLines(string path)
    method ReadAllLines (line 742) | public override string[] ReadAllLines(string path, Encoding encoding)
    method ReadAllText (line 768) | public override string ReadAllText(string path)
    method ReadAllText (line 774) | public override string ReadAllText(string path, Encoding encoding)
    method ReadLines (line 792) | public override IEnumerable<string> ReadLines(string path)
    method ReadLines (line 800) | public override IEnumerable<string> ReadLines(string path, Encoding en...
    method Replace (line 809) | public override void Replace(string sourceFileName, string destination...
    method Replace (line 815) | public override void Replace(string sourceFileName, string destination...
    method ResolveLinkTarget (line 853) | public override IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetAttributes (line 896) | public override void SetAttributes(string path, FileAttributes fileAtt...
    method SetAttributes (line 922) | public override void SetAttributes(SafeFileHandle fileHandle, FileAttr...
    method SetCreationTime (line 929) | public override void SetCreationTime(string path, DateTime creationTime)
    method SetCreationTime (line 938) | public override void SetCreationTime(SafeFileHandle fileHandle, DateTi...
    method SetCreationTimeUtc (line 945) | public override void SetCreationTimeUtc(string path, DateTime creation...
    method SetCreationTimeUtc (line 954) | public override void SetCreationTimeUtc(SafeFileHandle fileHandle, Dat...
    method SetLastAccessTime (line 961) | public override void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTime (line 970) | public override void SetLastAccessTime(SafeFileHandle fileHandle, Date...
    method SetLastAccessTimeUtc (line 977) | public override void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastAccessTimeUtc (line 986) | public override void SetLastAccessTimeUtc(SafeFileHandle fileHandle, D...
    method SetLastWriteTime (line 993) | public override void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTime (line 1002) | public override void SetLastWriteTime(SafeFileHandle fileHandle, DateT...
    method SetLastWriteTimeUtc (line 1009) | public override void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method SetLastWriteTimeUtc (line 1018) | public override void SetLastWriteTimeUtc(SafeFileHandle fileHandle, Da...
    method SetUnixFileMode (line 1026) | public override void SetUnixFileMode(string path, UnixFileMode mode)
    method SetUnixFileMode (line 1042) | public override void SetUnixFileMode(SafeFileHandle fileHandle, UnixFi...
    method WriteAllBytes (line 1077) | public override void WriteAllBytes(string path, byte[] bytes)
    method WriteAllBytes (line 1089) | public override void WriteAllBytes(string path, ReadOnlySpan<byte> bytes)
    method WriteAllLines (line 1128) | public override void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 1178) | public override void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 1230) | public override void WriteAllLines(string path, string[] contents)
    method WriteAllLines (line 1273) | public override void WriteAllLines(string path, string[] contents, Enc...
    method WriteAllText (line 1314) | public override void WriteAllText(string path, string contents)
    method WriteAllText (line 1349) | public override void WriteAllText(string path, string contents, Encodi...
    method WriteAllText (line 1367) | public override void WriteAllText(string path, ReadOnlySpan<char> cont...
    method WriteAllText (line 1373) | public override void WriteAllText(string path, ReadOnlySpan<char> cont...
    method ReadAllBytes (line 1379) | internal static string ReadAllBytes(byte[] contents, Encoding encoding)
    method ReadAllTextInternal (line 1388) | private string ReadAllTextInternal(string path, Encoding encoding)
    method VerifyValueIsNotNull (line 1396) | private void VerifyValueIsNotNull(object value, string parameterName)
    method VerifyDirectoryExists (line 1404) | private void VerifyDirectoryExists(string path)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs
  class MockFileData (line 11) | #if FEATURE_SERIALIZABLE
    method MockFileData (line 54) | private MockFileData()
    method MockFileData (line 66) | public MockFileData(string textContents)
    method MockFileData (line 76) | public MockFileData(string textContents, Encoding encoding)
    method MockFileData (line 87) | public MockFileData(byte[] contents)
    method MockFileData (line 99) | public MockFileData(MockFileData template)
    method CheckFileAccess (line 229) | internal void CheckFileAccess(string path, FileAccess access)
    method Clone (line 242) | internal virtual MockFileData Clone()

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfo.cs
  class MockFileInfo (line 7) | #if FEATURE_SERIALIZABLE
    method MockFileInfo (line 20) | public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path)...
    method CreateAsSymbolicLink (line 32) | public override void CreateAsSymbolicLink(string pathToTarget)
    method Delete (line 39) | public override void Delete()
    method Refresh (line 46) | public override void Refresh()
    method ResolveLinkTarget (line 54) | public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
    method AppendText (line 211) | public override StreamWriter AppendText()
    method CopyTo (line 217) | public override IFileInfo CopyTo(string destFileName)
    method CopyTo (line 223) | public override IFileInfo CopyTo(string destFileName, bool overwrite)
    method Create (line 234) | public override FileSystemStream Create()
    method CreateText (line 242) | public override StreamWriter CreateText()
    method Decrypt (line 250) | public override void Decrypt()
    method Encrypt (line 257) | public override void Encrypt()
    method MoveTo (line 264) | public override void MoveTo(string destFileName)
    method MoveTo (line 272) | public override void MoveTo(string destFileName, bool overwrite)
    method Open (line 280) | public override FileSystemStream Open(FileMode mode)
    method Open (line 286) | public override FileSystemStream Open(FileMode mode, FileAccess access)
    method Open (line 292) | public override FileSystemStream Open(FileMode mode, FileAccess access...
    method Open (line 299) | public override FileSystemStream Open(FileStreamOptions options)
    method OpenRead (line 306) | public override FileSystemStream OpenRead() => mockFile.OpenRead(path);
    method OpenText (line 309) | public override StreamReader OpenText() => mockFile.OpenText(path);
    method OpenWrite (line 312) | public override FileSystemStream OpenWrite() => mockFile.OpenWrite(path);
    method Replace (line 315) | public override IFileInfo Replace(string destinationFileName, string d...
    method Replace (line 321) | public override IFileInfo Replace(string destinationFileName, string d...
    method ToString (line 384) | public override string ToString()
    method GetAccessControl (line 390) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 397) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 404) | [SupportedOSPlatform("windows")]
    method GetMockFileData (line 410) | private MockFileData GetMockFileData()
    method AdjustUnspecifiedKind (line 416) | private static DateTime AdjustUnspecifiedKind(DateTime time, DateTimeK...
    method GetMockFileDataForRead (line 426) | private MockFileData GetMockFileDataForRead()
    method GetMockFileDataForWrite (line 436) | private MockFileData GetMockFileDataForWrite()

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs
  class MockFileInfoFactory (line 4) | #if FEATURE_SERIALIZABLE
    method MockFileInfoFactory (line 12) | public MockFileInfoFactory(IMockFileDataAccessor mockFileSystem)
    method New (line 22) | public IFileInfo New(string fileName)
    method Wrap (line 28) | public IFileInfo Wrap(FileInfo fileInfo)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStream.cs
  class MockFileStream (line 9) | #if FEATURE_SERIALIZABLE
    class NullFileSystemStream (line 21) | private class NullFileSystemStream : FileSystemStream
      method NullFileSystemStream (line 26) | public NullFileSystemStream() : base(Null, ".", true)
    method MockFileStream (line 42) | public MockFileStream(
    method ThrowIfInvalidModeAccess (line 109) | private static void ThrowIfInvalidModeAccess(FileMode mode, FileAccess...
    method Read (line 139) | public override int Read(byte[] buffer, int offset, int count)
    method Dispose (line 147) | protected override void Dispose(bool disposing)
    method EndWrite (line 161) | public override void EndWrite(IAsyncResult asyncResult)
    method SetLength (line 171) | public override void SetLength(long value)
    method Write (line 182) | public override void Write(byte[] buffer, int offset, int count)
    method Write (line 195) | public override void Write(ReadOnlySpan<byte> buffer)
    method WriteAsync (line 208) | public override Task WriteAsync(byte[] buffer, int offset, int count,
    method WriteAsync (line 222) | public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer,
    method WriteByte (line 236) | public override void WriteByte(byte value)
    method Flush (line 248) | public override void Flush()
    method Flush (line 254) | public override void Flush(bool flushToDisk)
    method FlushAsync (line 258) | public override Task FlushAsync(CancellationToken cancellationToken)
    method GetAccessControl (line 265) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 272) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 279) | [SupportedOSPlatform("windows")]
    method GetMockFileData (line 285) | private MockFileData GetMockFileData()
    method InternalFlush (line 291) | private void InternalFlush()
    method OnClose (line 309) | private void OnClose()
    method GetTimeAdjustmentsForFileStreamWhenFileExists (line 324) | private TimeAdjustments GetTimeAdjustmentsForFileStreamWhenFileExists(...

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStreamFactory.cs
  class MockFileStreamFactory (line 7) | #if FEATURE_SERIALIZABLE
    method MockFileStreamFactory (line 15) | public MockFileStreamFactory(IMockFileDataAccessor mockFileSystem)
    method New (line 23) | public FileSystemStream New(SafeFileHandle handle, FileAccess access)
    method New (line 27) | public FileSystemStream New(SafeFileHandle handle, FileAccess access, ...
    method New (line 31) | public FileSystemStream New(SafeFileHandle handle, FileAccess access, ...
    method New (line 35) | public FileSystemStream New(string path, FileMode mode)
    method New (line 39) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 43) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 47) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 51) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 55) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 61) | public FileSystemStream New(string path, FileStreamOptions options)
    method Wrap (line 66) | public FileSystemStream Wrap(FileStream fileStream)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystem.cs
  class MockFileSystem (line 11) | #if FEATURE_SERIALIZABLE
    method MockFileSystem (line 33) | public MockFileSystem() : this(null) { }
    method MockFileSystem (line 36) | public MockFileSystem(IDictionary<string, MockFileData> files, string ...
    method MockFileSystem (line 44) | public MockFileSystem(MockFileSystemOptions options)
    method MockFileSystem (line 48) | public MockFileSystem(IDictionary<string, MockFileData> files, MockFil...
    method MockTime (line 131) | public MockFileSystem MockTime(Func<DateTime> dateTimeProvider)
    method GetPathWithCorrectDirectoryCapitalization (line 138) | private string GetPathWithCorrectDirectoryCapitalization(string fullPath)
    method AdjustTimes (line 166) | public MockFileData AdjustTimes(MockFileData fileData, TimeAdjustments...
    method GetFile (line 188) | public MockFileData GetFile(string path)
    method GetDrive (line 195) | public MockDriveData GetDrive(string name)
    method SetEntry (line 204) | private void SetEntry(string path, MockFileData mockFile)
    method AddFile (line 228) | public void AddFile(string path, MockFileData mockFile, bool verifyAcc...
    method AddEmptyFile (line 269) | public void AddEmptyFile(string path)
    method AddEmptyFile (line 278) | public void AddEmptyFile(IFileInfo path)
    method AddDirectory (line 288) | public void AddDirectory(IDirectoryInfo path)
    method AddFile (line 300) | public void AddFile(IFileInfo path, MockFileData data, bool verifyAcce...
    method GetFile (line 311) | public MockFileData GetFile(IFileInfo path)
    method AddDirectory (line 317) | public void AddDirectory(string path)
    method AddFileFromEmbeddedResource (line 363) | public void AddFileFromEmbeddedResource(string path, Assembly resource...
    method AddFilesFromEmbeddedNamespace (line 381) | public void AddFilesFromEmbeddedNamespace(string path, Assembly resour...
    method AddDrive (line 398) | public void AddDrive(string name, MockDriveData mockDrive)
    method MoveDirectory (line 408) | public void MoveDirectory(string sourcePath, string destPath)
    method RemoveFile (line 452) | public void RemoveFile(string path, bool verifyAccess = true)
    method FileExists (line 468) | public bool FileExists(string path)
    method OnDeserializing (line 543) | [OnDeserializing]
    method AnyFileIsReadOnly (line 549) | private bool AnyFileIsReadOnly(string path)
    method IsStartOfAnotherPath (line 554) | private bool IsStartOfAnotherPath(string path)
    method GetFileWithoutFixingPath (line 559) | private MockFileData GetFileWithoutFixingPath(string path)
    method DirectoryExistsWithoutFixingPath (line 567) | private bool DirectoryExistsWithoutFixingPath(string path)
    method FileIsReadOnly (line 575) | private bool FileIsReadOnly(string path)
    class FileSystemEntry (line 580) | #if FEATURE_SERIALIZABLE

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemOptions.cs
  class MockFileSystemOptions (line 6) | public class MockFileSystemOptions

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemWatcherFactory.cs
  class MockFileSystemWatcherFactory (line 4) | #if FEATURE_SERIALIZABLE
    method MockFileSystemWatcherFactory (line 11) | public MockFileSystemWatcherFactory(MockFileSystem mockFileSystem)
    method New (line 20) | public IFileSystemWatcher New()
    method New (line 24) | public IFileSystemWatcher New(string path)
    method New (line 28) | public IFileSystemWatcher New(string path, string filter)
    method Wrap (line 32) | public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfo.cs
  class MockFileVersionInfo (line 7) | #if FEATURE_SERIALIZABLE
    method MockFileVersionInfo (line 13) | public MockFileVersionInfo(
    method ToString (line 152) | public override string ToString()

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfoFactory.cs
  class MockFileVersionInfoFactory (line 4) | #if FEATURE_SERIALIZABLE
    method MockFileVersionInfoFactory (line 12) | public MockFileVersionInfoFactory(IMockFileDataAccessor mockFileSystem)
    method GetVersionInfo (line 21) | public IFileVersionInfo GetVersionInfo(string fileName)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockPath.cs
  class MockPath (line 10) | #if FEATURE_SERIALIZABLE
    method MockPath (line 19) | public MockPath(IMockFileDataAccessor mockFileDataAccessor) : this(moc...
    method MockPath (line 22) | public MockPath(IMockFileDataAccessor mockFileDataAccessor, string def...
    method Exists (line 30) | public override bool Exists(string path)
    method GetFullPath (line 37) | public override string GetFullPath(string path)
    method GetSegments (line 140) | private string[] GetSegments(params string[] paths)
    method GetTempFileName (line 146) | public override string GetTempFileName()
    method GetTempPath (line 159) | public override string GetTempPath() => defaultTempDirectory;
    method GetRelativePath (line 163) | public override string GetRelativePath(string relativeTo, string path)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/MockUnixSupport.cs
  class MockUnixSupport (line 8) | public static class MockUnixSupport
    method Path (line 15) | public static string Path(string path) => path != null && IsUnixPlatfo...
    method IsUnixPlatform (line 22) | public static bool IsUnixPlatform() => IO.Path.DirectorySeparatorChar ...
    method IsWindowsPlatform (line 27) | public static bool IsWindowsPlatform() => IO.Path.DirectorySeparatorCh...

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/PathVerifier.cs
  class PathVerifier (line 11) | #if FEATURE_SERIALIZABLE
    method PathVerifier (line 26) | public PathVerifier(IMockFileDataAccessor mockFileDataAccessor)
    method IsLegalAbsoluteOrRelative (line 34) | public void IsLegalAbsoluteOrRelative(string path, string paramName)
    method IsValidUseOfVolumeSeparatorChar (line 70) | private static bool IsValidUseOfVolumeSeparatorChar(string path)
    method ExtractFileName (line 82) | private string ExtractFileName(string fullFileName)
    method ExtractFilePath (line 89) | private string ExtractFilePath(string fullFileName)
    method HasIllegalCharacters (line 100) | public bool HasIllegalCharacters(string path, bool checkAdditional)
    method CheckInvalidPathChars (line 128) | public void CheckInvalidPathChars(string path, bool checkAdditional = ...
    method NormalizeDriveName (line 145) | public string NormalizeDriveName(string name)
    method TryNormalizeDriveName (line 156) | public bool TryNormalizeDriveName(string name, out string result)
    method FixPath (line 190) | internal string FixPath(string path)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/Polyfills/SupportedOSPlatformAttribute.cs
  class SupportedOSPlatformAttribute (line 4) | [AttributeUsage(AttributeTargets.All)]
    method SupportedOSPlatformAttribute (line 7) | public SupportedOSPlatformAttribute(string _)

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/ProductVersionParser.cs
  class ProductVersionParser (line 9) | internal static class ProductVersionParser
    method Parse (line 26) | public static ProductVersion Parse(string productVersion)
    class ProductVersion (line 76) | public class ProductVersion

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/StringExtensions.cs
  class StringExtensions (line 10) | internal static class StringExtensions
    method SplitLines (line 12) | [Pure]
    method Replace (line 28) | [Pure]
    method TrimSlashes (line 62) | [Pure]
    method NormalizeSlashes (line 90) | [Pure]

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/StringOperations.cs
  class StringOperations (line 6) | #if FEATURE_SERIALIZABLE
    method StringOperations (line 17) | public StringOperations(bool caseSensitive)
    method StartsWith (line 30) | public bool StartsWith(string s, string prefix) => s.StartsWith(prefix...
    method EndsWith (line 34) | public bool EndsWith(string s, string suffix) => s.EndsWith(suffix, co...
    method Equals (line 38) | public bool Equals(string x, string y) => string.Equals(x, y, comparis...
    method Equals (line 42) | public bool Equals(char x, char y) => caseSensitive ? x == y : char.To...
    method IndexOf (line 46) | public int IndexOf(string s, string substring) => s.IndexOf(substring,...
    method IndexOf (line 50) | public int IndexOf(string s, string substring, int startIndex) => s.In...
    method Contains (line 54) | public bool Contains(string s, string substring) => s.IndexOf(substrin...
    method Replace (line 58) | public string Replace(string s, string oldValue, string newValue) => s...
    method ToLower (line 62) | public char ToLower(char c) => caseSensitive ? c : char.ToLower(c);
    method ToUpper (line 66) | public char ToUpper(char c) => caseSensitive ? c : char.ToUpper(c);
    method ToLower (line 70) | public string ToLower(string s) => caseSensitive ? s : s.ToLower();
    method ToUpper (line 74) | public string ToUpper(string s) => caseSensitive ? s : s.ToUpper();

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/StringResources.cs
  class StringResources (line 6) | internal static class StringResources

FILE: src/TestableIO.System.IO.Abstractions.TestingHelpers/TimeAdjustments.cs
  type TimeAdjustments (line 6) | [Flags]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/Converters.cs
  class Converters (line 7) | internal static class Converters
    method WrapFileSystemInfos (line 9) | internal static IEnumerable<FileSystemInfoBase> WrapFileSystemInfos(th...
    method WrapFileSystemInfos (line 12) | internal static FileSystemInfoBase[] WrapFileSystemInfos(this FileSyst...
    method WrapFileSystemInfo (line 15) | internal static FileSystemInfoBase WrapFileSystemInfo(this FileSystemI...
    method WrapDirectories (line 18) | internal static IEnumerable<DirectoryInfoBase> WrapDirectories(this IE...
    method WrapDirectories (line 21) | internal static DirectoryInfoBase[] WrapDirectories(this DirectoryInfo...
    method WrapFiles (line 24) | internal static IEnumerable<FileInfoBase> WrapFiles(this IEnumerable<F...
    method WrapFiles (line 27) | internal static FileInfoBase[] WrapFiles(this FileInfo[] input, IFileS...
    method WrapFileSystemInfo (line 30) | private static FileSystemInfoBase WrapFileSystemInfo(IFileSystem fileS...
    method WrapFileInfo (line 55) | private static FileInfoBase WrapFileInfo(IFileSystem fileSystem, FileI...
    method WrapDirectoryInfo (line 58) | private static DirectoryInfoBase WrapDirectoryInfo(IFileSystem fileSys...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryAclExtensions.cs
  class DirectoryAclExtensions (line 9) | public static class DirectoryAclExtensions
    method CreateDirectory (line 16) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 30) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 43) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 58) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryBase.cs
  class DirectoryBase (line 6) | #if FEATURE_SERIALIZABLE
    method DirectoryBase (line 14) | protected DirectoryBase(IFileSystem fileSystem)
    method DirectoryBase (line 19) | [Obsolete("This constructor only exists to support mocking libraries."...
    method CreateDirectory (line 28) | public abstract IDirectoryInfo CreateDirectory(string path);
    method CreateDirectory (line 32) | public abstract IDirectoryInfo CreateDirectory(string path, UnixFileMo...
    method CreateSymbolicLink (line 37) | public abstract IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateTempSubdirectory (line 42) | public abstract IDirectoryInfo CreateTempSubdirectory(string prefix = ...
    method Delete (line 45) | public abstract void Delete(string path);
    method Delete (line 48) | public abstract void Delete(string path, bool recursive);
    method Exists (line 51) | public abstract bool Exists(string path);
    method GetCreationTime (line 54) | public abstract DateTime GetCreationTime(string path);
    method GetCreationTimeUtc (line 57) | public abstract DateTime GetCreationTimeUtc(string path);
    method GetCurrentDirectory (line 60) | public abstract string GetCurrentDirectory();
    method GetDirectories (line 63) | public abstract string[] GetDirectories(string path);
    method GetDirectories (line 66) | public abstract string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 69) | public abstract string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 73) | public abstract string[] GetDirectories(string path, string searchPatt...
    method GetDirectoryRoot (line 77) | public abstract string GetDirectoryRoot(string path);
    method GetFiles (line 80) | public abstract string[] GetFiles(string path);
    method GetFiles (line 83) | public abstract string[] GetFiles(string path, string searchPattern);
    method GetFiles (line 86) | public abstract string[] GetFiles(string path, string searchPattern, S...
    method GetFiles (line 90) | public abstract string[] GetFiles(string path, string searchPattern, E...
    method GetFileSystemEntries (line 94) | public abstract string[] GetFileSystemEntries(string path);
    method GetFileSystemEntries (line 97) | public abstract string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 100) | public abstract string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 104) | public abstract string[] GetFileSystemEntries(string path, string sear...
    method GetLastAccessTime (line 109) | public abstract DateTime GetLastAccessTime(string path);
    method GetLastAccessTimeUtc (line 112) | public abstract DateTime GetLastAccessTimeUtc(string path);
    method GetLastWriteTime (line 115) | public abstract DateTime GetLastWriteTime(string path);
    method GetLastWriteTimeUtc (line 118) | public abstract DateTime GetLastWriteTimeUtc(string path);
    method GetLogicalDrives (line 121) | public abstract string[] GetLogicalDrives();
    method GetParent (line 124) | public abstract IDirectoryInfo GetParent(string path);
    method Move (line 127) | public abstract void Move(string sourceDirName, string destDirName);
    method ResolveLinkTarget (line 131) | public abstract IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetCreationTime (line 135) | public abstract void SetCreationTime(string path, DateTime creationTime);
    method SetCreationTimeUtc (line 138) | public abstract void SetCreationTimeUtc(string path, DateTime creation...
    method SetCurrentDirectory (line 141) | public abstract void SetCurrentDirectory(string path);
    method SetLastAccessTime (line 144) | public abstract void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTimeUtc (line 147) | public abstract void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastWriteTime (line 150) | public abstract void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTimeUtc (line 153) | public abstract void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method EnumerateDirectories (line 156) | public abstract IEnumerable<string> EnumerateDirectories(string path);
    method EnumerateDirectories (line 159) | public abstract IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateDirectories (line 162) | public abstract IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateDirectories (line 166) | public abstract IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateFiles (line 170) | public abstract IEnumerable<string> EnumerateFiles(string path);
    method EnumerateFiles (line 173) | public abstract IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 176) | public abstract IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 180) | public abstract IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFileSystemEntries (line 184) | public abstract IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 187) | public abstract IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 190) | public abstract IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 194) | public abstract IEnumerable<string> EnumerateFileSystemEntries(string ...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoAclExtensions.cs
  class DirectoryInfoAclExtensions (line 9) | public static class DirectoryInfoAclExtensions
    method Create (line 16) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 35) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 54) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 74) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoBase.cs
  class DirectoryInfoBase (line 6) | #if FEATURE_SERIALIZABLE
    method DirectoryInfoBase (line 14) | protected DirectoryInfoBase(IFileSystem fileSystem) : base(fileSystem)
    method DirectoryInfoBase (line 18) | [Obsolete("This constructor only exists to support mocking libraries."...
    method Create (line 22) | public abstract void Create();
    method CreateSubdirectory (line 25) | public abstract IDirectoryInfo CreateSubdirectory(string path);
    method Delete (line 28) | public abstract void Delete(bool recursive);
    method EnumerateDirectories (line 31) | public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories();
    method EnumerateDirectories (line 34) | public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 37) | public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 41) | public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateFiles (line 45) | public abstract IEnumerable<IFileInfo> EnumerateFiles();
    method EnumerateFiles (line 48) | public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 51) | public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 55) | public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFileSystemInfos (line 59) | public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos();
    method EnumerateFileSystemInfos (line 62) | public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 65) | public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 69) | public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method GetDirectories (line 73) | public abstract IDirectoryInfo[] GetDirectories();
    method GetDirectories (line 76) | public abstract IDirectoryInfo[] GetDirectories(string searchPattern);
    method GetDirectories (line 79) | public abstract IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method GetDirectories (line 83) | public abstract IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method GetFiles (line 87) | public abstract IFileInfo[] GetFiles();
    method GetFiles (line 90) | public abstract IFileInfo[] GetFiles(string searchPattern);
    method GetFiles (line 93) | public abstract IFileInfo[] GetFiles(string searchPattern, SearchOptio...
    method GetFiles (line 98) | public abstract IFileInfo[] GetFiles(string searchPattern, Enumeration...
    method GetFileSystemInfos (line 102) | public abstract IFileSystemInfo[] GetFileSystemInfos();
    method GetFileSystemInfos (line 105) | public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 108) | public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 112) | public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method MoveTo (line 116) | public abstract void MoveTo(string destDirName);

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs
  class DirectoryInfoFactory (line 2) | #if FEATURE_SERIALIZABLE
    method DirectoryInfoFactory (line 12) | public DirectoryInfoFactory(IFileSystem fileSystem)
    method New (line 22) | public IDirectoryInfo New(string path)
    method Wrap (line 29) | public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoWrapper.cs
  class DirectoryInfoWrapper (line 9) | #if FEATURE_SERIALIZABLE
    method DirectoryInfoWrapper (line 19) | public DirectoryInfoWrapper(IFileSystem fileSystem, DirectoryInfo inst...
    method CreateAsSymbolicLink (line 26) | public override void CreateAsSymbolicLink(string pathToTarget)
    method Delete (line 33) | public override void Delete()
    method Refresh (line 39) | public override void Refresh()
    method ResolveLinkTarget (line 46) | public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
    method Create (line 135) | public override void Create()
    method CreateSubdirectory (line 141) | public override IDirectoryInfo CreateSubdirectory(string path)
    method Delete (line 147) | public override void Delete(bool recursive)
    method EnumerateDirectories (line 153) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories()
    method EnumerateDirectories (line 159) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 165) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateDirectories (line 172) | public override IEnumerable<IDirectoryInfo> EnumerateDirectories(strin...
    method EnumerateFiles (line 179) | public override IEnumerable<IFileInfo> EnumerateFiles()
    method EnumerateFiles (line 185) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 191) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFiles (line 198) | public override IEnumerable<IFileInfo> EnumerateFiles(string searchPat...
    method EnumerateFileSystemInfos (line 205) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos()
    method EnumerateFileSystemInfos (line 211) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 217) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method EnumerateFileSystemInfos (line 224) | public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(...
    method GetDirectories (line 231) | public override IDirectoryInfo[] GetDirectories()
    method GetDirectories (line 237) | public override IDirectoryInfo[] GetDirectories(string searchPattern)
    method GetDirectories (line 243) | public override IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method GetDirectories (line 250) | public override IDirectoryInfo[] GetDirectories(string searchPattern, ...
    method GetFiles (line 257) | public override IFileInfo[] GetFiles()
    method GetFiles (line 263) | public override IFileInfo[] GetFiles(string searchPattern)
    method GetFiles (line 269) | public override IFileInfo[] GetFiles(string searchPattern, SearchOptio...
    method GetFiles (line 276) | public override IFileInfo[] GetFiles(string searchPattern, Enumeration...
    method GetFileSystemInfos (line 283) | public override IFileSystemInfo[] GetFileSystemInfos()
    method GetFileSystemInfos (line 289) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 295) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method GetFileSystemInfos (line 302) | public override IFileSystemInfo[] GetFileSystemInfos(string searchPatt...
    method MoveTo (line 309) | public override void MoveTo(string destDirName)
    method ToString (line 335) | public override string ToString()
    method GetAccessControl (line 341) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 348) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 355) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryWrapper.cs
  class DirectoryWrapper (line 7) | #if FEATURE_SERIALIZABLE
    method DirectoryWrapper (line 13) | public DirectoryWrapper(IFileSystem fileSystem) : base(fileSystem)
    method CreateDirectory (line 18) | public override IDirectoryInfo CreateDirectory(string path)
    method CreateDirectory (line 27) | [UnsupportedOSPlatform("windows")]
    method CreateSymbolicLink (line 37) | public override IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateTempSubdirectory (line 46) | public override IDirectoryInfo CreateTempSubdirectory(string prefix = ...
    method Delete (line 53) | public override void Delete(string path)
    method Delete (line 59) | public override void Delete(string path, bool recursive)
    method Exists (line 65) | public override bool Exists(string path)
    method GetCreationTime (line 71) | public override DateTime GetCreationTime(string path)
    method GetCreationTimeUtc (line 77) | public override DateTime GetCreationTimeUtc(string path)
    method GetCurrentDirectory (line 83) | public override string GetCurrentDirectory()
    method GetDirectories (line 89) | public override string[] GetDirectories(string path)
    method GetDirectories (line 95) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 101) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectories (line 108) | public override string[] GetDirectories(string path, string searchPatt...
    method GetDirectoryRoot (line 115) | public override string GetDirectoryRoot(string path)
    method GetFiles (line 121) | public override string[] GetFiles(string path)
    method GetFiles (line 127) | public override string[] GetFiles(string path, string searchPattern)
    method GetFiles (line 133) | public override string[] GetFiles(string path, string searchPattern, S...
    method GetFiles (line 140) | public override string[] GetFiles(string path, string searchPattern, E...
    method GetFileSystemEntries (line 147) | public override string[] GetFileSystemEntries(string path)
    method GetFileSystemEntries (line 153) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 159) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetFileSystemEntries (line 166) | public override string[] GetFileSystemEntries(string path, string sear...
    method GetLastAccessTime (line 173) | public override DateTime GetLastAccessTime(string path)
    method GetLastAccessTimeUtc (line 179) | public override DateTime GetLastAccessTimeUtc(string path)
    method GetLastWriteTime (line 185) | public override DateTime GetLastWriteTime(string path)
    method GetLastWriteTimeUtc (line 191) | public override DateTime GetLastWriteTimeUtc(string path)
    method GetLogicalDrives (line 197) | public override string[] GetLogicalDrives()
    method GetParent (line 203) | public override IDirectoryInfo GetParent(string path)
    method Move (line 216) | public override void Move(string sourceDirName, string destDirName)
    method ResolveLinkTarget (line 223) | public override IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetCreationTime (line 231) | public override void SetCreationTime(string path, DateTime creationTime)
    method SetCreationTimeUtc (line 237) | public override void SetCreationTimeUtc(string path, DateTime creation...
    method SetCurrentDirectory (line 243) | public override void SetCurrentDirectory(string path)
    method SetLastAccessTime (line 249) | public override void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTimeUtc (line 255) | public override void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastWriteTime (line 261) | public override void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTimeUtc (line 267) | public override void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method EnumerateDirectories (line 273) | public override IEnumerable<string> EnumerateDirectories(string path)
    method EnumerateDirectories (line 279) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateDirectories (line 285) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateDirectories (line 292) | public override IEnumerable<string> EnumerateDirectories(string path, ...
    method EnumerateFiles (line 299) | public override IEnumerable<string> EnumerateFiles(string path)
    method EnumerateFiles (line 305) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 311) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFiles (line 318) | public override IEnumerable<string> EnumerateFiles(string path, string...
    method EnumerateFileSystemEntries (line 325) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 331) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 337) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...
    method EnumerateFileSystemEntries (line 344) | public override IEnumerable<string> EnumerateFileSystemEntries(string ...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoBase.cs
  class DriveInfoBase (line 4) | #if FEATURE_SERIALIZABLE
    method DriveInfoBase (line 12) | protected DriveInfoBase(IFileSystem fileSystem)
    method DriveInfoBase (line 17) | [Obsolete("This constructor only exists to support mocking libraries."...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoFactory.cs
  class DriveInfoFactory (line 2) | #if FEATURE_SERIALIZABLE
    method DriveInfoFactory (line 12) | public DriveInfoFactory(IFileSystem fileSystem)
    method GetDrives (line 22) | public IDriveInfo[] GetDrives()
    method New (line 36) | public IDriveInfo New(string driveName)
    method Wrap (line 43) | public IDriveInfo Wrap(DriveInfo driveInfo)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoWrapper.cs
  class DriveInfoWrapper (line 8) | #if FEATURE_SERIALIZABLE
    method DriveInfoWrapper (line 23) | public DriveInfoWrapper(IFileSystem fileSystem, DriveInfo instance) : ...
    method ToString (line 165) | public override string ToString()

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileAclExtensions.cs
  class FileAclExtensions (line 9) | public static class FileAclExtensions
    method GetAccessControl (line 16) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 29) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 44) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.Async.cs
  class FileBase (line 10) | partial class FileBase
    method AppendAllBytesAsync (line 14) | public abstract Task AppendAllBytesAsync(string path, byte[] bytes,
    method AppendAllBytesAsync (line 18) | public abstract Task AppendAllBytesAsync(string path, ReadOnlyMemory<b...
    method AppendAllLinesAsync (line 23) | public abstract Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllLinesAsync (line 26) | public abstract Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllTextAsync (line 30) | public abstract Task AppendAllTextAsync(String path, String contents, ...
    method AppendAllTextAsync (line 33) | public abstract Task AppendAllTextAsync(String path, String contents, ...
    method AppendAllTextAsync (line 37) | public abstract Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method AppendAllTextAsync (line 41) | public abstract Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method ReadAllBytesAsync (line 46) | public abstract Task<byte[]> ReadAllBytesAsync(string path, Cancellati...
    method ReadAllLinesAsync (line 48) | public abstract Task<string[]> ReadAllLinesAsync(string path, Cancella...
    method ReadAllLinesAsync (line 51) | public abstract Task<string[]> ReadAllLinesAsync(string path, Encoding...
    method ReadAllTextAsync (line 54) | public abstract Task<string> ReadAllTextAsync(string path, Cancellatio...
    method ReadAllTextAsync (line 57) | public abstract Task<string> ReadAllTextAsync(string path, Encoding en...
    method ReadLinesAsync (line 61) | public abstract IAsyncEnumerable<string> ReadLinesAsync(string path,
    method ReadLinesAsync (line 65) | public abstract IAsyncEnumerable<string> ReadLinesAsync(string path, E...
    method WriteAllBytesAsync (line 70) | public abstract Task WriteAllBytesAsync(string path, byte[] bytes, Can...
    method WriteAllBytesAsync (line 74) | public abstract Task WriteAllBytesAsync(string path, ReadOnlyMemory<by...
    method WriteAllLinesAsync (line 79) | public abstract Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllLinesAsync (line 82) | public abstract Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllTextAsync (line 85) | public abstract Task WriteAllTextAsync(string path, string contents, C...
    method WriteAllTextAsync (line 88) | public abstract Task WriteAllTextAsync(string path, string contents, E...
    method WriteAllTextAsync (line 92) | public abstract Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...
    method WriteAllTextAsync (line 96) | public abstract Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.cs
  class FileBase (line 8) | #if FEATURE_SERIALIZABLE
    method FileBase (line 16) | protected FileBase(IFileSystem fileSystem)
    method FileBase (line 21) | [Obsolete("This constructor only exists to support mocking libraries."...
    method AppendAllBytes (line 31) | public abstract void AppendAllBytes(string path, byte[] bytes);
    method AppendAllBytes (line 34) | public abstract void AppendAllBytes(string path, ReadOnlySpan<byte> by...
    method AppendAllLines (line 38) | public abstract void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllLines (line 41) | public abstract void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllText (line 44) | public abstract void AppendAllText(string path, string contents);
    method AppendAllText (line 47) | public abstract void AppendAllText(string path, string contents, Encod...
    method AppendAllText (line 51) | public abstract void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendAllText (line 54) | public abstract void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendText (line 58) | public abstract StreamWriter AppendText(string path);
    method Copy (line 61) | public abstract void Copy(string sourceFileName, string destFileName);
    method Copy (line 64) | public abstract void Copy(string sourceFileName, string destFileName, ...
    method Create (line 67) | public abstract FileSystemStream Create(string path);
    method Create (line 70) | public abstract FileSystemStream Create(string path, int bufferSize);
    method Create (line 73) | public abstract FileSystemStream Create(string path, int bufferSize, F...
    method CreateSymbolicLink (line 77) | public abstract IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateText (line 80) | public abstract StreamWriter CreateText(string path);
    method Decrypt (line 83) | public abstract void Decrypt(string path);
    method Delete (line 86) | public abstract void Delete(string path);
    method Encrypt (line 89) | public abstract void Encrypt(string path);
    method Exists (line 92) | public abstract bool Exists(string path);
    method GetAttributes (line 95) | public abstract FileAttributes GetAttributes(string path);
    method GetAttributes (line 99) | public abstract FileAttributes GetAttributes(SafeFileHandle fileHandle);
    method GetCreationTime (line 103) | public abstract DateTime GetCreationTime(string path);
    method GetCreationTime (line 107) | public abstract DateTime GetCreationTime(SafeFileHandle fileHandle);
    method GetCreationTimeUtc (line 111) | public abstract DateTime GetCreationTimeUtc(string path);
    method GetCreationTimeUtc (line 115) | public abstract DateTime GetCreationTimeUtc(SafeFileHandle fileHandle);
    method GetLastAccessTime (line 119) | public abstract DateTime GetLastAccessTime(string path);
    method GetLastAccessTime (line 123) | public abstract DateTime GetLastAccessTime(SafeFileHandle fileHandle);
    method GetLastAccessTimeUtc (line 127) | public abstract DateTime GetLastAccessTimeUtc(string path);
    method GetLastAccessTimeUtc (line 131) | public abstract DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle);
    method GetLastWriteTime (line 135) | public abstract DateTime GetLastWriteTime(string path);
    method GetLastWriteTime (line 139) | public abstract DateTime GetLastWriteTime(SafeFileHandle fileHandle);
    method GetLastWriteTimeUtc (line 143) | public abstract DateTime GetLastWriteTimeUtc(string path);
    method GetLastWriteTimeUtc (line 147) | public abstract DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle);
    method GetUnixFileMode (line 152) | public abstract UnixFileMode GetUnixFileMode(string path);
    method GetUnixFileMode (line 157) | public abstract UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle);
    method Move (line 161) | public abstract void Move(string sourceFileName, string destFileName);
    method Move (line 165) | public abstract void Move(string sourceFileName, string destFileName, ...
    method Open (line 169) | public abstract FileSystemStream Open(string path, FileMode mode);
    method Open (line 172) | public abstract FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 175) | public abstract FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 179) | public abstract FileSystemStream Open(string path, FileStreamOptions o...
    method OpenRead (line 183) | public abstract FileSystemStream OpenRead(string path);
    method OpenText (line 186) | public abstract StreamReader OpenText(string path);
    method OpenWrite (line 189) | public abstract FileSystemStream OpenWrite(string path);
    method ReadAllBytes (line 192) | public abstract byte[] ReadAllBytes(string path);
    method ReadAllLines (line 195) | public abstract string[] ReadAllLines(string path);
    method ReadAllLines (line 198) | public abstract string[] ReadAllLines(string path, Encoding encoding);
    method ReadAllText (line 201) | public abstract string ReadAllText(string path);
    method ReadAllText (line 204) | public abstract string ReadAllText(string path, Encoding encoding);
    method ReadLines (line 207) | public abstract IEnumerable<string> ReadLines(string path);
    method ReadLines (line 210) | public abstract IEnumerable<string> ReadLines(string path, Encoding en...
    method Replace (line 213) | public abstract void Replace(string sourceFileName, string destination...
    method Replace (line 216) | public abstract void Replace(string sourceFileName, string destination...
    method ResolveLinkTarget (line 220) | public abstract IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetAttributes (line 224) | public abstract void SetAttributes(string path, FileAttributes fileAtt...
    method SetAttributes (line 228) | public abstract void SetAttributes(SafeFileHandle fileHandle, FileAttr...
    method SetCreationTime (line 232) | public abstract void SetCreationTime(string path, DateTime creationTime);
    method SetCreationTime (line 236) | public abstract void SetCreationTime(SafeFileHandle fileHandle, DateTi...
    method SetCreationTimeUtc (line 240) | public abstract void SetCreationTimeUtc(string path, DateTime creation...
    method SetCreationTimeUtc (line 244) | public abstract void SetCreationTimeUtc(SafeFileHandle fileHandle, Dat...
    method SetLastAccessTime (line 248) | public abstract void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTime (line 252) | public abstract void SetLastAccessTime(SafeFileHandle fileHandle, Date...
    method SetLastAccessTimeUtc (line 256) | public abstract void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastAccessTimeUtc (line 260) | public abstract void SetLastAccessTimeUtc(SafeFileHandle fileHandle, D...
    method SetLastWriteTime (line 264) | public abstract void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTime (line 268) | public abstract void SetLastWriteTime(SafeFileHandle fileHandle, DateT...
    method SetLastWriteTimeUtc (line 272) | public abstract void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method SetLastWriteTimeUtc (line 276) | public abstract void SetLastWriteTimeUtc(SafeFileHandle fileHandle, Da...
    method SetUnixFileMode (line 281) | public abstract void SetUnixFileMode(string path, UnixFileMode mode);
    method SetUnixFileMode (line 286) | public abstract void SetUnixFileMode(SafeFileHandle fileHandle, UnixFi...
    method WriteAllBytes (line 290) | public abstract void WriteAllBytes(string path, byte[] bytes);
    method WriteAllBytes (line 294) | public abstract void WriteAllBytes(string path, ReadOnlySpan<byte> byt...
    method WriteAllLines (line 298) | public abstract void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 301) | public abstract void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 304) | public abstract void WriteAllLines(string path, string[] contents);
    method WriteAllLines (line 307) | public abstract void WriteAllLines(string path, string[] contents, Enc...
    method WriteAllText (line 310) | public abstract void WriteAllText(string path, string contents);
    method WriteAllText (line 313) | public abstract void WriteAllText(string path, string contents, Encodi...
    method WriteAllText (line 317) | public abstract void WriteAllText(string path, ReadOnlySpan<char> cont...
    method WriteAllText (line 320) | public abstract void WriteAllText(string path, ReadOnlySpan<char> cont...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoAclExtensions.cs
  class FileInfoAclExtensions (line 9) | public static class FileInfoAclExtensions
    method GetAccessControl (line 16) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 35) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 55) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoBase.cs
  class FileInfoBase (line 4) | #if FEATURE_SERIALIZABLE
    method FileInfoBase (line 12) | protected FileInfoBase(IFileSystem fileSystem) : base(fileSystem)
    method FileInfoBase (line 16) | [Obsolete("This constructor only exists to support mocking libraries."...
    method AppendText (line 20) | public abstract StreamWriter AppendText();
    method CopyTo (line 23) | public abstract IFileInfo CopyTo(string destFileName);
    method CopyTo (line 26) | public abstract IFileInfo CopyTo(string destFileName, bool overwrite);
    method Create (line 29) | public abstract FileSystemStream Create();
    method CreateText (line 32) | public abstract StreamWriter CreateText();
    method Decrypt (line 35) | public abstract void Decrypt();
    method Encrypt (line 38) | public abstract void Encrypt();
    method MoveTo (line 41) | public abstract void MoveTo(string destFileName);
    method MoveTo (line 45) | public abstract void MoveTo(string destFileName, bool overwrite);
    method Open (line 49) | public abstract FileSystemStream Open(FileMode mode);
    method Open (line 52) | public abstract FileSystemStream Open(FileMode mode, FileAccess access);
    method Open (line 55) | public abstract FileSystemStream Open(FileMode mode, FileAccess access...
    method Open (line 59) | public abstract FileSystemStream Open(FileStreamOptions options);
    method OpenRead (line 63) | public abstract FileSystemStream OpenRead();
    method OpenText (line 66) | public abstract StreamReader OpenText();
    method OpenWrite (line 69) | public abstract FileSystemStream OpenWrite();
    method Replace (line 72) | public abstract IFileInfo Replace(string destinationFileName, string d...
    method Replace (line 75) | public abstract IFileInfo Replace(string destinationFileName, string d...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs
  class FileInfoFactory (line 2) | #if FEATURE_SERIALIZABLE
    method FileInfoFactory (line 12) | public FileInfoFactory(IFileSystem fileSystem)
    method New (line 23) | public IFileInfo New(string fileName)
    method Wrap (line 30) | public IFileInfo Wrap(FileInfo fileInfo)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoWrapper.cs
  class FileInfoWrapper (line 7) | #if FEATURE_SERIALIZABLE
    method FileInfoWrapper (line 17) | public FileInfoWrapper(IFileSystem fileSystem, FileInfo instance) : ba...
    method CreateAsSymbolicLink (line 24) | public override void CreateAsSymbolicLink(string pathToTarget)
    method Delete (line 31) | public override void Delete()
    method Refresh (line 37) | public override void Refresh()
    method ResolveLinkTarget (line 44) | public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)
    method AppendText (line 133) | public override StreamWriter AppendText()
    method CopyTo (line 139) | public override IFileInfo CopyTo(string destFileName)
    method CopyTo (line 145) | public override IFileInfo CopyTo(string destFileName, bool overwrite)
    method Create (line 151) | public override FileSystemStream Create()
    method CreateText (line 157) | public override StreamWriter CreateText()
    method Decrypt (line 163) | [SupportedOSPlatform("windows")]
    method Encrypt (line 170) | [SupportedOSPlatform("windows")]
    method MoveTo (line 177) | public override void MoveTo(string destFileName)
    method MoveTo (line 184) | public override void MoveTo(string destFileName, bool overwrite)
    method Open (line 191) | public override FileSystemStream Open(FileMode mode)
    method Open (line 197) | public override FileSystemStream Open(FileMode mode, FileAccess access)
    method Open (line 203) | public override FileSystemStream Open(FileMode mode, FileAccess access...
    method Open (line 210) | public override FileSystemStream Open(FileStreamOptions options)
    method OpenRead (line 217) | public override FileSystemStream OpenRead()
    method OpenText (line 223) | public override StreamReader OpenText()
    method OpenWrite (line 229) | public override FileSystemStream OpenWrite()
    method Replace (line 235) | public override IFileInfo Replace(string destinationFileName, string d...
    method Replace (line 241) | public override IFileInfo Replace(string destinationFileName, string d...
    method ToString (line 272) | public override string ToString()
    method GetAccessControl (line 278) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 285) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 292) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamAclExtensions.cs
  class FileStreamAclExtensions (line 9) | public static class FileStreamAclExtensions
    method GetAccessControl (line 16) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 34) | [SupportedOSPlatform("windows")]

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamFactory.cs
  class FileStreamFactory (line 4) | #if FEATURE_SERIALIZABLE
    method FileStreamFactory (line 12) | public FileStreamFactory(IFileSystem fileSystem)
    method New (line 21) | public FileSystemStream New(SafeFileHandle handle, FileAccess access)
    method New (line 25) | public FileSystemStream New(SafeFileHandle handle, FileAccess access, ...
    method New (line 29) | public FileSystemStream New(SafeFileHandle handle, FileAccess access, ...
    method New (line 34) | public FileSystemStream New(string path, FileMode mode)
    method New (line 39) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 43) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 47) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 51) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 55) | public FileSystemStream New(string path, FileMode mode, FileAccess acc...
    method New (line 61) | public FileSystemStream New(string path, FileStreamOptions options)
    method Wrap (line 66) | public FileSystemStream Wrap(FileStream fileStream)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamWrapper.cs
  class FileStreamWrapper (line 6) | internal sealed class FileStreamWrapper : FileSystemStream, IFileSystemA...
    method FileStreamWrapper (line 10) | public FileStreamWrapper(FileStream fileStream)
    method GetAccessControl (line 18) | [SupportedOSPlatform("windows")]
    method GetAccessControl (line 25) | [SupportedOSPlatform("windows")]
    method SetAccessControl (line 32) | [SupportedOSPlatform("windows")]
    method Flush (line 46) | public override void Flush(bool flushToDisk)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystem.cs
  class FileSystem (line 4) | #if FEATURE_SERIALIZABLE
    method FileSystem (line 10) | public FileSystem()

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemBase.cs
  class FileSystemBase (line 4) | #if FEATURE_SERIALIZABLE

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemInfoBase.cs
  class FileSystemInfoBase (line 6) | #if FEATURE_SERIALIZABLE
    method FileSystemInfoBase (line 14) | protected FileSystemInfoBase(IFileSystem fileSystem)
    method FileSystemInfoBase (line 19) | [Obsolete("This constructor only exists to support mocking libraries."...
    method CreateAsSymbolicLink (line 29) | public abstract void CreateAsSymbolicLink(string pathToTarget);
    method Delete (line 33) | public abstract void Delete();
    method Refresh (line 36) | public abstract void Refresh();
    method ResolveLinkTarget (line 40) | public abstract IFileSystemInfo ResolveLinkTarget(bool returnFinalTarg...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherBase.cs
  class FileSystemWatcherBase (line 6) | #if FEATURE_SERIALIZABLE
    method BeginInit (line 62) | public abstract void BeginInit();
    method Dispose (line 65) | public void Dispose()
    method EndInit (line 72) | public abstract void EndInit();
    method WaitForChanged (line 75) | public abstract IWaitForChangedResult WaitForChanged(WatcherChangeType...
    method WaitForChanged (line 78) | public abstract IWaitForChangedResult WaitForChanged(WatcherChangeType...
    method WaitForChanged (line 82) | public abstract IWaitForChangedResult WaitForChanged(WatcherChangeType...
    method Dispose (line 101) | public virtual void Dispose(bool disposing)
    method OnCreated (line 109) | protected void OnCreated(object sender, FileSystemEventArgs args)
    method OnChanged (line 117) | protected void OnChanged(object sender, FileSystemEventArgs args)
    method OnDeleted (line 125) | protected void OnDeleted(object sender, FileSystemEventArgs args)
    method OnRenamed (line 133) | protected void OnRenamed(object sender, RenamedEventArgs args)
    method OnError (line 141) | protected void OnError(object sender, ErrorEventArgs args)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherFactory.cs
  class FileSystemWatcherFactory (line 4) | #if FEATURE_SERIALIZABLE
    method FileSystemWatcherFactory (line 12) | public FileSystemWatcherFactory(IFileSystem fileSystem)
    method New (line 21) | public IFileSystemWatcher New()
    method New (line 25) | public IFileSystemWatcher New(string path)
    method New (line 29) | public IFileSystemWatcher New(string path, string filter)
    method Wrap (line 33) | public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherWrapper.cs
  class FileSystemWatcherWrapper (line 6) | #if FEATURE_SERIALIZABLE
    method FileSystemWatcherWrapper (line 17) | public FileSystemWatcherWrapper(IFileSystem fileSystem)
    method FileSystemWatcherWrapper (line 24) | public FileSystemWatcherWrapper(IFileSystem fileSystem, string path)
    method FileSystemWatcherWrapper (line 31) | public FileSystemWatcherWrapper(IFileSystem fileSystem, string path, s...
    method FileSystemWatcherWrapper (line 38) | public FileSystemWatcherWrapper(IFileSystem fileSystem, FileSystemWatc...
    method BeginInit (line 121) | public override void BeginInit()
    method Dispose (line 127) | public override void Dispose(bool disposing)
    method EndInit (line 143) | public override void EndInit()
    method WaitForChanged (line 149) | public override IWaitForChangedResult WaitForChanged(WatcherChangeType...
    method WaitForChanged (line 155) | public override IWaitForChangedResult WaitForChanged(WatcherChangeType...
    method WaitForChanged (line 162) | public override IWaitForChangedResult WaitForChanged(WatcherChangeType...
    type WaitForChangedResultWrapper (line 168) | private readonly struct WaitForChangedResultWrapper
      method WaitForChangedResultWrapper (line 173) | public WaitForChangedResultWrapper(WaitForChangedResult instance)
      method Equals (line 195) | public bool Equals(WaitForChangedResultWrapper other)
      method Equals (line 201) | public override bool Equals(object obj)
      method GetHashCode (line 208) | public override int GetHashCode()

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoBase.cs
  class FileVersionInfoBase (line 6) | #if FEATURE_SERIALIZABLE
    method ToString (line 106) | public new abstract string ToString();

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoFactory.cs
  class FileVersionInfoFactory (line 2) | #if FEATURE_SERIALIZABLE
    method FileVersionInfoFactory (line 12) | public FileVersionInfoFactory(IFileSystem fileSystem)
    method GetVersionInfo (line 21) | public IFileVersionInfo GetVersionInfo(string fileName)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoWrapper.cs
  class FileVersionInfoWrapper (line 6) | #if FEATURE_SERIALIZABLE
    method FileVersionInfoWrapper (line 14) | public FileVersionInfoWrapper(FileVersionInfo fileVersionInfo)
    method ToString (line 182) | public override string ToString()

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.Async.cs
  class FileWrapper (line 10) | partial class FileWrapper
    method AppendAllBytesAsync (line 14) | public override Task AppendAllBytesAsync(string path, byte[] bytes, Ca...
    method AppendAllBytesAsync (line 20) | public override Task AppendAllBytesAsync(string path, ReadOnlyMemory<b...
    method AppendAllLinesAsync (line 26) | public override Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllLinesAsync (line 32) | public override Task AppendAllLinesAsync(string path, IEnumerable<stri...
    method AppendAllTextAsync (line 38) | public override Task AppendAllTextAsync(string path, string contents, ...
    method AppendAllTextAsync (line 44) | public override Task AppendAllTextAsync(string path, string contents, ...
    method AppendAllTextAsync (line 51) | public override Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method AppendAllTextAsync (line 57) | public override Task AppendAllTextAsync(string path, ReadOnlyMemory<ch...
    method ReadAllBytesAsync (line 65) | public override Task<byte[]> ReadAllBytesAsync(string path, Cancellati...
    method ReadAllLinesAsync (line 71) | public override Task<string[]> ReadAllLinesAsync(string path, Cancella...
    method ReadAllLinesAsync (line 77) | public override Task<string[]> ReadAllLinesAsync(string path, Encoding...
    method ReadAllTextAsync (line 83) | public override Task<string> ReadAllTextAsync(string path, Cancellatio...
    method ReadAllTextAsync (line 89) | public override Task<string> ReadAllTextAsync(string path, Encoding en...
    method ReadLinesAsync (line 96) | public override IAsyncEnumerable<string> ReadLinesAsync(string path,
    method ReadLinesAsync (line 101) | public override IAsyncEnumerable<string> ReadLinesAsync(string path, E...
    method WriteAllBytesAsync (line 107) | public override Task WriteAllBytesAsync(string path, byte[] bytes, Can...
    method WriteAllBytesAsync (line 114) | public override Task WriteAllBytesAsync(string path, ReadOnlyMemory<by...
    method WriteAllLinesAsync (line 121) | public override Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllLinesAsync (line 127) | public override Task WriteAllLinesAsync(string path, IEnumerable<strin...
    method WriteAllTextAsync (line 133) | public override Task WriteAllTextAsync(string path, string contents, C...
    method WriteAllTextAsync (line 139) | public override Task WriteAllTextAsync(string path, string contents, E...
    method WriteAllTextAsync (line 146) | public override Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...
    method WriteAllTextAsync (line 152) | public override Task WriteAllTextAsync(string path, ReadOnlyMemory<cha...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.cs
  class FileWrapper (line 9) | #if FEATURE_SERIALIZABLE
    method FileWrapper (line 15) | public FileWrapper(IFileSystem fileSystem) : base(fileSystem)
    method AppendAllBytes (line 21) | public override void AppendAllBytes(string path, byte[] bytes)
    method AppendAllBytes (line 27) | public override void AppendAllBytes(string path, ReadOnlySpan<byte> by...
    method AppendAllLines (line 34) | public override void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllLines (line 40) | public override void AppendAllLines(string path, IEnumerable<string> c...
    method AppendAllText (line 47) | public override void AppendAllText(string path, string contents)
    method AppendAllText (line 53) | public override void AppendAllText(string path, string contents, Encod...
    method AppendAllText (line 60) | public override void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendAllText (line 66) | public override void AppendAllText(string path, ReadOnlySpan<char> con...
    method AppendText (line 73) | public override StreamWriter AppendText(string path)
    method Copy (line 79) | public override void Copy(string sourceFileName, string destFileName)
    method Copy (line 85) | public override void Copy(string sourceFileName, string destFileName, ...
    method Create (line 91) | public override FileSystemStream Create(string path)
    method Create (line 97) | public override FileSystemStream Create(string path, int bufferSize)
    method Create (line 103) | public override FileSystemStream Create(string path, int bufferSize, F...
    method CreateSymbolicLink (line 110) | public override IFileSystemInfo CreateSymbolicLink(string path, string...
    method CreateText (line 117) | public override StreamWriter CreateText(string path)
    method Decrypt (line 123) | [SupportedOSPlatform("windows")]
    method Delete (line 130) | public override void Delete(string path)
    method Encrypt (line 136) | [SupportedOSPlatform("windows")]
    method Exists (line 143) | public override bool Exists(string path)
    method GetAttributes (line 149) | public override FileAttributes GetAttributes(string path)
    method GetAttributes (line 156) | public override FileAttributes GetAttributes(SafeFileHandle fileHandle)
    method GetCreationTime (line 163) | public override DateTime GetCreationTime(string path)
    method GetCreationTime (line 170) | public override DateTime GetCreationTime(SafeFileHandle fileHandle)
    method GetCreationTimeUtc (line 177) | public override DateTime GetCreationTimeUtc(string path)
    method GetCreationTimeUtc (line 184) | public override DateTime GetCreationTimeUtc(SafeFileHandle fileHandle)
    method GetLastAccessTime (line 191) | public override DateTime GetLastAccessTime(string path)
    method GetLastAccessTime (line 198) | public override DateTime GetLastAccessTime(SafeFileHandle fileHandle)
    method GetLastAccessTimeUtc (line 205) | public override DateTime GetLastAccessTimeUtc(string path)
    method GetLastAccessTimeUtc (line 212) | public override DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle)
    method GetLastWriteTime (line 219) | public override DateTime GetLastWriteTime(string path)
    method GetLastWriteTime (line 226) | public override DateTime GetLastWriteTime(SafeFileHandle fileHandle)
    method GetLastWriteTimeUtc (line 233) | public override DateTime GetLastWriteTimeUtc(string path)
    method GetLastWriteTimeUtc (line 240) | public override DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle)
    method GetUnixFileMode (line 248) | [UnsupportedOSPlatform("windows")]
    method GetUnixFileMode (line 257) | [UnsupportedOSPlatform("windows")]
    method Move (line 265) | public override void Move(string sourceFileName, string destFileName)
    method Move (line 272) | public override void Move(string sourceFileName, string destFileName, ...
    method Open (line 280) | public override FileSystemStream Open(string path, FileMode mode)
    method Open (line 286) | public override FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 292) | public override FileSystemStream Open(string path, FileMode mode, File...
    method Open (line 299) | public override FileSystemStream Open(string path, FileStreamOptions o...
    method OpenRead (line 306) | public override FileSystemStream OpenRead(string path)
    method OpenText (line 312) | public override StreamReader OpenText(string path)
    method OpenWrite (line 318) | public override FileSystemStream OpenWrite(string path)
    method ReadAllBytes (line 324) | public override byte[] ReadAllBytes(string path)
    method ReadAllLines (line 330) | public override string[] ReadAllLines(string path)
    method ReadAllLines (line 336) | public override string[] ReadAllLines(string path, Encoding encoding)
    method ReadAllText (line 342) | public override string ReadAllText(string path)
    method ReadAllText (line 348) | public override string ReadAllText(string path, Encoding encoding)
    method ReadLines (line 354) | public override IEnumerable<string> ReadLines(string path)
    method ReadLines (line 360) | public override IEnumerable<string> ReadLines(string path, Encoding en...
    method Replace (line 366) | public override void Replace(string sourceFileName, string destination...
    method Replace (line 372) | public override void Replace(string sourceFileName, string destination...
    method ResolveLinkTarget (line 379) | public override IFileSystemInfo ResolveLinkTarget(string linkPath, boo...
    method SetAttributes (line 387) | public override void SetAttributes(string path, FileAttributes fileAtt...
    method SetAttributes (line 394) | public override void SetAttributes(SafeFileHandle fileHandle, FileAttr...
    method SetCreationTime (line 401) | public override void SetCreationTime(string path, DateTime creationTime)
    method SetCreationTime (line 408) | public override void SetCreationTime(SafeFileHandle fileHandle, DateTi...
    method SetCreationTimeUtc (line 415) | public override void SetCreationTimeUtc(string path, DateTime creation...
    method SetCreationTimeUtc (line 422) | public override void SetCreationTimeUtc(SafeFileHandle fileHandle, Dat...
    method SetLastAccessTime (line 429) | public override void SetLastAccessTime(string path, DateTime lastAcces...
    method SetLastAccessTime (line 436) | public override void SetLastAccessTime(SafeFileHandle fileHandle, Date...
    method SetLastAccessTimeUtc (line 443) | public override void SetLastAccessTimeUtc(string path, DateTime lastAc...
    method SetLastAccessTimeUtc (line 450) | public override void SetLastAccessTimeUtc(SafeFileHandle fileHandle, D...
    method SetLastWriteTime (line 457) | public override void SetLastWriteTime(string path, DateTime lastWriteT...
    method SetLastWriteTime (line 464) | public override void SetLastWriteTime(SafeFileHandle fileHandle, DateT...
    method SetLastWriteTimeUtc (line 471) | public override void SetLastWriteTimeUtc(string path, DateTime lastWri...
    method SetLastWriteTimeUtc (line 478) | public override void SetLastWriteTimeUtc(SafeFileHandle fileHandle, Da...
    method SetUnixFileMode (line 486) | [UnsupportedOSPlatform("windows")]
    method SetUnixFileMode (line 495) | [UnsupportedOSPlatform("windows")]
    method WriteAllBytes (line 531) | public override void WriteAllBytes(string path, byte[] bytes)
    method WriteAllBytes (line 538) | public override void WriteAllBytes(string path, ReadOnlySpan<byte> bytes)
    method WriteAllLines (line 577) | public override void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 624) | public override void WriteAllLines(string path, IEnumerable<string> co...
    method WriteAllLines (line 666) | public override void WriteAllLines(string path, string[] contents)
    method WriteAllLines (line 706) | public override void WriteAllLines(string path, string[] contents, Enc...
    method WriteAllText (line 743) | public override void WriteAllText(string path, string contents)
    method WriteAllText (line 778) | public override void WriteAllText(string path, string contents, Encodi...
    method WriteAllText (line 785) | public override void WriteAllText(string path, ReadOnlySpan<char> cont...
    method WriteAllText (line 791) | public override void WriteAllText(string path, ReadOnlySpan<char> cont...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs
  class PathBase (line 4) | #if FEATURE_SERIALIZABLE
    method PathBase (line 12) | protected PathBase(IFileSystem fileSystem)
    method PathBase (line 17) | [Obsolete("This constructor only exists to support mocking libraries."...
    method ChangeExtension (line 42) | public abstract string ChangeExtension(string path, string extension);
    method Combine (line 45) | public abstract string Combine(params string[] paths);
    method Combine (line 49) | public abstract string Combine(params ReadOnlySpan<string> paths);
    method Combine (line 53) | public abstract string Combine(string path1, string path2);
    method Combine (line 56) | public abstract string Combine(string path1, string path2, string path3);
    method Combine (line 59) | public abstract string Combine(string path1, string path2, string path...
    method Exists (line 63) | public abstract bool Exists(string path);
    method GetDirectoryName (line 67) | public abstract string GetDirectoryName(string path);
    method GetExtension (line 70) | public abstract string GetExtension(string path);
    method GetFileName (line 73) | public abstract string GetFileName(string path);
    method GetFileNameWithoutExtension (line 76) | public abstract string GetFileNameWithoutExtension(string path);
    method GetFullPath (line 79) | public abstract string GetFullPath(string path);
    method GetFullPath (line 83) | public abstract string GetFullPath(string path, string basePath);
    method GetInvalidFileNameChars (line 87) | public abstract char[] GetInvalidFileNameChars();
    method GetInvalidPathChars (line 90) | public abstract char[] GetInvalidPathChars();
    method GetPathRoot (line 93) | public abstract string GetPathRoot(string path);
    method GetRandomFileName (line 96) | public abstract string GetRandomFileName();
    method GetTempFileName (line 99) | public abstract string GetTempFileName();
    method GetTempPath (line 102) | public abstract string GetTempPath();
    method HasExtension (line 105) | public abstract bool HasExtension(string path);
    method IsPathRooted (line 108) | public abstract bool IsPathRooted(string path);
    method IsPathFullyQualified (line 112) | public abstract bool IsPathFullyQualified(string path);
    method GetRelativePath (line 115) | public abstract string GetRelativePath(string relativeTo, string path);
    method Join (line 120) | public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 123) | public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 127) | public abstract string Join(params ReadOnlySpan<string> paths);
    method TryJoin (line 131) | public abstract bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<ch...
    method TryJoin (line 134) | public abstract bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<ch...
    method HasExtension (line 139) | public abstract bool HasExtension(ReadOnlySpan<char> path);
    method IsPathFullyQualified (line 141) | public abstract bool IsPathFullyQualified(ReadOnlySpan<char> path);
    method IsPathRooted (line 143) | public abstract bool IsPathRooted(ReadOnlySpan<char> path);
    method GetDirectoryName (line 145) | public abstract ReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char>...
    method GetExtension (line 147) | public abstract ReadOnlySpan<char> GetExtension(ReadOnlySpan<char> path);
    method GetFileName (line 149) | public abstract ReadOnlySpan<char> GetFileName(ReadOnlySpan<char> path);
    method GetFileNameWithoutExtension (line 151) | public abstract ReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnl...
    method GetPathRoot (line 153) | public abstract ReadOnlySpan<char> GetPathRoot(ReadOnlySpan<char> path);
    method Join (line 158) | public abstract string Join(params string[] paths);
    method Join (line 161) | public abstract string Join(string path1, string path2);
    method Join (line 164) | public abstract string Join(string path1, string path2, string path3);
    method EndsInDirectorySeparator (line 170) | public abstract bool EndsInDirectorySeparator(ReadOnlySpan<char> path);
    method EndsInDirectorySeparator (line 172) | public abstract bool EndsInDirectorySeparator(string path);
    method TrimEndingDirectorySeparator (line 174) | public abstract ReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOn...
    method TrimEndingDirectorySeparator (line 177) | public abstract string TrimEndingDirectorySeparator(string path);
    method Join (line 183) | public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 185) | public abstract string Join(string path1, string path2, string path3, ...

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs
  class PathWrapper (line 4) | #if FEATURE_SERIALIZABLE
    method PathWrapper (line 10) | public PathWrapper(IFileSystem fileSystem) : base(fileSystem)
    method ChangeExtension (line 46) | public override string ChangeExtension(string path, string extension)
    method Combine (line 52) | public override string Combine(params string[] paths)
    method Combine (line 59) | public override string Combine(params ReadOnlySpan<string> paths)
    method Combine (line 66) | public override string Combine(string path1, string path2)
    method Combine (line 72) | public override string Combine(string path1, string path2, string path3)
    method Combine (line 78) | public override string Combine(string path1, string path2, string path...
    method Exists (line 85) | public override bool Exists(string path)
    method GetDirectoryName (line 92) | public override string GetDirectoryName(string path)
    method GetExtension (line 98) | public override string GetExtension(string path)
    method GetFileName (line 104) | public override string GetFileName(string path)
    method GetFileNameWithoutExtension (line 110) | public override string GetFileNameWithoutExtension(string path)
    method GetFullPath (line 116) | public override string GetFullPath(string path)
    method GetFullPath (line 123) | public override string GetFullPath(string path, string basePath)
    method GetInvalidFileNameChars (line 130) | public override char[] GetInvalidFileNameChars()
    method GetInvalidPathChars (line 136) | public override char[] GetInvalidPathChars()
    method GetPathRoot (line 142) | public override string GetPathRoot(string path)
    method GetRandomFileName (line 148) | public override string GetRandomFileName()
    method GetTempFileName (line 154) | public override string GetTempFileName()
    method GetTempPath (line 160) | public override string GetTempPath()
    method HasExtension (line 166) | public override bool HasExtension(string path)
    method IsPathFullyQualified (line 173) | public override bool IsPathFullyQualified(string path)
    method GetRelativePath (line 179) | public override string GetRelativePath(string relativeTo, string path)
    method Join (line 187) | public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 191) | public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 196) | public override string Join(params ReadOnlySpan<string> paths)
    method TryJoin (line 203) | public override bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<ch...
    method TryJoin (line 207) | public override bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<ch...
    method IsPathRooted (line 212) | public override bool IsPathRooted(string path)
    method EndsInDirectorySeparator (line 219) | public override bool EndsInDirectorySeparator(ReadOnlySpan<char> path)
    method EndsInDirectorySeparator (line 225) | public override bool EndsInDirectorySeparator(string path)
    method TrimEndingDirectorySeparator (line 231) | public override ReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOn...
    method TrimEndingDirectorySeparator (line 237) | public override string TrimEndingDirectorySeparator(string path)
    method HasExtension (line 245) | public override bool HasExtension(ReadOnlySpan<char> path)
    method IsPathFullyQualified (line 251) | public override bool IsPathFullyQualified(ReadOnlySpan<char> path)
    method IsPathRooted (line 257) | public override bool IsPathRooted(ReadOnlySpan<char> path)
    method GetDirectoryName (line 263) | public override ReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char>...
    method GetExtension (line 269) | public override ReadOnlySpan<char> GetExtension(ReadOnlySpan<char> path)
    method GetFileName (line 275) | public override ReadOnlySpan<char> GetFileName(ReadOnlySpan<char> path)
    method GetFileNameWithoutExtension (line 281) | public override ReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnl...
    method GetPathRoot (line 287) | public override ReadOnlySpan<char> GetPathRoot(ReadOnlySpan<char> path)
    method Join (line 295) | public override string Join(string path1, string path2, string path3, ...
    method Join (line 301) | public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<cha...
    method Join (line 309) | public override string Join(string path1, string path2)
    method Join (line 315) | public override string Join(string path1, string path2, string path3)
    method Join (line 321) | public override string Join(params string[] paths)

FILE: src/TestableIO.System.IO.Abstractions.Wrappers/Polyfills/SupportedOSPlatformAttribute.cs
  class SupportedOSPlatformAttribute (line 4) | [AttributeUsage(AttributeTargets.All)]
    method SupportedOSPlatformAttribute (line 7) | public SupportedOSPlatformAttribute(string _)

FILE: tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiAcceptance.cs
  class ApiAcceptance (line 3) | public sealed class ApiAcceptance
    method AcceptApiChanges (line 8) | [TestCase]

FILE: tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiApprovalTests.cs
  class ApiApprovalTests (line 10) | public sealed class ApiApprovalTests
    method VerifyPublicApiForWrappers (line 12) | [TestCaseSource(nameof(TargetFrameworksTheoryData))]
    method VerifyPublicApiForTestingHelpers (line 23) | [TestCaseSource(nameof(TargetFrameworksTheoryData))]
    method TargetFrameworksTheoryData (line 34) | private static IEnumerable<string> TargetFrameworksTheoryData()

FILE: tests/TestableIO.System.IO.Abstractions.Api.Tests/Helper.cs
  class Helper (line 12) | public static class Helper
    method CreatePublicApi (line 14) | public static string CreatePublicApi(string framework, string assembly...
    method GetExpectedApi (line 31) | public static string GetExpectedApi(string framework, string assemblyN...
    method GetTargetFrameworks (line 46) | public static IEnumerable<string> GetTargetFrameworks()
    method SetExpectedApi (line 55) | public static void SetExpectedApi(string framework, string assemblyNam...
    method CombinedPaths (line 63) | private static string CombinedPaths(params string[] paths)
    method GetSolutionDirectory (line 68) | private static string GetSolutionDirectory([CallerFilePath] string pat...

FILE: tests/TestableIO.System.IO.Abstractions.Parity.Tests/ApiParityTests.cs
  class ApiParityTests (line 12) | [TestFixture]
    method File (line 15) | [Test]
    method FileInfo (line 22) | [Test]
    method FileVersionInfo (line 29) | [Test]
    method Directory (line 36) | [Test]
    method DirectoryInfo (line 43) | [Test]
    method DriveInfo (line 50) | [Test]
    method Path (line 57) | [Test]
    method FileSystemWatcher (line 64) | [Test]
    method AssertParity (line 71) | private async Task AssertParity(Type referenceType, Type abstractionType)
    type ApiDiff (line 111) | private readonly struct ApiDiff
      method ApiDiff (line 113) | public ApiDiff(IEnumerable<string> extraMembers, IEnumerable<string>...

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryArgumentPathTests.cs
  class MockDirectoryArgumentPathTests (line 7) | public class MockDirectoryArgumentPathTests
    method GetFileSystemActionsForArgumentNullException (line 9) | private static IEnumerable<Action<IDirectory>> GetFileSystemActionsFor...
    method Operations_ShouldThrowArgumentNullExceptionIfPathIsNull (line 31) | [TestCaseSource(nameof(GetFileSystemActionsForArgumentNullException))]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryGetAccessControlTests.cs
  class MockDirectoryGetAccessControlTests (line 9) | [TestFixture]
    method MockDirectory_GetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 14) | [TestCase(" ")]
    method MockDirectory_GetAccessControl_ShouldThrowDirectoryNotFoundExceptionIfDirectoryDoesNotExistInMockData (line 29) | [Test]
    method MockDirectory_GetAccessControl_ShouldReturnAccessControlOfDirectoryData (line 43) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoAccessControlTests.cs
  class MockDirectoryInfoAccessControlTests (line 9) | [TestFixture]
    method MockDirectoryInfo_GetAccessControl_ShouldReturnAccessControlOfDirectoryData (line 14) | [Test]
    method MockDirectoryInfo_SetAccessControl_ShouldSetAccessControlOfDirectoryData (line 41) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs
  class MockDirectoryInfoFactoryTests (line 5) | [TestFixture]
    method MockDirectoryInfoFactory_Wrap_WithNull_ShouldReturnNull (line 8) | [Test]
    method MockDirectoryInfoFactory_Wrap_ShouldKeepNameAndFullName (line 18) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoSymlinkTests.cs
  class MockDirectoryInfoSymlinkTests (line 11) | [TestFixture]
    method MockDirectoryInfo_ResolveLinkTarget_ShouldReturnPathOfTargetLink (line 17) | [Test]
    method MockDirectoryInfo_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink (line 29) | [Test]
    method MockDirectoryInfo_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink (line 42) | [Test]
    method MockDirectoryInfo_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException (line 55) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs
  class MockDirectoryInfoTests (line 10) | [TestFixture]
    method MockDirectoryInfo_GetExtension_ShouldReturnEmptyString (line 22) | [TestCaseSource(nameof(MockDirectoryInfo_GetExtension_Cases))]
    method MockDirectoryInfo_Exists (line 45) | [TestCaseSource(nameof(MockDirectoryInfo_Exists_Cases))]
    method MockDirectoryInfo_Attributes_ShouldReturnMinusOneForNonExistingFile (line 59) | [Test]
    method MockDirectoryInfo_Attributes_Clear_ShouldRemainDirectory (line 69) | [Test]
    method MockDirectoryInfo_Attributes_SetterShouldThrowDirectoryNotFoundExceptionOnNonExistingFileOrDirectory (line 82) | [Test]
    method MockDirectoryInfo_GetFiles_ShouldWorkWithUNCPath (line 91) | [Test]
    method MockDirectoryInfo_GetFiles_ShouldWorkWithUNCPath_WhenCurrentDirectoryIsUnc (line 112) | [Test]
    method MockDirectoryInfo_FullName_ShouldReturnFullNameWithoutIncludingTrailingPathDelimiter (line 135) | [Test]
    method MockDirectoryInfo_GetFileSystemInfos_ShouldReturnBothDirectoriesAndFiles (line 152) | [Test]
    method MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnBothDirectoriesAndFiles (line 167) | [Test]
    method MockDirectoryInfo_GetFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPattern (line 182) | [Test]
    method MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPattern (line 198) | [Test]
    method MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPatternRecursive (line 214) | [Test]
    method MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPatternRecursiveEnumerateOptions (line 231) | [Test]
    method MockDirectoryInfo_GetParent_ShouldReturnDirectoriesAndNamesWithSearchPattern (line 254) | [Test]
    method MockDirectoryInfo_EnumerateFiles_ShouldReturnAllFiles (line 269) | [Test]
    method MockDirectoryInfo_EnumerateDirectories_ShouldReturnAllDirectories (line 293) | [Test]
    method MockDirectoryInfo_FullName_ShouldReturnNormalizedUNCPath (line 315) | [TestCase(@"\\unc\folder", @"\\unc\folder")]
    method MockDirectoryInfo_FullName_ShouldReturnNormalizedPath (line 333) | [TestCase(@"c:\temp\\folder", @"c:\temp\folder")]
    method MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces (line 351) | [TestCase(@"c:\temp\folder  ", @"c:\temp\folder")]
    method MockDirectoryInfo_MoveTo_ShouldUpdateFullName (line 366) | [Test]
    method MockDirectoryInfo_Name_ShouldReturnNameWithTrimmedTrailingSpaces (line 383) | [TestCase(@"c:\temp\\folder ", @"folder")]
    method MockDirectoryInfo_Name_ShouldReturnPathRoot_IfDirectoryPathIsPathRoot (line 398) | [TestCase(@"c:\", @"c:\")]
    method MockDirectoryInfo_Constructor_ShouldThrowArgumentNullException_IfArgumentDirectoryIsNull (line 413) | [Test]
    method MockDirectoryInfo_Constructor_ShouldThrowArgumentNullException_IfArgumentFileSystemIsNull (line 427) | [Test]
    method MockDirectoryInfo_Constructor_ShouldThrowArgumentException_IfArgumentDirectoryIsEmpty (line 440) | [Test]
    method MockDirectoryInfo_ToString_ShouldReturnDirectoryName (line 454) | [TestCase(@"c:\temp\folder\folder")]
    method MockDirectoryInfo_Exists_ShouldReturnCachedData (line 468) | [Test]
    method MockDirectoryInfo_Exists_ShouldUpdateCachedDataOnRefresh (line 483) | [Test]
    method Directory_exists_after_creation (line 499) | [Test]
    method Directory_exists_after_creation_with_security (line 513) | [Test, WindowsOnly(WindowsSpecifics.AccessControlLists)]
    method Directory_does_not_exist_after_delete (line 529) | [Test]
    method Directory_does_not_exist_after_recursive_delete (line 543) | [Test]
    method Directory_still_exists_after_move (line 557) | [Test]
    method MockDirectoryInfo_LastAccessTime_ShouldReflectChangedValue (line 571) | [Test]
    method MockDirectoryInfo_CreationTime_ShouldReturnDefaultTimeForNonExistingFile (line 590) | [Test]
    method MockDirectoryInfo_LastAccessTime_ShouldReturnDefaultTimeForNonExistingFile (line 601) | [Test]
    method MockDirectoryInfo_LastWriteTime_ShouldReturnDefaultTimeForNonExistingFile (line 612) | [Test]
    method MockDirectoryInfo_CreationTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 623) | [Test]
    method MockDirectoryInfo_LastAccessTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 634) | [Test]
    method MockDirectoryInfo_LastWriteTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 645) | [Test]
    method MockDirectoryInfo_Create_WithConflictingFile_ShouldThrowIOException (line 656) | [Test]
    method MockDirectoryInfo_CreationTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 670) | public async Task MockDirectoryInfo_CreationTime_SetterShouldThrowDire...
    method MockDirectoryInfo_LastAccessTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 679) | public async Task MockDirectoryInfo_LastAccessTime_SetterShouldThrowDi...
    method MockDirectoryInfo_LastWriteTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 688) | public async Task MockDirectoryInfo_LastWriteTime_SetterShouldThrowDir...
    method MockDirectoryInfo_CreationTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 697) | public async Task MockDirectoryInfo_CreationTimeUtc_SetterShouldThrowD...
    method MockDirectoryInfo_LastAccessTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 706) | public async Task MockDirectoryInfo_LastAccessTimeUtc_SetterShouldThro...
    method MockDirectoryInfo_LastWriteTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory (line 715) | public async Task MockDirectoryInfo_LastWriteTimeUtc_SetterShouldThrow...

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySetAccessControlTests.cs
  class MockDirectorySetAccessControlTests (line 10) | [TestFixture]
    method MockDirectory_SetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 15) | [TestCase(" ")]
    method MockDirectory_SetAccessControl_ShouldThrowDirectoryNotFoundExceptionIfDirectoryDoesNotExistInMockData (line 31) | [Test]
    method MockDirectory_SetAccessControl_ShouldSetAccessControlOfDirectoryData (line 46) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs
  class MockDirectorySymlinkTests (line 7) | [TestFixture]
    method MockDirectory_CreateSymbolicLink_ShouldReturnFileSystemInfo (line 13) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldSucceedFromDirectoryInfo (line 30) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithNullPath (line 48) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithNullTarget (line 63) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithEmptyPath (line 78) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithEmptyTarget (line 93) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalPath (line 108) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalTarget (line 123) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalCharactersInPath (line 138) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalCharactersInTarget (line 154) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldFailIfPathExists (line 169) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldNotFailIfTargetDoesNotExist (line 186) | [Test]
    method MockDirectory_CreateSymbolicLink_ShouldSetReparsePointAttribute (line 201) | [Test]
    method MockDirectory_ResolveLinkTarget_ShouldReturnPathOfTargetLink (line 215) | [Test]
    method MockDirectory_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink (line 227) | [Test]
    method MockDirectory_ResolveLinkTarget_WithFinalTargetWithTooManyLinks_ShouldThrowIOException (line 248) | [Test]
    method MockDirectory_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink (line 268) | [Test]
    method MockDirectory_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException (line 281) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs
  class MockDirectoryTests (line 12) | [TestFixture]
    method MockDirectory_GetFiles_ShouldReturnAllFilesBelowPathWhenPatternIsEmptyAndSearchOptionIsAllDirectories (line 15) | [Test]
    method MockDirectory_GetFiles_ShouldReturnFilesDirectlyBelowPathWhenPatternIsEmptyAndSearchOptionIsTopDirectoryOnly (line 39) | [Test]
    method MockDirectory_GetFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories (line 59) | [Test]
    method MockDirectory_GetFiles_ShouldReturnAllPatternMatchingFilesWhenEnumerationOptionHasRecurseSubdirectoriesSetToTrue (line 84) | [Test]
    method SetupFileSystem (line 107) | private MockFileSystem SetupFileSystem()
    method MockDirectory_GetFiles_ShouldReturnFilesDirectlyBelowPathWhenPatternIsWildcardAndSearchOptionIsTopDirectoryOnly (line 127) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPattern (line 147) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithThreeCharacterLongFileExtension_RespectingAllDirectorySearchOption (line 166) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithThreeCharacterLongFileExtension_RespectingTopDirectorySearchOption (line 190) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternOnlyIfTheFileExtensionIsThreeCharacterLong (line 212) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithDotsInFilenames (line 234) | [Test]
    method MockDirectory_GetFiles_FilterShouldFindFilesWithSpecialChars (line 264) | [Test]
    method MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternAndSearchOptionTopDirectoryOnly (line 286) | [Test]
    method MockDirectory_GetFiles_ShouldFilterForAllFilesWithNoExtensionsAndSearchOptionTopDirectoryOnly (line 300) | [Test]
    method MockDirectory_GetFiles_ShouldFilterForAllFilesWithNoExtensionsAndSearchOptionAllDirectories (line 328) | [Test]
    method MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndNonTrivialFilterAndSearchOptionTopDirectoryOnly (line 358) | [Test]
    method MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndNonTrivialFilter2AndSearchOptionTopDirectoryOnly (line 386) | [Test]
    method MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndFilterThatIncludesDotAndSearchOptionTopDirectoryOnly (line 413) | [Test]
    method ExecuteTimeAttributeTest (line 439) | private async Task ExecuteTimeAttributeTest(DateTime time, Action<IFil...
    method MockDirectory_GetCreationTime_ShouldReturnCreationTimeFromFile (line 455) | [Test]
    method MockDirectory_GetCreationTimeUtc_ShouldReturnCreationTimeUtcFromFile (line 464) | [Test]
    method MockDirectory_GetLastAccessTime_ShouldReturnLastAccessTimeFromFile (line 473) | [Test]
    method MockDirectory_GetLastAccessTimeUtc_ShouldReturnLastAccessTimeUtcFromFile (line 482) | [Test]
    method MockDirectory_GetLastWriteTime_ShouldReturnLastWriteTimeFromFile (line 491) | [Test]
    method MockDirectory_GetLastWriteTimeUtc_ShouldReturnLastWriteTimeUtcFromFile (line 500) | [Test]
    method MockDirectory_SetCreationTime_ShouldSetCreationTimeOnFile (line 509) | [Test]
    method MockDirectory_SetCreationTimeUtc_ShouldSetCreationTimeUtcOnFile (line 518) | [Test]
    method MockDirectory_SetLastAccessTime_ShouldSetLastAccessTimeOnFile (line 527) | [Test]
    method MockDirectory_SetLastAccessTimeUtc_ShouldSetLastAccessTimeUtcOnFile (line 536) | [Test]
    method MockDirectory_SetLastWriteTime_ShouldSetLastWriteTimeOnFile (line 545) | [Test]
    method MockDirectory_SetLastWriteTimeUtc_ShouldSetLastWriteTimeUtcOnFile (line 554) | [Test]
    method MockDirectory_Exists_ShouldReturnTrueForDirectoryDefinedInMemoryFileSystemWithoutTrailingSlash (line 563) | [Test]
    method MockDirectory_Exists_ShouldReturnTrueForDirectoryDefinedInMemoryFileSystemWithTrailingSlash (line 579) | [Test]
    method MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithoutTrailingSlash (line 595) | [Test]
    method MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithTrailingSlash (line 611) | [Test]
    method MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithSimilarFileName (line 627) | [Test]
    method MockDirectory_Exists_ShouldReturnTrueForDirectoryCreatedViaMocks (line 644) | [Test]
    method MockDirectory_Exists_ShouldReturnTrueForFolderContainingFileAddedToMockFileSystem (line 661) | [Test]
    method MockDirectory_Exists_ShouldReturnFalseForIllegalPath (line 675) | [TestCase(@"\\s")]
    method MockDirectory_CreateDirectory_WithConflictingFile_ShouldThrowIOException (line 690) | [Test]
    method MockDirectory_Exists_ShouldReturnFalseForFiles (line 703) | [Test]
    method MockDirectory_CreateDirectory_ShouldCreateFolderInMemoryFileSystem (line 717) | [Test]
    method MockDirectory_CreateDirectory_ShouldThrowIfIllegalCharacterInPath (line 734) | [Test]
    method MockDirectory_CreateDirectory_ShouldSupportExtendedLengthPaths (line 750) | [Test]
    method MockDirectory_CreateDirectory_ShouldIgnoreExistingDirectoryRegardlessOfTrailingSlash (line 770) | [Test]
    method MockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBase (line 784) | [Test]
    method MockDirectory_CreateDirectory_ShouldTrimTrailingSpaces (line 800) | [Test]
    method MockDirectory_CreMockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBaseWhenDirectoryExists (line 814) | [Test]
    method MockDirectory_CreateDirectory_ShouldWorkWithUNCPath (line 830) | [Test]
    method MockDirectory_CreateDirectory_ShouldFailIfTryingToCreateUNCPathOnlyServer (line 844) | [Test]
    method MockDirectory_CreateDirectory_ShouldSucceedIfTryingToCreateUNCPathShare (line 859) | [Test]
    method MockDirectory_CreateTempSubdirectory_ShouldCreateSubdirectoryInTempDirectory (line 874) | [Test]
    method MockDirectory_CreateTempSubdirectoryWithPrefix_ShouldCreateDirectoryWithGivenPrefixInTempDirectory (line 888) | [Test]
    method MockDirectory_Delete_ShouldDeleteDirectory (line 904) | [Test]
    method MockDirectory_Delete_ShouldNotDeleteAllDirectories (line 920) | [Test]
    method MockDirectory_Delete_ShouldDeleteDirectoryCaseInsensitively (line 943) | [Test]
    method MockDirectory_Delete_ShouldThrowDirectoryNotFoundException_WhenSpecifiedWithInDifferentCase (line 960) | [Test]
    method MockDirectory_Delete_ShouldDeleteDirectoryCaseSensitively (line 977) | [Test]
    method MockDirectory_Delete_ShouldThrowDirectoryNotFoundException (line 994) | [Test]
    method MockDirectory_Delete_ShouldThrowIOException (line 1008) | [Test]
    method MockDirectory_Delete_ShouldDeleteDirectoryRecursively (line 1023) | [Test]
    method MockDirectory_Delete_ShouldThrowIOException_WhenPathIsAFile (line 1041) | [Test]
    method MockDirectory_GetFileSystemEntries_Returns_Files_And_Directories (line 1057) | [Test]
    method MockDirectory_GetFileSystemEntries_ShouldNotReturnSubDirectory_WithSearchOption (line 1074) | [Test]
    method MockDirectory_GetFiles_ShouldThrowArgumentNullException_IfPathParamIsNull (line 1092) | [Test]
    method MockDirectory_GetFiles_ShouldThrowDirectoryNotFoundException_IfPathDoesNotExists (line 1101) | [Test]
    method MockDirectory_GetFiles_Returns_Files (line 1114) | [Test]
    method MockDirectory_GetFiles_Returns_Files_WithRelativePath (line 1130) | [Test]
    method MockDirectory_GetFiles_ShouldThrowAnArgumentNullException_IfSearchPatternIsNull (line 1144) | [Test]
    method MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternEndsWithTwoDots (line 1159) | [Test]
    method MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternContainsTwoDotsFollowedByOneBackslash (line 1174) | [TestCase(@"..\")]
    method MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternContainsTwoDotsFollowedByOneSlash (line 1192) | [TestCase(@"a../b")]
    method MockDirectory_GetFiles_ShouldFindFilesContainingTwoOrMoreDots (line 1208) | [Test]
    method MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternHasIllegalCharacters (line 1225) | [TestCase("aa\t")]
    method MockDirectory_GetRoot_Returns_Root (line 1241) | [Test]
    method MockDirectory_GetLogicalDrives_Returns_LogicalDrives (line 1253) | [Test]
    method MockDirectory_GetDirectories_Returns_Child_Directories (line 1278) | [Test]
    method MockDirectory_GetDirectories_WithTopDirectories_ShouldOnlyReturnTopDirectories (line 1298) | [Test]
    method MockDirectory_GetDirectories_RelativeWithNoSubDirectories_ShouldReturnDirectories (line 1316) | [Test]
    method MockDirectory_GetDirectories_RelativeDirectory_WithoutChildren_ShouldReturnNoChildDirectories (line 1330) | [TestCase(@"Folder\SubFolder")]
    method MockDirectory_GetDirectories_RelativeDirectory_WithChildren_ShouldReturnChildDirectories (line 1345) | [TestCase(@"Folder\SubFolder")]
    method MockDirectory_GetDirectories_AbsoluteWithNoSubDirectories_ShouldReturnDirectories (line 1362) | [Test]
    method MockDirectory_GetDirectories_WithAllDirectories_ShouldReturnsAllMatchingSubFolders (line 1377) | [Test]
    method MockDirectory_GetDirectories_ShouldThrowWhenPathIsNotMocked (line 1395) | [Test]
    method MockDirectory_EnumerateDirectories_Returns_Child_Directories (line 1419) | [Test]
    method MockDirectory_EnumerateDirectories_WithTopDirectories_ShouldOnlyReturnTopDirectories (line 1439) | [Test]
    method MockDirectory_EnumerateDirectories_WithEnumerationOptionsTopDirectories_ShouldOnlyReturnTopDirectories (line 1458) | [Test]
    method MockDirectory_EnumerateDirectories_WithAllDirectories_ShouldReturnsAllMatchingSubFolders (line 1481) | [Test]
    method MockDirectory_EnumerateDirectories_ShouldThrowWhenPathIsNotMocked (line 1499) | [Test]
    method MockDirectory_EnumerateDirectories_ShouldReturnPathsPrefixedWithQueryPath (line 1523) | [TestCaseSource(nameof(GetPrefixTestPaths))]
    method GetPrefixTestPaths (line 1535) | private static IEnumerable<object[]> GetPrefixTestPaths()
    method GetPathsForMoving (line 1543) | public static IEnumerable<object[]> GetPathsForMoving()
    method Move_DirectoryExistsWithDifferentCase_DirectorySuccessfullyMoved (line 1554) | [Test]
    method MockDirectory_Move_ShouldMoveDirectories (line 1569) | [TestCaseSource(nameof(GetPathsForMoving))]
    method MockDirectory_Move_ShouldMoveFiles (line 1588) | [Test]
    method MockDirectory_Move_ShouldMoveDirectoryAttributes (line 1608) | [Test]
    method MockDirectory_Move_ShouldMoveDirectoryWithReadOnlySubDirectory (line 1633) | [Test]
    method MockDirectory_Move_ShouldOnlyMoveDirAndFilesWithinDir (line 1659) | [Test]
    method MockDirectory_GetCurrentDirectory_ShouldReturnValueFromFileSystemConstructor (line 1680) | [Test]
    method MockDirectory_GetCurrentDirectory_ShouldReturnDefaultPathWhenNotSet (line 1691) | [Test]
    method MockDirectory_SetCurrentDirectory_ShouldChangeCurrentDirectory (line 1703) | [Test]
    method MockDirectory_SetCurrentDirectory_WithRelativePath_ShouldUseFullPath (line 1717) | [Test]
    method MockDirectory_GetParent_ShouldThrowArgumentNullExceptionIfPathIsNull (line 1728) | [Test]
    method MockDirectory_GetParent_ShouldThrowArgumentExceptionIfPathIsEmpty (line 1741) | [Test]
    method MockDirectory_GetParent_ShouldReturnADirectoryInfoIfPathDoesNotExist (line 1754) | [Test]
    method MockDirectory_GetParent_ShouldThrowArgumentExceptionIfPathHasIllegalCharacters (line 1767) | [Test]
    method MockDirectory_GetParent_ShouldReturnNullIfPathIsRoot (line 1781) | [Test]
    method MockDirectory_GetParent_ShouldReturnRootIfDirectoryIsInRoot (line 1795) | [Test]
    method MockDirectory_GetParent_ShouldReturnTheParentWithoutTrailingDirectorySeparatorChar (line 1820) | public async Task MockDirectory_GetParent_ShouldReturnTheParentWithout...
    method MockDirectory_Move_ShouldThrowAnIOExceptionIfBothPathAreIdentical (line 1833) | [Test]
    method MockDirectory_Move_ShouldThrowAnIOExceptionIfDirectoriesAreOnDifferentVolumes (line 1848) | [Test]
    method MockDirectory_Move_ShouldThrowADirectoryNotFoundExceptionIfDestinationDirectoryDoesNotExist (line 1865) | [Test]
    method MockDirectory_Move_ShouldThrowAnIOExceptionIfDestinationDirectoryExists (line 1880) | [Test]
    method MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories (line 1897) | [Test]
    method MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories (line 1922) | [Test]
    method MockDirectory_EnumerateFiles_ShouldFilterByExtensionBasedSearchPattern (line 1953) | [Test]
    method MockDirectory_EnumerateFiles_WhenFilterIsUnRooted_ShouldFindFilesInCurrentDirectory (line 1972) | [Test]
    method MockDirectory_EnumerateFiles_WhenFilterIsUnRooted_ShouldNotFindFilesInPathOutsideCurrentDirectory (line 1999) | [Test]
    method MockDirectory_EnumerateFileSystemEntries_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories (line 2025) | [Test]
    method MockDirectory_EnumerateFileSystemEntries_ShouldFilterByExtensionBasedSearchPattern (line 2050) | [Test]
    method MockDirectory_EnumerateFileSystemEntries_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories (line 2070) | [Test]
    method MockDirectory_GetAccessControl_ShouldThrowExceptionOnDirectoryNotFound (line 2101) | [Test]
    method MockDirectory_GetAccessControl_ShouldReturnNewDirectorySecurity (line 2113) | [Test]
    method MockDirectory_SetCreationTime_ShouldNotThrowWithoutTrailingBackslash (line 2129) | [Test]
    method Move_Directory_Throws_When_Target_Directory_Parent_Does_Not_Exist (line 2159) | [Test]
    method Move_Directory_DoesNotThrow_When_Target_Directory_Parent_Exists (line 2197) | [Test]
    method MockDirectory_Exists_ShouldReturnTrue_IfArgIsFrontSlashAndRootDirExists (line 2215) | [Test]
    method MockDirectory_Move_ShouldNotThrowException_InWindows_When_SourceAndDestinationDifferOnlyInCasing (line 2227) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDriveInfoFactoryTests.cs
  class MockDriveInfoFactoryTests (line 9) | [TestFixture]
    method MockDriveInfoFactory_GetDrives_ShouldReturnDrives (line 13) | [Test]
    method MockDriveInfoFactory_GetDrives_ShouldReturnDrivesWithNoDuplicates (line 32) | [Test]
    method MockDriveInfoFactory_GetDrives_ShouldReturnOnlyLocalDrives (line 53) | [Test]
    method MockDriveInfoFactory_New_WithDriveShouldReturnDrive (line 73) | [Test]
    method MockDriveInfoFactory_New_WithPathShouldReturnDrive (line 87) | [Test]
    method MockDriveInfoFactory_Wrap_WithNull_ShouldReturnNull (line 101) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDriveInfoTests.cs
  class MockDriveInfoTests (line 8) | [TestFixture]
    method MockDriveInfo_Constructor_ShouldInitializeLocalWindowsDrives (line 12) | [TestCase(@"c:")]
    method MockDriveInfo_Constructor_ShouldInitializeLocalWindowsDrives_SpecialForWindows (line 28) | [Test]
    method MockDriveInfo_Constructor_ShouldThrowExceptionIfUncPath (line 42) | [TestCase(@"\\unc\share")]
    method MockDriveInfo_RootDirectory_ShouldReturnTheDirectoryBase (line 56) | [Test]
    method MockDriveInfo_ToString_ShouldReturnTheDrivePath (line 72) | [TestCase("c:", "c:\\")]
    method MockDriveInfo_AvailableFreeSpace_ShouldReturnAvailableFreeSpaceOfDriveInMemoryFileSystem (line 89) | [Test]
    method MockDriveInfo_DriveFormat_ShouldReturnDriveFormatOfDriveInMemoryFileSystem (line 108) | [Test]
    method MockDriveInfo_DriveType_ShouldReturnDriveTypeOfDriveInMemoryFileSystem (line 127) | [Test]
    method MockDriveInfo_IsReady_ShouldReturnIsReadyOfDriveInMemoryFileSystem (line 146) | [TestCase(true)]
    method MockDriveInfo_TotalFreeSpace_ShouldReturnTotalFreeSpaceOfDriveInMemoryFileSystem (line 165) | [Test]
    method MockDriveInfo_TotalSize_ShouldReturnTotalSizeOfDriveInMemoryFileSystem (line 184) | [Test]
    method MockDriveInfo_VolumeLabel_ShouldReturnVolumeLabelOfDriveInMemoryFileSystem (line 203) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAdjustTimesTest.cs
  class MockFileAdjustTimesTest (line 8) | [TestFixture]
    method MockFile_AfterAppendAllText_ShouldUpdateLastAccessAndLastWriteTime (line 11) | [Test]
    method MockFile_AfterCopy_ShouldUpdateCreationAndLastAccessTimeOfDestination (line 31) | [Test]
    method MockFile_AfterMove_ShouldUpdateLastAccessTime (line 57) | [Test]
    method MockFile_AfterOpen_WithWriteAccess_ShouldUpdateLastAccessAndLastWriteTime (line 77) | [TestCase(FileMode.Open, FileAccess.ReadWrite)]
    method MockFile_AfterOpen_WithReadOnlyAccess_ShouldUpdateLastAccessTime (line 99) | [TestCase(FileMode.Open, FileAccess.Read)]
    method MockFile_AfterReadAllBytes_ShouldUpdateLastAccessTime (line 120) | [Test]
    method MockFile_AfterReadAllLines_ShouldUpdateLastAccessTime (line 140) | [Test]
    method MockFile_AfterReadAllText_ShouldUpdateLastAccessTime (line 160) | [Test]
    method MockFile_AfterSetAttributes_ShouldUpdateLastAccessTime (line 180) | [Test]
    method MockFile_AfterSetAccessControl_ShouldUpdateLastAccessTime (line 200) | [Test]
    method MockFile_AfterWriteAllBytes_ShouldUpdateLastAccessAndLastWriteTime (line 222) | [Test]
    method MockFile_AfterWriteAllText_ShouldUpdateLastAccessAndLastWriteTime (line 242) | [Test]
    method MockFileStream_OpenRead_ShouldUpdateLastAccessTime (line 262) | [Test]
    method MockFileStream_OpenWrite_ShouldUpdateLastAccessAndLastWriteTime (line 282) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAppendAllLinesTests.cs
  class MockFileAppendAllLinesTests (line 9) | public class MockFileAppendAllLinesTests
    method MockFile_AppendAllLines_ShouldPersistNewLinesToExistingFile (line 11) | [Test]
    method MockFile_AppendAllLines_ShouldPersistNewLinesToNewFile (line 31) | [Test]
    method MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathIsZeroLength (line 50) | [Test]
    method MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 63) | [TestCase(" ")]
    method MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathContainsInvalidChar (line 77) | [TestCase("\"")]
    method MockFile_AppendAllLines_ShouldThrowArgumentNullExceptionIfContentIsNull (line 94) | [Test]
    method MockFile_AppendAllLines_ShouldThrowArgumentNullExceptionIfEncodingIsNull (line 108) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldPersistNewLinesToExistingFile (line 123) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldPersistNewLinesToNewFile (line 143) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldThrowOperationCanceledExceptionIfCancelled (line 162) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathIsZeroLength (line 184) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 197) | [TestCase(" ")]
    method MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathContainsInvalidChar (line 211) | [TestCase("\"")]
    method MockFile_AppendAllLinesAsync_ShouldThrowArgumentNullExceptionIfContentIsNull (line 228) | [Test]
    method MockFile_AppendAllLinesAsync_ShouldThrowArgumentNullExceptionIfEncodingIsNull (line 242) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAppendAllTextTests.cs
  class MockFileAppendAllTextTests (line 15) | public class MockFileAppendAllTextTests
    method MockFile_AppendAllText_ShouldPersistNewText (line 17) | [Test]
    method MockFile_AppendAllText_ShouldPersistNewTextWithDifferentEncoding (line 37) | [Test]
    method MockFile_AppendAllText_ShouldCreateIfNotExist (line 57) | [Test]
    method MockFile_AppendAllText_ShouldCreateIfNotExistWithBom (line 75) | [Test]
    method MockFile_AppendAllText_ShouldFailIfNotExistButDirectoryAlsoNotExist (line 91) | [Test]
    method MockFile_AppendAllText_ShouldPersistNewTextWithCustomEncoding (line 117) | [Test]
    method MockFile_AppendAllText_ShouldWorkWithRelativePath (line 143) | [Test]
    method MockFile_AppendAllTextAsync_ShouldPersistNewText (line 155) | [Test]
    method MockFile_AppendAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled (line 175) | [Test]
    method MockFile_AppendAllTextAsync_ShouldPersistNewTextWithDifferentEncoding (line 197) | [Test]
    method MockFile_AppendAllTextAsync_ShouldCreateIfNotExist (line 217) | [Test]
    method MockFile_AppendAllTextAsync_ShouldCreateIfNotExistWithBom (line 235) | [Test]
    method MockFile_AppendAllTextAsync_ShouldFailIfNotExistButDirectoryAlsoNotExist (line 251) | [Test]
    method MockFile_AppendAllTextAsync_ShouldPersistNewTextWithCustomEncoding (line 277) | [Test]
    method MockFile_AppendAllTextAsync_ShouldWorkWithRelativePath (line 303) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileArgumentPathTests.cs
  class MockFileArgumentPathTests (line 9) | public class MockFileArgumentPathTests
    method GetFileSystemActionsForArgumentNullException (line 11) | private static IEnumerable<Action<IFile>> GetFileSystemActionsForArgum...
    method Operations_ShouldThrowArgumentNullExceptionIfPathIsNull (line 60) | [TestCaseSource(nameof(GetFileSystemActionsForArgumentNullException))]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileCopyTests.cs
  class MockFileCopyTests (line 9) | public class MockFileCopyTests
    method MockFile_Copy_ShouldOverwriteFileWhenOverwriteFlagIsTrue (line 12) | [Test]
    method MockFile_Copy_ShouldAdjustTimestampsOnDestination (line 30) | [Test]
    method MockFile_Copy_ShouldCloneContents (line 47) | [Test]
    method MockFile_Copy_ShouldCloneBinaryContents (line 68) | [Test]
    method MockFile_Copy_ShouldCreateFileAtNewDestination (line 90) | [Test]
    method MockFile_Copy_ShouldThrowExceptionWhenFileExistsAtDestination (line 107) | [Test]
    method MockFile_Copy_ShouldThrowExceptionWhenFolderInDestinationDoesNotExist (line 122) | [TestCase(@"c:\source\demo.txt", @"c:\source\doesnotexist\demo.txt")]
    method MockFile_Copy_ShouldThrowArgumentNullExceptionWhenSourceIsNull_Message (line 136) | [Test]
    method MockFile_Copy_ShouldThrowArgumentNullExceptionWhenSourceIsNull_ParamName (line 147) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceFileNameContainsInvalidChars_Message (line 158) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenSourcePathContainsInvalidChars_Message (line 178) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetPathContainsInvalidChars_Message (line 197) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetFileNameContainsInvalidChars_Message (line 216) | [Test]
    method MockFile_Copy_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidUseOfDriveSeparator (line 236) | [Test]
    method MockFile_Copy_ShouldThrowIOExceptionWhenOverwritingWithSameNameDifferentCase (line 249) | [Test]
    method MockFile_Copy_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidDriveLetter (line 265) | [Test]
    method MockFile_Copy_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidUseOfDriveSeparator (line 278) | [Test]
    method MockFile_Copy_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidDriveLetter (line 291) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsEmpty_Message (line 304) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsEmpty_ParamName (line 315) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsStringOfBlanks (line 326) | [Test]
    method MockFile_Copy_ShouldThrowArgumentNullExceptionWhenTargetIsNull_Message (line 338) | [Test]
    method MockFile_Copy_ShouldThrowArgumentNullExceptionWhenTargetIsNull_ParamName (line 349) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetIsStringOfBlanks (line 360) | [Test]
    method MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetIsEmpty_Message (line 372) | [Test]
    method MockFile_Copy_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist (line 383) | [Test]
    method MockFile_Copy_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_EvenWhenCopyingToItself (line 394) | [Test]
    method MockFile_Copy_ShouldWorkWithRelativePaths (line 405) | [Test]
    method MockFile_Copy_ShouldThrowIOExceptionForInvalidFileShare (line 418) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileCreateTests.cs
  class MockFileCreateTests (line 13) | public class MockFileCreateTests
    method Mockfile_Create_ShouldCreateNewStream (line 15) | [Test]
    method Mockfile_Create_CanWriteToNewStream (line 31) | [Test]
    method Mockfile_Create_OverwritesExistingFile (line 51) | [Test]
    method Mockfile_Create_ShouldThrowUnauthorizedAccessExceptionIfPathIsReadOnly (line 79) | [Test]
    method Mockfile_Create_ShouldThrowArgumentExceptionIfPathIsZeroLength (line 95) | [Test]
    method MockFile_Create_ShouldThrowArgumentNullExceptionIfPathIsNull1 (line 108) | [TestCase("\"")]
    method MockFile_Create_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 125) | [TestCase(" ")]
    method MockFile_Create_ShouldThrowArgumentNullExceptionIfPathIsNull (line 139) | [Test]
    method MockFile_Create_ShouldThrowDirectoryNotFoundExceptionIfCreatingAndParentPathDoesNotExist (line 153) | [Test]
    method MockFile_Create_TruncateShouldWriteNewContents (line 168) | [Test]
    method MockFile_Create_TruncateShouldClearFileContentsOnOpen (line 196) | [Test]
    method MockFile_Create_DeleteOnCloseOption_FileExistsWhileStreamIsOpen (line 221) | [Test]
    method MockFile_Create_DeleteOnCloseOption_FileDeletedWhenStreamIsClosed (line 235) | [Test]
    method MockFile_Create_EncryptedOption_FileNotYetEncryptedWhenStreamIsOpen (line 250) | [Test]
    method MockFile_Create_EncryptedOption_EncryptsFileWhenStreamIsClose (line 265) | [Test]
    method MockFile_Create_ShouldWorkWithRelativePath (line 281) | [Test]
    method MockFile_Create_CanReadFromNewStream (line 292) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileDeleteTests.cs
  class MockFileDeleteTests (line 8) | public class MockFileDeleteTests
    method MockFile_Delete_ShouldDeleteFile (line 10) | [Test]
    method MockFile_Delete_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 26) | [TestCase(" ")]
    method MockFile_Delete_ShouldThrowDirectoryNotFoundExceptionIfParentFolderAbsent (line 40) | [Test]
    method MockFile_Delete_ShouldSilentlyReturnIfNonExistingFileInExistingFolder (line 49) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs
  class MockFileExistsTests (line 9) | public class MockFileExistsTests
    method MockFile_Exists_ShouldReturnTrueForSamePath (line 11) | [Test]
    method MockFile_Exists_ShouldReturnTrueForPathVaryingByCase (line 27) | [Test]
    method MockFile_Exists_ShouldReturnFalseForPathVaryingByCase (line 44) | [Test]
    method MockFile_Exists_ShouldReturnFalseForEntirelyDifferentPath (line 61) | [Test]
    method MockFile_Exists_ShouldReturnFalseForNullPath (line 78) | [Test]
    method MockFile_Exists_ShouldReturnFalseForEmptyStringPath (line 91) | [Test]
    method MockFile_Exists_ShouldReturnFalseForInvalidCharactersInPath (line 104) | [Test]
    method MockFile_Exists_ShouldReturnFalseForDirectories (line 117) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetAccessControlTests.cs
  class MockFileGetAccessControlTests (line 9) | [TestFixture]
    method MockFile_GetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 14) | [TestCase(" ")]
    method MockFile_GetAccessControl_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMockData (line 29) | [Test]
    method MockFile_GetAccessControl_ShouldReturnAccessControlOfFileData (line 43) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetCreationTimeTests.cs
  class MockFileGetCreationTimeTests (line 5) | [TestFixture]
    method MockFile_GetCreationTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 8) | [TestCase(" ")]
    method MockFile_GetCreationTime_ShouldReturnDefaultTimeIfFileDoesNotExist (line 23) | [Test]
    method MockFile_GetCreationTime_ShouldBeSet (line 36) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetCreationTimeUtcTests.cs
  class MockFileGetCreationTimeUtcTests (line 5) | [TestFixture]
    method MockFile_GetCreationTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 8) | [TestCase(" ")]
    method MockFile_GetCreationTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist (line 23) | [Test]
    method MockFile_GetCreationTimeUtc_ShouldBeSet (line 36) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastAccessTimeTests.cs
  class MockFileGetLastAccessTimeTests (line 5) | [TestFixture]
    method MockFile_GetLastAccessTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 8) | [TestCase(" ")]
    method MockFile_GetLastAccessTime_ShouldReturnDefaultTimeIfFileDoesNotExist (line 23) | [Test]
    method MockFile_GetLastAccessTime_ShouldBeSet (line 36) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastAccessTimeUtcTests.cs
  class MockFileGetLastAccessTimeUtcTests (line 5) | [TestFixture]
    method MockFile_GetLastAccessTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 8) | [TestCase(" ")]
    method MockFile_GetLastAccessTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist (line 23) | [Test]
    method MockFile_GetLastAccessTimeUtc_ShouldBeSet (line 36) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastWriteTimeTests.cs
  class MockFileGetLastWriteTimeTests (line 5) | [TestFixture]
    method MockFile_GetLastWriteTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 8) | [TestCase(" ")]
    method MockFile_GetLastWriteTime_ShouldReturnDefaultTimeIfFileDoesNotExist (line 23) | [Test]
    method MockFile_GetLastWriteTime_ShouldBeSet (line 36) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastWriteTimeUtcTests.cs
  class MockFileGetLastWriteTimeUtcTests (line 5) | public class MockFileGetLastWriteTimeUtcTests
    method MockFile_GetLastWriteTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 7) | [TestCase(" ")]
    method MockFile_GetLastWriteTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist (line 22) | [Test]
    method MockFile_GetLastWriteTimeUtc_ShouldBeSet (line 35) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetUnixFileModeTests.cs
  class MockFileGetUnixFileModeTests (line 12) | [UnsupportedOSPlatform("windows")]
    method MockFile_GetUnixFileMode_ShouldReturnDefaultAccessMode (line 16) | [Test]
    method MockFile_GetUnixFileMode_ShouldReturnSpecifiedAccessMode (line 37) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoAccessControlTests.cs
  class MockFileInfoAccessControlTests (line 9) | [TestFixture]
    method MockFileInfo_GetAccessControl_ShouldReturnAccessControlOfFileData (line 14) | [Test]
    method MockFile_SetAccessControl_ShouldSetAccessControlOfFileData (line 41) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs
  class MockFileInfoFactoryTests (line 6) | [TestFixture]
    method MockFileInfoFactory_New_ShouldReturnFileInfoForExistingFile (line 9) | [Test]
    method MockFileInfoFactory_New_ShouldReturnFileInfoForNonExistentFile (line 27) | [Test]
    method MockFileInfoFactory_Wrap_WithNull_ShouldReturnNull (line 45) | [Test]
    method MockFileInfoFactory_Wrap_ShouldKeepNameAndFullName (line 55) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoSymlinkTests.cs
  class MockFileInfoSymlinkTests (line 11) | [TestFixture]
    method MockFileInfo_ResolveLinkTarget_ShouldReturnPathOfTargetLink (line 17) | [Test]
    method MockFileInfo_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink (line 29) | [Test]
    method MockFileInfo_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink (line 42) | [Test]
    method MockFileInfo_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException (line 55) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs
  class MockFileInfoTests (line 9) | [TestFixture]
    method MockFileInfo_NullPath_ThrowArgumentNullException (line 12) | [Test]
    method MockFileInfo_Exists_ShouldReturnTrueIfFileExistsInMemoryFileSystem (line 23) | [Test]
    method MockFileInfo_Exists_ShouldReturnFalseIfFileDoesNotExistInMemoryFileSystem (line 38) | [Test]
    method MockFileInfo_Exists_ShouldReturnFalseIfPathLeadsToDirectory (line 53) | [Test]
    method MockFileInfo_Length_ShouldReturnLengthOfFileInMemoryFileSystem (line 67) | [Test]
    method MockFileInfo_Length_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMemoryFileSystem (line 83) | [Test]
    method MockFileInfo_Length_ShouldThrowFileNotFoundExceptionIfPathLeadsToDirectory (line 99) | [Test]
    method MockFileInfo_CreationTimeUtc_ShouldReturnCreationTimeUtcOfFileInMemoryFileSystem (line 114) | [Test]
    method MockFileInfo_CreationTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 130) | [Test]
    method MockFileInfo_CreationTimeUtc_ShouldSetCreationTimeUtcOfFileInMemoryFileSystem (line 141) | [Test]
    method MockFileInfo_CreationTime_ShouldReturnCreationTimeOfFileInMemoryFileSystem (line 159) | [Test]
    method MockFileInfo_CreationTime_ShouldReturnDefaultTimeForNonExistingFile (line 175) | [Test]
    method MockFileInfo_CreationTime_ShouldSetCreationTimeOfFileInMemoryFileSystem (line 186) | [Test]
    method MockFileInfo_Attributes_ShouldReturnMinusOneForNonExistingFile (line 203) | [Test]
    method MockFileInfo_Attributes_SetterShouldThrowFileNotFoundExceptionOnNonExistingFileOrDirectory (line 213) | [Test]
    method MockFileInfo_IsReadOnly_ShouldSetReadOnlyAttributeOfFileInMemoryFileSystem (line 222) | [Test]
    method MockFileInfo_IsReadOnly_ShouldSetNotReadOnlyAttributeOfFileInMemoryFileSystem (line 237) | [Test]
    method MockFileInfo_AppendText_ShouldAddTextToFileInMemoryFileSystem (line 252) | [Test]
    method MockFileInfo_AppendText_ShouldCreateFileIfMissing (line 274) | [Test]
    method MockFileInfo_OpenWrite_ShouldAddDataToFileInMemoryFileSystem (line 294) | [Test]
    method MockFileInfo_Encrypt_ShouldSetEncryptedAttributeOfFileInMemoryFileSystem (line 320) | [Test]
    method MockFileInfo_Decrypt_ShouldUnsetEncryptedAttributeOfFileInMemoryFileSystem (line 335) | [Test]
    method MockFileInfo_LastAccessTimeUtc_ShouldReturnLastAccessTimeUtcOfFileInMemoryFileSystem (line 351) | [Test]
    method MockFileInfo_LastAccessTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 367) | [Test]
    method MockFileInfo_LastAccessTimeUtc_ShouldSetCreationTimeUtcOfFileInMemoryFileSystem (line 378) | [Test]
    method MockFileInfo_LastWriteTime_ShouldReturnDefaultTimeForNonExistingFile (line 395) | [Test]
    method MockFileInfo_LastWriteTimeUtc_ShouldReturnLastWriteTimeUtcOfFileInMemoryFileSystem (line 406) | [Test]
    method MockFileInfo_LastWriteTimeUtc_ShouldReturnDefaultTimeForNonExistingFile (line 422) | [Test]
    method MockFileInfo_LastWriteTimeUtc_ShouldSetLastWriteTimeUtcOfFileInMemoryFileSystem (line 433) | [Test]
    method MockFileInfo_GetExtension_ShouldReturnExtension (line 450) | [Test]
    method MockFileInfo_GetExtensionWithoutExtension_ShouldReturnEmptyString (line 461) | [Test]
    method MockFileInfo_GetDirectoryName_ShouldReturnCompleteDirectoryPath (line 472) | [Test]
    method MockFileInfo_GetDirectory_ShouldReturnDirectoryInfoWithCorrectPath (line 482) | [Test]
    method MockFileInfo_OpenRead_ShouldReturnByteContentOfFile (line 492) | [Test]
    method MockFileInfo_OpenText_ShouldReturnStringContentOfFile (line 511) | [Test]
    method MockFileInfo_MoveTo_NonExistentDestination_ShouldUpdateFileInfoDirectoryAndFullName (line 527) | [Test]
    method MockFileInfo_MoveTo_NonExistentDestinationFolder_ShouldThrowDirectoryNotFoundException (line 544) | [Test]
    method MockFileInfo_MoveTo_ExistingDestination_ShouldThrowExceptionAboutFileAlreadyExisting (line 556) | [Test]
    method MockFileInfo_MoveTo_SameSourceAndTargetIsANoOp (line 569) | [Test]
    method MockFileInfo_MoveTo_SameSourceAndTargetThrowsExceptionIfSourceDoesNotExist (line 583) | [Test]
    method MockFileInfo_MoveTo_ThrowsExceptionIfSourceDoesNotExist (line 595) | [Test]
    method MockFileInfo_MoveToWithOverwrite_ShouldSucceedWhenTargetAlreadyExists (line 610) | [Test]
    method MockFileInfo_MoveToOnlyCaseChanging_ShouldSucceed (line 628) | [Test]
    method MockFileInfo_CopyTo_ThrowsExceptionIfSourceDoesNotExist (line 645) | [Test]
    method MockFileInfo_CopyTo_ShouldPreserveMockFileDataFileVersionInfo (line 657) | [Test]
    method MockFileInfo_MoveTo_ShouldPreserveMockFileDataFileVersionInfo (line 682) | [Test]
    method MockFileInfo_Replace_ShouldPreserveMockFileDataFileVersionInfo (line 707) | [Test]
    method MockFileInfo_ToString_ShouldReturnOriginalFilePath (line 733) | [TestCase(@"..\..\..\c.txt")]
    method New_Paths_NormalizePaths (line 753) | [TestCaseSource(nameof(New_Paths_NormalizePaths_Cases))]
    method MockFileInfo_Replace_ShouldReplaceFileContents (line 778) | [Test]
    method MockFileInfo_Replace_ShouldCreateBackup (line 796) | [Test]
    method MockFileInfo_Replace_ShouldThrowIfDirectoryOfBackupPathDoesNotExist (line 815) | [Test]
    method MockFileInfo_Replace_ShouldReturnDestinationFileInfo (line 831) | [Test]
    method MockFileInfo_Replace_ShouldThrowIfSourceFileDoesNotExist (line 849) | [Test]
    method MockFileInfo_Replace_ShouldThrowIfDestinationFileDoesNotExist (line 862) | [Test]
    method MockFileInfo_Exists_ShouldReturnCachedData (line 875) | [Test]
    method MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh (line 890) | [Test]
    method MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists (line 906) | [Test]
    method MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists (line 921) | [Test]
    method MockFileInfo_Delete_ShouldUpdateCachedDataAndReturnFalseForExists (line 935) | [Test]
    method MockFileInfo_Delete_ShouldThrowIfFileAccessShareHasNoWriteOrDeleteAccess (line 949) | [Test]
    method MockFileInfo_LastAccessTimeUtcWithUnspecifiedDateTimeKind_ShouldSetLastAccessTimeUtcOfFileInFileSystem (line 962) | [Test]
    method MockFileInfo_LastAccessTimeWithUnspecifiedDateTimeKind_ShouldSetLastAccessTimeOfFileInFileSystem (line 978) | [Test]
    method MockFileInfo_CreationTimeUtcWithUnspecifiedDateTimeKind_ShouldSetCreationTimeUtcOfFileInFileSystem (line 994) | [Test]
    method MockFileInfo_CreationTimeWithUnspecifiedDateTimeKind_ShouldSetCreationTimeOfFileInFileSystem (line 1010) | [Test]
    method MockFileInfo_LastWriteTimeUtcWithUnspecifiedDateTimeKind_ShouldSetLastWriteTimeUtcOfFileInFileSystem (line 1026) | [Test]
    method MockFileInfo_LastWriteTimeWithUnspecifiedDateTimeKind_ShouldSetLastWriteTimeOfFileInFileSystem (line 1042) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileLockTests.cs
  class MockFileLockTests (line 8) | class MockFileLockTests
    method MockFile_Lock_FileShareNoneThrows (line 10) | [Test]
    method MockFile_Lock_FileShareReadDoesNotThrowOnRead (line 21) | [Test]
    method MockFile_Lock_FileShareReadThrowsOnWrite (line 32) | [Test]
    method MockFile_Lock_FileShareWriteThrowsOnRead (line 43) | [Test]
    method MockFile_Lock_FileShareWriteDoesNotThrowOnWrite (line 54) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnOpenRead (line 67) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnWriteAllLines (line 79) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnReadAllLines (line 91) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnReadAllText (line 103) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnReadAllBytes (line 115) | [Test]
    method MockFile_Lock_FileShareNoneThrowsOnAppendLines (line 127) | [Test]
    method MockFile_Lock_FileShareNoneThrowsFileMove (line 140) | [Test]
    method MockFile_Lock_FileShareDeleteDoesNotThrowFileMove (line 153) | [Test]
    method MockFile_Lock_FileShareNoneThrowsDelete (line 165) | [Test]
    method MockFile_Lock_FileShareDeleteDoesNotThrowDelete (line 177) | [Test]
    method IOException (line 189) | private static IResolveConstraint IOException() => Is.TypeOf<IOExcepti...

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileMoveTests.cs
  class MockFileMoveTests (line 8) | public class MockFileMoveTests
    method MockFile_Move_ShouldMoveFileWithinMemoryFileSystem (line 10) | [Test]
    method MockFile_Move_WithReadOnlyAttribute_ShouldMoveFile (line 30) | [Test]
    method MockFile_Move_SameSourceAndTargetIsANoOp (line 45) | [Test]
    method MockFile_Move_ShouldThrowIOExceptionWhenTargetAlreadyExists (line 64) | [Test]
    method MockFile_MoveWithOverwrite_ShouldSucceedWhenTargetAlreadyExists (line 82) | [Test]
    method MockFile_Move_ShouldThrowArgumentNullExceptionWhenSourceIsNull_Message (line 100) | [Test]
    method MockFile_Move_ShouldThrowArgumentNullExceptionWhenSourceIsNull_ParamName (line 111) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenSourceFileNameContainsInvalidChars_Message (line 122) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenSourcePathContainsInvalidChars_Message (line 142) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenTargetPathContainsInvalidChars_Message (line 161) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenTargetFileNameContainsInvalidChars_Message (line 180) | [Test]
    method MockFile_Move_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidUseOfDriveSeparator (line 200) | [Test]
    method MockFile_Move_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidDriveLetter (line 213) | [Test]
    method MockFile_Move_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidUseOfDriveSeparator (line 226) | [Test]
    method MockFile_Move_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidDriveLetter (line 239) | [Test]
    method MockFile_Move_CaseOnlyRename_ShouldChangeCase (line 252) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsEmpty_Message (line 268) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsEmpty_ParamName (line 279) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsStringOfBlanks (line 290) | [Test]
    method MockFile_Move_ShouldThrowArgumentNullExceptionWhenTargetIsNull_Message (line 302) | [Test]
    method MockFile_Move_ShouldThrowArgumentNullExceptionWhenTargetIsNull_ParamName (line 313) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsStringOfBlanks (line 324) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsEmpty_Message (line 336) | [Test]
    method MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsEmpty_ParamName (line 347) | [Test]
    method MockFile_Move_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_Message (line 358) | [Test]
    method MockFile_Move_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_FileName (line 370) | [Test]
    method MockFile_Move_ShouldThrowDirectoryNotFoundExceptionWhenSourcePathDoesNotExist_Message (line 382) | [Test]
    method MockFile_Move_ShouldThrowExceptionWhenSourceDoesNotExist (line 397) | [Test]
    method MockFile_Move_ShouldThrowExceptionWhenSourceDoesNotExist_EvenWhenCopyingToItself (line 408) | [Test]
    method MockFile_Move_ShouldRetainMetadata (line 419) | [Test]
    method MockFile_Move_ShouldThrowExceptionWhenSourceFileShare_Is_Not_Delete (line 438) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileOpenTests.cs
  class MockFileOpenTests (line 11) | public class MockFileOpenTests
    method MockFile_Open_ThrowsOnCreateNewWithExistingFile (line 13) | [Test]
    method MockFile_Open_ThrowsOnOpenWithMissingFile (line 25) | [Test]
    method MockFile_Open_ThrowsOnTruncateWithMissingFile (line 34) | [Test]
    method MockFile_Open_CreatesNewFileFileOnCreate (line 43) | [Test]
    method MockFile_Open_AllowsReadWriteOnCreate (line 57) | [Test]
    method MockFile_Open_CreatesNewFileFileOnCreateNew (line 70) | [Test]
    method MockFile_Open_OpensExistingFileOnAppend (line 84) | [Test]
    method MockFile_Open_OpensExistingFileOnTruncate (line 100) | [Test]
    method MockFile_Open_OpensExistingFileOnOpen (line 117) | [Test]
    method MockFile_Open_OpensExistingFileOnOpenOrCreate (line 139) | [Test]
    method MockFile_Open_CreatesNewFileOnOpenOrCreate (line 161) | [Test]
    method MockFile_Open_OverwritesExistingFileOnCreate (line 175) | [Test]
    method MockFile_OpenText_ShouldRetainLastWriteTime (line 192) | [Test]
    method MockFile_OpenText_ShouldUpdateLastAccessTime (line 213) | [Test]
    method MockFile_Read_ShouldRetainCreationTimeAndUpdateLastAccessTime (line 234) | [Test]
    method MockFile_ReadAsync_ShouldRetainCreationTimeAndUpdateLastAccessTime (line 259) | [Test]
    method MockFile_Write_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime (line 287) | [Test]
    method MockFile_WriteAsync_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime (line 311) | [Test]
    method MockFile_OpenText_ShouldRetainCreationTime (line 335) | [Test]
    method MockFile_Open_ShouldThrowDirectoryNotFoundExceptionIfFileModeCreateAndParentPathDoesNotExist (line 356) | [Test]
    method MockFile_OpenWrite_ShouldWorkWithRelativePath (line 371) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs
  class MockFileReadAllBytesTests (line 9) | public class MockFileReadAllBytesTests
    method MockFile_ReadAllBytes_ShouldReturnOriginalByteData (line 11) | [Test]
    method MockFile_ReadAllBytes_ShouldReturnDataSavedByWriteAllBytes (line 28) | [Test]
    method MockFile_ReadAllBytes_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist (line 41) | [Test]
    method MockFile_ReadAllBytes_ShouldTolerateAltDirectorySeparatorInPath (line 52) | [Test]
    method MockFile_ReadAllBytes_ShouldReturnANewCopyOfTheFileContents (line 65) | [Test]
    method MockFile_ReadAllBytesAsync_ShouldReturnOriginalByteData (line 87) | [Test]
    method MockFile_ReadAllBytesAsync_ShouldReturnDataSavedByWriteAllBytes (line 104) | [Test]
    method MockFile_ReadAllBytesAsync_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist (line 117) | [Test]
    method MockFile_ReadAllBytesAsync_ShouldThrowOperationCanceledExceptionIfCanceled (line 128) | [Test]
    method MockFile_ReadAllBytesAsync_ShouldTolerateAltDirectorySeparatorInPath (line 139) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllLinesTests.cs
  class MockFileReadAllLinesTests (line 14) | public class MockFileReadAllLinesTests
    method MockFile_ReadAllLines_ShouldReturnOriginalTextData (line 16) | [Test]
    method MockFile_ReadAllLines_ShouldReturnOriginalDataWithCustomEncoding (line 36) | [Test]
    method MockFile_ReadAllLines_NotExistingFile_ThrowsCorrectFileNotFoundException (line 57) | [Test]
    method MockFile_ReadAllLines_ShouldNotReturnBom (line 72) | [Test]
    method MockFile_ReadAllLinesAsync_ShouldReturnOriginalTextData (line 89) | [Test]
    method MockFile_ReadAllLinesAsync_ShouldReturnOriginalDataWithCustomEncoding (line 108) | [Test]
    method MockFile_ReadAllLinesAsync_ShouldThrowOperationCanceledExceptionIfCanceled (line 128) | [Test]
    method MockFile_ReadAllLinesAsync_NotExistingFile_ThrowsCorrectFileNotFoundException (line 139) | [Test]
    method MockFile_ReadLinesAsync_ShouldReturnOriginalTextData (line 155) | [Test]
    method MockFile_ReadLinesAsync_ShouldReturnOriginalDataWithCustomEncoding (line 177) | [Test]
    method MockFile_ReadLinesAsync_ShouldThrowOperationCanceledExceptionIfCanceled (line 200) | [Test]
    method MockFile_ReadLinesAsync_NotExistingFile_ThrowsCorrectFileNotFoundException (line 214) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadLinesTests.cs
  class MockFileReadLinesTests (line 11) | public class MockFileReadLinesTests
    method MockFile_ReadLines_ShouldReturnOriginalTextData (line 13) | [Test]
    method MockFile_ReadLines_ShouldReturnOriginalDataWithCustomEncoding (line 32) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetAccessControlTests.cs
  class MockFileSetAccessControlTests (line 9) | [TestFixture]
    method MockFile_SetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 14) | [TestCase(" ")]
    method MockFile_SetAccessControl_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMockData (line 30) | [Test]
    method MockFile_SetAccessControl_ShouldSetAccessControlOfFileData (line 46) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetAttributesTests.cs
  class MockFileSetAttributesTests (line 7) | [TestFixture]
    method MockFile_SetAttributes_ShouldSetAttributesOnFile (line 10) | [Test]
    method MockFile_SetAttributes_ShouldSetAttributesOnDirectory (line 26) | [Test]
    method MockFile_SetAttributes_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces (line 41) | [Test]
    method MockFile_SetAttributes_ShouldThrowFileNotFoundExceptionIfMissingDirectory (line 53) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetUnixFileModeTests.cs
  class MockFileSetUnixFileModeTests (line 12) | [UnsupportedOSPlatform("windows")]
    method MockFile_SetUnixFileMode_ShouldSetSpecifiedAccessMode (line 16) | [Test]
    method MockFile_SetUnixFileMode_ShouldSetSpecifiedAccessModeFlags (line 33) | [TestCase(UnixFileMode.UserRead | UnixFileMode.GroupRead | UnixFileMod...

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamFactoryTests.cs
  class MockFileStreamFactoryTests (line 9) | [TestFixture]
    method MockFileStreamFactory_CreateForExistingFile_ShouldReturnStream (line 12) | [Test]
    method MockFileStreamFactory_CreateForNonExistingFile_ShouldReturnStream (line 32) | [Test]
    method MockFileStreamFactory_CreateForAnExistingFile_ShouldReplaceFileContents (line 48) | [Test]
    method MockFileStreamFactory_CreateInNonExistingDirectory_ShouldThrowDirectoryNotFoundException (line 71) | [Test]
    method MockFileStreamFactory_AppendAccessWithReadWriteMode_ShouldThrowArgumentException (line 88) | [Test]
    method MockFileStreamFactory_InvalidModeForReadAccess_ShouldThrowArgumentException (line 99) | [Test]
    method MockFileStreamFactory_OpenNonExistingFile_ShouldThrowFileNotFoundException (line 115) | [Test]
    method MockFileStreamFactory_CreateExistingFile_Should_Throw_IOException (line 131) | [Test]
    method MockFileStreamFactory_CreateWithRelativePath_CreatesFileInCurrentDirectory (line 148) | [Test]
    method MockFileStream_CanRead_ReturnsFalseForAWriteOnlyStream (line 165) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs
  class MockFileStreamTests (line 10) | [TestFixture]
    method MockFileStream_Flush_WritesByteToFile (line 13) | [Test]
    method MockFileStream_FlushAsync_WritesByteToFile (line 32) | [Test]
    method MockFileStream_Dispose_ShouldNotResurrectFile (line 54) | [Test]
    method MockFileStream_Constructor_Reading_Nonexistent_File_Throws_Exception (line 76) | [Test]
    method MockFileStream_Constructor_ReadTypeNotWritable (line 90) | [Test]
    method MockFileStream_Constructor_WriteAccessOnReadOnlyFile_Throws_Exception (line 107) | [Test]
    method MockFileStream_Constructor_ReadAccessOnReadOnlyFile_Does_Not_Throw_Exception (line 124) | [Test]
    method MockFileStream_Constructor_WriteAccessOnNonReadOnlyFile_Does_Not_Throw_Exception (line 139) | [Test]
    method MockFileStream_Constructor_Insufficient_FileShare_Throws_Exception (line 153) | [Test]
    method MockFileStream_Constructor_Sufficient_FileShare_Does_Not_Throw_Exception (line 173) | [Test]
    method MockFileStream_Close_MultipleCallsDoNotThrow (line 193) | [Test]
    method MockFileStream_Dispose_MultipleCallsDoNotThrow (line 208) | [Test]
    method MockFileStream_Dispose_OperationsAfterDisposeThrow (line 223) | [Test]
    method MockFileStream_Flush_ShouldNotChangePosition (line 238) | [Test]
    method MockFileStream_FlushBool_ShouldNotChangePosition (line 258) | [Test]
    method MockFileStream_Null_ShouldReturnSingletonObject (line 278) | [Test]
    method MockFileStream_DisposeAsync_ShouldNotThrow (line 288) | [Test]
    method MockFileStream_Null_ShouldHaveExpectedProperties (line 299) | [Test]
    method MockFileStream_WhenBufferSizeIsNotPositive_ShouldThrowArgumentNullException (line 309) | [Test]
    method MockFileStream_WhenDestinationIsClosed_ShouldThrowObjectDisposedException (line 325) | [Test]
    method MockFileStream_WhenDestinationIsNull_ShouldThrowArgumentNullException (line 339) | [Test]
    method MockFileStream_WhenDestinationIsReadOnly_ShouldThrowNotSupportedException (line 351) | [Test]
    method MockFileStream_WhenSourceIsClosed_ShouldThrowObjectDisposedException (line 365) | [Test]
    method MockFileStream_WhenSourceIsWriteOnly_ShouldThrowNotSupportedException (line 380) | [Test]
    method MockFileStream_ConflictingShareOrAccess_ShouldThrowUntilHandleReleased (line 394) | [Test]
    method MockFileStream_CompatibleShareOrAccess_ShouldNotThrow (line 414) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs
  class MockFileSymlinkTests (line 7) | [TestFixture]
    method MockFile_CreateSymbolicLink_ShouldReturnFileSystemInfo (line 13) | [Test]
    method MockFile_CreateSymbolicLink_ShouldSucceedFromFileInfo (line 31) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithNullPath (line 50) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithNullTarget (line 66) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithEmptyPath (line 82) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithEmptyTarget (line 98) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithIllegalPath (line 114) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithIllegalTarget (line 130) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithIllegalCharactersInPath (line 146) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailWithIllegalCharactersInTarget (line 163) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailIfPathExists (line 179) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailIfTargetDoesNotExist (line 197) | [Test]
    method MockFile_CreateSymbolicLink_ShouldFailIfPathDirectoryDoesNotExist (line 214) | [Test]
    method MockFile_CreateSymbolicLink_ShouldSetReparsePointAttribute (line 231) | [Test]
    method MockFile_ResolveLinkTarget_ShouldReturnPathOfTargetLink (line 245) | [Test]
    method MockFile_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink (line 257) | [Test]
    method MockFile_ResolveLinkTarget_WithFinalTargetWithTooManyLinks_ShouldThrowIOException (line 278) | [Test]
    method MockFile_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink (line 298) | [Test]
    method MockFile_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException (line 311) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemOptionTests.cs
  class MockFileSystemOptionTests (line 6) | [TestFixture]
    method CreateDefaultTempDir_ShouldBeConsidered (line 9) | [Test]
    method CurrentDirectory_ShouldBeConsidered (line 24) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemSerializationTests.cs
  class MockFileSystemSerializationTests (line 7) | [TestFixture]
    method SerializationBytes (line 10) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
  class MockFileSystemTests (line 12) | [TestFixture]
    method MockFileSystem_GetFile_ShouldReturnNullWhenFileIsNotRegistered (line 15) | [Test]
    method MockFileSystem_GetFile_ShouldReturnFileRegisteredInConstructor (line 29) | [Test]
    method MockFileSystem_GetFile_ShouldReturnFileRegisteredInConstructorWhenPathsDifferByCase (line 44) | [Test]
    method MockFileSystem_GetFile_ShouldNotReturnFileRegisteredInConstructorWhenPathsDifferByCase (line 60) | [Test]
    method MockFileSystem_AddFile_ShouldHandleUnnormalizedSlashes (line 75) | [Test]
    method MockFileSystem_AddFile_ShouldHandleNullFileDataAsEmpty (line 91) | [Test]
    method MockFileSystem_AddFile_ShouldReplaceExistingFile (line 105) | [Test]
    method MockFileSystem_AddEmptyFile_ShouldBeEmpty (line 122) | [Test]
    method MockFileSystem_AddEmptyFile_ShouldExist (line 133) | [Test]
    method MockFileSystem_AddFile_ShouldExist (line 144) | [Test]
    method MockFileSystem_AddDirectory_ShouldExist (line 155) | [Test]
    method MockFileSystem_ByDefault_IsSerializable (line 167) | [Test]
    method MockFileSystem_AddDirectory_ShouldCreateDirectory (line 188) | [Test]
    method MockFileSystem_AddDirectory_ShouldThrowExceptionIfDirectoryIsReadOnly (line 199) | [Test]
    method MockFileSystem_AddDrive_ShouldExist (line 212) | [Test]
    method MockFileSystem_DriveInfo_ShouldNotThrowAnyException (line 224) | [Test]
    method MockFileSystem_AddFile_ShouldMatchCapitalization_PerfectMatch (line 235) | [Test]
    method MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch (line 253) | [Test]
    method MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch_FurtherLeft (line 272) | [Test]
    method MockFileSystem_AddFile_InitializesMockFileDataFileVersionInfoIfNull (line 291) | [Test]
    method MockFileSystem_AddFileFromEmbeddedResource_ShouldAddTheFile (line 306) | [Test]
    method MockFileSystem_AddFilesFromEmbeddedResource_ShouldAddAllTheFiles (line 317) | [Test]
    method MockFileSystem_MoveDirectory_MovesDirectoryWithoutRenamingFiles (line 328) | [Test]
    method MockFileSystem_MoveDirectoryAndFile_ShouldMoveCorrectly (line 340) | [Test]
    method MockFileSystem_RemoveFile_RemovesFiles (line 354) | [Test]
    method MockFileSystem_RemoveFile_ThrowsUnauthorizedAccessExceptionIfFileIsReadOnly (line 365) | [Test]
    method MockFileSystem_AllNodes_ShouldReturnAllNodes (line 383) | [Test]
    method MockFileSystem_AddDirectory_TrailingSlashAllowedButNotRequired (line 407) | [Test]
    method MockFileSystem_GetFiles_ThrowsArgumentExceptionForInvalidCharacters (line 420) | [Test]
    method MockFileSystem_DefaultState_CurrentDirectoryExists (line 435) | [Test]
    method MockFileSystem_Constructor_ThrowsForNonRootedCurrentDirectory (line 447) | [Test]
    method MockFileSystem_Constructor_ShouldSupportDifferentRootDrives (line 456) | [Test]
    method MockFileSystem_Constructor_ShouldAddDifferentDrivesIfNotExist (line 477) | [Test]
    method MockFileSystem_Constructor_ShouldNotDuplicateDrives (line 495) | [Test]
    method MockFileSystem_DefaultState_DefaultTempDirectoryExists (line 510) | [Test]
    method MockFileSystem_FileSystemWatcher_Can_Be_Overridden (line 522) | [Test]
    method MockFileSystem_DeleteDirectoryRecursive_WithReadOnlyFile_ShouldThrowUnauthorizedException (line 531) | [Test]
    class TestFileSystem (line 549) | private class TestFileSystem : MockFileSystem
      method TestFileSystem (line 553) | public TestFileSystem(IFileSystemWatcherFactory fileSystemWatcherFac...
    class TestFileSystemWatcherFactory (line 561) | private class TestFileSystemWatcherFactory : IFileSystemWatcherFactory
      method CreateNew (line 563) | public IFileSystemWatcher CreateNew() => New();
      method CreateNew (line 564) | public IFileSystemWatcher CreateNew(string path) => New(path);
      method CreateNew (line 565) | public IFileSystemWatcher CreateNew(string path, string filter) => N...
      method New (line 566) | public IFileSystemWatcher New()
      method New (line 569) | public IFileSystemWatcher New(string path)
      method New (line 572) | public IFileSystemWatcher New(string path, string filter)
      method Wrap (line 575) | public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)
      method FromPath (line 578) | public IFileSystemWatcher FromPath(string path) => new TestFileSyste...
    class TestFileSystemWatcher (line 582) | private class TestFileSystemWatcher : FileSystemWatcherBase
      method TestFileSystemWatcher (line 584) | public TestFileSystemWatcher(string path) => Path = path;
      method TestFileSystemWatcher (line 586) | public TestFileSystemWatcher(string path, string filter)
      method BeginInit (line 605) | public override void BeginInit() { }
      method EndInit (line 606) | public override void EndInit() { }
      method WaitForChanged (line 607) | public override IWaitForChangedResult WaitForChanged(WatcherChangeTy...
      method WaitForChanged (line 613) | public override IWaitForChangedResult WaitForChanged(WatcherChangeTy...
      method WaitForChanged (line 621) | public override IWaitForChangedResult WaitForChanged(WatcherChangeTy...

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemWatcherFactoryTests.cs
  class MockFileSystemWatcherFactoryTests (line 6) | [TestFixture]
    method MockFileSystemWatcherFactory_CreateNew_ShouldThrowNotImplementedException (line 9) | [Test]
    method MockFileSystemWatcherFactory_CreateNewWithPath_ShouldThrowNotImplementedException (line 16) | [Test]
    method MockFileSystemWatcherFactory_CreateNewWithPathAndFilter_ShouldThrowNotImplementedException (line 24) | [Test]
    method MockFileSystemWatcherFactory_FromPath_ShouldThrowNotImplementedException (line 33) | [Test]
    method MockFileSystemWatcherFactory_Wrap_WithNull_ShouldReturnNull (line 41) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileTests.cs
  class MockFileTests (line 12) | [TestFixture]
    method MockFile_Constructor_ShouldThrowArgumentNullExceptionIfMockFileDataAccessorIsNull (line 15) | [Test]
    method MockFile_GetSetCreationTime_ShouldPersist (line 28) | [Test]
    method MockFile_SetCreationTimeUtc_ShouldAffectCreationTime (line 48) | [Test]
    method MockFile_SetCreationTime_ShouldAffectCreationTimeUtc (line 68) | [Test]
    method MockFile_GetSetLastAccessTime_ShouldPersist (line 88) | [Test]
    method MockFile_SetLastAccessTimeUtc_ShouldAffectLastAccessTime (line 108) | [Test]
    method MockFile_SetLastAccessTime_ShouldAffectLastAccessTimeUtc (line 128) | [Test]
    method MockFile_GetSetLastWriteTime_ShouldPersist (line 148) | [Test]
    method ExecuteDefaultValueTest (line 168) | static async Task ExecuteDefaultValueTest(Func<MockFile, string, DateT...
    method MockFile_GetLastWriteTimeOfNonExistentFile_ShouldReturnDefaultValue (line 180) | [Test]
    method MockFile_GetLastWriteTimeUtcOfNonExistentFile_ShouldReturnDefaultValue (line 186) | [Test]
    method MockFile_GetLastAccessTimeUtcOfNonExistentFile_ShouldReturnDefaultValue (line 192) | [Test]
    method MockFile_GetLastAccessTimeOfNonExistentFile_ShouldReturnDefaultValue (line 198) | [Test]
    method MockFile_GetAttributeOfNonExistentFileButParentDirectoryExists_ShouldThrowOneFileNotFoundException (line 204) | [Test]
    method MockFile_GetAttributeOfNonExistentFile_ShouldThrowOneDirectoryNotFoundException (line 218) | [Test]
    method MockFile_GetAttributeOfExistingFile_ShouldReturnCorrectValue (line 231) | [Test]
    method MockFile_GetAttributeOfExistingUncDirectory_ShouldReturnCorrectValue (line 247) | [Test]
    method MockFile_GetAttributeWithEmptyParameter_ShouldThrowOneArgumentException (line 261) | [Test]
    method MockFile_GetAttributeWithIllegalParameter_ShouldThrowOneArgumentException (line 275) | [Test]
    method MockFile_GetCreationTimeOfNonExistentFile_ShouldReturnDefaultValue (line 290) | [Test]
    method MockFile_GetCreationTimeUtcOfNonExistentFile_ShouldReturnDefaultValue (line 296) | [Test]
    method MockFile_SetLastWriteTimeUtc_ShouldAffectLastWriteTime (line 302) | [Test]
    method MockFile_SetLastWriteTime_ShouldAffectLastWriteTimeUtc (line 322) | [Test]
    method MockFile_ReadAllText_ShouldReturnOriginalTextData (line 342) | [Test]
    method MockFile_ReadAllText_ShouldReturnOriginalDataWithCustomEncoding (line 361) | [Test]
    method GetEncodingsForReadAllText (line 381) | public static IEnumerable<Encoding> GetEncodingsForReadAllText()
    method MockFile_ReadAllText_ShouldReturnTheOriginalContentWhenTheFileContainsDifferentEncodings (line 393) | [TestCaseSource(typeof(MockFileTests), nameof(GetEncodingsForReadAllTe...
    method MockFile_OpenWrite_ShouldCreateNewFiles (line 412) | [Test]
    method MockFile_OpenWrite_ShouldNotCreateFolders (line 429) | [Test]
    method MockFile_OpenWrite_ShouldOverwriteExistingFiles (line 438) | [Test]
    method MockFile_Delete_ShouldRemoveFileFromFileSystem (line 458) | [Test]
    method MockFile_Delete_Should_RemoveFiles (line 474) | [Test]
    method MockFile_Delete_No_File_Does_Nothing (line 485) | [Test]
    method MockFile_Delete_ShouldThrowUnauthorizedAccessException_WhenPathIsADirectory (line 498) | [Test]
    method MockFile_AppendText_AppendTextToAnExistingFile (line 514) | [Test]
    method MockFile_AppendText_CreatesNewFileForAppendToNonExistingFile (line 533) | [Test]
    method Serializable_works (line 552) | [Test]
    method Serializable_can_deserialize (line 572) | [Test]
    method MockFile_Encrypt_ShouldSetEncryptedAttribute (line 596) | [Test]
    method MockFile_Decrypt_ShouldRemoveEncryptedAttribute (line 617) | [Test]
    method MockFile_Replace_ShouldReplaceFileContents (line 642) | [Test]
    method MockFile_Replace_ShouldCreateBackup (line 658) | [Test]
    method MockFile_Replace_ShouldThrowIfDirectoryOfBackupPathDoesNotExist (line 675) | [Test]
    method MockFile_Replace_ShouldThrowIfSourceFileDoesNotExist (line 690) | [Test]
    method MockFile_Replace_ShouldThrowIfDestinationFileDoesNotExist (line 702) | [Test]
    method MockFile_OpenRead_ShouldReturnReadOnlyStream (line 714) | [Test]
    method MockFile_Replace_SourceAndDestinationDifferOnlyInCasing_ShouldThrowIOException (line 734) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileVersionInfoFactoryTests.cs
  class MockFileVersionInfoFactoryTests (line 6) | [TestFixture]
    method MockFileVersionInfoFactory_GetVersionInfo_ShouldReturnTheFileVersionInfoOfTheMockFileData (line 9) | [Test]
    method MockFileVersionInfoFactory_GetVersionInfo_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist (line 26) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileVersionInfoTests.cs
  class MockFileVersionInfoTests (line 5) | [TestFixture]
    method MockFileVersionInfo_ToString_ShouldReturnTheDefaultFormat (line 8) | [Test]
    method MockFileVersionInfo_Constructor_ShouldSetFileAndProductVersionNumbersIfFileAndProductVersionAreNotNull (line 52) | [Test]
    method MockFileVersionInfo_Constructor_ShouldNotSetFileAndProductVersionNumbersIfFileAndProductVersionAreNull (line 69) | [Test]

FILE: tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs
  class MockFileWriteAllBytesTests (line 9) | public class MockFileWriteAllBytesTests
    method MockFile_WriteAllBytes_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists (line 11) | [Test]
    method MockFile_WriteAllBytes_ShouldWriteDataToMemoryFileSystem (line 23) | [Test]
    method MockFile_WriteAllBytes_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden (line 36) | [Test]
    method MockFile_WriteAllBytes_ShouldThrowAnArgumentExceptionIfContainsIllegalCharacters (line 52) | [Test]
    method MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfPathIsNull (line 64) | [Test]
    method MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfBytesAreNull (line 74) | [Test]
    method MockFile_WriteAllBytes_ShouldWriteASeparateCopyToTheFileSystem (line 87) | [Test]
    method MockFile_WriteAllBytesAsync_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists (line 109) | [Test]
    method MockFile_WriteAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled (line 121) | [Test]
    method MockFile_WriteAllBytesAsync_ShouldWriteDataTo
Condensed preview — 268 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,876K chars).
[
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 222,
    "preview": "{\n    \"name\": \"C# (.NET Core)\",\n    \"image\": \"mcr.microsoft.com/vscode/devcontainers/dotnet:10.0\",\n    \"settings\": {\n   "
  },
  {
    "path": ".editorconfig",
    "chars": 205,
    "preview": "; This file is for unifying the coding style for different editors and IDEs.\n; More information at http://EditorConfig.o"
  },
  {
    "path": ".gitattributes",
    "chars": 483,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 491,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: 'state: needs discussion, type: bug'\nas"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 637,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: 'state: needs discussion, type: enha"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 6707,
    "preview": "# System.IO.Abstractions Development Guide\n\nSystem.IO.Abstractions is a .NET library that provides testable abstractions"
  },
  {
    "path": ".github/mergify.yml",
    "chars": 399,
    "preview": "pull_request_rules:\n  - name: Automatic merge on approval\n    conditions:\n      - \"#approved-reviews-by>=1\"\n    actions:"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 5862,
    "preview": "name: Build\n\non:\n  push:\n    branches: [ main ]\n    tags: [ 'v[0-9]+.[0-9]+.[0-9]+*' ]\n\njobs:\n  unit-tests:\n    name: \"U"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 2899,
    "preview": "name: CI\n\non:\n  workflow_dispatch:\n  pull_request:\n    branches: [ main ]\n\njobs:\n  unit-tests:\n    name: \"Unit tests\"\n  "
  },
  {
    "path": ".gitignore",
    "chars": 2797,
    "preview": "# Artifact and test results directories\n/Artifacts\n/TestResults\n\n## Ignore Visual Studio temporary files, build results,"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/.gitignore",
    "chars": 291,
    "preview": "# Default ignored files\n/shelf/\n/workspace.xml\n# Rider ignored files\n/contentModel.xml\n/projectSettingsUpdater.xml\n/.ide"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/encodings.xml",
    "chars": 169,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" addBOMForNewFiles=\"with BOM un"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/indexLayout.xml",
    "chars": 198,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"UserContentModel\">\n    <attachedFolders "
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/vcs.xml",
    "chars": 180,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": ".nuke/build.schema.json",
    "chars": 3602,
    "preview": "{\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n  \"definitions\": {\n    \"Host\": {\n      \"type\": \"string\",\n     "
  },
  {
    "path": ".nuke/parameters.json",
    "chars": 82,
    "preview": "{\n  \"$schema\": \"build.schema.json\",\n  \"Solution\": \"System.IO.Abstractions.slnx\"\n}\n"
  },
  {
    "path": ".remarkrc.yaml",
    "chars": 86,
    "preview": "plugins:\n  - remark-preset-lint-consistent\n  - remark-preset-lint-markdown-style-guide"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 112,
    "preview": "{\n    \"recommendations\": [\n        \"ms-vscode-remote.remote-containers\",\n        \"ms-dotnettools.csharp\"\n    ]\n}"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3360,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2024,
    "preview": "# Contributor guide\n\n## Versioning\n\nThis library uses [Nerdbank.GitVersioning](https://github.com/AArnott/Nerdbank.GitVe"
  },
  {
    "path": "Directory.Build.props",
    "chars": 3219,
    "preview": "<Project>\n  <PropertyGroup>\n    <Product>System.IO.Abstractions</Product>\n    <Copyright>Copyright © Tatham Oddie &amp; "
  },
  {
    "path": "Directory.Packages.props",
    "chars": 2046,
    "preview": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>"
  },
  {
    "path": "LICENSE",
    "chars": 1113,
    "preview": "The MIT License (MIT)\n\nCopyright (c) Tatham Oddie and Contributors\n\nAll rights reserved.\n\nPermission is hereby granted, "
  },
  {
    "path": "Pipeline/.editorconfig",
    "chars": 506,
    "preview": "[*.cs]\ndotnet_style_qualification_for_field = false:warning\ndotnet_style_qualification_for_property = false:warning\ndotn"
  },
  {
    "path": "Pipeline/Build.ApiChecks.cs",
    "chars": 799,
    "preview": "using Nuke.Common;\nusing Nuke.Common.ProjectModel;\nusing Nuke.Common.Tooling;\nusing Nuke.Common.Tools.DotNet;\nusing stat"
  },
  {
    "path": "Pipeline/Build.CodeAnalysis.cs",
    "chars": 1080,
    "preview": "using Nuke.Common;\nusing Nuke.Common.Tools.SonarScanner;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespac"
  },
  {
    "path": "Pipeline/Build.CodeCoverage.cs",
    "chars": 768,
    "preview": "using Nuke.Common;\nusing Nuke.Common.Tooling;\nusing Nuke.Common.Tools.ReportGenerator;\nusing static Nuke.Common.Tools.Re"
  },
  {
    "path": "Pipeline/Build.Compile.cs",
    "chars": 3455,
    "preview": "using System;\nusing System.Linq;\nusing Nuke.Common;\nusing Nuke.Common.IO;\nusing Nuke.Common.Tools.DotNet;\nusing Nuke.Com"
  },
  {
    "path": "Pipeline/Build.Pack.cs",
    "chars": 3249,
    "preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing Nuke.Common;\nusing Nuke.C"
  },
  {
    "path": "Pipeline/Build.UnitTest.cs",
    "chars": 2824,
    "preview": "using System.IO;\nusing System.Linq;\nusing Nuke.Common;\nusing Nuke.Common.IO;\nusing Nuke.Common.ProjectModel;\nusing Nuke."
  },
  {
    "path": "Pipeline/Build.cs",
    "chars": 1021,
    "preview": "using Nuke.Common;\nusing Nuke.Common.CI.GitHubActions;\nusing Nuke.Common.IO;\nusing Nuke.Common.ProjectModel;\nusing Nuke."
  },
  {
    "path": "Pipeline/Build.csproj",
    "chars": 1191,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0</Targ"
  },
  {
    "path": "Pipeline/Build.csproj.DotSettings",
    "chars": 6157,
    "preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
  },
  {
    "path": "Pipeline/BuildExtensions.cs",
    "chars": 1141,
    "preview": "using System;\nusing Nuke.Common.CI.GitHubActions;\nusing Nuke.Common.Tools.GitVersion;\nusing Nuke.Common.Tools.SonarScan"
  },
  {
    "path": "Pipeline/Configuration.cs",
    "chars": 484,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Nuke.Common.Tooling;\n\n[TypeConverter(typeof(TypeConv"
  },
  {
    "path": "Pipeline/Directory.Build.props",
    "chars": 428,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsof"
  },
  {
    "path": "Pipeline/Directory.Build.targets",
    "chars": 432,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsof"
  },
  {
    "path": "README.md",
    "chars": 8513,
    "preview": "![System.IO.Abstractions](https://socialify.git.ci/TestableIO/System.IO.Abstractions/image?description=1&font=Source%20C"
  },
  {
    "path": "System.IO.Abstractions.slnx",
    "chars": 2040,
    "preview": "<Solution>\n  <Folder Name=\"/Benchmarks/\">\n    <Project Path=\"benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Tes"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/FileSystemAbstractionBenchmarks.cs",
    "chars": 1358,
    "preview": "using System.IO.Abstractions.Benchmarks.Support;\nusing BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Order;\n\nnamesp"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/MockFileSystemBenchmarks.cs",
    "chars": 893,
    "preview": "using BenchmarkDotNet.Attributes;\nusing System.Collections.Generic;\nusing System.IO.Abstractions.TestingHelpers;\nusing "
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Program.cs",
    "chars": 213,
    "preview": "namespace System.IO.Abstractions.Benchmarks;\n\nusing BenchmarkDotNet.Running;\n\nstatic class Program\n{\n    public static "
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Properties/launchSettings.json",
    "chars": 108,
    "preview": "{\n  \"profiles\": {\n    \"yapm\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"apply\"\n    }\n  }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupport.cs",
    "chars": 2437,
    "preview": "namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic class DirectorySupport\n{\n    private readonly IFileSystem "
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupportStatic.cs",
    "chars": 2141,
    "preview": "namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic static class DirectorySupportStatic\n{\n    public static bo"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupport.cs",
    "chars": 889,
    "preview": "namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic class FileSupport\n{\n    private readonly IFileSystem _file"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupportStatic.cs",
    "chars": 626,
    "preview": "namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic static class FileSupportStatic\n{\n    public static string "
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/TestableIO.System.IO.Abstractions.Benchmarks.csproj",
    "chars": 1037,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<AssemblyName>TestableIO.System.IO.Abstractions.Benchmarks</Assemb"
  },
  {
    "path": "build.cmd",
    "chars": 207,
    "preview": ":; set -eo pipefail\n:; SCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd)\n:; ${SCRIPT_DIR}/build.sh \"$@\"\n:; exit"
  },
  {
    "path": "build.ps1",
    "chars": 3226,
    "preview": "[CmdletBinding()]\nParam(\n    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]\n    [string[]]$B"
  },
  {
    "path": "build.sh",
    "chars": 2629,
    "preview": "#!/usr/bin/env bash\n\nbash --version 2>&1 | head -n 1\n\nset -eo pipefail\nSCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )"
  },
  {
    "path": "global.json",
    "chars": 79,
    "preview": "{\n  \"sdk\": {\n    \"version\": \"10.0.201\",\n    \"rollForward\": \"latestMinor\"\n  }\n}\n"
  },
  {
    "path": "nuget.config",
    "chars": 196,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <clear />\n    <add key=\"nuget.org\" value=\""
  },
  {
    "path": "renovate.json5",
    "chars": 117,
    "preview": "{\n  extends: [\"config:base\"],\n  ignorePaths: [\n    // Clear the default list to enable Renovate for all files\n  ],\n}\n"
  },
  {
    "path": "src/Directory.Build.props",
    "chars": 1224,
    "preview": "<Project>\n\n    <Import Project=\"$(MSBuildThisFileDirectory)/../Directory.Build.props\"\n            Condition=\"Exists('$(M"
  },
  {
    "path": "src/System.IO.Abstractions/System.IO.Abstractions.csproj",
    "chars": 600,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>System.IO.Abstractions</AssemblyName>\n    "
  },
  {
    "path": "src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj",
    "chars": 540,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n    \n    <PropertyGroup>\n        <AssemblyName>System.IO.Abstractions.TestingHelpers<"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions/AssemblyRedirects.cs",
    "chars": 1139,
    "preview": "using System.IO.Abstractions;\nusing System.Runtime.CompilerServices;\n\n[assembly: TypeForwardedTo(typeof(FileSystemStrea"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions/TestableIO.System.IO.Abstractions.csproj",
    "chars": 749,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions</Assembly"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/CommonExceptions.cs",
    "chars": 4717,
    "preview": "using System.Globalization;\nusing System.Runtime.InteropServices;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nint"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/FileHandles.cs",
    "chars": 1772,
    "preview": "using System;\nusing System.Collections.Concurrent;\nusing System.IO;\nusing System.IO.Abstractions.TestingHelpers;\n\npublic"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/IMockFileDataAccessor.cs",
    "chars": 3779,
    "preview": "using System.Collections.Generic;\nusing System.Reflection;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summ"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs",
    "chars": 28623,
    "preview": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text.RegularExpressions;\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs",
    "chars": 977,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs",
    "chars": 14372,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessContr"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs",
    "chars": 867,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npubl"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveData.cs",
    "chars": 2506,
    "preview": "\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// The class represents the associated data of a driv"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfo.cs",
    "chars": 2733,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npub"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfoFactory.cs",
    "chars": 2761,
    "preview": "using System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SER"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.Async.cs",
    "chars": 7764,
    "preview": "#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusi"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs",
    "chars": 58393,
    "preview": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Win"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs",
    "chars": 9291,
    "preview": "using System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing System.Text;\n\nnamespace "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfo.cs",
    "chars": 12124,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs",
    "chars": 888,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npub"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStream.cs",
    "chars": 11698,
    "preview": "using System.Threading.Tasks;\nusing System.Threading;\nusing System.Runtime.Versioning;\nusing System.Security.AccessCont"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStreamFactory.cs",
    "chars": 2871,
    "preview": "using System.Security.AccessControl;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions.TestingHelpers"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystem.cs",
    "chars": 18626,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.Serialization;\n\nnames"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemOptions.cs",
    "chars": 563,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n///     Constructor options for <see cref=\"MockFileSyste"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemWatcherFactory.cs",
    "chars": 1313,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npub"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfo.cs",
    "chars": 5443,
    "preview": "using System.Diagnostics;\nusing System.Text;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfoFactory.cs",
    "chars": 865,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npub"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockPath.cs",
    "chars": 6077,
    "preview": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace System.IO.Abstractions.Test"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockUnixSupport.cs",
    "chars": 958,
    "preview": "using System.Text.RegularExpressions;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides hel"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/PathVerifier.cs",
    "chars": 6866,
    "preview": "using System;\nusing System.Linq;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n/// <"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/Polyfills/SupportedOSPlatformAttribute.cs",
    "chars": 272,
    "preview": "#if !FEATURE_SUPPORTED_OS_ATTRIBUTE\nnamespace System.Runtime.Versioning\n{\n    [AttributeUsage(AttributeTargets.All)]\n   "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/ProductVersionParser.cs",
    "chars": 3360,
    "preview": "using System.Reflection;\nusing System.Text.RegularExpressions;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/Properties/Resources.resx",
    "chars": 8756,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringExtensions.cs",
    "chars": 3360,
    "preview": "using System.Collections.Generic;\nusing System.Diagnostics.Contracts;\nusing System.Linq;\nusing System.Text;\n\nnamespace "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringOperations.cs",
    "chars": 3113,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides operations against path strings dependeing"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringResources.cs",
    "chars": 342,
    "preview": "using System.Reflection;\nusing System.Resources;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\ninternal static cla"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj",
    "chars": 608,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions.TestingH"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/TimeAdjustments.cs",
    "chars": 794,
    "preview": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Flags indicating which times to adjust for a <see c"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/Converters.cs",
    "chars": 2509,
    "preview": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace System.IO.Abstractions;\n\nin"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryAclExtensions.cs",
    "chars": 2470,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryBase.cs",
    "chars": 8913,
    "preview": "using System.Collections.Generic;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"Directory\"/>\n#if FEATURE_SE"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoAclExtensions.cs",
    "chars": 3301,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoBase.cs",
    "chars": 5919,
    "preview": "using System.Collections.Generic;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"IDirectoryInfo\"/>\n#if FEATU"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs",
    "chars": 946,
    "preview": "namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class DirectoryInfoFactory : I"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoWrapper.cs",
    "chars": 11269,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessContr"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryWrapper.cs",
    "chars": 10404,
    "preview": "using System.Collections.Generic;\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoBase.cs",
    "chars": 1986,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract cl"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoFactory.cs",
    "chars": 1329,
    "preview": "namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class DriveInfoFactory : IDri"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoWrapper.cs",
    "chars": 7663,
    "preview": "using System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n/// The wrapper for a <see cref=\"Dri"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileAclExtensions.cs",
    "chars": 1748,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.Async.cs",
    "chars": 5874,
    "preview": "#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading;\nusing System.Threa"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.cs",
    "chars": 13824,
    "preview": "using System.Collections.Generic;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractio"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoAclExtensions.cs",
    "chars": 2417,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoBase.cs",
    "chars": 3475,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileInfo\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npub"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs",
    "chars": 881,
    "preview": "namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class FileInfoFactory : IFile"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoWrapper.cs",
    "chars": 7767,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritd"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamAclExtensions.cs",
    "chars": 1619,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamFactory.cs",
    "chars": 2609,
    "preview": "using Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\nin"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamWrapper.cs",
    "chars": 1514,
    "preview": "using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\ninternal seal"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystem.cs",
    "chars": 1377,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileS"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemBase.cs",
    "chars": 879,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract cl"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemInfoBase.cs",
    "chars": 2941,
    "preview": "using System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileSystemInfo\"/>\n#if FEATUR"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherBase.cs",
    "chars": 4628,
    "preview": "using System.ComponentModel;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileSystemWatcher\"/>\n#if FEATURE"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherFactory.cs",
    "chars": 1120,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileS"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherWrapper.cs",
    "chars": 5902,
    "preview": "using System.ComponentModel;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializa"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoBase.cs",
    "chars": 3672,
    "preview": "using System.Diagnostics;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"IFileVersionInfo\"/>\n#if FEATURE_SER"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoFactory.cs",
    "chars": 751,
    "preview": "namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class FileVersionInfoFactory "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoWrapper.cs",
    "chars": 3789,
    "preview": "using System.Diagnostics;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.Async.cs",
    "chars": 6977,
    "preview": "#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.cs",
    "chars": 32892,
    "preview": "using System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs",
    "chars": 6786,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"Path\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs",
    "chars": 8209,
    "preview": "namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class PathW"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/Polyfills/SupportedOSPlatformAttribute.cs",
    "chars": 272,
    "preview": "#if !FEATURE_SUPPORTED_OS_ATTRIBUTE\nnamespace System.Runtime.Versioning\n{\n    [AttributeUsage(AttributeTargets.All)]\n   "
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj",
    "chars": 1262,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions.Wrappers<"
  },
  {
    "path": "tests/Directory.Build.props",
    "chars": 1778,
    "preview": "<Project>\n\n    <Import Project=\"$(MSBuildThisFileDirectory)/../Directory.Build.props\"\n            Condition=\"Exists('$(M"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiAcceptance.cs",
    "chars": 796,
    "preview": "namespace TestableIO.System.IO.Abstractions.Api.Tests;\n\npublic sealed class ApiAcceptance\n{\n\t/// <summary>\n\t///     Exe"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiApprovalTests.cs",
    "chars": 1620,
    "preview": "using System.Collections.Generic;\n\nnamespace TestableIO.System.IO.Abstractions.Api.Tests;\n\n/// <summary>\n///     Whenev"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net10.0.txt",
    "chars": 49139,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net472.txt",
    "chars": 36670,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net6.0.txt",
    "chars": 43902,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net8.0.txt",
    "chars": 47069,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net9.0.txt",
    "chars": 49137,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.0.txt",
    "chars": 36664,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.1.txt",
    "chars": 41645,
    "preview": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net10.0.txt",
    "chars": 79628,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net472.txt",
    "chars": 50093,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net6.0.txt",
    "chars": 68530,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net8.0.txt",
    "chars": 75056,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net9.0.txt",
    "chars": 79626,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_netstandard2.0.txt",
    "chars": 50087,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_netstandard2.1.txt",
    "chars": 62428,
    "preview": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Helper.cs",
    "chars": 2454,
    "preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.Com"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/TestableIO.System.IO.Abstractions.Api.Tests.csproj",
    "chars": 578,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<TargetFrameworks>net8.0</TargetFrameworks>\n\t</PropertyGroup>\n\n\t<I"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Usings.cs",
    "chars": 149,
    "preview": "global using System;\nglobal using System.Threading.Tasks;\nglobal using NUnit.Framework;\nglobal using aweXpect;\nglobal u"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/ApiParityTests.cs",
    "chars": 4617,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing aweXpe"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/TestableIO.System.IO.Abstractions.Parity.Tests.csproj",
    "chars": 552,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <PropertyGroup>\n    <Description>The unit tests for our the parity checks</Descr"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 10.0.snap",
    "chars": 295,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLif"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 6.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 8.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 9.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET Framework 4.7.2.snap",
    "chars": 834,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(System.Stri"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 10.0.snap",
    "chars": 48,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 6.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 8.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 9.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET Framework 4.7.2.snap",
    "chars": 497,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDirectoryInfo CreateDirectory(System.String,"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 10.0.snap",
    "chars": 138,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(Sys"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 6.0.snap",
    "chars": 140,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(Sy"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 8.0.snap",
    "chars": 140,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(Sy"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 9.0.snap",
    "chars": 140,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(Sy"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET Framework 4.7.2.snap",
    "chars": 140,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(Sy"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 10.0.snap",
    "chars": 295,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLif"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 6.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 8.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 9.0.snap",
    "chars": 297,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET Framework 4.7.2.snap",
    "chars": 623,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLi"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 10.0.snap",
    "chars": 404,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"Sy"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 6.0.snap",
    "chars": 406,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"S"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 8.0.snap",
    "chars": 406,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"S"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 9.0.snap",
    "chars": 406,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"S"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.7.2.snap",
    "chars": 470,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"S"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 10.0.snap",
    "chars": 48,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 6.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 8.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 9.0.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET Framework 4.7.2.snap",
    "chars": 50,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 10.0.snap",
    "chars": 219,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String, "
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 6.0.snap",
    "chars": 221,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String,"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 8.0.snap",
    "chars": 221,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String,"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 9.0.snap",
    "chars": 221,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String,"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET Framework 4.7.2.snap",
    "chars": 500,
    "preview": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.FileSystemStream Create(System.String, Int32,"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 10.0.snap",
    "chars": 242,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 6.0.snap",
    "chars": 244,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char ge"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 8.0.snap",
    "chars": 244,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char ge"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap",
    "chars": 244,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char ge"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET Framework 4.7.2.snap",
    "chars": 244,
    "preview": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char ge"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryArgumentPathTests.cs",
    "chars": 1794,
    "preview": "using System.Collections.Generic;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnamespace System.IO.Abst"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryGetAccessControlTests.cs",
    "chars": 2088,
    "preview": "using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Security.AccessControl;\nusing System.Runtime.Vers"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoAccessControlTests.cs",
    "chars": 2030,
    "preview": "using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Security.AccessC"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs",
    "chars": 848,
    "preview": "using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockDirector"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoSymlinkTests.cs",
    "chars": 2157,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessContr"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs",
    "chars": 25583,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnames"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySetAccessControlTests.cs",
    "chars": 2206,
    "preview": "using NUnit.Framework;\nusing System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs",
    "chars": 9837,
    "preview": "using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixt"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs",
    "chars": 81829,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessContro"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDriveInfoFactoryTests.cs",
    "chars": 3280,
    "preview": "using System;\nusing System.Linq;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing "
  }
]

// ... and 68 more files (download for full content)

About this extraction

This page contains the full source code of the System-IO-Abstractions/System.IO.Abstractions GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 268 files (1.7 MB), approximately 390.5k tokens, and a symbol index with 2090 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!