[
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n    \"name\": \"C# (.NET Core)\",\n    \"image\": \"mcr.microsoft.com/vscode/devcontainers/dotnet:10.0\",\n    \"settings\": {\n        \"terminal.integrated.shell.linux\": \"/bin/bash\"\n    },\n    \"postCreateCommand\": \"dotnet restore\"\n}"
  },
  {
    "path": ".editorconfig",
    "content": "; This file is for unifying the coding style for different editors and IDEs.\n; More information at http://EditorConfig.org\n\nroot = true\n\n[*]\nend_of_line = CRLF\n\n[*.cs]\nindent_style = space\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: 'state: needs discussion, type: bug'\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: 'state: needs discussion, type: enhancement'\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "content": "# System.IO.Abstractions Development Guide\n\nSystem.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.\n\n**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.**\n\n## Working Effectively\n\n### Bootstrap and Build Process\n- **CRITICAL**: Install .NET SDK 9.0.304 (required version specified in global.json):\n  ```bash\n  curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 9.0.304\n  export PATH=\"$HOME/.dotnet:$PATH\"\n  ```\n- Verify installation: `dotnet --version` should return `9.0.304`\n- **Build the solution**: `dotnet build` -- takes ~70 seconds. NEVER CANCEL. Set timeout to 120+ minutes.\n- **Run all tests**: `dotnet test --configuration Release` -- takes ~30 seconds. NEVER CANCEL. Set timeout to 60+ minutes.\n\n### Code Quality and Formatting\n- **ALWAYS run code formatting before committing**: `dotnet format` \n- **Verify formatting compliance**: `dotnet format --verify-no-changes` -- takes ~40 seconds. NEVER CANCEL.\n- The codebase uses EditorConfig with CRLF line endings and 4-space indentation for C# files\n- **CRITICAL**: All formatting issues must be resolved before CI will pass\n\n### Build System Details\n- **Primary build method**: `dotnet build` and `dotnet test` commands work reliably\n- **NUKE build script**: `./build.sh` available but may have GitVersion issues with shallow clones\n- **Available NUKE targets**: UnitTests, ApiChecks, CodeCoverage, CodeAnalysis, Pack\n- **Build artifacts**: Generated in `Artifacts/` and `TestResults/` directories\n\n## Project Structure\n\n### Key Projects\n- **System.IO.Abstractions**: Core abstractions and interfaces\n- **TestableIO.System.IO.Abstractions**: Main implementation\n- **TestableIO.System.IO.Abstractions.Wrappers**: Wrapper implementations\n- **TestableIO.System.IO.Abstractions.TestingHelpers**: Mock implementations for testing\n- **Multiple test projects**: Comprehensive test coverage across different scenarios\n\n### Target Frameworks\n- .NET Framework 4.7.2 (net472)\n- .NET Standard 2.0, 2.1 (netstandard2.0, netstandard2.1)  \n- .NET 6.0, 8.0, 9.0 (net6.0, net8.0, net9.0)\n\n### Important Directories\n- `src/`: All source code projects\n- `tests/`: All test projects including unit tests, API tests, and parity tests\n- `benchmarks/`: Performance benchmarking projects\n- `Pipeline/`: NUKE build system configuration\n- `.github/workflows/`: CI/CD pipeline definitions\n\n## Validation\n\n### Manual Validation Steps\nAfter making changes, ALWAYS validate functionality by:\n\n1. **Build verification**: `dotnet build` must succeed\n2. **Test execution**: `dotnet test --configuration Release` must pass\n3. **Code formatting**: `dotnet format --verify-no-changes` must pass\n4. **Functional validation**: Create a test scenario to verify your changes work:\n\n```csharp\nusing System.IO.Abstractions;\nusing System.IO.Abstractions.TestingHelpers;\n\n// Test MockFileSystem functionality\nvar mockFileSystem = new MockFileSystem();\nmockFileSystem.File.WriteAllText(@\"C:\\test.txt\", \"Test content\");\nvar content = mockFileSystem.File.ReadAllText(@\"C:\\test.txt\");\n\n// Test real FileSystem functionality  \nvar realFileSystem = new FileSystem();\nvar tempFile = \"/tmp/test.txt\";\nrealFileSystem.File.WriteAllText(tempFile, \"Real test\");\nvar realContent = realFileSystem.File.ReadAllText(tempFile);\nrealFileSystem.File.Delete(tempFile);\n```\n\n### Test Suite Information\n- **Total tests**: ~2,234 tests across all projects\n- **Expected passing**: ~1,993 tests (some platform-specific tests are skipped on Linux)\n- **Test categories**: Unit tests, API compatibility tests, parity tests\n- **Platform considerations**: Some Windows-specific functionality is skipped on Linux/macOS\n\n### Continuous Integration Requirements\nThe CI pipeline (.github/workflows/ci.yml) requires:\n- All unit tests to pass on Ubuntu, Windows, and macOS\n- API compatibility checks to succeed\n- Code formatting compliance\n- Static code analysis (SonarCloud) to pass\n\n## Common Development Tasks\n\n### Adding New Functionality\n- Implement abstractions in the main System.IO.Abstractions project\n- Add wrapper implementations in TestableIO.System.IO.Abstractions.Wrappers\n- Create mock implementations in TestableIO.System.IO.Abstractions.TestingHelpers\n- Add comprehensive tests covering all target frameworks\n- Update XML documentation for all public APIs\n\n### Debugging Build Issues\n- Check .NET SDK version compatibility first\n- Verify all package references are properly restored\n- For NUKE build issues, use direct `dotnet` commands instead\n- Review build logs in Artifacts/ directory for detailed error information\n\n### Package Management\n- Uses Central Package Management (Directory.Packages.props)\n- NuGet source: nuget.org only (configured in nuget.config)\n- Package versioning uses Nerdbank.GitVersioning\n\n## Pull Request Guidelines\n\n### Pull Request Title\nTo communicate intent to the consumers of your library, the title of the pull requests is prefixed with one of the following elements:\n- `fix:`: patches a bug\n- `feat:`: introduces a new feature\n- `refactor:`: improves internal structure without changing the observable behavior\n- `docs:`: updates documentation or XML comments\n- `chore:`: updates to dependencies, build pipelines, ...\n\n## Performance Expectations\n\n### Command Timing (with appropriate timeouts)\n- **dotnet build**: ~70 seconds (set timeout: 120+ minutes)\n- **dotnet test**: ~30 seconds (set timeout: 60+ minutes) \n- **dotnet format**: ~40 seconds (set timeout: 10+ minutes)\n- **NUKE build restore**: ~30 seconds (set timeout: 10+ minutes)\n\n### **NEVER CANCEL** long-running operations\nBuilds and tests may occasionally take longer than expected. Always wait for completion rather than canceling operations.\n\n## Troubleshooting\n\n### Common Issues\n- **GitVersion errors**: Use direct `dotnet` commands instead of NUKE build script\n- **Shallow clone issues**: Expected in GitHub Actions environment, doesn't affect functionality\n- **Platform-specific test failures**: Normal for Windows-specific functionality on Linux/macOS\n- **Code formatting failures**: Run `dotnet format` to fix automatically\n\n### SDK Installation Issues\nIf .NET SDK 9.0.304 is not available:\n- Check global.json for exact version requirement\n- Use dotnet-install script with specific version\n- Ensure PATH includes the installed SDK location\n\n**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."
  },
  {
    "path": ".github/mergify.yml",
    "content": "pull_request_rules:\n  - name: Automatic merge on approval\n    conditions:\n      - \"#approved-reviews-by>=1\"\n    actions:\n      merge:\n        method: squash\n        commit_message_template: |-\n          {{ title }} (#{{ number }})\n          {{ body }}\n  - name: Automatic merge for Renovate pull requests\n    conditions:\n      - author=renovate[bot]\n    actions:\n      merge:\n        method: squash\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "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: \"Unit tests\"\n    strategy:\n      matrix:\n        os: [ ubuntu-latest, windows-latest, macos-latest ]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: Run unit tests (windows)\n        if: matrix.os == 'windows-latest'\n        run: ./build.ps1 CodeCoverage\n      - name: Run unit tests (ubuntu|macos)\n        if: matrix.os != 'windows-latest'\n        run: ./build.sh CodeCoverage\n      - name: Upload artifacts\n        if: always()\n        uses: actions/upload-artifact@v7\n        with:\n          name: ${{ runner.os }}-artifacts\n          path: |\n            ./Artifacts/*\n            ./TestResults/*.trx\n  \n  api-tests:\n    name: \"API tests\"\n    runs-on: ubuntu-latest\n    env:\n      DOTNET_NOLOGO: true\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: API checks\n        run: ./build.sh ApiChecks\n      - name: Upload artifacts\n        if: always()\n        uses: actions/upload-artifact@v7\n        with:\n          name: API-tests\n          path: |\n            ./Artifacts/*\n            ./TestResults/*.trx\n  \n  static-code-analysis:\n    name: \"Static code analysis\"\n    runs-on: ubuntu-latest\n    env:\n      REPORTGENERATOR_LICENSE: ${{ secrets.REPORTGENERATOR_LICENSE }}\n      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}\n      DOTNET_NOLOGO: true\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: Run sonarcloud analysis\n        run: ./build.sh CodeAnalysis\n  \n  publish-test-results:\n    name: \"Publish Tests Results\"\n    needs: [ api-tests, unit-tests ]\n    runs-on: ubuntu-latest\n    permissions:\n      checks: write\n      pull-requests: write\n    if: always()\n    steps:\n      - name: Download Artifacts\n        uses: actions/download-artifact@v8\n        with:\n          path: artifacts\n      - name: Publish Test Results\n        uses: EnricoMi/publish-unit-test-result-action@v2\n        with:\n          comment_mode: always\n          files: \"artifacts/**/**/*.trx\"\n  \n  pack:\n    name: \"Pack\"\n    runs-on: ubuntu-latest\n    needs: [ publish-test-results, static-code-analysis ]\n    env:\n      DOTNET_NOLOGO: true\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: Pack nuget packages\n        run: ./build.sh Pack\n      - name: Upload packages\n        if: always()\n        uses: actions/upload-artifact@v7\n        with:\n          path: Artifacts/Packages\n          name: Packages\n  \n  push:\n    name: \"Push\"\n    if: ${{ startsWith(github.ref, 'refs/tags/v') }}\n    runs-on: macos-latest\n    environment: production\n    needs: [ pack ]\n    permissions:\n      contents: write\n    steps:\n      - name: Download packages\n        uses: actions/download-artifact@v8\n        with:\n          name: Packages\n          path: Artifacts/Packages\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n      - name: Publish\n        run: |\n          echo \"Found the following packages to push:\"\n          search_dir=Artifacts/Packages\n          for entry in Artifacts/Packages/*.nupkg\n          do\n            echo \"- $entry\"\n          done\n          for entry in Artifacts/Packages/*.nupkg\n          do\n            dotnet nuget push $entry --source https://api.nuget.org/v3/index.json --api-key \"${{secrets.NUGET_API_KEY}}\" --skip-duplicate\n          done\n      - name: Check pre-release\n        id: check-pre-release\n        run: |\n          if [[ ${{ github.event.ref }} =~ ^refs/tags/v[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then\n              echo \"release=true\" >> $GITHUB_OUTPUT\n          fi\n      - name: Create GitHub release\n        if: steps.check-pre-release.outputs.release == 'true'\n        continue-on-error: true\n        uses: softprops/action-gh-release@v2\n        with:\n          name: ${{ steps.tag.outputs.release_version }}\n          tag_name: ${{ steps.tag.outputs.release_version }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n          generate_release_notes: true\n  \n  finalize-release:\n    name: \"Finalize release\"\n    if: startsWith(github.ref, 'refs/tags/v')\n    runs-on: ubuntu-latest\n    needs: [ push ]\n    permissions:\n      contents: read\n      issues: write\n      pull-requests: write\n    steps:\n      - name: Check pre-release\n        id: check-pre-release\n        run: |\n          if [[ ${{ github.event.ref }} =~ ^refs/tags/v[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then\n              echo \"release=true\" >> $GITHUB_OUTPUT\n          fi\n      - name: Comment relevant issues and pull requests\n        if: steps.check-pre-release.outputs.release == 'true'\n        continue-on-error: true\n        uses: apexskier/github-release-commenter@v1.4.1\n        with:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          comment-template: |\n            This is addressed in release {release_link}.\n          label-template: |\n            state: released\n          skip-label: |\n            state: released\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  workflow_dispatch:\n  pull_request:\n    branches: [ main ]\n\njobs:\n  unit-tests:\n    name: \"Unit tests\"\n    strategy:\n      matrix:\n        os: [ ubuntu-latest, windows-latest, macos-latest ]\n    runs-on: ${{ matrix.os }}\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: Run unit tests (windows)\n        if: matrix.os == 'windows-latest'\n        run: ./build.ps1 CodeCoverage\n      - name: Run unit tests (ubuntu|macos)\n        if: matrix.os != 'windows-latest'\n        run: ./build.sh CodeCoverage\n      - name: Upload artifacts\n        if: always()\n        uses: actions/upload-artifact@v7\n        with:\n          name: ${{ runner.os }}-artifacts\n          path: |\n            ./Artifacts/*\n            ./TestResults/*.trx\n  \n  api-tests:\n    name: \"API tests\"\n    runs-on: ubuntu-latest\n    env:\n      DOTNET_NOLOGO: true\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: API checks\n        run: ./build.sh ApiChecks\n      - name: Upload artifacts\n        if: always()\n        uses: actions/upload-artifact@v7\n        with:\n          name: API-tests\n          path: |\n            ./Artifacts/*\n            ./TestResults/*.trx\n  \n  static-code-analysis:\n    name: \"Static code analysis\"\n    if: ${{ github.actor != 'dependabot[bot]' && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}\n    runs-on: ubuntu-latest\n    env:\n      REPORTGENERATOR_LICENSE: ${{ secrets.REPORTGENERATOR_LICENSE }}\n      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}\n      DOTNET_NOLOGO: true\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Setup .NET SDKs\n        uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: |\n            6.0.x\n            7.0.x\n            8.0.x\n            9.0.x\n            10.0.x\n      - name: Run sonarcloud analysis\n        run: ./build.sh CodeAnalysis\n  \n  publish-test-results:\n    name: \"Publish Tests Results\"\n    needs: [ api-tests, unit-tests ]\n    runs-on: ubuntu-latest\n    permissions:\n      checks: write\n      pull-requests: write\n    if: always()\n    steps:\n      - name: Download Artifacts\n        uses: actions/download-artifact@v8\n        with:\n          path: artifacts\n      - name: Publish Test Results\n        uses: EnricoMi/publish-unit-test-result-action@v2\n        with:\n          comment_mode: always\n          files: \"artifacts/**/**/*.trx\"\n"
  },
  {
    "path": ".gitignore",
    "content": "# Artifact and test results directories\n/Artifacts\n/TestResults\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n*.ide/\n.vs/\n\n# Build results\n\n[Dd]ebug/\n[Rr]elease/\nx64/\nbuild/\n[Bb]in/\n[Oo]bj/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.log\n*.scc\n\n# Benchmarks results\nBenchmarkDotNet.Artifacts\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.pubxml\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\npackages/\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n# =========================\n# Windows detritus\n# =========================\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Mac crap\n.DS_Store\n\n#System.IO.Abstractions specific ignores\nReleases\nSystem.IO.Abstractions.*.nupkg\n\n# Common IntelliJ Platform excludes\n# https://github.com/JetBrains/resharper-rider-samples/blob/master/.gitignore\n\n# User specific\n**/.idea/**/workspace.xml\n**/.idea/**/tasks.xml\n**/.idea/shelf/*\n**/.idea/dictionaries\n**/.idea/httpRequests/\n\n# Sensitive or high-churn files\n**/.idea/**/dataSources/\n**/.idea/**/dataSources.ids\n**/.idea/**/dataSources.xml\n**/.idea/**/dataSources.local.xml\n**/.idea/**/sqlDataSources.xml\n**/.idea/**/dynamic.xml\n\n# Rider\n# Rider auto-generates .iml files, and contentModel.xml\n**/.idea/**/*.iml\n**/.idea/**/contentModel.xml\n**/.idea/**/modules.xml"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/.gitignore",
    "content": "# Default ignored files\n/shelf/\n/workspace.xml\n# Rider ignored files\n/contentModel.xml\n/projectSettingsUpdater.xml\n/.idea.System.IO.Abstractions.iml\n/modules.xml\n# Editor-based HTTP Client requests\n/httpRequests/\n# Datasource local storage ignored files\n/dataSources/\n/dataSources.local.xml\n"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\" addBOMForNewFiles=\"with BOM under Windows, with no BOM otherwise\" />\n</project>"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/indexLayout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"UserContentModel\">\n    <attachedFolders />\n    <explicitIncludes />\n    <explicitExcludes />\n  </component>\n</project>"
  },
  {
    "path": ".idea/.idea.System.IO.Abstractions/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": ".nuke/build.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n  \"definitions\": {\n    \"Host\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"AppVeyor\",\n        \"AzurePipelines\",\n        \"Bamboo\",\n        \"Bitbucket\",\n        \"Bitrise\",\n        \"GitHubActions\",\n        \"GitLab\",\n        \"Jenkins\",\n        \"Rider\",\n        \"SpaceAutomation\",\n        \"TeamCity\",\n        \"Terminal\",\n        \"TravisCI\",\n        \"VisualStudio\",\n        \"VSCode\"\n      ]\n    },\n    \"ExecutableTarget\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ApiChecks\",\n        \"CalculateNugetVersion\",\n        \"Clean\",\n        \"CodeAnalysis\",\n        \"CodeAnalysisBegin\",\n        \"CodeAnalysisEnd\",\n        \"CodeCoverage\",\n        \"Compile\",\n        \"DotNetFrameworkUnitTests\",\n        \"DotNetUnitTests\",\n        \"Pack\",\n        \"Restore\",\n        \"UnitTests\",\n        \"UpdateReadme\"\n      ]\n    },\n    \"Verbosity\": {\n      \"type\": \"string\",\n      \"description\": \"\",\n      \"enum\": [\n        \"Verbose\",\n        \"Normal\",\n        \"Minimal\",\n        \"Quiet\"\n      ]\n    },\n    \"NukeBuild\": {\n      \"properties\": {\n        \"Continue\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates to continue a previously failed build attempt\"\n        },\n        \"Help\": {\n          \"type\": \"boolean\",\n          \"description\": \"Shows the help text for this build assembly\"\n        },\n        \"Host\": {\n          \"description\": \"Host for execution. Default is 'automatic'\",\n          \"$ref\": \"#/definitions/Host\"\n        },\n        \"NoLogo\": {\n          \"type\": \"boolean\",\n          \"description\": \"Disables displaying the NUKE logo\"\n        },\n        \"Partition\": {\n          \"type\": \"string\",\n          \"description\": \"Partition to use on CI\"\n        },\n        \"Plan\": {\n          \"type\": \"boolean\",\n          \"description\": \"Shows the execution plan (HTML)\"\n        },\n        \"Profile\": {\n          \"type\": \"array\",\n          \"description\": \"Defines the profiles to load\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"Root\": {\n          \"type\": \"string\",\n          \"description\": \"Root directory during build execution\"\n        },\n        \"Skip\": {\n          \"type\": \"array\",\n          \"description\": \"List of targets to be skipped. Empty list skips all dependencies\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ExecutableTarget\"\n          }\n        },\n        \"Target\": {\n          \"type\": \"array\",\n          \"description\": \"List of targets to be invoked. Default is '{default_target}'\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ExecutableTarget\"\n          }\n        },\n        \"Verbosity\": {\n          \"description\": \"Logging verbosity during build execution. Default is 'Normal'\",\n          \"$ref\": \"#/definitions/Verbosity\"\n        }\n      }\n    }\n  },\n  \"allOf\": [\n    {\n      \"properties\": {\n        \"Configuration\": {\n          \"type\": \"string\",\n          \"description\": \"Configuration to build - Default is 'Debug' (local) or 'Release' (server)\",\n          \"enum\": [\n            \"Debug\",\n            \"Release\"\n          ]\n        },\n        \"GithubToken\": {\n          \"type\": \"string\",\n          \"description\": \"Github Token\"\n        },\n        \"Solution\": {\n          \"type\": \"string\",\n          \"description\": \"Path to a solution file that is automatically loaded\"\n        },\n        \"SonarToken\": {\n          \"type\": \"string\",\n          \"description\": \"The key to push to sonarcloud\",\n          \"default\": \"Secrets must be entered via 'nuke :secrets [profile]'\"\n        }\n      }\n    },\n    {\n      \"$ref\": \"#/definitions/NukeBuild\"\n    }\n  ]\n}\n"
  },
  {
    "path": ".nuke/parameters.json",
    "content": "{\n  \"$schema\": \"build.schema.json\",\n  \"Solution\": \"System.IO.Abstractions.slnx\"\n}\n"
  },
  {
    "path": ".remarkrc.yaml",
    "content": "plugins:\n  - remark-preset-lint-consistent\n  - remark-preset-lint-markdown-style-guide"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n    \"recommendations\": [\n        \"ms-vscode-remote.remote-containers\",\n        \"ms-dotnettools.csharp\"\n    ]\n}"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at code-of-conduct@testably.org. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributor guide\n\n## Versioning\n\nThis library uses [Nerdbank.GitVersioning](https://github.com/AArnott/Nerdbank.GitVersioning) for generating stable and reproducible version numbers.\n\nThe 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.\n\nThe 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.\n\n## Branches / tags\n\n- `main` contains the latest sources. Each merge there triggers a deploy to `nuget.org`.\n- All versions on `nuget.org` have a matching GitHub release/tag.\n\n## Commits and PR title\n\n- Please use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) to name your commits and PR title.\n  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.\n- Available prefixes:\n  - `feat:` A new feature\n  - `fix:` A bug fix\n  - `docs:` Documentation only changes\n  - `style:` Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\n  - `refactor:` A code change that neither fixes a bug nor adds a feature\n  - `perf:` A code change that improves performance\n  - `test:` Adding missing tests or correcting existing tests\n  - `build:` Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)\n  - `ci:` Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)\n  - `chore:` Other changes that don't modify src or test files\n  - `revert:` Reverts a previous commit\n"
  },
  {
    "path": "Directory.Build.props",
    "content": "<Project>\n  <PropertyGroup>\n    <Product>System.IO.Abstractions</Product>\n    <Copyright>Copyright © Tatham Oddie &amp; friends 2010-$([System.DateTime]::Now.ToString('yyyy'))</Copyright>\n    <Authors>Tatham Oddie &amp; friends</Authors>\n    <SignAssembly Condition=\"'$(Configuration)' == 'Release'\">True</SignAssembly>\n    <PublicKey>00240000048000009400000006020000002400005253413100040000010001001160c7a0f907c400c5392975b66d2f3752fb82625d5674d386b83896d4d4ae8d0ef8319ef391fbb3466de0058ad2f361b8f5cb8a32ecb4e908bece5c519387552cedd2ca0250e36b59c6d6dc3dc260ca73a7e27c3add4ae22d5abaa562225d7ba34d427e8f3f52928a46a674deb0208eca7d379aa22712355b91a55a5ce521d2</PublicKey>\n    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)StrongName.snk</AssemblyOriginatorKeyFile>\n    <LangVersion>latest</LangVersion>\n    <PackageTags>testing</PackageTags>\n    <NoWarn>CS1591</NoWarn>\n    <PackageProjectUrl>https://github.com/TestableIO/System.IO.Abstractions</PackageProjectUrl>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <DefineConstants Condition=\"'$(TargetFramework)' != 'net472'\">$(DefineConstants);FEATURE_FILE_SYSTEM_ACL_EXTENSIONS</DefineConstants>\n    <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>\n    <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>\n    <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>\n    <DefineConstants Condition=\"'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net9.0'\">$(DefineConstants);FEATURE_PATH_SPAN;FEATURE_FILE_SPAN</DefineConstants>\n    <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup>\n    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <IncludeSymbols>true</IncludeSymbols>\n    <SymbolPackageFormat>snupkg</SymbolPackageFormat>\n    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Include=\"$(MSBuildThisFileDirectory)README.md\" Pack=\"true\" PackagePath=\"\"/>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Directory.Packages.props",
    "content": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>\n    <ItemGroup Condition=\" '$(TargetFramework)' == 'net6.0' \">\n        <PackageVersion Include=\"System.Text.Json\" Version=\"[6.0.11]\"/>\n    </ItemGroup>\n    <ItemGroup Condition=\" '$(TargetFramework)' == 'net8.0' \">\n        <PackageVersion Include=\"System.Text.Json\" Version=\"[8.0.6]\"/>\n    </ItemGroup>\n    <ItemGroup Condition=\" '$(TargetFramework)' != 'net8.0' And '$(TargetFramework)' != 'net6.0' \">\n        <PackageVersion Include=\"System.Text.Json\" Version=\"10.0.5\"/>\n    </ItemGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"System.IO.FileSystem.AccessControl\" Version=\"5.0.0\" />\n    <PackageVersion Include=\"IsExternalInit\" Version=\"1.0.3\" />\n    <PackageVersion Include=\"Nullable\" Version=\"1.3.1\" />\n    <PackageVersion Include=\"Testably.Abstractions.FileSystem.Interface\" Version=\"10.1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"BenchmarkDotNet\" Version=\"0.15.8\" />\n    <PackageVersion Include=\"coverlet.collector\" Version=\"8.0.1\" />\n    <PackageVersion Include=\"GitHubActionsTestLogger\" Version=\"3.0.1\" />\n    <PackageVersion Include=\"Microsoft.NET.Test.Sdk\" Version=\"18.3.0\" />\n    <PackageVersion Include=\"Mockolate\" Version=\"2.4.0\" />\n    <PackageVersion Include=\"NUnit\" Version=\"4.5.1\" />\n    <PackageVersion Include=\"NUnit.Analyzers\" Version=\"4.12.0\" />\n    <PackageVersion Include=\"NUnit3TestAdapter\" Version=\"6.1.0\" />\n    <PackageVersion Include=\"PublicApiGenerator\" Version=\"11.5.4\"/>\n    <PackageVersion Include=\"aweXpect\" Version=\"2.31.0\"/>\n    <PackageVersion Include=\"aweXpect.Testably\" Version=\"0.13.0\"/>\n    <PackageVersion Include=\"aweXpect.Mockolate\" Version=\"2.3.0\"/>\n  </ItemGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"Nuke.Common\" Version=\"10.1.0\"/>\n    <PackageVersion Include=\"Nuke.Components\" Version=\"10.1.0\"/>\n    <PackageVersion Include=\"LibGit2Sharp\" Version=\"0.31.0\"/>\n    <PackageVersion Include=\"SharpCompress\" Version=\"0.47.1\"/>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) Tatham Oddie and Contributors\n\nAll rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Pipeline/.editorconfig",
    "content": "[*.cs]\ndotnet_style_qualification_for_field = false:warning\ndotnet_style_qualification_for_property = false:warning\ndotnet_style_qualification_for_method = false:warning\ndotnet_style_qualification_for_event = false:warning\ndotnet_style_require_accessibility_modifiers = never:warning\n\ncsharp_style_expression_bodied_methods = true:silent\ncsharp_style_expression_bodied_properties = true:warning\ncsharp_style_expression_bodied_indexers = true:warning\ncsharp_style_expression_bodied_accessors = true:warning\n"
  },
  {
    "path": "Pipeline/Build.ApiChecks.cs",
    "content": "using Nuke.Common;\nusing Nuke.Common.ProjectModel;\nusing Nuke.Common.Tooling;\nusing Nuke.Common.Tools.DotNet;\nusing static Nuke.Common.Tools.DotNet.DotNetTasks;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n\tTarget ApiChecks => _ => _\n\t\t.DependsOn(Compile)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tProject project = Solution.Tests.TestableIO_System_IO_Abstractions_Api_Tests;\n\n\t\t\tDotNetTest(s => s\n\t\t\t\t.SetConfiguration(Configuration == Configuration.Debug ? \"Debug\" : \"Release\")\n\t\t\t\t.SetProcessEnvironmentVariable(\"DOTNET_CLI_UI_LANGUAGE\", \"en-US\")\n\t\t\t\t.EnableNoBuild()\n\t\t\t\t.SetResultsDirectory(TestResultsDirectory)\n\t\t\t\t.CombineWith(cc => cc\n\t\t\t\t\t.SetProjectFile(project)\n\t\t\t\t\t.AddLoggers($\"trx;LogFileName={project.Name}.trx\")), completeOnFailure: true);\n\t\t});\n}\n"
  },
  {
    "path": "Pipeline/Build.CodeAnalysis.cs",
    "content": "using Nuke.Common;\nusing Nuke.Common.Tools.SonarScanner;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n\t[Parameter(\"The key to push to sonarcloud\")] [Secret] readonly string SonarToken;\n\n\tTarget CodeAnalysisBegin => _ => _\n\t\t.Unlisted()\n\t\t.Before(Compile)\n\t\t.Before(CodeCoverage)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tSonarScannerTasks.SonarScannerBegin(s => s\n\t\t\t\t.SetOrganization(\"testableio\")\n\t\t\t\t.SetProjectKey(\"TestableIO_System.IO.Abstractions\")\n\t\t\t\t.AddVSTestReports(TestResultsDirectory / \"*.trx\")\n\t\t\t\t.AddOpenCoverPaths(TestResultsDirectory / \"reports\" / \"OpenCover.xml\")\n\t\t\t\t.SetPullRequestOrBranchName(GitHubActions, GitVersion)\n\t\t\t\t.SetVersion(GitVersion.SemVer)\n\t\t\t\t.SetToken(SonarToken));\n\t\t});\n\n\tTarget CodeAnalysisEnd => _ => _\n\t\t.Unlisted()\n\t\t.DependsOn(Compile)\n\t\t.DependsOn(CodeCoverage)\n\t\t.OnlyWhenDynamic(() => IsServerBuild)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tSonarScannerTasks.SonarScannerEnd(s => s\n\t\t\t\t.SetToken(SonarToken));\n\t\t});\n\n\tTarget CodeAnalysis => _ => _\n\t\t.DependsOn(CodeAnalysisBegin)\n\t\t.DependsOn(CodeAnalysisEnd);\n}\n"
  },
  {
    "path": "Pipeline/Build.CodeCoverage.cs",
    "content": "using Nuke.Common;\nusing Nuke.Common.Tooling;\nusing Nuke.Common.Tools.ReportGenerator;\nusing static Nuke.Common.Tools.ReportGenerator.ReportGeneratorTasks;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n\tTarget CodeCoverage => _ => _\n\t\t.DependsOn(UnitTests)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tReportGenerator(s => s\n\t\t\t\t.SetProcessToolPath(NuGetToolPathResolver.GetPackageExecutable(\"ReportGenerator\", \"ReportGenerator.dll\",\n\t\t\t\t\tframework: \"net8.0\"))\n\t\t\t\t.SetTargetDirectory(TestResultsDirectory / \"reports\")\n\t\t\t\t.AddReports(TestResultsDirectory / \"**/coverage.cobertura.xml\")\n\t\t\t\t.AddReportTypes(ReportTypes.OpenCover)\n\t\t\t\t.AddFileFilters(\"-*.g.cs\")\n\t\t\t\t.SetAssemblyFilters(\"+TestableIO*\", \"+System.IO.Abstractions*\"));\n\t\t});\n}\n"
  },
  {
    "path": "Pipeline/Build.Compile.cs",
    "content": "using System;\nusing System.Linq;\nusing Nuke.Common;\nusing Nuke.Common.IO;\nusing Nuke.Common.Tools.DotNet;\nusing Nuke.Common.Tools.GitVersion;\nusing Nuke.Common.Utilities;\nusing Nuke.Common.Utilities.Collections;\nusing Serilog;\nusing static Nuke.Common.Tools.DotNet.DotNetTasks;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n\tstring BranchName;\n\tstring SemVer;\n    AssemblyVersion MainVersion;\n\n\tTarget CalculateNugetVersion => _ => _\n\t\t.Unlisted()\n\t\t.Executes(() =>\n\t\t{\n            string preRelease = \"-CI\";\n            if (GitHubActions == null)\n            {\n                preRelease = \"-DEV\";\n            }\n            else if (GitHubActions.Ref.StartsWith(\"refs/tags/\", StringComparison.OrdinalIgnoreCase))\n            {\n                int preReleaseIndex = GitHubActions.Ref.IndexOf('-');\n                preRelease = preReleaseIndex > 0 ? GitHubActions.Ref[preReleaseIndex..] : \"\";\n            }\n            \n\t\t\tSemVer = GitVersion.SemVer;\n\t\t\tBranchName = GitVersion.BranchName;\n            MainVersion = AssemblyVersion.FromGitVersion(GitVersion, preRelease);\n\n\t\t\tif (GitHubActions?.IsPullRequest == true)\n\t\t\t{\n\t\t\t\tstring buildNumber = GitHubActions.RunNumber.ToString();\n\t\t\t\tConsole.WriteLine(\n\t\t\t\t\t$\"Branch spec is a pull request. Adding build number {buildNumber}\");\n\n\t\t\t\tSemVer = string.Join('.', GitVersion.SemVer.Split('.').Take(3).Union([buildNumber,]));\n\t\t\t}\n\n\t\t\tConsole.WriteLine($\"SemVer = {SemVer}\");\n\t\t});\n\n\tTarget Clean => _ => _\n\t\t.Unlisted()\n\t\t.Before(Restore)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tArtifactsDirectory.CreateOrCleanDirectory();\n\t\t\tLog.Information(\"Cleaned {path}...\", ArtifactsDirectory);\n\n\t\t\tTestResultsDirectory.CreateOrCleanDirectory();\n\t\t\tLog.Information(\"Cleaned {path}...\", TestResultsDirectory);\n\t\t});\n\n\tTarget Restore => _ => _\n\t\t.Unlisted()\n\t\t.DependsOn(Clean)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tDotNetRestore(s => s\n\t\t\t\t.SetProjectFile(Solution)\n\t\t\t\t.EnableNoCache()\n\t\t\t\t.SetConfigFile(RootDirectory / \"nuget.config\"));\n\t\t});\n\n\tTarget Compile => _ => _\n\t\t.DependsOn(Restore)\n\t\t.DependsOn(CalculateNugetVersion)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tstring preRelease = \"-CI\";\n\t\t\tif (GitHubActions == null)\n\t\t\t{\n\t\t\t\tpreRelease = \"-DEV\";\n\t\t\t}\n\t\t\telse if (GitHubActions.Ref.StartsWith(\"refs/tags/\", StringComparison.OrdinalIgnoreCase))\n\t\t\t{\n\t\t\t\tint preReleaseIndex = GitHubActions.Ref.IndexOf('-');\n\t\t\t\tpreRelease = preReleaseIndex > 0 ? GitHubActions.Ref[preReleaseIndex..] : \"\";\n\t\t\t}\n\n\t\t\tReportSummary(s => s\n\t\t\t\t.WhenNotNull(SemVer, (summary, semVer) => summary\n\t\t\t\t\t.AddPair(\"Version\", MainVersion.FileVersion + MainVersion.PreRelease)));\n\n\t\t\tDotNetBuild(s => s\n\t\t\t\t.SetProjectFile(Solution)\n\t\t\t\t.SetConfiguration(Configuration)\n\t\t\t\t.EnableNoLogo()\n\t\t\t\t.EnableNoRestore()\n                .SetVersion(MainVersion.FileVersion + MainVersion.PreRelease)\n                .SetAssemblyVersion(MainVersion.FileVersion)\n                .SetFileVersion(MainVersion.FileVersion)\n                .SetInformationalVersion(MainVersion.InformationalVersion));\n\t\t});\n\n    public record AssemblyVersion(string FileVersion, string InformationalVersion, string PreRelease)\n    {\n        public static AssemblyVersion FromGitVersion(GitVersion gitVersion, string preRelease)\n        {\n            if (gitVersion is null)\n            {\n                return null;\n            }\n\n            return new AssemblyVersion(gitVersion.AssemblySemVer, gitVersion.InformationalVersion, preRelease);\n        }\n    }\n}\n"
  },
  {
    "path": "Pipeline/Build.Pack.cs",
    "content": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing Nuke.Common;\nusing Nuke.Common.IO;\nusing Nuke.Common.ProjectModel;\nusing Nuke.Common.Utilities;\nusing Nuke.Common.Utilities.Collections;\nusing static Serilog.Log;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n\tTarget UpdateReadme => _ => _\n\t\t.DependsOn(Clean)\n\t\t.Before(Compile)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tstring version = string.Join('.', GitVersion.SemVer.Split('.').Take(3));\n\t\t\tif (version.IndexOf('-') != -1)\n\t\t\t{\n\t\t\t\tversion = version.Substring(0, version.IndexOf('-'));\n\t\t\t}\n\n\t\t\tStringBuilder sb = new();\n\t\t\tstring[] lines = File.ReadAllLines(Solution.Directory / \"README.md\");\n\t\t\tsb.AppendLine(lines.First());\n\t\t\tsb.AppendLine(\n\t\t\t\t$\"[![Changelog](https://img.shields.io/badge/Changelog-v{version}-blue)](https://github.com/TestableIO/System.IO.Abstractions/releases/tag/v{version})\");\n\t\t\tforeach (string line in lines.Skip(1))\n\t\t\t{\n\t\t\t\tif (line.StartsWith(\"[![Build](https://github.com/TestableIO/System.IO.Abstractions/actions/workflows/build.yml\") ||\n\t\t\t\t    line.StartsWith(\"[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure\"))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (line.StartsWith(\"[![Coverage](https://sonarcloud.io/api/project_badges/measure\"))\n\t\t\t\t{\n\t\t\t\t\tsb.AppendLine(line\n\t\t\t\t\t\t.Replace(\")\", $\"&branch=release/v{version})\"));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (line.StartsWith(\"[![Mutation testing badge](https://img.shields.io/endpoint\"))\n\t\t\t\t{\n\t\t\t\t\tsb.AppendLine(line\n\t\t\t\t\t\t.Replace(\"%2Fmain)\", $\"%2Frelease%2Fv{version})\")\n\t\t\t\t\t\t.Replace(\"/main)\", $\"/release/v{version})\"));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tsb.AppendLine(line);\n\t\t\t}\n\n\t\t\tFile.WriteAllText(ArtifactsDirectory / \"README.md\", sb.ToString());\n\t\t});\n\n\tTarget Pack => _ => _\n\t\t.DependsOn(UpdateReadme)\n\t\t.DependsOn(Compile)\n\t\t.Executes(() =>\n\t\t{\n\t\t\tAbsolutePath packagesDirectory = ArtifactsDirectory / \"Packages\";\n\t\t\tpackagesDirectory.CreateOrCleanDirectory();\n\n            List<string> packages = new();\n\t\t\tforeach (Project project in new[]\n\t\t\t         {\n                         Solution.TestableIO_System_IO_Abstractions_Wrappers,\n                         Solution.TestableIO_System_IO_Abstractions_TestingHelpers,\n                         Solution.Meta.TestableIO_System_IO_Abstractions,\n                         Solution.Meta.System_IO_Abstractions,\n                         Solution.Meta.System_IO_Abstractions_TestingHelpers,\n\t\t\t         })\n\t\t\t{\n\t\t\t\tforeach (string package in\n\t\t\t\t         Directory.EnumerateFiles(project.Directory / \"bin\", \"*.nupkg\", SearchOption.AllDirectories))\n\t\t\t\t{\n\t\t\t\t\tFile.Move(package, packagesDirectory / Path.GetFileName(package));\n\t\t\t\t\tDebug(\"Found nuget package: {PackagePath}\", package);\n                    packages.Add(Path.GetFileName(package));\n\t\t\t\t}\n\n\t\t\t\tforeach (string symbolPackage in\n\t\t\t\t         Directory.EnumerateFiles(project.Directory / \"bin\", \"*.snupkg\", SearchOption.AllDirectories))\n\t\t\t\t{\n\t\t\t\t\tFile.Move(symbolPackage, packagesDirectory / Path.GetFileName(symbolPackage));\n\t\t\t\t\tDebug(\"Found symbol package: {PackagePath}\", symbolPackage);\n\t\t\t\t}\n\t\t\t}\n            ReportSummary(s => s\n                .AddPair(\"Packages\", string.Join(\", \", packages)));\n\t\t});\n}\n"
  },
  {
    "path": "Pipeline/Build.UnitTest.cs",
    "content": "using System.IO;\nusing System.Linq;\nusing Nuke.Common;\nusing Nuke.Common.IO;\nusing Nuke.Common.ProjectModel;\nusing Nuke.Common.Tooling;\nusing Nuke.Common.Tools.DotNet;\nusing Nuke.Common.Tools.NUnit;\nusing static Nuke.Common.Tools.DotNet.DotNetTasks;\n\n// ReSharper disable AllUnderscoreLocalParameterName\n\nnamespace Build;\n\npartial class Build\n{\n    Target UnitTests => _ => _\n        .DependsOn(DotNetFrameworkUnitTests)\n        .DependsOn(DotNetUnitTests);\n\n    Project[] UnitTestProjects =>\n    [\n        Solution.Tests.TestableIO_System_IO_Abstractions_Wrappers_Tests,\n        Solution.Tests.TestableIO_System_IO_Abstractions_TestingHelpers_Tests,\n        Solution.Tests.TestableIO_System_IO_Abstractions_Parity_Tests,\n    ];\n\n    Target DotNetFrameworkUnitTests => _ => _\n        .Unlisted()\n        .DependsOn(Compile)\n        .OnlyWhenDynamic(() => EnvironmentInfo.IsWin)\n        .Executes(() =>\n        {\n            var testAssemblies = UnitTestProjects\n                .SelectMany(project =>\n                    project.Directory.GlobFiles(\n                        $\"bin/{(Configuration == Configuration.Debug ? \"Debug\" : \"Release\")}/net472/*.Tests.dll\"))\n                .Select(p => p.ToString())\n                .ToArray();\n\n            Assert.NotEmpty(testAssemblies.ToList());\n            \n            foreach (var testAssembly in testAssemblies)\n            {\n                var currentDirectory = Path.GetDirectoryName(testAssembly);\n\n                NUnitTasks.NUnit3(s => s\n                    .SetInputFiles(testAssembly)\n                    .SetProcessWorkingDirectory(currentDirectory)\n                );\n            }\n        });\n\n    Target DotNetUnitTests => _ => _\n        .Unlisted()\n        .DependsOn(Compile)\n        .Executes(() =>\n        {\n            string[] excludedFrameworks = [\"net48\",];\n            DotNetTest(s => s\n                    .SetConfiguration(Configuration)\n                    .SetProcessEnvironmentVariable(\"DOTNET_CLI_UI_LANGUAGE\", \"en-US\")\n                    .EnableNoBuild()\n                    .SetDataCollector(\"XPlat Code Coverage\")\n                    .SetResultsDirectory(TestResultsDirectory)\n                    .CombineWith(\n                        UnitTestProjects,\n                        (settings, project) => settings\n                            .SetProjectFile(project)\n                            .CombineWith(\n                                project.GetTargetFrameworks()?.Except(excludedFrameworks),\n                                (frameworkSettings, framework) => frameworkSettings\n                                    .SetFramework(framework)\n                                    .AddLoggers($\"trx;LogFileName={project.Name}_{framework}.trx\")\n                            )\n                    ), completeOnFailure: true\n            );\n        });\n}"
  },
  {
    "path": "Pipeline/Build.cs",
    "content": "using Nuke.Common;\nusing Nuke.Common.CI.GitHubActions;\nusing Nuke.Common.IO;\nusing Nuke.Common.ProjectModel;\nusing Nuke.Common.Tools.GitVersion;\n\nnamespace Build;\n\n[GitHubActions(\n\t\"Build\",\n\tGitHubActionsImage.UbuntuLatest,\n\tAutoGenerate = false,\n\tImportSecrets = [nameof(GithubToken),]\n)]\npartial class Build : NukeBuild\n{\n\t[Parameter(\"Configuration to build - Default is 'Debug' (local) or 'Release' (server)\")]\n\treadonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;\n\n\t[Parameter(\"Github Token\")] readonly string GithubToken;\n\n\t[Required] [GitVersion(Framework = \"net8.0\", NoCache = true, NoFetch = true)] readonly GitVersion GitVersion;\n\n\t[Solution(GenerateProjects = true)] readonly Solution Solution;\n\n\tAbsolutePath ArtifactsDirectory => RootDirectory / \"Artifacts\";\n\tAbsolutePath TestResultsDirectory => RootDirectory / \"TestResults\";\n\tGitHubActions GitHubActions => GitHubActions.Instance;\n\n\tpublic static int Main() => Execute<Build>(x => x.UnitTests, x => x.Pack);\n}\n"
  },
  {
    "path": "Pipeline/Build.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <RootNamespace></RootNamespace>\n    <NoWarn>CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006</NoWarn>\n    <NukeRootDirectory>..</NukeRootDirectory>\n    <NukeScriptDirectory>..</NukeScriptDirectory>\n    <NukeTelemetryVersion>1</NukeTelemetryVersion>\n    <IsPackable>false</IsPackable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"LibGit2Sharp\" />\n    <PackageReference Include=\"Nuke.Common\" />\n    <PackageReference Include=\"Nuke.Components\" />\n    <PackageReference Include=\"SharpCompress\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageDownload Include=\"coverlet.console\" Version=\"[3.1.2]\" />\n    <PackageDownload Include=\"dotnet-sonarscanner\" Version=\"[9.0.2]\" />\n    <PackageDownload Include=\"dotnet-stryker\" Version=\"[4.4.1]\" />\n    <PackageDownload Include=\"GitVersion.Tool\" Version=\"[6.0.5]\" />\n    <PackageDownload Include=\"NUnit.ConsoleRunner\" Version=\"[3.19.2]\" />\n    <PackageDownload Include=\"ReportGenerator\" Version=\"[5.4.1]\" />\n    <PackageDownload Include=\"xunit.runner.console\" Version=\"[2.9.2]\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Pipeline/Build.csproj.DotSettings",
    "content": "﻿<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\">\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=HeapView_002EDelegateAllocation/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=VariableHidesOuterVariable/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ClassNeverInstantiated_002EGlobal/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=MemberCanBeMadeStatic_002ELocal/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n    <s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=InterpolatedStringExpressionIsNotIFormattable/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_INTERNAL_MODIFIER/@EntryValue\">Implicit</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_PRIVATE_MODIFIER/@EntryValue\">Implicit</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/METHOD_OR_OPERATOR_BODY/@EntryValue\">ExpressionBody</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_MEMBERS/@EntryValue\">0</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue\">NEXT_LINE</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_USER_LINEBREAKS/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue\">False</s:Boolean>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/MAX_ATTRIBUTE_LENGTH_FOR_SAME_LINE/@EntryValue\">120</s:Int64>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue\">IF_OWNER_IS_SINGLE_LINE</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue\">WRAP_IF_LONG</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<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>\n\t<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>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>\n"
  },
  {
    "path": "Pipeline/BuildExtensions.cs",
    "content": "﻿using System;\nusing Nuke.Common.CI.GitHubActions;\nusing Nuke.Common.Tools.GitVersion;\nusing Nuke.Common.Tools.SonarScanner;\nusing Serilog;\n\nnamespace Build;\n\npublic static class BuildExtensions\n{\n\tpublic static SonarScannerBeginSettings SetPullRequestOrBranchName(\n\t\tthis SonarScannerBeginSettings settings,\n\t\tGitHubActions gitHubActions,\n\t\tGitVersion gitVersion)\n\t{\n\t\tif (gitHubActions?.IsPullRequest == true)\n\t\t{\n\t\t\tLog.Information(\"Use pull request analysis\");\n\t\t\treturn settings\n\t\t\t\t.SetPullRequestKey(gitHubActions.PullRequestNumber.ToString())\n\t\t\t\t.SetPullRequestBranch(gitHubActions.Ref)\n\t\t\t\t.SetPullRequestBase(gitHubActions.BaseRef);\n\t\t}\n\n\t\tif (gitHubActions?.Ref.StartsWith(\"refs/tags/\", StringComparison.OrdinalIgnoreCase) == true)\n\t\t{\n\t\t\tstring version = gitHubActions.Ref.Substring(\"refs/tags/\".Length);\n\t\t\tstring branchName = \"release/\" + version;\n\t\t\tLog.Information(\"Use release branch analysis for '{BranchName}'\", branchName);\n\t\t\treturn settings.SetBranchName(branchName);\n\t\t}\n\n\t\tLog.Information(\"Use branch analysis for '{BranchName}'\", gitVersion.BranchName);\n\t\treturn settings.SetBranchName(gitVersion.BranchName);\n\t}\n}\n"
  },
  {
    "path": "Pipeline/Configuration.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing Nuke.Common.Tooling;\n\n[TypeConverter(typeof(TypeConverter<Configuration>))]\npublic class Configuration : Enumeration\n{\n    public static Configuration Debug = new Configuration { Value = nameof(Debug) };\n    public static Configuration Release = new Configuration { Value = nameof(Release) };\n\n    public static implicit operator string(Configuration configuration)\n    {\n        return configuration.Value;\n    }\n}\n"
  },
  {
    "path": "Pipeline/Directory.Build.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <!-- This file prevents unintended imports of unrelated MSBuild files -->\n  <!-- Uncomment to include parent Directory.Build.props file -->\n  <!--<Import Project=\"$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))\" />-->\n\n</Project>\n"
  },
  {
    "path": "Pipeline/Directory.Build.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <!-- This file prevents unintended imports of unrelated MSBuild files -->\n  <!-- Uncomment to include parent Directory.Build.targets file -->\n  <!--<Import Project=\"$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))\" />-->\n\n</Project>\n"
  },
  {
    "path": "README.md",
    "content": "![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)\n[![NuGet](https://img.shields.io/nuget/v/TestableIO.System.IO.Abstractions.svg)](https://www.nuget.org/packages/TestableIO.System.IO.Abstractions)\n[![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)\n[![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)\n[![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)\n[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)\n[![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)\n\nAt 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.\n\n## Usage\n\n```shell\ndotnet add package TestableIO.System.IO.Abstractions.Wrappers\n```\n\n*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.*\n\n```csharp\npublic class MyComponent\n{\n    readonly IFileSystem fileSystem;\n\n    // <summary>Create MyComponent with the given fileSystem implementation</summary>\n    public MyComponent(IFileSystem fileSystem)\n    {\n        this.fileSystem = fileSystem;\n    }\n    /// <summary>Create MyComponent</summary>\n    public MyComponent() : this(\n        fileSystem: new FileSystem() //use default implementation which calls System.IO\n    )\n    {\n    }\n\n    public void Validate()\n    {\n        foreach (var textFile in fileSystem.Directory.GetFiles(@\"c:\\\", \"*.txt\", SearchOption.TopDirectoryOnly))\n        {\n            var text = fileSystem.File.ReadAllText(textFile);\n            if (text != \"Testing is awesome.\")\n                throw new NotSupportedException(\"We can't go on together. It's not me, it's you.\");\n        }\n    }\n}\n```\n\n### Test helpers\n\nThe 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.\n\n```shell\ndotnet add package TestableIO.System.IO.Abstractions.TestingHelpers\n```\n\n*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.*\n\n```csharp\n[Test]\npublic void MyComponent_Validate_ShouldThrowNotSupportedExceptionIfTestingIsNotAwesome()\n{\n    // Arrange\n    var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n    {\n        { @\"c:\\myfile.txt\", new MockFileData(\"Testing is meh.\") },\n        { @\"c:\\demo\\jQuery.js\", new MockFileData(\"some js\") },\n        { @\"c:\\demo\\image.gif\", new MockFileData(new byte[] { 0x12, 0x34, 0x56, 0xd2 }) }\n    });\n    var component = new MyComponent(fileSystem);\n\n    try\n    {\n        // Act\n        component.Validate();\n    }\n    catch (NotSupportedException ex)\n    {\n        // Assert\n        Assert.That(ex.Message, Is.EqualTo(\"We can't go on together. It's not me, it's you.\"));\n        return;\n    }\n\n    Assert.Fail(\"The expected exception was not thrown.\");\n}\n```\n\nWe even support casting from the .NET Framework's untestable types to our testable wrappers:\n\n```csharp\nFileInfo SomeApiMethodThatReturnsFileInfo()\n{\n    return new FileInfo(\"a\");\n}\n\nvoid MyFancyMethod()\n{\n    var testableFileInfo = (FileInfoBase)SomeApiMethodThatReturnsFileInfo();\n    ...\n}\n```\n\n### Mock support\n\nSince 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):\n\n```csharp\n[Test]\npublic void Test1()\n{\n    var watcher = Mock.Create<IFileSystemWatcher>();\n    var file = Mock.Create<IFile>();\n\n    file.SetupMock.Method.Exists(It.IsAny<string>()).Returns(true);\n    file.SetupMock.Method.ReadAllText(It.IsAny<string>()).Throws<OutOfMemoryException>();\n\n    var unitUnderTest = new SomeClassUsingFileSystemWatcher(watcher, file);\n\n    Assert.Throws<OutOfMemoryException>(() => {\n        watcher.RaiseOnMock.Created(null, new System.IO.FileSystemEventArgs(System.IO.WatcherChangeTypes.Created, @\"C:\\Some\\Directory\", \"Some.File\"));\n    });\n\n    file.VerifyMock.Invoked.Exists(It.IsAny<string>()).Once();\n\n    Assert.That(unitUnderTest.FileWasCreated, Is.True);\n}\n\npublic class SomeClassUsingFileSystemWatcher\n{\n    private readonly IFileSystemWatcher _watcher;\n    private readonly IFile _file;\n\n    public bool FileWasCreated { get; private set; }\n\n    public SomeClassUsingFileSystemWatcher(IFileSystemWatcher watcher, IFile file)\n    {\n        this._file = file;\n        this._watcher = watcher;\n        this._watcher.Created += Watcher_Created;\n    }\n\n    private void Watcher_Created(object sender, System.IO.FileSystemEventArgs e)\n    {\n        FileWasCreated = true;\n\n        if(_file.Exists(e.FullPath))\n        {\n            var text = _file.ReadAllText(e.FullPath);\n        }\n    }\n}\n```\n\n## Relationship with Testably.Abstractions\n\n[`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.\n\nBoth 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.\n\n### When to use Testably.Abstractions vs TestableIO\n- **Use TestableIO.System.IO.Abstractions** if you need:\n  - Basic file system mocking capabilities\n  - Direct manipulation of stored file entities (MockFileData, MockDirectoryData)\n  - Established codebase with existing TestableIO integration\n\n- **Use Testably.Abstractions** if you need:\n  - Advanced testing scenarios (FileSystemWatcher, SafeFileHandles, multiple drives)\n  - Additional abstractions (ITimeSystem, IRandomSystem)\n  - Cross-platform file system simulation (Linux, MacOS, Windows)\n  - More extensive and consistent behavior validation\n  - Active development and new features\n\n### Migrating from TestableIO\nSwitching from TestableIO to Testably only requires changes in your test projects:\n\n1. Replace the NuGet package reference in your test projects:\n   ```xml\n   <!-- Remove -->\n   <PackageReference Include=\"TestableIO.System.IO.Abstractions.TestingHelpers\" />\n   <!-- Add -->\n   <PackageReference Include=\"Testably.Abstractions.Testing\" />\n   ```\n\n2. Update your test code to use the new `MockFileSystem`:\n   ```csharp\n   // Before (TestableIO)\n   var fileSystem = new MockFileSystem();\n   fileSystem.AddDirectory(\"some-directory\");\n   fileSystem.AddFile(\"some-file.txt\", new MockFileData(\"content\"));\n\n   // After (Testably)\n   var fileSystem = new MockFileSystem();\n   fileSystem.Directory.CreateDirectory(\"some-directory\");\n   fileSystem.File.WriteAllText(\"some-file.txt\", \"content\");\n   // or using fluent initialization:\n   fileSystem.Initialize()\n       .WithSubdirectory(\"some-directory\")\n       .WithFile(\"some-file.txt\").Which(f => f\n           .HasStringContent(\"content\"));\n   ```\n\nYour production code using `IFileSystem` remains unchanged.\n\n## Other related projects\n\n-   [`System.IO.Abstractions.Extensions`](https://github.com/TestableIO/System.IO.Abstractions.Extensions)\n    provides convenience functionality on top of the core abstractions.\n\n-   [`System.IO.Abstractions.Analyzers`](https://github.com/TestableIO/System.IO.Abstractions.Analyzers)\n    provides Roslyn analyzers to help use abstractions over static methods."
  },
  {
    "path": "System.IO.Abstractions.slnx",
    "content": "<Solution>\n  <Folder Name=\"/Benchmarks/\">\n    <Project Path=\"benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/TestableIO.System.IO.Abstractions.Benchmarks.csproj\" />\n  </Folder>\n  <Folder Name=\"/Meta/\">\n    <Project Path=\"src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj\" />\n    <Project Path=\"src/System.IO.Abstractions/System.IO.Abstractions.csproj\" />\n    <Project Path=\"src/TestableIO.System.IO.Abstractions/TestableIO.System.IO.Abstractions.csproj\" />\n  </Folder>\n  <Folder Name=\"/Pipeline/\">\n    <Project Path=\"Pipeline/Build.csproj\">\n      <Build Project=\"false\" />\n    </Project>\n  </Folder>\n  <Folder Name=\"/Tests/\">\n    <Project Path=\"tests/TestableIO.System.IO.Abstractions.Api.Tests/TestableIO.System.IO.Abstractions.Api.Tests.csproj\" />\n    <Project Path=\"tests/TestableIO.System.IO.Abstractions.Parity.Tests/TestableIO.System.IO.Abstractions.Parity.Tests.csproj\" />\n    <Project Path=\"tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests.csproj\" />\n    <Project Path=\"tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/TestableIO.System.IO.Abstractions.Wrappers.Tests.csproj\" />\n  </Folder>\n  <Folder Name=\"/_/\">\n    <File Path=\".gitignore\" />\n    <File Path=\"Directory.Build.props\" />\n    <File Path=\"Directory.Packages.props\" />\n    <File Path=\"global.json\" />\n    <File Path=\"README.md\" />\n  </Folder>\n  <Folder Name=\"/_/.github/\" />\n  <Folder Name=\"/_/.github/workflows/\">\n    <File Path=\".github/workflows/build.yml\" />\n    <File Path=\".github/workflows/ci.yml\" />\n  </Folder>\n  <Folder Name=\"/_/src/\">\n    <File Path=\"src/Directory.Build.props\" />\n  </Folder>\n  <Folder Name=\"/_/tests/\">\n    <File Path=\"tests/Directory.Build.props\" />\n  </Folder>\n  <Project Path=\"src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj\" />\n  <Project Path=\"src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj\" />\n</Solution>\n"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/FileSystemAbstractionBenchmarks.cs",
    "content": "﻿using System.IO.Abstractions.Benchmarks.Support;\nusing BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Order;\n\nnamespace System.IO.Abstractions.Benchmarks;\n\n//[SimpleJob(launchCount: 3, warmupCount: 10, targetCount: 30)]\n[RPlotExporter]\n[MemoryDiagnoser]\n[Orderer(summaryOrderPolicy: SummaryOrderPolicy.FastestToSlowest)]\n[RankColumn]\npublic class FileSystemAbstractionBenchmarks\n{\n    /// <summary>\n    /// FileSupport type to avoid counting object initialisation on the benchmark\n    /// </summary>\n    private readonly FileSupport _fileSupport;\n    private readonly DirectorySupport _directorySupport;\n\n    private readonly string _path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);\n\n    public FileSystemAbstractionBenchmarks()\n    {\n        // Initialize file support\n        _fileSupport = new FileSupport();\n        _directorySupport = new DirectorySupport();\n    }\n\n    #region File IsFile\n    [Benchmark]\n    public void FileExists_DotNet() => FileSupportStatic.IsFile(_path);\n\n    [Benchmark]\n    public void FileExists_Abstraction() => _fileSupport.IsFile(_path);\n    #endregion\n\n    #region Directory Exists\n    [Benchmark]\n    public void DirectoryExists_DotNet() => DirectorySupportStatic.Exists(_path);\n\n    [Benchmark]\n    public void DirectoryExists_Abstraction() => _directorySupport.Exists(_path);\n    #endregion\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/MockFileSystemBenchmarks.cs",
    "content": "﻿using BenchmarkDotNet.Attributes;\nusing System.Collections.Generic;\nusing System.IO.Abstractions.TestingHelpers;\nusing System.Linq;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.Benchmarks;\n\n[RPlotExporter]\n[MemoryDiagnoser]\npublic class MockFileSystemBenchmarks\n{\n    private readonly Dictionary<string, MockFileData> testData = CreateTestData();\n\n    private static Dictionary<string, MockFileData> CreateTestData()\n    {\n        var filesCount = 100000;\n        var maxDirectoryDepth = 8;\n        return Enumerable.Range(0, filesCount).ToDictionary(\n            i => XFS.Path(@$\"C:\\{string.Join(@\"\\\", Enumerable.Range(0, i % maxDirectoryDepth + 1).Select(i => i.ToString()))}\\{i}.bin\"),\n            i => new MockFileData(i.ToString()));\n    }\n\n    [Benchmark]\n    public MockFileSystem MockFileSystem_Constructor() => new(testData);\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Program.cs",
    "content": "﻿namespace System.IO.Abstractions.Benchmarks;\n\nusing BenchmarkDotNet.Running;\n\nstatic class Program\n{\n    public static void Main(string[] args)\n    {\n        BenchmarkRunner.Run(typeof(Program).Assembly);\n    }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"yapm\": {\n      \"commandName\": \"Project\",\n      \"commandLineArgs\": \"apply\"\n    }\n  }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupport.cs",
    "content": "﻿namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic class DirectorySupport\n{\n    private readonly IFileSystem _fileSystem;\n\n    public DirectorySupport(IFileSystem fileSystem)\n    {\n        _fileSystem = fileSystem;\n    }\n\n    public DirectorySupport() : this(new FileSystem())\n    {\n        // Default implementation for FileSystem\n    }\n\n    public bool IsDirectory(string path)\n    {\n        return _fileSystem.Directory.Exists(path);\n    }\n\n    private static string GetRandomTempDirectory()\n    {\n        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());\n    }\n\n    public string CreateRandomDirectory()\n    {\n        var randomPath = GetRandomTempDirectory();\n        _fileSystem.Directory.CreateDirectory(randomPath);\n        return randomPath;\n    }\n\n    private void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)\n    {\n        // Get the subdirectories for the specified directory.\n        var dir = _fileSystem.DirectoryInfo.New(sourceDirName);\n        if (!dir.Exists)\n        {\n            throw new DirectoryNotFoundException(\n                \"Source directory does not exist or could not be found: \"\n                + sourceDirName);\n        }\n\n        var dirs = dir.GetDirectories();\n        // If the destination directory doesn't exist, create it.\n        if (!_fileSystem.Directory.Exists(destDirName))\n        {\n            _fileSystem.Directory.CreateDirectory(destDirName);\n        }\n\n        // Get the files in the directory and copy them to the new location.\n        var files = dir.GetFiles();\n        foreach (var file in files)\n        {\n            string temppath = Path.Combine(destDirName, file.Name);\n            file.CopyTo(temppath, overwrite);\n        }\n\n        // If copying subdirectories, copy them and their contents to new location.\n        if (copySubDirs)\n        {\n            foreach (var subdir in dirs)\n            {\n                string temppath = Path.Combine(destDirName, subdir.Name);\n                DirectoryCopy(subdir.FullName, temppath, copySubDirs);\n            }\n        }\n    }\n\n    public void CreateIfNotExists(string directory)\n    {\n        if (!_fileSystem.Directory.Exists(directory))\n        {\n            _fileSystem.Directory.CreateDirectory(directory);\n        }\n    }\n\n    public bool Exists(string directory)\n    {\n        return _fileSystem.Directory.Exists(directory);\n    }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/DirectorySupportStatic.cs",
    "content": "﻿namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic static class DirectorySupportStatic\n{\n    public static bool IsDirectory(string path)\n    {\n        return Directory.Exists(path);\n    }\n\n    private static string GetRandomTempDirectory()\n    {\n        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());\n    }\n\n    public static string CreateDirectory()\n    {\n        var randomPath = GetRandomTempDirectory();\n        Directory.CreateDirectory(randomPath);\n        return randomPath;\n    }\n\n    private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)\n    {\n        // Get the subdirectories for the specified directory.\n        DirectoryInfo dir = new DirectoryInfo(sourceDirName);\n\n        if (!dir.Exists)\n        {\n            throw new DirectoryNotFoundException(\n                \"Source directory does not exist or could not be found: \"\n                + sourceDirName);\n        }\n\n        DirectoryInfo[] dirs = dir.GetDirectories();\n        // If the destination directory doesn't exist, create it.\n        if (!Directory.Exists(destDirName))\n        {\n            Directory.CreateDirectory(destDirName);\n        }\n\n        // Get the files in the directory and copy them to the new location.\n        FileInfo[] files = dir.GetFiles();\n        foreach (FileInfo file in files)\n        {\n            string temppath = Path.Combine(destDirName, file.Name);\n            file.CopyTo(temppath, overwrite);\n        }\n\n        // If copying subdirectories, copy them and their contents to new location.\n        if (copySubDirs)\n        {\n            foreach (DirectoryInfo subdir in dirs)\n            {\n                string temppath = Path.Combine(destDirName, subdir.Name);\n                DirectoryCopy(subdir.FullName, temppath, copySubDirs);\n            }\n        }\n    }\n\n    public static void CreateIfNotExists(string directory)\n    {\n        if (!Directory.Exists(directory))\n        {\n            Directory.CreateDirectory(directory);\n        }\n    }\n\n    public static bool Exists(string directory) => Directory.Exists(directory);\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupport.cs",
    "content": "﻿namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic class FileSupport\n{\n    private readonly IFileSystem _fileSystem;\n\n    public FileSupport(IFileSystem fileSystem)\n    {\n        _fileSystem = fileSystem;\n    }\n\n    public FileSupport() : this(new FileSystem())\n    {\n        // Default implementation for FileSystem\n    }\n\n    private static string GetRandomTempFile()\n    {\n        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());\n    }\n\n    public bool IsFile(string path)\n    {\n        return _fileSystem.File.Exists(path);\n    }\n\n    /// <summary>\n    /// Checks and deletes given file if it does exists.\n    /// </summary>\n    /// <param name=\"filePath\">Path of the file</param>\n    public void DeleteIfExists(string filePath)\n    {\n        if (_fileSystem.File.Exists(filePath))\n        {\n            _fileSystem.File.Delete(filePath);\n        }\n    }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/Support/FileSupportStatic.cs",
    "content": "﻿namespace System.IO.Abstractions.Benchmarks.Support;\n\npublic static class FileSupportStatic\n{\n    public static string GetRandomTempFile()\n    {\n        return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());\n    }\n\n    public static bool IsFile(string path)\n    {\n        return File.Exists(path);\n    }\n\n    /// <summary>\n    /// Checks and deletes given file if it does exists.\n    /// </summary>\n    /// <param name=\"filePath\">Path of the file</param>\n    public static void DeleteIfExists(string filePath)\n    {\n        if (File.Exists(filePath))\n        {\n            File.Delete(filePath);\n        }\n    }\n}"
  },
  {
    "path": "benchmarks/TestableIO.System.IO.Abstractions.Benchmarks/TestableIO.System.IO.Abstractions.Benchmarks.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\t<PropertyGroup>\n\t\t<AssemblyName>TestableIO.System.IO.Abstractions.Benchmarks</AssemblyName>\n\t\t<RootNamespace>TestableIO.System.IO.Abstractions.Benchmarks</RootNamespace>\n\t\t<Description>Bencharmks comparisons.</Description>\n\t\t<TargetFramework>net9.0</TargetFramework>\n\t\t<PackageProjectUrl>https://github.com/TestableIO/System.IO.Abstractions</PackageProjectUrl>\n\t\t<PackageLicenseExpression>MIT</PackageLicenseExpression>\n\t\t<PackageTags>testing</PackageTags>\n\t\t<IsPackable>false</IsPackable>\n\t\t<IsTestable>false</IsTestable>\n\t\t<OutputType>Exe</OutputType>\n\t\t<OutputType>Exe</OutputType>\n\t</PropertyGroup>\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"../../src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj\" />\n\t\t<ProjectReference Include=\"../../src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj\" />\n\t</ItemGroup>\n\t<ItemGroup>\n\t\t<PackageReference Include=\"BenchmarkDotNet\" />\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "build.cmd",
    "content": ":; set -eo pipefail\n:; SCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd)\n:; ${SCRIPT_DIR}/build.sh \"$@\"\n:; exit $?\n\n@ECHO OFF\npowershell -ExecutionPolicy ByPass -NoProfile -File \"%~dp0build.ps1\" %*\n"
  },
  {
    "path": "build.ps1",
    "content": "[CmdletBinding()]\nParam(\n    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]\n    [string[]]$BuildArguments\n)\n\nWrite-Output \"PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)\"\n\nSet-StrictMode -Version 2.0; $ErrorActionPreference = \"Stop\"; $ConfirmPreference = \"None\"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }\n$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent\n\n###########################################################################\n# CONFIGURATION\n###########################################################################\n\n$BuildProjectFile = \"$PSScriptRoot\\Pipeline\\Build.csproj\"\n$TempDirectory = \"$PSScriptRoot\\\\.nuke\\temp\"\n\n$DotNetGlobalFile = \"$PSScriptRoot\\\\global.json\"\n$DotNetInstallUrl = \"https://dot.net/v1/dotnet-install.ps1\"\n$DotNetChannel = \"STS\"\n\n$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1\n$env:DOTNET_NOLOGO = 1\n\n###########################################################################\n# EXECUTION\n###########################################################################\n\nfunction ExecSafe([scriptblock] $cmd) {\n    & $cmd\n    if ($LASTEXITCODE) { exit $LASTEXITCODE }\n}\n\n# If dotnet CLI is installed globally and it matches requested version, use for execution\nif ($null -ne (Get-Command \"dotnet\" -ErrorAction SilentlyContinue) -and `\n     $(dotnet --version) -and $LASTEXITCODE -eq 0) {\n    $env:DOTNET_EXE = (Get-Command \"dotnet\").Path\n}\nelse {\n    # Download install script\n    $DotNetInstallFile = \"$TempDirectory\\dotnet-install.ps1\"\n    New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null\n    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\n    (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)\n\n    # If global.json exists, load expected version\n    if (Test-Path $DotNetGlobalFile) {\n        $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)\n        if ($DotNetGlobal.PSObject.Properties[\"sdk\"] -and $DotNetGlobal.sdk.PSObject.Properties[\"version\"]) {\n            $DotNetVersion = $DotNetGlobal.sdk.version\n        }\n    }\n\n    # Install by channel or version\n    $DotNetDirectory = \"$TempDirectory\\dotnet-win\"\n    if (!(Test-Path variable:DotNetVersion)) {\n        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }\n    } else {\n        ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }\n    }\n    $env:DOTNET_EXE = \"$DotNetDirectory\\dotnet.exe\"\n    $env:PATH = \"$DotNetDirectory;$env:PATH\"\n}\n\nWrite-Output \"Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)\"\n\nif (Test-Path env:NUKE_ENTERPRISE_TOKEN) {\n    & $env:DOTNET_EXE nuget remove source \"nuke-enterprise\" > $null\n    & $env:DOTNET_EXE nuget add source \"https://f.feedz.io/nuke/enterprise/nuget\" --name \"nuke-enterprise\" --username \"PAT\" --password $env:NUKE_ENTERPRISE_TOKEN > $null\n}\n\nExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }\nExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }\n"
  },
  {
    "path": "build.sh",
    "content": "#!/usr/bin/env bash\n\nbash --version 2>&1 | head -n 1\n\nset -eo pipefail\nSCRIPT_DIR=$(cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd)\n\n###########################################################################\n# CONFIGURATION\n###########################################################################\n\nBUILD_PROJECT_FILE=\"$SCRIPT_DIR/Pipeline/Build.csproj\"\nTEMP_DIRECTORY=\"$SCRIPT_DIR//.nuke/temp\"\n\nDOTNET_GLOBAL_FILE=\"$SCRIPT_DIR//global.json\"\nDOTNET_INSTALL_URL=\"https://dot.net/v1/dotnet-install.sh\"\nDOTNET_CHANNEL=\"STS\"\n\nexport DOTNET_CLI_TELEMETRY_OPTOUT=1\nexport DOTNET_NOLOGO=1\n\n###########################################################################\n# EXECUTION\n###########################################################################\n\nfunction FirstJsonValue {\n    perl -nle 'print $1 if m{\"'\"$1\"'\": \"([^\"]+)\",?}' <<< \"${@:2}\"\n}\n\n# If dotnet CLI is installed globally and it matches requested version, use for execution\nif [ -x \"$(command -v dotnet)\" ] && dotnet --version &>/dev/null; then\n    export DOTNET_EXE=\"$(command -v dotnet)\"\nelse\n    # Download install script\n    DOTNET_INSTALL_FILE=\"$TEMP_DIRECTORY/dotnet-install.sh\"\n    mkdir -p \"$TEMP_DIRECTORY\"\n    curl -Lsfo \"$DOTNET_INSTALL_FILE\" \"$DOTNET_INSTALL_URL\"\n    chmod +x \"$DOTNET_INSTALL_FILE\"\n\n    # If global.json exists, load expected version\n    if [[ -f \"$DOTNET_GLOBAL_FILE\" ]]; then\n        DOTNET_VERSION=$(FirstJsonValue \"version\" \"$(cat \"$DOTNET_GLOBAL_FILE\")\")\n        if [[ \"$DOTNET_VERSION\" == \"\"  ]]; then\n            unset DOTNET_VERSION\n        fi\n    fi\n\n    # Install by channel or version\n    DOTNET_DIRECTORY=\"$TEMP_DIRECTORY/dotnet-unix\"\n    if [[ -z ${DOTNET_VERSION+x} ]]; then\n        \"$DOTNET_INSTALL_FILE\" --install-dir \"$DOTNET_DIRECTORY\" --channel \"$DOTNET_CHANNEL\" --no-path\n    else\n        \"$DOTNET_INSTALL_FILE\" --install-dir \"$DOTNET_DIRECTORY\" --version \"$DOTNET_VERSION\" --no-path\n    fi\n    export DOTNET_EXE=\"$DOTNET_DIRECTORY/dotnet\"\n    export PATH=\"$DOTNET_DIRECTORY:$PATH\"\nfi\n\necho \"Microsoft (R) .NET SDK version $(\"$DOTNET_EXE\" --version)\"\n\nif [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && \"$NUKE_ENTERPRISE_TOKEN\" != \"\" ]]; then\n    \"$DOTNET_EXE\" nuget remove source \"nuke-enterprise\" &>/dev/null || true\n    \"$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\nfi\n\n\"$DOTNET_EXE\" build \"$BUILD_PROJECT_FILE\" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet\n\"$DOTNET_EXE\" run --project \"$BUILD_PROJECT_FILE\" --no-build -- \"$@\"\n"
  },
  {
    "path": "global.json",
    "content": "{\n  \"sdk\": {\n    \"version\": \"10.0.201\",\n    \"rollForward\": \"latestMinor\"\n  }\n}\n"
  },
  {
    "path": "nuget.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <clear />\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\n  </packageSources>\n</configuration>"
  },
  {
    "path": "renovate.json5",
    "content": "{\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",
    "content": "<Project>\n\n    <Import Project=\"$(MSBuildThisFileDirectory)/../Directory.Build.props\"\n            Condition=\"Exists('$(MSBuildThisFileDirectory)/../Directory.Build.props')\"/>\n\n    <PropertyGroup>\n        <TargetFrameworks>net472;netstandard2.0;netstandard2.1;net6.0;net8.0;net9.0;net10.0</TargetFrameworks>\n    </PropertyGroup>\n\n    <PropertyGroup>\n        <RepositoryUrl>https://github.com/TestableIO/System.IO.Abstractions.git</RepositoryUrl>\n        <IncludeSymbols>true</IncludeSymbols>\n        <SymbolPackageFormat>snupkg</SymbolPackageFormat>\n        <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n        <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    </PropertyGroup>\n\n    <PropertyGroup>\n        <PackageIcon>icon_256x256.png</PackageIcon>\n    </PropertyGroup>\n    <ItemGroup>\n        <None Include=\"$(SolutionDir)/images/icon_256x256.png\" Pack=\"true\" PackagePath=\"/\" Link=\"/icon_256x256.png\"/>\n    </ItemGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"IsExternalInit\">\n            <PrivateAssets>all</PrivateAssets>\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n        </PackageReference>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/System.IO.Abstractions/System.IO.Abstractions.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>System.IO.Abstractions</AssemblyName>\n        <RootNamespace>System.IO.Abstractions</RootNamespace>\n        <Description>A set of abstractions to help make file system interactions testable.</Description>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <ProjectReference Include=\"..\\TestableIO.System.IO.Abstractions\\TestableIO.System.IO.Abstractions.csproj\"/>\n        <ProjectReference Include=\"..\\TestableIO.System.IO.Abstractions.Wrappers\\TestableIO.System.IO.Abstractions.Wrappers.csproj\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n    \n    <PropertyGroup>\n        <AssemblyName>System.IO.Abstractions.TestingHelpers</AssemblyName>\n        <RootNamespace>System.IO.Abstractions.TestingHelpers</RootNamespace>\n        <Description>A set of pre-built mocks to help when testing file system interactions.</Description>\n    </PropertyGroup>\n    \n    <ItemGroup>\n        <ProjectReference Include=\"..\\TestableIO.System.IO.Abstractions.TestingHelpers\\TestableIO.System.IO.Abstractions.TestingHelpers.csproj\"/>\n    </ItemGroup>\n    \n</Project>\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions/AssemblyRedirects.cs",
    "content": "﻿using System.IO.Abstractions;\nusing System.Runtime.CompilerServices;\n\n[assembly: TypeForwardedTo(typeof(FileSystemStream))]\n[assembly: TypeForwardedTo(typeof(IDirectory))]\n[assembly: TypeForwardedTo(typeof(IDirectoryInfo))]\n[assembly: TypeForwardedTo(typeof(IDirectoryInfoFactory))]\n[assembly: TypeForwardedTo(typeof(IDriveInfo))]\n[assembly: TypeForwardedTo(typeof(IDriveInfoFactory))]\n[assembly: TypeForwardedTo(typeof(IFile))]\n[assembly: TypeForwardedTo(typeof(IFileInfo))]\n[assembly: TypeForwardedTo(typeof(IFileInfoFactory))]\n[assembly: TypeForwardedTo(typeof(IFileStreamFactory))]\n[assembly: TypeForwardedTo(typeof(IFileSystem))]\n[assembly: TypeForwardedTo(typeof(IFileSystemAclSupport))]\n[assembly: TypeForwardedTo(typeof(IFileSystemEntity))]\n[assembly: TypeForwardedTo(typeof(IFileSystemInfo))]\n[assembly: TypeForwardedTo(typeof(IFileSystemWatcher))]\n[assembly: TypeForwardedTo(typeof(IFileSystemWatcherFactory))]\n[assembly: TypeForwardedTo(typeof(IFileVersionInfo))]\n[assembly: TypeForwardedTo(typeof(IFileVersionInfoFactory))]\n[assembly: TypeForwardedTo(typeof(IPath))]\n[assembly: TypeForwardedTo(typeof(IWaitForChangedResult))]\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions/TestableIO.System.IO.Abstractions.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions</AssemblyName>\n        <RootNamespace>System.IO.Abstractions</RootNamespace>\n        <Description>A set of abstractions to help make file system interactions testable.</Description>\n        <Nullable>enable</Nullable>\n        <LangVersion>preview</LangVersion>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Nullable\">\n            <PrivateAssets>all</PrivateAssets>\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n        </PackageReference>\n        <PackageReference Include=\"Testably.Abstractions.FileSystem.Interface\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/CommonExceptions.cs",
    "content": "using System.Globalization;\nusing System.Runtime.InteropServices;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\ninternal static class CommonExceptions\n{\n    private const int _fileLockHResult = unchecked((int)0x80070020);\n        \n    public static FileNotFoundException FileNotFound(string path) =>\n        new FileNotFoundException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"COULD_NOT_FIND_FILE_EXCEPTION\"),\n                path\n            ),\n            path\n        );\n\n    public static DirectoryNotFoundException CouldNotFindPartOfPath(string path) =>\n        new DirectoryNotFoundException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"COULD_NOT_FIND_PART_OF_PATH_EXCEPTION\"),\n                path\n            )\n        );\n\n    public static UnauthorizedAccessException AccessDenied(string path) =>\n        new UnauthorizedAccessException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"ACCESS_TO_THE_PATH_IS_DENIED\"),\n                path\n            )\n        );\n\n    public static NotSupportedException InvalidUseOfVolumeSeparator() =>\n        new NotSupportedException(StringResources.Manager.GetString(\"THE_PATH_IS_NOT_OF_A_LEGAL_FORM\"));\n\n    public static ArgumentException PathIsNotOfALegalForm(string paramName) =>\n        new ArgumentException(\n            StringResources.Manager.GetString(\"THE_PATH_IS_NOT_OF_A_LEGAL_FORM\"),\n            paramName\n        );\n\n    public static ArgumentNullException FilenameCannotBeNull(string paramName) =>\n        new ArgumentNullException(\n            paramName,\n            StringResources.Manager.GetString(\"FILENAME_CANNOT_BE_NULL\")\n        );\n\n    public static ArgumentException IllegalCharactersInPath(string paramName = null) =>\n        paramName != null\n            ? new ArgumentException(StringResources.Manager.GetString(\"ILLEGAL_CHARACTERS_IN_PATH_EXCEPTION\"), paramName)\n            : new ArgumentException(StringResources.Manager.GetString(\"ILLEGAL_CHARACTERS_IN_PATH_EXCEPTION\"));\n\n    public static ArgumentException InvalidUncPath(string paramName) =>\n        RuntimeInformation.IsOSPlatform(OSPlatform.Windows)\n            ? new ArgumentException(@\"The UNC path should be of the form \\\\server\\share.\", paramName)\n            : new ArgumentException(@\"The UNC path should be of the form //server/share.\", paramName);\n\n    public static IOException ProcessCannotAccessFileInUse(string paramName = null) =>\n        paramName != null\n            ? new IOException(string.Format(StringResources.Manager.GetString(\"PROCESS_CANNOT_ACCESS_FILE_IN_USE_WITH_FILENAME\"), paramName), _fileLockHResult)\n            : new IOException(StringResources.Manager.GetString(\"PROCESS_CANNOT_ACCESS_FILE_IN_USE\"), _fileLockHResult);\n\n    public static IOException FileAlreadyExists(string paramName) =>\n        new IOException(string.Format(StringResources.Manager.GetString(\"FILE_ALREADY_EXISTS\"), paramName));\n\n    public static ArgumentException InvalidAccessCombination(FileMode mode, FileAccess access)\n        => new ArgumentException(string.Format(StringResources.Manager.GetString(\"INVALID_ACCESS_COMBINATION\"), mode, access), nameof(access));\n\n    public static ArgumentException AppendAccessOnlyInWriteOnlyMode()\n        => new ArgumentException(string.Format(StringResources.Manager.GetString(\"APPEND_ACCESS_ONLY_IN_WRITE_ONLY_MODE\")), \"access\");\n\n    public static NotImplementedException NotImplemented() =>\n        new NotImplementedException(StringResources.Manager.GetString(\"NOT_IMPLEMENTED_EXCEPTION\"));\n\n    public static IOException CannotCreateBecauseSameNameAlreadyExists(string path) =>\n        new IOException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"CANNOT_CREATE_BECAUSE_SAME_NAME_ALREADY_EXISTS\"),\n                path\n            )\n        );\n\n    public static IOException NameCannotBeResolvedByTheSystem(string path) =>\n        new IOException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"NAME_CANNOT_BE_RESOLVED_BY_THE_SYSTEM\"),\n                path\n            )\n        );\n\n    public static DirectoryNotFoundException PathDoesNotExistOrCouldNotBeFound(string path) =>\n        new DirectoryNotFoundException(\n            string.Format(\n                CultureInfo.InvariantCulture,\n                StringResources.Manager.GetString(\"PATH_DOES_NOT_EXIST_OR_COULD_NOT_BE_FOUND\"),\n                path\n            )\n        );\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/FileHandles.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.IO;\nusing System.IO.Abstractions.TestingHelpers;\n\npublic class FileHandles\n{\n    private readonly ConcurrentDictionary<string, ConcurrentDictionary<Guid, (FileAccess access, FileShare share)>> handles = new();\n\n    public void AddHandle(string path, Guid guid, FileAccess access, FileShare share)\n    {\n        var pathHandles = handles.GetOrAdd(\n            path, \n            _ => new ConcurrentDictionary<Guid, (FileAccess, FileShare)>());\n\n        var requiredShare = AccessToShare(access);\n        foreach (var (existingAccess, existingShare) in pathHandles.Values)\n        {\n            var existingRequiredShare = AccessToShare(existingAccess);\n            var existingBlocksNew = (existingShare & requiredShare) != requiredShare;\n            var newBlocksExisting = (share & existingRequiredShare) != existingRequiredShare;\n            if (existingBlocksNew || newBlocksExisting)\n            {\n                throw CommonExceptions.ProcessCannotAccessFileInUse(path);\n            }\n        }\n        \n        pathHandles[guid] = (access, share);\n    }\n\n    public void RemoveHandle(string path, Guid guid)\n    {\n        if (handles.TryGetValue(path, out var pathHandles))\n        {\n            pathHandles.TryRemove(guid, out _);\n            if (pathHandles.IsEmpty)\n            {\n                handles.TryRemove(path, out _);\n            }\n        }\n    }\n\n    private static FileShare AccessToShare(FileAccess access)\n    {\n        var share = FileShare.None;\n        if (access.HasFlag(FileAccess.Read))\n        {\n            share |= FileShare.Read;\n        }\n        if (access.HasFlag(FileAccess.Write))\n        {\n            share |= FileShare.Write;\n        }\n        return share;\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/IMockFileDataAccessor.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides access to the file system storage.\n/// </summary>\npublic interface IMockFileDataAccessor : IFileSystem\n{\n    /// <summary>\n    /// Adjust the times of the <paramref name=\"fileData\"/>.\n    /// </summary>\n    /// <param name=\"fileData\">The <see cref=\"MockFileData\"/> for which the times should be adjusted.</param>\n    /// <param name=\"timeAdjustments\">The adjustments to make on the <see cref=\"MockFileData\"/>.</param>\n    /// <returns>The adjusted file.</returns>\n    MockFileData AdjustTimes(MockFileData fileData, TimeAdjustments timeAdjustments);\n\n    /// <summary>\n    /// Gets a file.\n    /// </summary>\n    /// <param name=\"path\">The path of the file to get.</param>\n    /// <returns>The file. <see langword=\"null\"/> if the file does not exist.</returns>\n    MockFileData GetFile(string path);\n\n    /// <summary>\n    /// Gets a drive.\n    /// </summary>\n    /// <param name=\"name\">The name of the drive to get.</param>\n    /// <returns>The drive. <see langword=\"null\"/> if the drive does not exist.</returns>\n    MockDriveData GetDrive(string name);\n\n    /// <summary>\n    /// Adds the file.\n    /// </summary>\n    /// <param name=\"path\">The path of the file to add.</param>\n    /// <param name=\"mockFile\">The file data to add.</param>\n    /// <param name=\"verifyAccess\">Flag indicating if the access conditions should be verified.</param>\n    void AddFile(string path, MockFileData mockFile, bool verifyAccess = true);\n\n    /// <summary>\n    /// </summary>\n    void AddDirectory(string path);\n\n    /// <summary>\n    /// </summary>\n    void AddDrive(string name, MockDriveData mockDrive);\n\n    /// <summary>\n    /// </summary>\n    void AddFileFromEmbeddedResource(string path, Assembly resourceAssembly, string embeddedResourcePath);\n\n    /// <summary>\n    /// </summary>\n    void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssembly, string embeddedResourcePath);\n\n    /// <summary>\n    /// </summary>\n    void MoveDirectory(string sourcePath, string destPath);\n\n    /// <summary>\n    /// Removes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to remove.</param>\n    /// <param name=\"verifyAccess\">Flag indicating if the access conditions should be verified.</param>\n    /// <remarks>\n    /// The file must not exist.\n    /// </remarks>\n    void RemoveFile(string path, bool verifyAccess = true);\n\n    /// <summary>\n    /// Determines whether the file exists.\n    /// </summary>\n    /// <param name=\"path\">The file to check. </param>\n    /// <returns><see langword=\"true\"/> if the file exists; otherwise, <see langword=\"false\"/>.</returns>\n    bool FileExists(string path);\n\n    /// <summary>\n    /// Gets all unique paths of all files and directories.\n    /// </summary>\n    IEnumerable<string> AllPaths { get; }\n\n    /// <summary>\n    /// Gets the paths of all files.\n    /// </summary>\n    IEnumerable<string> AllFiles { get; }\n\n    /// <summary>\n    /// Gets the paths of all directories.\n    /// </summary>\n    IEnumerable<string> AllDirectories { get; }\n\n    /// <summary>\n    /// Gets the names of all drives.\n    /// </summary>\n    IEnumerable<string> AllDrives { get; }\n\n    /// <summary>\n    /// Gets a helper for string operations.\n    /// </summary>\n\n    StringOperations StringOperations { get; }\n\n    /// <summary>\n    /// Gets a helper for verifying file system paths.\n    /// </summary>\n    PathVerifier PathVerifier { get; }\n\n    /// <summary>\n    /// Gets a reference to the underlying file system. \n    /// </summary>\n    IFileSystem FileSystem { get; }\n\n    /// <summary>\n    /// Gets a reference to the open file handles.\n    /// </summary>\n    FileHandles FileHandles { get; }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text.RegularExpressions;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDirectory : DirectoryBase\n{\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n    private string currentDirectory;\n\n    /// <inheritdoc />\n    public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, FileBase fileBase, string currentDirectory) :\n        this(mockFileDataAccessor, currentDirectory)\n    {\n    }\n\n    /// <inheritdoc />\n    public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) : base(\n        mockFileDataAccessor?.FileSystem)\n    {\n        this.currentDirectory = currentDirectory;\n        this.mockFileDataAccessor =\n            mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n    }\n\n\n    /// <inheritdoc />\n    public override IDirectoryInfo CreateDirectory(string path)\n    {\n        return CreateDirectoryInternal(path);\n    }\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        public override IDirectoryInfo CreateDirectory(string path, UnixFileMode unixCreateMode)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    private IDirectoryInfo CreateDirectoryInternal(string path)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path));\n        }\n\n        if (path.Length == 0)\n        {\n            throw new ArgumentException(\n                StringResources.Manager.GetString(\"PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE\"), \"path\");\n        }\n\n        if (mockFileDataAccessor.PathVerifier.HasIllegalCharacters(path, true))\n        {\n            throw CommonExceptions.IllegalCharactersInPath(nameof(path));\n        }\n\n        path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes();\n        if (XFS.IsWindowsPlatform())\n        {\n            path = path.TrimEnd(' ');\n        }\n\n        var existingFile = mockFileDataAccessor.GetFile(path);\n        if (existingFile == null)\n        {\n            mockFileDataAccessor.AddDirectory(path);\n        }\n        else if (!existingFile.IsDirectory)\n        {\n            throw CommonExceptions.FileAlreadyExists(\"path\");\n        }\n\n        var created = new MockDirectoryInfo(mockFileDataAccessor, path);\n\n        return created;\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)\n        {\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(pathToTarget, nameof(pathToTarget));\n\n            if (Exists(path))\n            {\n                throw CommonExceptions.FileAlreadyExists(nameof(path));\n            }\n\n            mockFileDataAccessor.AddDirectory(path);\n            mockFileDataAccessor.GetFile(path).LinkTarget = pathToTarget;\n\n            var directoryInfo = new MockDirectoryInfo(mockFileDataAccessor, path);\n            directoryInfo.Attributes |= FileAttributes.ReparsePoint;\n            return directoryInfo;\n        }\n#endif\n\n#if FEATURE_CREATE_TEMP_SUBDIRECTORY\n        /// <inheritdoc />\n        public override IDirectoryInfo CreateTempSubdirectory(string prefix = null)\n        {\n            prefix ??= \"\";\n            string potentialTempDirectory;\n\n            // Perform directory name generation in a loop, just in case the randomly generated name already exists.\n            do\n            {\n                var randomDir = $\"{prefix}{FileSystem.Path.GetRandomFileName()}\";\n                potentialTempDirectory = Path.Combine(FileSystem.Path.GetTempPath(), randomDir);\n            } while (Exists(potentialTempDirectory));\n\n            return CreateDirectoryInternal(potentialTempDirectory);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void Delete(string path)\n    {\n        Delete(path, false);\n    }\n\n\n    /// <inheritdoc />\n    public override void Delete(string path, bool recursive)\n    {\n        path = mockFileDataAccessor.Path.GetFullPath(path).TrimSlashes();\n\n        var stringOps = mockFileDataAccessor.StringOperations;\n        var pathWithDirectorySeparatorChar = $\"{path}{Path.DirectorySeparatorChar}\";\n\n        var affectedPaths = mockFileDataAccessor\n            .AllPaths\n            .Where(p => stringOps.Equals(p, path) || stringOps.StartsWith(p, pathWithDirectorySeparatorChar))\n            .ToList();\n\n        if (!affectedPaths.Any())\n        {\n            throw CommonExceptions.PathDoesNotExistOrCouldNotBeFound(path);\n        }\n\n        if (!recursive && affectedPaths.Count > 1)\n        {\n            throw new IOException(\"The directory specified by \" + path +\n                                  \" is read-only, or recursive is false and \" + path +\n                                  \" is not an empty directory.\");\n        }\n\n        bool isFile = !mockFileDataAccessor.GetFile(path).IsDirectory;\n        if (isFile)\n        {\n            throw new IOException(\"The directory name is invalid.\");\n        }\n\n        foreach (var affectedPath in affectedPaths)\n        {\n            mockFileDataAccessor.RemoveFile(affectedPath);\n        }\n    }\n\n\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        if (path == \"/\")\n        {\n            return true;\n        }\n\n        try\n        {\n            path = path.TrimSlashes();\n            path = mockFileDataAccessor.Path.GetFullPath(path);\n            return mockFileDataAccessor.GetFile(path)?.IsDirectory ?? false;\n        }\n        catch (Exception)\n        {\n            return false;\n        }\n    }\n\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTime(string path)\n    {\n        return mockFileDataAccessor.File.GetCreationTime(path);\n    }\n\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTimeUtc(string path)\n    {\n        return mockFileDataAccessor.File.GetCreationTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetCurrentDirectory()\n    {\n        return currentDirectory;\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path)\n    {\n        return GetDirectories(path, \"*\");\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path, string searchPattern)\n    {\n        return GetDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path, string searchPattern, SearchOption searchOption)\n    {\n        return EnumerateDirectories(path, searchPattern, searchOption).ToArray();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetDirectories(string path, string searchPattern,\n            EnumerationOptions enumerationOptions)\n        {\n            return GetDirectories(path, \"*\", EnumerationOptionsToSearchOption(enumerationOptions));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override string GetDirectoryRoot(string path)\n    {\n        return Path.GetPathRoot(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path)\n    {\n        // Same as what the real framework does\n        return GetFiles(path, \"*\");\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path, string searchPattern)\n    {\n        // Same as what the real framework does\n        return GetFiles(path, searchPattern, SearchOption.TopDirectoryOnly);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path, string searchPattern, SearchOption searchOption)\n    {\n        return GetFilesInternal(mockFileDataAccessor.AllFiles, path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return GetFiles(path, searchPattern, EnumerationOptionsToSearchOption(enumerationOptions));\n        }\n#endif\n\n    private string[] GetFilesInternal(\n        IEnumerable<string> files,\n        string path,\n        string searchPattern,\n        SearchOption searchOption)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path));\n        }\n\n        if (path.Any(c => Path.GetInvalidPathChars().Contains(c)))\n        {\n            throw new ArgumentException(\"Invalid character(s) in path\", nameof(path));\n        }\n\n        CheckSearchPattern(searchPattern);\n        if (searchPattern.Equals(string.Empty, StringComparison.OrdinalIgnoreCase))\n        {\n            searchPattern = \"*\";\n        }\n\n        path = path.TrimSlashes();\n        path = path.NormalizeSlashes();\n        path = mockFileDataAccessor.Path.GetFullPath(path);\n\n        if (!Exists(path))\n        {\n            throw CommonExceptions.CouldNotFindPartOfPath(path);\n        }\n\n        if (!path.EndsWith(Path.DirectorySeparatorChar.ToString()))\n        {\n            path += Path.DirectorySeparatorChar;\n        }\n\n        var isUnix = XFS.IsUnixPlatform();\n\n        var allDirectoriesPattern = isUnix\n            ? @\"([^<>:\"\"/|?*]*/)*\"\n            : @\"([^<>:\"\"/\\\\|?*]*\\\\)*\";\n\n        var searchEndInStarDot = searchPattern.EndsWith(@\"*.\");\n\n        string fileNamePattern;\n        string pathPatternNoExtension = string.Empty;\n        string pathPatternEndsInDot = string.Empty;\n        string pathPatternSpecial = null;\n\n        if (searchPattern == \"*\")\n        {\n            fileNamePattern = isUnix ? @\"[^/]*?/?\" : @\"[^\\\\]*?\\\\?\";\n        }\n        else\n        {\n            fileNamePattern = Regex.Escape(searchPattern)\n                .Replace(@\"\\*\", isUnix ? @\"[^<>:\"\"/|?*]*?\" : @\"[^<>:\"\"/\\\\|?*]*?\")\n                .Replace(@\"\\?\", isUnix ? @\"[^<>:\"\"/|?*]?\" : @\"[^<>:\"\"/\\\\|?*]?\");\n\n            var extension = Path.GetExtension(searchPattern);\n            bool hasExtensionLengthOfThree = extension != null && extension.Length == 4 &&\n                                             !extension.Contains(\"*\") && !extension.Contains(\"?\");\n            if (hasExtensionLengthOfThree)\n            {\n                var fileNamePatternSpecial =\n                    string.Format(CultureInfo.InvariantCulture, \"{0}[^.]\", fileNamePattern);\n                pathPatternSpecial = string.Format(\n                    CultureInfo.InvariantCulture,\n                    isUnix ? @\"(?i:^{0}{1}{2}(?:/?)$)\" : @\"(?i:^{0}{1}{2}(?:\\\\?)$)\",\n                    Regex.Escape(path),\n                    searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty,\n                    fileNamePatternSpecial);\n            }\n        }\n\n        var pathPattern = string.Format(\n            CultureInfo.InvariantCulture,\n            isUnix ? @\"(?i:^{0}{1}{2}(?:/?)$)\" : @\"(?i:^{0}{1}{2}(?:\\\\?)$)\",\n            Regex.Escape(path),\n            searchOption == SearchOption.AllDirectories ? allDirectoriesPattern : string.Empty,\n            fileNamePattern);\n\n        if (searchEndInStarDot)\n        {\n            pathPatternNoExtension = ReplaceLastOccurrence(pathPattern, @\"]*?\\.\", @\"\\.]*?[.]*\");\n            pathPatternEndsInDot = ReplaceLastOccurrence(pathPattern, @\"]*?\\.\", @\"]*?[.]{1,}\");\n        }\n\n        return files.Where(p =>\n                !searchEndInStarDot\n                    ? (Regex.IsMatch(p, pathPattern) ||\n                       (pathPatternSpecial != null && Regex.IsMatch(p, pathPatternSpecial)))\n                    : (Regex.IsMatch(p, pathPatternNoExtension) || Regex.IsMatch(p, pathPatternEndsInDot))\n            )\n            .ToArray();\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path)\n    {\n        return GetFileSystemEntries(path, \"*\");\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path, string searchPattern)\n    {\n        var dirs = GetDirectories(path, searchPattern);\n        var files = GetFiles(path, searchPattern);\n\n        return dirs.Union(files).ToArray();\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption)\n    {\n        var dirs = GetDirectories(path, searchPattern, searchOption);\n        var files = GetFiles(path, searchPattern, searchOption);\n\n        return dirs.Union(files).ToArray();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetFileSystemEntries(string path, string searchPattern,\n            EnumerationOptions enumerationOptions)\n        {\n            return GetFileSystemEntries(path, \"*\", EnumerationOptionsToSearchOption(enumerationOptions));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTime(string path)\n    {\n        return mockFileDataAccessor.File.GetLastAccessTime(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTimeUtc(string path)\n    {\n        return mockFileDataAccessor.File.GetLastAccessTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTime(string path)\n    {\n        return mockFileDataAccessor.File.GetLastWriteTime(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTimeUtc(string path)\n    {\n        return mockFileDataAccessor.File.GetLastWriteTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetLogicalDrives()\n    {\n        return mockFileDataAccessor\n            .AllDirectories\n            .Select(d => new MockDirectoryInfo(mockFileDataAccessor, d).Root.FullName)\n            .Select(r => mockFileDataAccessor.StringOperations.ToUpper(r))\n            .Distinct()\n            .ToArray();\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo GetParent(string path)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path));\n        }\n\n        if (path.Length == 0)\n        {\n            throw new ArgumentException(\n                StringResources.Manager.GetString(\"PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE\"), \"path\");\n        }\n\n        if (mockFileDataAccessor.PathVerifier.HasIllegalCharacters(path, false))\n        {\n            throw new ArgumentException(\"Path contains invalid path characters.\", \"path\");\n        }\n\n        var absolutePath = mockFileDataAccessor.Path.GetFullPath(path);\n        var sepAsString = mockFileDataAccessor.Path.DirectorySeparatorChar.ToString();\n        var lastIndex = 0;\n\n        if (absolutePath != sepAsString)\n        {\n            var startIndex = mockFileDataAccessor.StringOperations.EndsWith(absolutePath, sepAsString)\n                ? absolutePath.Length - 1\n                : absolutePath.Length;\n            lastIndex = absolutePath.LastIndexOf(mockFileDataAccessor.Path.DirectorySeparatorChar, startIndex - 1);\n\n            if (lastIndex < 0)\n            {\n                return null;\n            }\n        }\n\n        var parentPath = absolutePath.Substring(0, lastIndex);\n\n        if (string.IsNullOrEmpty(parentPath))\n        {\n            // On the Unix platform, the parent of a path consisting of a slash followed by\n            // non-slashes is the root, '/'.\n            if (XFS.IsUnixPlatform())\n            {\n                absolutePath = absolutePath.TrimSlashes();\n\n                if (absolutePath.Length > 1 &&\n                    absolutePath.LastIndexOf(mockFileDataAccessor.Path.DirectorySeparatorChar) == 0)\n                {\n                    return new MockDirectoryInfo(mockFileDataAccessor,\n                        mockFileDataAccessor.Path.DirectorySeparatorChar.ToString());\n                }\n            }\n\n            return null;\n        }\n\n        return new MockDirectoryInfo(mockFileDataAccessor, parentPath);\n    }\n\n    /// <inheritdoc />\n    public override void Move(string sourceDirName, string destDirName)\n    {\n        var fullSourcePath = mockFileDataAccessor.Path.GetFullPath(sourceDirName).TrimSlashes();\n        var fullDestPath = mockFileDataAccessor.Path.GetFullPath(destDirName).TrimSlashes();\n\n        if (string.Equals(fullSourcePath, fullDestPath, StringComparison.Ordinal))\n        {\n            throw new IOException(\"Source and destination path must be different.\");\n        }\n\n        //if we're moving a file, not a directory, call the appropriate file moving function.\n        var fileData = mockFileDataAccessor.GetFile(fullSourcePath);\n        if (fileData?.Attributes.HasFlag(FileAttributes.Directory) == false)\n        {\n            mockFileDataAccessor.File.Move(fullSourcePath, fullDestPath);\n            return;\n        }\n\n        var sourceRoot = mockFileDataAccessor.Path.GetPathRoot(fullSourcePath);\n        var destinationRoot = mockFileDataAccessor.Path.GetPathRoot(fullDestPath);\n\n        if (!mockFileDataAccessor.StringOperations.Equals(sourceRoot, destinationRoot))\n        {\n            throw new IOException(\n                \"Source and destination path must have identical roots. Move will not work across volumes.\");\n        }\n\n        if (!mockFileDataAccessor.Directory.Exists(fullSourcePath))\n        {\n            throw CommonExceptions.CouldNotFindPartOfPath(sourceDirName);\n        }\n\n        if (!mockFileDataAccessor.Directory.GetParent(fullDestPath).Exists)\n        {\n            throw CommonExceptions.CouldNotFindPartOfPath(destDirName);\n        }\n\n        if (mockFileDataAccessor.Directory.Exists(fullDestPath) || mockFileDataAccessor.File.Exists(fullDestPath))\n        {\n            // In Windows, file/dir names are case sensetive, C:\\\\temp\\\\src and C:\\\\temp\\\\SRC and treated different\n            if (XFS.IsUnixPlatform() ||\n                !string.Equals(fullSourcePath, fullDestPath, StringComparison.OrdinalIgnoreCase))\n            {\n                throw CommonExceptions.CannotCreateBecauseSameNameAlreadyExists(fullDestPath);\n            }\n        }\n        mockFileDataAccessor.MoveDirectory(fullSourcePath, fullDestPath);\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)\n        {\n            var initialContainer = mockFileDataAccessor.GetFile(linkPath);\n            if (initialContainer.LinkTarget != null)\n            {\n                var nextLocation = initialContainer.LinkTarget;\n                var nextContainer = mockFileDataAccessor.GetFile(nextLocation);\n\n                if (returnFinalTarget)\n                {\n                    // The maximum number of symbolic links that are followed:\n                    // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n                    int maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n                    for (int i = 1; i < maxResolveLinks; i++)\n                    {\n                        if (nextContainer.LinkTarget == null)\n                        {\n                            break;\n                        }\n                        nextLocation = nextContainer.LinkTarget;\n                        nextContainer = mockFileDataAccessor.GetFile(nextLocation);\n                    }\n\n                    if (nextContainer.LinkTarget != null)\n                    {\n                        throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);\n                    }\n                }\n\n                if (nextContainer.IsDirectory)\n                {\n                    return new MockDirectoryInfo(mockFileDataAccessor, nextLocation);\n                }\n                else\n                {\n                    return new MockFileInfo(mockFileDataAccessor, nextLocation);\n                }\n            }\n            throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);\n        }\n    \n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTime(string path, DateTime creationTime)\n    {\n        mockFileDataAccessor.File.SetCreationTime(path, creationTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetCreationTimeUtc(string path, DateTime creationTimeUtc)\n    {\n        mockFileDataAccessor.File.SetCreationTimeUtc(path, creationTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override void SetCurrentDirectory(string path)\n    {\n        currentDirectory = mockFileDataAccessor.Path.GetFullPath(path);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastAccessTime(string path, DateTime lastAccessTime)\n    {\n        mockFileDataAccessor.File.SetLastAccessTime(path, lastAccessTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc)\n    {\n        mockFileDataAccessor.File.SetLastAccessTimeUtc(path, lastAccessTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastWriteTime(string path, DateTime lastWriteTime)\n    {\n        mockFileDataAccessor.File.SetLastWriteTime(path, lastWriteTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc)\n    {\n        mockFileDataAccessor.File.SetLastWriteTimeUtc(path, lastWriteTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path)\n    {\n        return EnumerateDirectories(path, \"*\");\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern)\n    {\n        return EnumerateDirectories(path, searchPattern, SearchOption.TopDirectoryOnly);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        var originalPath = path;\n        path = path.TrimSlashes();\n        path = mockFileDataAccessor.Path.GetFullPath(path);\n        return GetFilesInternal(mockFileDataAccessor.AllDirectories, path, searchPattern, searchOption)\n            .Where(p => !mockFileDataAccessor.StringOperations.Equals(p, path))\n            .Select(p => FixPrefix(p, originalPath));\n    }\n\n    private string FixPrefix(string path, string originalPath)\n    {\n        var normalizedOriginalPath = mockFileDataAccessor.Path.GetFullPath(originalPath);\n        var pathWithoutOriginalPath = path.Substring(normalizedOriginalPath.Length)\n            .TrimStart(mockFileDataAccessor.Path.DirectorySeparatorChar);\n        return mockFileDataAccessor.Path.Combine(originalPath, pathWithoutOriginalPath);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;\n            return EnumerateDirectories(path, searchPattern, searchOption);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path)\n    {\n        return GetFiles(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern)\n    {\n        return GetFiles(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption)\n    {\n        return GetFiles(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;\n            return GetFiles(path, searchPattern, searchOption);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path)\n    {\n        return GetFileSystemEntries(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern)\n    {\n        return GetFileSystemEntries(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption)\n    {\n        return GetFileSystemEntries(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;\n            var fileSystemEntries = new List<string>(GetFiles(path, searchPattern, searchOption));\n            fileSystemEntries.AddRange(GetDirectories(path, searchPattern, searchOption));\n            return fileSystemEntries;\n        }\n#endif\n\n    private string EnsureAbsolutePath(string path)\n    {\n        return Path.IsPathRooted(path)\n            ? path\n            : Path.Combine(GetCurrentDirectory(), path);\n    }\n\n    private void CheckSearchPattern(string searchPattern)\n    {\n        if (searchPattern == null)\n        {\n            throw new ArgumentNullException(nameof(searchPattern));\n        }\n\n        const string TWO_DOTS = \"..\";\n        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);\n\n        if (mockFileDataAccessor.StringOperations.EndsWith(searchPattern, TWO_DOTS))\n        {\n            throw createException();\n        }\n\n        var position = mockFileDataAccessor.StringOperations.IndexOf(searchPattern, TWO_DOTS);\n\n        if (position >= 0)\n        {\n            var characterAfterTwoDots = searchPattern[position + 2];\n\n            if (characterAfterTwoDots == Path.DirectorySeparatorChar || characterAfterTwoDots == Path.AltDirectorySeparatorChar)\n            {\n                throw createException();\n            }\n        }\n\n        var invalidPathChars = Path.GetInvalidPathChars();\n        if (searchPattern.IndexOfAny(invalidPathChars) > -1)\n        {\n            throw CommonExceptions.IllegalCharactersInPath(nameof(searchPattern));\n        }\n    }\n\n    private string ReplaceLastOccurrence(string source, string find, string replace)\n    {\n        if (source == null)\n        {\n            return source;\n        }\n\n        var place = source.LastIndexOf(find);\n\n        if (place == -1)\n        {\n            return source;\n        }\n\n        var result = source.Remove(place, find.Length).Insert(place, replace);\n        return result;\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        private SearchOption EnumerationOptionsToSearchOption(EnumerationOptions enumerationOptions)\n        {\n            static Exception CreateExceptionForUnsupportedProperty(string propertyName)\n            {\n                return new NotSupportedException(\n                    $\"Changing EnumerationOptions.{propertyName} is not yet implemented for the mock file system.\"\n                );\n            }\n\n            if (enumerationOptions.AttributesToSkip != (FileAttributes.System | FileAttributes.Hidden))\n            {\n                throw CreateExceptionForUnsupportedProperty(\"AttributesToSkip\");\n            }\n            if (!enumerationOptions.IgnoreInaccessible)\n            {\n                throw CreateExceptionForUnsupportedProperty(\"IgnoreInaccessible\");\n            }\n            if (enumerationOptions.MatchCasing != MatchCasing.PlatformDefault)\n            {\n                throw CreateExceptionForUnsupportedProperty(\"MatchCasing\");\n            }\n            if (enumerationOptions.MatchType != MatchType.Simple)\n            {\n                throw CreateExceptionForUnsupportedProperty(\"MatchType\");\n            }\n            if (enumerationOptions.ReturnSpecialDirectories)\n            {\n                throw CreateExceptionForUnsupportedProperty(\"ReturnSpecialDirectories\");\n            }\n\n            return enumerationOptions.RecurseSubdirectories\n                ? SearchOption.AllDirectories\n                : SearchOption.TopDirectoryOnly;\n        }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDirectoryData : MockFileData\n{\n#if FEATURE_SERIALIZABLE\n    [NonSerialized]\n#endif\n    private DirectorySecurity accessControl;\n\n    /// <inheritdoc />\n    public MockDirectoryData() : base(string.Empty)\n    {\n        Attributes = FileAttributes.Directory;\n    }\n\n    /// <inheritdoc />\n    [SupportedOSPlatform(\"windows\")]\n    public new DirectorySecurity AccessControl\n    {\n        get\n        {\n            // DirectorySecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way.\n            // This let's us use this class as long as we don't use AccessControl property.\n            return accessControl ?? (accessControl = new DirectorySecurity());\n        }\n        set { accessControl = value; }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfo.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDirectoryInfo : DirectoryInfoBase, IFileSystemAclSupport\n{\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n    private string directoryPath;\n    private string originalPath;\n    private MockFileData cachedMockFileData;\n    private bool refreshOnNextRead;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockDirectoryInfo\"/> class.\n    /// </summary>\n    /// <param name=\"mockFileDataAccessor\">The mock file data accessor.</param>\n    /// <param name=\"directoryPath\">The directory path.</param>\n    /// <exception cref=\"ArgumentNullException\">Thrown if <paramref name=\"mockFileDataAccessor\"/> or <paramref name=\"directoryPath\"/> is <see langref=\"null\"/>.</exception>\n    public MockDirectoryInfo(IMockFileDataAccessor mockFileDataAccessor, string directoryPath) : base(mockFileDataAccessor?.FileSystem)\n    {\n        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n\n        if (directoryPath == null)\n        {\n            throw new ArgumentNullException(\"path\", StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n        if (directoryPath.Trim() == string.Empty)\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(\"path\");\n        }\n            \n        SetDirectoryPath(directoryPath);\n        Refresh();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override void CreateAsSymbolicLink(string pathToTarget)\n    {\n        FileSystem.Directory.CreateSymbolicLink(FullName, pathToTarget);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override void Delete()\n    {\n        mockFileDataAccessor.Directory.Delete(directoryPath);\n        refreshOnNextRead = true;\n    }\n\n    /// <inheritdoc />\n    public override void Refresh()\n    {\n        var mockFileData = mockFileDataAccessor.GetFile(directoryPath) ?? MockFileData.NullObject;\n        cachedMockFileData = mockFileData.Clone();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)\n    {\n        return FileSystem.Directory.ResolveLinkTarget(FullName, returnFinalTarget);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileAttributes Attributes\n    {\n        get { return GetMockFileDataForRead().Attributes; }\n        set { GetMockFileDataForWrite().Attributes = value | FileAttributes.Directory; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTime\n    {\n        get { return GetMockFileDataForRead().CreationTime.LocalDateTime; }\n        set { GetMockFileDataForWrite().CreationTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTimeUtc\n    {\n        get { return GetMockFileDataForRead().CreationTime.UtcDateTime; }\n        set { GetMockFileDataForWrite().CreationTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override bool Exists\n    {\n        get {\n            var mockFileData = GetMockFileDataForRead();\n            return (int)mockFileData.Attributes != -1 && mockFileData.IsDirectory;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string Extension\n    {\n        get\n        {\n            // System.IO.Path.GetExtension does only string manipulation,\n            // so it's safe to delegate.\n            return Path.GetExtension(directoryPath);\n        }\n    }\n\n    /// <inheritdoc />\n    public override string FullName\n    {\n        get\n        {\n            var root = mockFileDataAccessor.Path.GetPathRoot(directoryPath);\n\n            if (mockFileDataAccessor.StringOperations.Equals(directoryPath, root))\n            {\n                // drives have the trailing slash\n                return directoryPath;\n            }\n\n            // directories do not have a trailing slash\n            return directoryPath.TrimEnd('\\\\').TrimEnd('/');\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTime\n    {\n        get { return GetMockFileDataForRead().LastAccessTime.LocalDateTime; }\n        set { GetMockFileDataForWrite().LastAccessTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTimeUtc\n    {\n        get { return GetMockFileDataForRead().LastAccessTime.UtcDateTime; }\n        set { GetMockFileDataForWrite().LastAccessTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTime\n    {\n        get { return GetMockFileDataForRead().LastWriteTime.LocalDateTime; }\n        set { GetMockFileDataForWrite().LastWriteTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTimeUtc\n    {\n        get { return GetMockFileDataForRead().LastWriteTime.UtcDateTime; }\n        set { GetMockFileDataForWrite().LastWriteTime = value; }\n    }\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n    /// <inheritdoc />\n    public override string LinkTarget\n    {\n        get { return GetMockFileDataForRead().LinkTarget; }\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string Name\n    {\n        get\n        {\n            var mockPath = new MockPath(mockFileDataAccessor);\n            return string.Equals(mockPath.GetPathRoot(directoryPath), directoryPath) ? directoryPath : mockPath.GetFileName(directoryPath.TrimEnd(mockFileDataAccessor.Path.DirectorySeparatorChar));\n        }\n    }\n\n    /// <inheritdoc />\n    public override void Create()\n    {\n        mockFileDataAccessor.Directory.CreateDirectory(FullName);\n        refreshOnNextRead = true;\n    }\n        \n    /// <inheritdoc />\n    public override IDirectoryInfo CreateSubdirectory(string path)\n    {\n        return mockFileDataAccessor.Directory.CreateDirectory(Path.Combine(FullName, path));\n    }\n\n    /// <inheritdoc />\n    public override void Delete(bool recursive)\n    {\n        mockFileDataAccessor.Directory.Delete(directoryPath, recursive);\n        refreshOnNextRead = true;\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories()\n    {\n        return GetDirectories();\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern)\n    {\n        return GetDirectories(searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption)\n    {\n        return GetDirectories(searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return GetDirectories(searchPattern, enumerationOptions);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles()\n    {\n        return GetFiles();\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern)\n    {\n        return GetFiles(searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption)\n    {\n        return GetFiles(searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return GetFiles(searchPattern, enumerationOptions);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos()\n    {\n        return GetFileSystemInfos();\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern)\n    {\n        return GetFileSystemInfos(searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption)\n    {\n        return GetFileSystemInfos(searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return GetFileSystemInfos(searchPattern, enumerationOptions);\n    }\n#endif\n        \n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories()\n    {\n        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath));\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories(string searchPattern)\n    {\n        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern));\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption)\n    {\n        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern, searchOption));\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return ConvertStringsToDirectories(mockFileDataAccessor.Directory.GetDirectories(directoryPath, searchPattern, enumerationOptions));\n    }\n#endif\n\n    private DirectoryInfoBase[] ConvertStringsToDirectories(IEnumerable<string> paths)\n    {\n        return paths\n            .Select(path => new MockDirectoryInfo(mockFileDataAccessor, path))\n            .Cast<DirectoryInfoBase>()\n            .ToArray();\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles()\n    {\n        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName));\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles(string searchPattern)\n    {\n        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern));\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption)\n    {\n        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern, searchOption));\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return ConvertStringsToFiles(mockFileDataAccessor.Directory.GetFiles(FullName, searchPattern, enumerationOptions));\n    }\n#endif\n\n    IFileInfo[] ConvertStringsToFiles(IEnumerable<string> paths)\n    {\n        return paths\n            .Select(mockFileDataAccessor.FileInfo.New)\n            .ToArray();\n    }\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos()\n    {\n        return GetFileSystemInfos(\"*\");\n    }\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern)\n    {\n        return GetFileSystemInfos(searchPattern, SearchOption.TopDirectoryOnly);\n    }\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption)\n    {\n        return GetDirectories(searchPattern, searchOption).OfType<IFileSystemInfo>().Concat(GetFiles(searchPattern, searchOption)).ToArray();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)\n    {\n        return GetDirectories(searchPattern, enumerationOptions).OfType<IFileSystemInfo>().Concat(GetFiles(searchPattern, enumerationOptions)).ToArray();\n    }\n#endif\n\n    /// <inheritdoc />\n    public override void MoveTo(string destDirName)\n    {\n        mockFileDataAccessor.Directory.Move(directoryPath, destDirName);\n        SetDirectoryPath(destDirName);\n    }\n        \n    /// <inheritdoc />\n    public override IDirectoryInfo Parent\n    {\n        get\n        {\n            return mockFileDataAccessor.Directory.GetParent(directoryPath);\n        }\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo Root\n    {\n        get\n        {\n            return new MockDirectoryInfo(mockFileDataAccessor, mockFileDataAccessor.Directory.GetDirectoryRoot(FullName));\n        }\n    }\n\n    private MockFileData GetMockFileDataForRead()\n    {\n        if (refreshOnNextRead)\n        {\n            Refresh();\n            refreshOnNextRead = false;\n        }\n        return cachedMockFileData;\n    }\n\n    private MockFileData GetMockFileDataForWrite()\n    {\n        refreshOnNextRead = true;\n        return mockFileDataAccessor.GetFile(directoryPath)\n               ?? throw CommonExceptions.CouldNotFindPartOfPath(directoryPath);\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return originalPath;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return GetMockDirectoryData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        return GetMockDirectoryData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        GetMockDirectoryData().AccessControl = value as DirectorySecurity;\n    }\n        \n    private void SetDirectoryPath(string path)\n    {\n        originalPath = path;\n        path = mockFileDataAccessor.Path.GetFullPath(path);\n\n        path = path.TrimSlashes();\n        if (XFS.IsWindowsPlatform())\n        {\n            path = path.TrimEnd(' ');\n        }\n        this.directoryPath = path;\n    }\n\n    private MockDirectoryData GetMockDirectoryData()\n    {\n        return mockFileDataAccessor.GetFile(directoryPath) as MockDirectoryData\n               ?? throw CommonExceptions.CouldNotFindPartOfPath(directoryPath);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectoryInfoFactory.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDirectoryInfoFactory : IDirectoryInfoFactory\n{\n    readonly IMockFileDataAccessor mockFileSystem;\n\n    /// <inheritdoc />\n    public MockDirectoryInfoFactory(IMockFileDataAccessor mockFileSystem)\n    {\n        this.mockFileSystem = mockFileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => mockFileSystem;\n\n    /// <inheritdoc />\n    public IDirectoryInfo New(string path)\n    {\n        return new MockDirectoryInfo(mockFileSystem, path);\n    }\n\n    /// <inheritdoc />\n    public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)\n    {\n        if (directoryInfo == null)\n        {\n            return null;\n        }\n\n        return new MockDirectoryInfo(mockFileSystem, directoryInfo.FullName);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveData.cs",
    "content": "﻿\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// The class represents the associated data of a drive.\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDriveData\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockDriveData\"/> class.\n    /// </summary>\n    public MockDriveData()\n    {\n        IsReady = true;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockDriveData\"/> class by copying the given <see cref=\"MockDriveData\"/>.\n    /// </summary>\n    /// <param name=\"template\">The template instance.</param>\n    /// <exception cref=\"ArgumentNullException\">Thrown if <paramref name=\"template\"/> is <see langword=\"null\"/>.</exception>\n    public MockDriveData(MockDriveData template)\n    {\n        if (template == null)\n        {\n            throw new ArgumentNullException(nameof(template));\n        }\n\n        AvailableFreeSpace = template.AvailableFreeSpace;\n        DriveFormat = template.DriveFormat;\n        DriveType = template.DriveType;\n        IsReady = template.IsReady;\n        TotalFreeSpace = template.TotalFreeSpace;\n        TotalSize = template.TotalSize;\n        VolumeLabel = template.VolumeLabel;\n    }\n\n    /// <summary>\n    /// Gets or sets the amount of available free space of the <see cref=\"MockDriveData\"/>, in bytes.\n    /// </summary>\n    public long AvailableFreeSpace { get; set; }\n\n    /// <summary>\n    /// Gets or sets the name of the file system of the <see cref=\"MockDriveData\"/>, such as NTFS or FAT32.\n    /// </summary>\n    public string DriveFormat { get; set; }\n\n    /// <summary>\n    /// Gets or sets the drive type of the <see cref=\"MockDriveData\"/>, such as CD-ROM, removable, network, or fixed.\n    /// </summary>\n    public DriveType DriveType { get; set; }\n\n    /// <summary>\n    /// Gets or sets the value that indicates whether the <see cref=\"MockDriveData\"/> is ready.\n    /// </summary>\n    public bool IsReady { get; set; }\n\n    /// <summary>\n    /// Gets or sets the total amount of free space available on the <see cref=\"MockDriveData\"/>, in bytes.\n    /// </summary>\n    public long TotalFreeSpace { get; set; }\n\n    /// <summary>\n    /// Gets or sets the total size of storage space on the <see cref=\"MockDriveData\"/>, in bytes.\n    /// </summary>\n    public long TotalSize { get; set; }\n\n    /// <summary>\n    /// Gets or sets the volume label of the <see cref=\"MockDriveData\"/>.\n    /// </summary>\n    public string VolumeLabel { get; set; }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfo.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDriveInfo : DriveInfoBase\n{\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n    private readonly string name;\n\n    /// <inheritdoc />\n    public MockDriveInfo(IMockFileDataAccessor mockFileDataAccessor, string name) : base(mockFileDataAccessor?.FileSystem)\n    {\n        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n        this.name = mockFileDataAccessor.PathVerifier.NormalizeDriveName(name);\n    }\n\n    /// <inheritdoc />\n    public override long AvailableFreeSpace\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.AvailableFreeSpace;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string DriveFormat\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.DriveFormat;\n        }\n    }\n\n    /// <inheritdoc />\n    public override DriveType DriveType\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.DriveType;\n        }\n    }\n\n    /// <inheritdoc />\n    public override bool IsReady\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.IsReady;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string Name\n    {\n        get { return name; }\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo RootDirectory\n    {\n        get\n        {\n            return mockFileDataAccessor.DirectoryInfo.New(Name);\n        }\n    }\n\n    /// <inheritdoc />\n    public override long TotalFreeSpace\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.TotalFreeSpace;\n        }\n    }\n\n    /// <inheritdoc />\n    public override long TotalSize\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.TotalSize;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string VolumeLabel\n    {\n        get\n        {\n            var mockDriveData = GetMockDriveData();\n            return mockDriveData.VolumeLabel;\n        }\n        set\n        {\n            var mockDriveData = GetMockDriveData();\n            mockDriveData.VolumeLabel = value;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return Name;\n    }\n\n    private MockDriveData GetMockDriveData()\n    {\n        return mockFileDataAccessor.GetDrive(name)\n               ?? throw CommonExceptions.FileNotFound(name);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDriveInfoFactory.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockDriveInfoFactory : IDriveInfoFactory\n{\n    private readonly IMockFileDataAccessor mockFileSystem;\n\n    /// <inheritdoc />\n    public MockDriveInfoFactory(IMockFileDataAccessor mockFileSystem)\n    {\n        this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => mockFileSystem;\n\n    /// <inheritdoc />\n    public IDriveInfo[] GetDrives()\n    {\n        var result = new List<DriveInfoBase>();\n        foreach (string driveLetter in mockFileSystem.AllDrives)\n        {\n            try\n            {\n                var mockDriveInfo = new MockDriveInfo(mockFileSystem, driveLetter);\n                result.Add(mockDriveInfo);\n            }\n            catch (ArgumentException)\n            {\n                // invalid drives should be ignored\n            }\n        }\n\n        return result.ToArray();\n    }\n\n    /// <inheritdoc />\n    public IDriveInfo New(string driveName)\n    {\n        var drive = mockFileSystem.Path.GetPathRoot(driveName);\n\n        return new MockDriveInfo(mockFileSystem, drive);\n    }\n\n    /// <inheritdoc />\n    public IDriveInfo Wrap(DriveInfo driveInfo)\n    {\n        if (driveInfo == null)\n        {\n            return null;\n        }\n\n        return New(driveInfo.Name);\n    }\n\n    private string NormalizeDriveName(string driveName)\n    {\n        if (driveName.Length == 3 && mockFileSystem.StringOperations.EndsWith(driveName, @\":\\\"))\n        {\n            return mockFileSystem.StringOperations.ToUpper(driveName[0]) + @\":\\\";\n        }\n\n        if (mockFileSystem.StringOperations.StartsWith(driveName, @\"\\\\\"))\n        {\n            return null;\n        }\n\n        return driveName;\n    }\n\n    private class DriveEqualityComparer : IEqualityComparer<string>\n    {\n        private readonly IMockFileDataAccessor mockFileSystem;\n\n        public DriveEqualityComparer(IMockFileDataAccessor mockFileSystem)\n        {\n            this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n        }\n\n        public bool Equals(string x, string y)\n        {\n            return ReferenceEquals(x, y) ||\n                   (HasDrivePrefix(x) && HasDrivePrefix(y) && mockFileSystem.StringOperations.Equals(x[0], y[0]));\n        }\n\n        private static bool HasDrivePrefix(string x)\n        {\n            return x != null && x.Length >= 2 && x[1] == ':';\n        }\n\n        public int GetHashCode(string obj)\n        {\n            return mockFileSystem.StringOperations.ToUpper(obj).GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.Async.cs",
    "content": "﻿#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    partial class MockFile\n    {\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,byte[],CancellationToken)\"/>\n        public override Task AppendAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            AppendAllBytes(path, bytes);\n            return Task.CompletedTask;\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public override Task AppendAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)\n        {\n            return AppendAllBytesAsync(path, bytes.ToArray(), cancellationToken);\n        }\n#endif\n        /// <inheritdoc />\n        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default) =>\n            AppendAllLinesAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);\n\n        /// <inheritdoc />\n        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            AppendAllLines(path, contents, encoding);\n            return Task.CompletedTask;\n        }\n\n        /// <inheritdoc />\n        public override Task AppendAllTextAsync(string path, string contents, CancellationToken cancellationToken = default) =>\n            AppendAllTextAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);\n\n\n        /// <inheritdoc />\n        public override Task AppendAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            AppendAllText(path, contents, encoding);\n            return Task.CompletedTask;\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)\n        {\n            return AppendAllTextAsync(path, contents.ToString(), cancellationToken);\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default)\n        {\n            return AppendAllTextAsync(path, contents.ToString(), encoding, cancellationToken);\n        }\n#endif\n\n        /// <inheritdoc />\n        public override Task<byte[]> ReadAllBytesAsync(string path, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            return Task.FromResult(ReadAllBytes(path));\n        }\n\n        /// <inheritdoc />\n        public override Task<string[]> ReadAllLinesAsync(string path, CancellationToken cancellationToken = default) =>\n            ReadAllLinesAsync(path, MockFileData.DefaultEncoding, cancellationToken);\n\n        /// <inheritdoc />\n\n        public override Task<string[]> ReadAllLinesAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            return Task.FromResult(ReadAllLines(path, encoding));\n        }\n\n        /// <inheritdoc />\n        public override Task<string> ReadAllTextAsync(string path, CancellationToken cancellationToken = default) =>\n            ReadAllTextAsync(path, MockFileData.DefaultEncoding, cancellationToken);\n\n\n        /// <inheritdoc />\n        public override Task<string> ReadAllTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            return Task.FromResult(ReadAllText(path, encoding));\n        }\n\n#if FEATURE_READ_LINES_ASYNC\n        /// <inheritdoc />\n        public override IAsyncEnumerable<string> ReadLinesAsync(string path, CancellationToken cancellationToken = default) =>\n            ReadLinesAsync(path, MockFileData.DefaultEncoding, cancellationToken);\n\n        /// <inheritdoc />\n        public override async IAsyncEnumerable<string> ReadLinesAsync(string path, Encoding encoding,\n            [EnumeratorCancellation] CancellationToken cancellationToken = default)\n        {\n            var lines = await ReadAllLinesAsync(path, encoding, cancellationToken);\n            foreach (var line in lines)\n                yield return line;\n        }\n#endif\n\n        /// <inheritdoc />\n        public override Task WriteAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            WriteAllBytes(path, bytes);\n            return Task.CompletedTask;\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public override Task WriteAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)\n        {\n            return WriteAllBytesAsync(path, bytes.ToArray(), cancellationToken);\n        }\n#endif\n\n        /// <inheritdoc />\n        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default) =>\n            WriteAllLinesAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);\n\n        /// <inheritdoc />\n        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            WriteAllLines(path, contents, encoding);\n            return Task.CompletedTask;\n        }\n\n        /// <inheritdoc />\n        public override Task WriteAllTextAsync(string path, string contents, CancellationToken cancellationToken = default) =>\n            WriteAllTextAsync(path, contents, MockFileData.DefaultEncoding, cancellationToken);\n\n        /// <inheritdoc />\n        public override Task WriteAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            WriteAllText(path, contents, encoding);\n            return Task.CompletedTask;\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)\n        {\n            return WriteAllTextAsync(path, contents.ToString(), cancellationToken);\n        }\n\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default)\n        {\n            return WriteAllTextAsync(path, contents.ToString(), encoding, cancellationToken);\n        }\n#endif\n    }\n}\n\n#endif\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic partial class MockFile : FileBase\n{\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n\n    /// <inheritdoc />\n    public MockFile(IMockFileDataAccessor mockFileDataAccessor) : base(mockFileDataAccessor?.FileSystem)\n    {\n        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,byte[])\"/>\n        public override void AppendAllBytes(string path, byte[] bytes)\n        {\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n            if (!mockFileDataAccessor.FileExists(path))\n            {\n                VerifyDirectoryExists(path);\n                mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(new MockFileData(bytes), TimeAdjustments.All));\n            }\n            else\n            {\n                var file = mockFileDataAccessor.GetFile(path);\n                file.CheckFileAccess(path, FileAccess.Write);\n                mockFileDataAccessor.AdjustTimes(file, TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n                file.Contents = file.Contents.Concat(bytes).ToArray();\n            }\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,ReadOnlySpan{byte})\"/>\n        public override void AppendAllBytes(string path, ReadOnlySpan<byte> bytes)\n        {\n            AppendAllBytes(path, bytes.ToArray());\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void AppendAllLines(string path, IEnumerable<string> contents)\n    {\n        AppendAllLines(path, contents, MockFileData.DefaultEncoding);\n    }\n\n    /// <inheritdoc />\n    public override void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(contents, nameof(contents));\n        VerifyValueIsNotNull(encoding, nameof(encoding));\n\n        var concatContents = contents.Aggregate(\"\", (a, b) => a + b + Environment.NewLine);\n        AppendAllText(path, concatContents, encoding);\n    }\n\n    /// <inheritdoc />\n    public override void AppendAllText(string path, string contents)\n    {\n        AppendAllText(path, contents, MockFileData.DefaultEncoding);\n    }\n\n    /// <inheritdoc />\n    public override void AppendAllText(string path, string contents, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (encoding == null)\n        {\n            throw new ArgumentNullException(nameof(encoding));\n        }\n\n        if (!mockFileDataAccessor.FileExists(path))\n        {\n            VerifyDirectoryExists(path);\n            mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(new MockFileData(contents, encoding), TimeAdjustments.All));\n        }\n        else\n        {\n            var file = mockFileDataAccessor.GetFile(path);\n            file.CheckFileAccess(path, FileAccess.Write);\n            mockFileDataAccessor.AdjustTimes(file, TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n            var bytesToAppend = encoding.GetBytes(contents);\n            file.Contents = file.Contents.Concat(bytesToAppend).ToArray();\n        }\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char})\"/>\n        public override void AppendAllText(string path, ReadOnlySpan<char> contents)\n        {\n            AppendAllText(path, contents.ToString());\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public override void AppendAllText(string path, ReadOnlySpan<char> contents, Encoding encoding)\n        {\n            AppendAllText(path, contents.ToString(), encoding);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override StreamWriter AppendText(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (mockFileDataAccessor.FileExists(path))\n        {\n            StreamWriter sw = new StreamWriter(OpenWrite(path));\n            sw.BaseStream.Seek(0, SeekOrigin.End); //push the stream pointer at the end for append.\n            return sw;\n        }\n\n        return new StreamWriter(Create(path));\n    }\n\n    /// <inheritdoc />\n    public override void Copy(string sourceFileName, string destFileName)\n    {\n        Copy(sourceFileName, destFileName, false);\n    }\n\n    /// <inheritdoc />\n    public override void Copy(string sourceFileName, string destFileName, bool overwrite)\n    {\n        if (sourceFileName == null)\n        {\n            throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));\n        }\n\n        if (destFileName == null)\n        {\n            throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));\n        }\n\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));\n\n        if (!Exists(sourceFileName))\n        {\n            throw CommonExceptions.FileNotFound(sourceFileName);\n        }\n\n        VerifyDirectoryExists(destFileName);\n\n        var fileExists = mockFileDataAccessor.FileExists(destFileName);\n        if (fileExists)\n        {\n            if (!overwrite)\n            {\n                throw CommonExceptions.FileAlreadyExists(destFileName);\n            }\n\n            if (string.Equals(sourceFileName, destFileName, StringComparison.OrdinalIgnoreCase) && XFS.IsWindowsPlatform())\n            {\n                throw CommonExceptions.ProcessCannotAccessFileInUse(destFileName);\n            }\n\n            mockFileDataAccessor.RemoveFile(destFileName);\n        }\n\n        var sourceFileData = mockFileDataAccessor.GetFile(sourceFileName);\n        sourceFileData.CheckFileAccess(sourceFileName, FileAccess.Read);\n        var destFileData = new MockFileData(sourceFileData);\n        mockFileDataAccessor.AdjustTimes(destFileData, TimeAdjustments.CreationTime | TimeAdjustments.LastAccessTime);\n        mockFileDataAccessor.AddFile(destFileName, destFileData);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path) =>\n        Create(path, 4096);\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path, int bufferSize) =>\n        Create(path, bufferSize, FileOptions.None);\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path, int bufferSize, FileOptions options) =>\n        CreateInternal(path, FileAccess.ReadWrite, options);\n\n    private FileSystemStream CreateInternal(string path, FileAccess access, FileOptions options)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path), \"Path cannot be null.\");\n        }\n\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));\n        VerifyDirectoryExists(path);\n\n        var mockFileData = new MockFileData(new byte[0]);\n        mockFileDataAccessor.AdjustTimes(mockFileData, TimeAdjustments.All);\n        mockFileDataAccessor.AddFile(path, mockFileData);\n        return OpenInternal(path, FileMode.Open, access, options);\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)\n        {\n            if (path == null)\n            {\n                throw CommonExceptions.FilenameCannotBeNull(nameof(path));\n            }\n\n            if (pathToTarget == null)\n            {\n                throw CommonExceptions.FilenameCannotBeNull(nameof(pathToTarget));\n            }\n\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(pathToTarget, nameof(pathToTarget));\n\n            if (Exists(path))\n            {\n                throw CommonExceptions.FileAlreadyExists(nameof(path));\n            }\n\n            VerifyDirectoryExists(path);\n\n            var fileExists = mockFileDataAccessor.FileExists(pathToTarget);\n            if (!fileExists)\n            {\n                throw CommonExceptions.FileNotFound(pathToTarget);\n            }\n\n            var sourceFileData = mockFileDataAccessor.GetFile(pathToTarget);\n            sourceFileData.CheckFileAccess(pathToTarget, FileAccess.Read);\n            var destFileData = new MockFileData(new byte[0]);\n            mockFileDataAccessor.AdjustTimes(destFileData, TimeAdjustments.CreationTime | TimeAdjustments.LastAccessTime);\n            destFileData.LinkTarget = pathToTarget;\n            mockFileDataAccessor.AddFile(path, destFileData);\n\n            var mockFileInfo = new MockFileInfo(mockFileDataAccessor, path);\n            mockFileInfo.Attributes |= FileAttributes.ReparsePoint;\n            return mockFileInfo;\n        }\n#endif\n    /// <inheritdoc />\n    public override StreamWriter CreateText(string path)\n    {\n        return new StreamWriter(Create(path));\n    }\n\n    /// <inheritdoc />\n    public override void Decrypt(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        new MockFileInfo(mockFileDataAccessor, path).Decrypt();\n    }\n    /// <inheritdoc />\n    public override void Delete(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        // We mimic exact behavior of the standard File.Delete() method\n        // which throws exception only if the folder does not exist,\n        // but silently returns if deleting a non-existing file in an existing folder.\n        VerifyDirectoryExists(path);\n\n        var file = mockFileDataAccessor.GetFile(path);\n        if (file != null && !file.AllowedFileShare.HasFlag(FileShare.Delete))\n        {\n            throw CommonExceptions.ProcessCannotAccessFileInUse(path);\n        }\n\n        if (file != null && file.IsDirectory)\n        {\n            throw new UnauthorizedAccessException($\"Access to the path '{path}' is denied.\");\n        }\n\n        mockFileDataAccessor.RemoveFile(path);\n    }\n\n    /// <inheritdoc />\n    public override void Encrypt(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        new MockFileInfo(mockFileDataAccessor, path).Encrypt();\n    }\n\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        if (path == null)\n        {\n            return false;\n        }\n\n        if (path.Trim() == string.Empty)\n        {\n            return false;\n        }\n\n        //Not handling exceptions here so that mock behaviour is as similar as possible to System.IO.File.Exists (See #810)\n        try\n        {\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));\n\n            var file = mockFileDataAccessor.GetFile(path);\n            return file != null && !file.IsDirectory;\n        }\n        catch (ArgumentException) { }\n        catch (NotSupportedException) { }\n        catch (IOException) { }\n        catch (UnauthorizedAccessException) { }\n\n        return false;\n    }\n\n    /// <summary>\n    /// Gets the <see cref=\"FileAttributes\"/> of the file on the path.\n    /// </summary>\n    /// <param name=\"path\">The path to the file.</param>\n    /// <returns>The <see cref=\"FileAttributes\"/> of the file on the path.</returns>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is empty, contains only white spaces, or contains invalid characters.</exception>\n    /// <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>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <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>\n    /// <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>\n    /// <exception cref=\"IOException\">This file is being used by another process.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">The caller does not have the required permission.</exception>\n    public override FileAttributes GetAttributes(string path)\n    {\n        if (path != null && path.Length == 0)\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(nameof(path));\n        }\n\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        var possibleFileData = mockFileDataAccessor.GetFile(path);\n        FileAttributes result;\n        if (possibleFileData != null)\n        {\n            result = possibleFileData.Attributes;\n        }\n        else\n        {\n            var directoryInfo = mockFileDataAccessor.DirectoryInfo.New(path);\n            if (directoryInfo.Exists)\n            {\n                result = directoryInfo.Attributes;\n            }\n            else\n            {\n                VerifyDirectoryExists(path);\n\n                throw CommonExceptions.FileNotFound(path);\n            }\n        }\n\n        return result;\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override FileAttributes GetAttributes(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTime(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.CreationTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetCreationTime(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTimeUtc(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.CreationTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetCreationTimeUtc(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTime(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.LastAccessTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastAccessTime(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTimeUtc(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.LastAccessTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTime(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.LastWriteTime.LocalDateTime, () => MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastWriteTime(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTimeUtc(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return GetTimeFromFile(path, data => data.LastWriteTime.UtcDateTime, () => MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        public override UnixFileMode GetUnixFileMode(string path)\n        {\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n            if (!mockFileDataAccessor.FileExists(path))\n            {\n                throw CommonExceptions.FileNotFound(path);\n            }\n            \n            var mockFileData = mockFileDataAccessor.GetFile(path);\n            return mockFileData.UnixMode;\n        }\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    private DateTime GetTimeFromFile(string path, Func<MockFileData, DateTime> existingFileFunction, Func<DateTime> nonExistingFileFunction)\n    {\n        DateTime result;\n        MockFileData file = mockFileDataAccessor.GetFile(path);\n        if (file != null)\n        {\n            result = existingFileFunction(file);\n        }\n        else\n        {\n            result = nonExistingFileFunction();\n        }\n\n        return result;\n    }\n\n    /// <inheritdoc />\n    public override void Move(string sourceFileName, string destFileName)\n    {\n        if (sourceFileName == null)\n        {\n            throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));\n        }\n\n        if (destFileName == null)\n        {\n            throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));\n        }\n\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));\n\n        var sourceFile = mockFileDataAccessor.GetFile(sourceFileName);\n\n        if (sourceFile == null)\n        {\n            throw CommonExceptions.FileNotFound(sourceFileName);\n        }\n\n        if (!sourceFile.AllowedFileShare.HasFlag(FileShare.Delete))\n        {\n            throw CommonExceptions.ProcessCannotAccessFileInUse();\n        }\n\n        VerifyDirectoryExists(destFileName);\n\n        if (mockFileDataAccessor.GetFile(destFileName) != null)\n        {\n            if (mockFileDataAccessor.StringOperations.Equals(destFileName, sourceFileName))\n            {\n                if (XFS.IsWindowsPlatform())\n                {\n                    mockFileDataAccessor.RemoveFile(sourceFileName);\n                    mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime), false);\n                }\n                return;\n            }\n            else\n            {\n                throw new IOException(\"A file can not be created if it already exists.\");\n            }\n        }\n\n        mockFileDataAccessor.RemoveFile(sourceFileName, false);\n        mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime), false);\n    }\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n        /// <inheritdoc />\n        public override void Move(string sourceFileName, string destFileName, bool overwrite)\n        {\n            if (sourceFileName == null)\n            {\n                throw CommonExceptions.FilenameCannotBeNull(nameof(sourceFileName));\n            }\n\n            if (destFileName == null)\n            {\n                throw CommonExceptions.FilenameCannotBeNull(nameof(destFileName));\n            }\n\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(sourceFileName, nameof(sourceFileName));\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(destFileName, nameof(destFileName));\n\n            if (mockFileDataAccessor.GetFile(destFileName) != null)\n            {\n                if (destFileName.Equals(sourceFileName))\n                {\n                    return;\n                }\n                else if (!overwrite)\n                {\n                    throw new IOException(\"A file can not be created if it already exists.\");\n                }\n            }\n\n\n            var sourceFile = mockFileDataAccessor.GetFile(sourceFileName);\n\n            if (sourceFile == null)\n            {\n                throw CommonExceptions.FileNotFound(sourceFileName);\n            }\n            if (!sourceFile.AllowedFileShare.HasFlag(FileShare.Delete))\n            {\n                throw CommonExceptions.ProcessCannotAccessFileInUse();\n            }\n            VerifyDirectoryExists(destFileName);\n            \n            mockFileDataAccessor.RemoveFile(sourceFileName);\n            mockFileDataAccessor.AddFile(destFileName, mockFileDataAccessor.AdjustTimes(new MockFileData(sourceFile), TimeAdjustments.LastAccessTime));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return Open(path, mode, mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite, FileShare.None);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode, FileAccess access)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return Open(path, mode, access, FileShare.None);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode, FileAccess access, FileShare share) =>\n        OpenInternal(path, mode, access, FileOptions.None);\n\n#if FEATURE_FILESTREAM_OPTIONS\n        /// <inheritdoc />\n        public override FileSystemStream Open(string path, FileStreamOptions options)\n        {\n            return OpenInternal(path, options.Mode, options.Access, options.Options);\n        }\n#endif\n\n    private FileSystemStream OpenInternal(\n        string path,\n        FileMode mode,\n        FileAccess access,\n        FileOptions options)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        bool exists = mockFileDataAccessor.FileExists(path);\n\n        if (mode == FileMode.CreateNew && exists)\n        {\n            throw CommonExceptions.FileAlreadyExists(path);\n        }\n\n        if ((mode == FileMode.Open || mode == FileMode.Truncate) && !exists)\n        {\n            throw CommonExceptions.FileNotFound(path);\n        }\n\n        if (!exists || mode == FileMode.CreateNew)\n        {\n            return CreateInternal(path, access, options);\n        }\n\n        if (mode == FileMode.Create || mode == FileMode.Truncate)\n        {\n            Delete(path);\n            return CreateInternal(path, access, options);\n        }\n\n        var mockFileData = mockFileDataAccessor.GetFile(path);\n        mockFileData.CheckFileAccess(path, access);\n        var timeAdjustments = TimeAdjustments.LastAccessTime;\n        if (access.HasFlag(FileAccess.Write))\n        {\n            timeAdjustments |= TimeAdjustments.LastWriteTime;\n        }\n        mockFileDataAccessor.AdjustTimes(mockFileData, timeAdjustments);\n\n        return new MockFileStream(mockFileDataAccessor, path, mode, access, FileShare.Read, options);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenRead(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);\n    }\n\n    /// <inheritdoc />\n    public override StreamReader OpenText(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return new StreamReader(OpenRead(path));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenWrite(string path) => OpenWriteInternal(path, FileOptions.None);\n\n    private FileSystemStream OpenWriteInternal(string path, FileOptions options)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        return OpenInternal(path, FileMode.OpenOrCreate, FileAccess.Write, options);\n    }\n\n    /// <inheritdoc />\n    public override byte[] ReadAllBytes(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (!mockFileDataAccessor.FileExists(path))\n        {\n            throw CommonExceptions.FileNotFound(path);\n        }\n        mockFileDataAccessor.GetFile(path).CheckFileAccess(path, FileAccess.Read);\n        var fileData = mockFileDataAccessor.GetFile(path);\n        mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);\n        return fileData.Contents.ToArray();\n    }\n\n    /// <inheritdoc />\n    public override string[] ReadAllLines(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (!mockFileDataAccessor.FileExists(path))\n        {\n            throw CommonExceptions.FileNotFound(path);\n        }\n        var fileData = mockFileDataAccessor.GetFile(path);\n        fileData.CheckFileAccess(path, FileAccess.Read);\n        mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);\n\n        return fileData\n            .TextContents\n            .SplitLines();\n    }\n\n    /// <inheritdoc />\n    public override string[] ReadAllLines(string path, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (encoding == null)\n        {\n            throw new ArgumentNullException(nameof(encoding));\n        }\n\n        if (!mockFileDataAccessor.FileExists(path))\n        {\n            throw CommonExceptions.FileNotFound(path);\n        }\n\n        var fileData = mockFileDataAccessor.GetFile(path);\n        fileData.CheckFileAccess(path, FileAccess.Read);\n        mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);\n\n        using (var ms = new MemoryStream(fileData.Contents))\n        using (var sr = new StreamReader(ms, encoding))\n        {\n            return sr.ReadToEnd().SplitLines();\n        }\n    }\n\n    /// <inheritdoc />\n    public override string ReadAllText(string path)\n    {\n        return ReadAllText(path, MockFileData.DefaultEncoding);\n    }\n\n    /// <inheritdoc />\n    public override string ReadAllText(string path, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        if (!mockFileDataAccessor.FileExists(path))\n        {\n            throw CommonExceptions.FileNotFound(path);\n        }\n\n        if (encoding == null)\n        {\n            throw new ArgumentNullException(nameof(encoding));\n        }\n\n        return ReadAllTextInternal(path, encoding);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> ReadLines(string path)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        return ReadAllLines(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> ReadLines(string path, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(encoding, \"encoding\");\n\n        return ReadAllLines(path, encoding);\n    }\n\n    /// <inheritdoc />\n    public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName)\n    {\n        Replace(sourceFileName, destinationFileName, destinationBackupFileName, false);\n    }\n\n    /// <inheritdoc />\n    public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors)\n    {\n        if (sourceFileName == null)\n        {\n            throw new ArgumentNullException(nameof(sourceFileName));\n        }\n\n        if (destinationFileName == null)\n        {\n            throw new ArgumentNullException(nameof(destinationFileName));\n        }\n\n        if (!mockFileDataAccessor.FileExists(sourceFileName))\n        {\n            throw CommonExceptions.FileNotFound(sourceFileName);\n        }\n\n        if (!mockFileDataAccessor.FileExists(destinationFileName))\n        {\n            throw CommonExceptions.FileNotFound(destinationFileName);\n        }\n\n        if (mockFileDataAccessor.StringOperations.Equals(sourceFileName, destinationFileName) && XFS.IsWindowsPlatform())\n        {\n            throw CommonExceptions.ProcessCannotAccessFileInUse();\n        }\n\n        if (destinationBackupFileName != null)\n        {\n            Copy(destinationFileName, destinationBackupFileName, overwrite: true);\n        }\n\n        Delete(destinationFileName);\n        Move(sourceFileName, destinationFileName);\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)\n        {\n            var initialContainer = mockFileDataAccessor.GetFile(linkPath);\n            if (initialContainer.LinkTarget != null)\n            {\n                var nextLocation = initialContainer.LinkTarget;\n                var nextContainer = mockFileDataAccessor.GetFile(nextLocation);\n\n                if (returnFinalTarget)\n                {\n                    // The maximum number of symbolic links that are followed:\n                    // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n                    int maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n                    for (int i = 1; i < maxResolveLinks; i++)\n                    {\n                        if (nextContainer.LinkTarget == null)\n                        {\n                            break;\n                        }\n                        nextLocation = nextContainer.LinkTarget;\n                        nextContainer = mockFileDataAccessor.GetFile(nextLocation);\n                    }\n\n                    if (nextContainer.LinkTarget != null)\n                    {\n                        throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);\n                    }\n                }\n\n                if (nextContainer.IsDirectory)\n                {\n                    return new MockDirectoryInfo(mockFileDataAccessor, nextLocation);\n                }\n                else\n                {\n                    return new MockFileInfo(mockFileDataAccessor, nextLocation);\n                }\n            }\n            throw CommonExceptions.NameCannotBeResolvedByTheSystem(linkPath);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetAttributes(string path, FileAttributes fileAttributes)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        var possibleFileData = mockFileDataAccessor.GetFile(path);\n        if (possibleFileData == null)\n        {\n            var directoryInfo = mockFileDataAccessor.DirectoryInfo.New(path);\n            if (directoryInfo.Exists)\n            {\n                directoryInfo.Attributes = fileAttributes;\n            }\n            else\n            {\n                throw CommonExceptions.FileNotFound(path);\n            }\n        }\n        else\n        {\n            mockFileDataAccessor.AdjustTimes(possibleFileData, TimeAdjustments.LastAccessTime);\n            possibleFileData.Attributes = fileAttributes;\n        }\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetAttributes(SafeFileHandle fileHandle, FileAttributes fileAttributes)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTime(string path, DateTime creationTime)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).CreationTime = new DateTimeOffset(creationTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetCreationTime(SafeFileHandle fileHandle, DateTime creationTime)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTimeUtc(string path, DateTime creationTimeUtc)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).CreationTime = new DateTimeOffset(creationTimeUtc, TimeSpan.Zero);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetCreationTimeUtc(SafeFileHandle fileHandle, DateTime creationTimeUtc)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastAccessTime(string path, DateTime lastAccessTime)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).LastAccessTime = new DateTimeOffset(lastAccessTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastAccessTime(SafeFileHandle fileHandle, DateTime lastAccessTime)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).LastAccessTime = new DateTimeOffset(lastAccessTimeUtc, TimeSpan.Zero);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastAccessTimeUtc(SafeFileHandle fileHandle, DateTime lastAccessTimeUtc)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastWriteTime(string path, DateTime lastWriteTime)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).LastWriteTime = new DateTimeOffset(lastWriteTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastWriteTime(SafeFileHandle fileHandle, DateTime lastWriteTime)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n        mockFileDataAccessor.GetFile(path).LastWriteTime = new DateTimeOffset(lastWriteTimeUtc, TimeSpan.Zero);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastWriteTimeUtc(SafeFileHandle fileHandle, DateTime lastWriteTimeUtc)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        public override void SetUnixFileMode(string path, UnixFileMode mode)\n        {\n            mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n\n            if (!mockFileDataAccessor.FileExists(path))\n            {\n                throw CommonExceptions.FileNotFound(path);\n            }\n            \n            var mockFileData = mockFileDataAccessor.GetFile(path);\n            mockFileData.UnixMode = mode;\n        }\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetUnixFileMode(SafeFileHandle fileHandle, UnixFileMode mode)\n        {\n            throw CommonExceptions.NotImplemented();\n        }\n#endif\n\n    /// <summary>\n    /// Creates a new file, writes the specified byte array to the file, and then closes the file.\n    /// If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"bytes\">The bytes to write to the file. </param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// Given a byte array and a file path, this method opens the specified file, writes the contents of the byte array to the file, and then closes the file.\n    /// </remarks>\n    public override void WriteAllBytes(string path, byte[] bytes)\n    {\n        VerifyValueIsNotNull(bytes, \"bytes\");\n\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyDirectoryExists(path);\n\n        mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(new MockFileData(bytes.ToArray()), TimeAdjustments.All));\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytes(string,ReadOnlySpan{byte})\"/>\n        public override void WriteAllBytes(string path, ReadOnlySpan<byte> bytes)\n        {\n            WriteAllBytes(path, bytes.ToArray());\n        }\n#endif\n\n    /// <summary>\n    /// Creates a new file, writes a collection of strings to the file, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The lines to write to the file.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     You can use this method to create the contents for a collection class that takes an <see cref=\"IEnumerable{T}\"/> in its constructor, such as a <see cref=\"List{T}\"/>, <see cref=\"HashSet{T}\"/>, or a <see cref=\"SortedSet{T}\"/> class.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, IEnumerable<string> contents)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(contents, \"contents\");\n\n        WriteAllLines(path, contents, MockFileData.DefaultEncoding);\n    }\n\n    /// <summary>\n    /// Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The lines to write to the file.</param>\n    /// <param name=\"encoding\">The character encoding to use.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/>, <paramref name=\"contents\"/>, or <paramref name=\"encoding\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     You can use this method to create a file that contains the following:\n    /// <list type=\"bullet\">\n    /// <item>\n    /// <description>The results of a LINQ to Objects query on the lines of a file, as obtained by using the ReadLines method.</description>\n    /// </item>\n    /// <item>\n    /// <description>The contents of a collection that implements an <see cref=\"IEnumerable{T}\"/> of strings.</description>\n    /// </item>\n    /// </list>\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, IEnumerable<string> contents, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(contents, \"contents\");\n        VerifyValueIsNotNull(encoding, \"encoding\");\n\n        var sb = new StringBuilder();\n        foreach (var line in contents)\n        {\n            sb.AppendLine(line);\n        }\n\n        WriteAllText(path, sb.ToString(), encoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string array to the file by using the specified encoding, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The string array to write to the file.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     The default behavior of the WriteAllLines method is to write out data using UTF-8 encoding without a byte order mark (BOM). If it is necessary to include a UTF-8 identifier, such as a byte order mark, at the beginning of a file, use the <see cref=\"FileBase.WriteAllLines(string,string[],System.Text.Encoding)\"/> method overload with <see cref=\"UTF8Encoding\"/> encoding.\n    /// </para>\n    /// <para>\n    ///     Given a string array and a file path, this method opens the specified file, writes the string array to the file using the specified encoding,\n    ///     and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, string[] contents)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(contents, \"contents\");\n\n        WriteAllLines(path, contents, MockFileData.DefaultEncoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string array to the file by using the specified encoding, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The string array to write to the file.</param>\n    /// <param name=\"encoding\">An <see cref=\"Encoding\"/> object that represents the character encoding applied to the string array.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     Given a string array and a file path, this method opens the specified file, writes the string array to the file using the specified encoding,\n    ///     and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, string[] contents, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(contents, \"contents\");\n        VerifyValueIsNotNull(encoding, \"encoding\");\n\n        WriteAllLines(path, new List<string>(contents), encoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to. </param>\n    /// <param name=\"contents\">The string to write to the file. </param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM), so using the <see cref=\"M:Encoding.GetPreamble\"/> method will return an empty byte array.\n    /// If it is necessary to include a UTF-8 identifier, such as a byte order mark, at the beginning of a file, use the <see cref=\"FileBase.WriteAllText(string,string,System.Text.Encoding)\"/> method overload with <see cref=\"UTF8Encoding\"/> encoding.\n    /// <para>\n    /// Given a string and a file path, this method opens the specified file, writes the string to the file, and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllText(string path, string contents)\n    {\n        WriteAllText(path, contents, MockFileData.DefaultEncoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to. </param>\n    /// <param name=\"contents\">The string to write to the file. </param>\n    /// <param name=\"encoding\">The encoding to apply to the string.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// Given a string and a file path, this method opens the specified file, writes the string to the file using the specified encoding, and then closes the file.\n    /// The file handle is guaranteed to be closed by this method, even if exceptions are raised.\n    /// </remarks>\n    public override void WriteAllText(string path, string contents, Encoding encoding)\n    {\n        mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        VerifyValueIsNotNull(path, \"path\");\n\n        if (mockFileDataAccessor.Directory.Exists(path))\n        {\n            throw CommonExceptions.AccessDenied(path);\n        }\n\n        VerifyDirectoryExists(path);\n\n        MockFileData data = contents == null ? new MockFileData(new byte[0]) : new MockFileData(contents, encoding);\n        mockFileDataAccessor.AddFile(path, mockFileDataAccessor.AdjustTimes(data, TimeAdjustments.All));\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char})\"/>\n        public override void WriteAllText(string path, ReadOnlySpan<char> contents)\n        {\n            WriteAllText(path, contents.ToString());\n        }\n\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public override void WriteAllText(string path, ReadOnlySpan<char> contents, Encoding encoding)\n        {\n            WriteAllText(path, contents.ToString(), encoding);\n        }\n#endif\n\n    internal static string ReadAllBytes(byte[] contents, Encoding encoding)\n    {\n        using (var ms = new MemoryStream(contents))\n        using (var sr = new StreamReader(ms, encoding))\n        {\n            return sr.ReadToEnd();\n        }\n    }\n\n    private string ReadAllTextInternal(string path, Encoding encoding)\n    {\n        var mockFileData = mockFileDataAccessor.GetFile(path);\n        mockFileData.CheckFileAccess(path, FileAccess.Read);\n        mockFileDataAccessor.AdjustTimes(mockFileData, TimeAdjustments.LastAccessTime);\n        return ReadAllBytes(mockFileData.Contents, encoding);\n    }\n\n    private void VerifyValueIsNotNull(object value, string parameterName)\n    {\n        if (value == null)\n        {\n            throw new ArgumentNullException(parameterName, StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n    }\n\n    private void VerifyDirectoryExists(string path)\n    {\n        var pathOps = mockFileDataAccessor.Path;\n        var dir = pathOps.GetDirectoryName(pathOps.GetFullPath(path));\n\n        if (!mockFileDataAccessor.Directory.Exists(dir))\n        {\n            throw CommonExceptions.CouldNotFindPartOfPath(path);\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs",
    "content": "﻿using System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing System.Text;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// The class represents the associated data of a file.\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileData\n{\n    /// <summary>\n    /// The default encoding.\n    /// </summary>\n    public static readonly Encoding DefaultEncoding = new UTF8Encoding(false, true);\n\n    /// <summary>\n    /// The null object. It represents the data of a non-existing file or directory.\n    /// </summary>\n    internal static readonly MockFileData NullObject = new MockFileData(string.Empty)\n    {\n        LastWriteTime = new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc),\n        LastAccessTime = new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc),\n        CreationTime = new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc),\n        Attributes = (FileAttributes)(-1),\n    };\n\n    /// <summary>\n    /// Gets the default date time offset.\n    /// E.g. for not existing files.\n    /// </summary>\n    public static readonly DateTimeOffset DefaultDateTimeOffset = new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc);\n\n    /// <summary>\n    /// The access control of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n#if FEATURE_SERIALIZABLE\n    [NonSerialized]\n#endif\n    private FileSecurity accessControl;\n\n    /// <summary>\n    /// Gets a value indicating whether the <see cref=\"MockFileData\"/> is a directory or not.\n    /// </summary>\n    public bool IsDirectory { get { return Attributes.HasFlag(FileAttributes.Directory); } }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockFileData\"/> class with an empty content.\n    /// </summary>\n    private MockFileData()\n    {\n        var now = DateTime.UtcNow;\n        LastWriteTime = now;\n        LastAccessTime = now;\n        CreationTime = now;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockFileData\"/> class with the content of <paramref name=\"textContents\"/> using the encoding of <see cref=\"DefaultEncoding\"/>.\n    /// </summary>\n    /// <param name=\"textContents\">The textual content encoded into bytes with <see cref=\"DefaultEncoding\"/>.</param>\n    public MockFileData(string textContents)\n        : this(DefaultEncoding.GetBytes(textContents))\n    { }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockFileData\"/> class with the content of <paramref name=\"textContents\"/> using the encoding of <paramref name=\"encoding\"/>.\n    /// </summary>\n    /// <param name=\"textContents\">The textual content.</param>\n    /// <param name=\"encoding\">The specific encoding used the encode the text.</param>\n    /// <remarks>The constructor respect the BOM of <paramref name=\"encoding\"/>.</remarks>\n    public MockFileData(string textContents, Encoding encoding)\n        : this()\n    {\n        Contents = encoding.GetPreamble().Concat(encoding.GetBytes(textContents)).ToArray();\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockFileData\"/> class with the content of <paramref name=\"contents\"/>.\n    /// </summary>\n    /// <param name=\"contents\">The actual content.</param>\n    /// <exception cref=\"ArgumentNullException\">Thrown if <paramref name=\"contents\"/> is <see langword=\"null\" />.</exception>\n    public MockFileData(byte[] contents)\n        : this()\n    {\n        Contents = contents ?? throw new ArgumentNullException(nameof(contents));\n    }\n\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MockFileData\"/> class by copying the given <see cref=\"MockFileData\"/>.\n    /// </summary>\n    /// <param name=\"template\">The template instance.</param>\n    /// <exception cref=\"ArgumentNullException\">Thrown if <paramref name=\"template\"/> is <see langword=\"null\" />.</exception>\n    public MockFileData(MockFileData template)\n    {\n        if (template == null)\n        {\n            throw new ArgumentNullException(nameof(template));\n        }\n\n        accessControl = template.accessControl;\n        Attributes = template.Attributes;\n        Contents = template.Contents.ToArray();\n        CreationTime = template.CreationTime;\n        FileVersionInfo = template.FileVersionInfo;\n        LastAccessTime = template.LastAccessTime;\n        LastWriteTime = template.LastWriteTime;\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n        LinkTarget = template.LinkTarget;\n#endif\n    }\n\n    /// <summary>\n    /// Gets or sets the byte contents of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n    public byte[] Contents { get; set; }\n\n    /// <summary>\n    /// Gets or sets the file version info of the <see cref=\"MockFileData\"/>\n    /// </summary>\n    public IFileVersionInfo FileVersionInfo { get; set; }\n\n    /// <summary>\n    /// Gets or sets the string contents of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n    /// <remarks>\n    /// The setter uses the <see cref=\"DefaultEncoding\"/> using this can scramble the actual contents.\n    /// </remarks>\n    public string TextContents\n    {\n        get { return MockFile.ReadAllBytes(Contents, DefaultEncoding); }\n        set { Contents = DefaultEncoding.GetBytes(value); }\n    }\n\n    /// <summary>\n    /// Gets or sets the date and time the <see cref=\"MockFileData\"/> was created.\n    /// </summary>\n    public DateTimeOffset CreationTime\n    {\n        get { return creationTime; }\n        set { creationTime = value.ToUniversalTime(); }\n    }\n    private DateTimeOffset creationTime;\n\n    /// <summary>\n    /// Gets or sets the date and time of the <see cref=\"MockFileData\"/> was last accessed to.\n    /// </summary>\n    public DateTimeOffset LastAccessTime\n    {\n        get { return lastAccessTime; }\n        set { lastAccessTime = value.ToUniversalTime(); }\n    }\n    private DateTimeOffset lastAccessTime;\n\n    /// <summary>\n    /// Gets or sets the date and time of the <see cref=\"MockFileData\"/> was last written to.\n    /// </summary>\n    public DateTimeOffset LastWriteTime\n    {\n        get { return lastWriteTime; }\n        set { lastWriteTime = value.ToUniversalTime(); }\n    }\n    private DateTimeOffset lastWriteTime;\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n    /// <summary>\n    /// Gets or sets the link target of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n    public string LinkTarget { get; set; }\n#endif\n\n    /// <summary>\n    /// Casts a string into <see cref=\"MockFileData\"/>.\n    /// </summary>\n    /// <param name=\"s\">The path of the <see cref=\"MockFileData\"/> to be created.</param>\n    public static implicit operator MockFileData(string s)\n    {\n        return new MockFileData(s);\n    }\n\n    /// <summary>\n    /// Gets or sets the specified <see cref=\"FileAttributes\"/> of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n    public FileAttributes Attributes { get; set; } = FileAttributes.Normal;\n\n    /// <summary>\n    /// Gets or sets <see cref=\"FileSecurity\"/> of the <see cref=\"MockFileData\"/>.\n    /// </summary>\n    [SupportedOSPlatform(\"windows\")]\n    public FileSecurity AccessControl\n    {\n        get\n        {\n            // FileSecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way.\n            // This let's us use this class as long as we don't use AccessControl property.\n            return accessControl ?? (accessControl = new FileSecurity());\n        }\n        set { accessControl = value; }\n    }\n\n    /// <summary>\n    /// Gets or sets the File sharing mode for this file, this allows you to lock a file for reading or writing.\n    /// </summary>\n    public FileShare AllowedFileShare { get; set; } = FileShare.ReadWrite | FileShare.Delete;\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <summary>\n        /// Gets or sets the Unix file mode (permissions) for this file.\n        /// This allows you to configure the read, write and execute access for user, group and other.\n        /// </summary>\n        public UnixFileMode UnixMode { get; set; } = UnixFileMode.UserRead | UnixFileMode.GroupRead |\n                                                     UnixFileMode.OtherRead | UnixFileMode.UserWrite;\n#endif\n\n    /// <summary>\n    /// Checks whether the file is accessible for this type of FileAccess. \n    /// MockFileData can be configured to have FileShare.None, which indicates it is locked by a 'different process'.\n    /// \n    /// If the file is 'locked by a different process', an IOException will be thrown.\n    /// If the file is read-only and is accessed for writing, an UnauthorizedAccessException will be thrown.\n    /// </summary>\n    /// <param name=\"path\">The path is used in the exception message to match the message in real life situations</param>\n    /// <param name=\"access\">The access type to check</param>\n    internal void CheckFileAccess(string path, FileAccess access)\n    {\n        if (!AllowedFileShare.HasFlag((FileShare)access))\n        {\n            throw CommonExceptions.ProcessCannotAccessFileInUse(path);\n        }\n\n        if (Attributes.HasFlag(FileAttributes.ReadOnly) && access.HasFlag(FileAccess.Write))\n        {\n            throw CommonExceptions.AccessDenied(path);\n        }\n    }\n\n    internal virtual MockFileData Clone()\n    {\n        return new MockFileData(this);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfo.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileInfo : FileInfoBase, IFileSystemAclSupport\n{\n    private readonly IMockFileDataAccessor mockFileSystem;\n    private string path;\n    private readonly string originalPath;\n    private MockFileData cachedMockFileData;\n    private MockFile mockFile;\n    private bool refreshOnNextRead;\n\n    /// <inheritdoc />\n    public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path) : base(mockFileSystem?.FileSystem)\n    {\n        this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n        mockFileSystem.PathVerifier.IsLegalAbsoluteOrRelative(path, \"path\");\n        this.originalPath = path;\n        this.path = mockFileSystem.Path.GetFullPath(path);\n        this.mockFile = new MockFile(mockFileSystem);\n        Refresh();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override void CreateAsSymbolicLink(string pathToTarget)\n    {\n        FileSystem.File.CreateSymbolicLink(FullName, pathToTarget);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override void Delete()\n    {\n        refreshOnNextRead = true;\n        mockFile.Delete(path);\n    }\n\n    /// <inheritdoc />\n    public override void Refresh()\n    {\n        var mockFileData = mockFileSystem.GetFile(path)?.Clone();\n        cachedMockFileData = mockFileData ?? MockFileData.NullObject.Clone();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)\n    {\n        return FileSystem.File.ResolveLinkTarget(FullName, returnFinalTarget);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileAttributes Attributes\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.Attributes;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.Attributes = value & ~FileAttributes.Directory;\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTime\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.CreationTime.LocalDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.CreationTime = AdjustUnspecifiedKind(value, DateTimeKind.Local);\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTimeUtc\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.CreationTime.UtcDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.CreationTime = AdjustUnspecifiedKind(value, DateTimeKind.Utc);\n        }\n    }\n\n    /// <inheritdoc />\n    public override bool Exists\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return (int)mockFileData.Attributes != -1 && !mockFileData.IsDirectory;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string Extension\n    {\n        get\n        {\n            // System.IO.Path.GetExtension does only string manipulation,\n            // so it's safe to delegate.\n            return Path.GetExtension(path);\n        }\n    }\n\n    /// <inheritdoc />\n    public override string FullName\n    {\n        get { return path; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTime\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.LastAccessTime.LocalDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.LastAccessTime = AdjustUnspecifiedKind(value, DateTimeKind.Local);\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTimeUtc\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.LastAccessTime.UtcDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.LastAccessTime = AdjustUnspecifiedKind(value, DateTimeKind.Utc);\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTime\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.LastWriteTime.LocalDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.LastWriteTime = AdjustUnspecifiedKind(value, DateTimeKind.Local);\n        }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTimeUtc\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.LastWriteTime.UtcDateTime;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            mockFileData.LastWriteTime = AdjustUnspecifiedKind(value, DateTimeKind.Utc);\n        }\n    }\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n    /// <inheritdoc />\n    public override string LinkTarget\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return mockFileData.LinkTarget;\n        }\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string Name\n    {\n        get { return new MockPath(mockFileSystem).GetFileName(path); }\n    }\n\n    /// <inheritdoc />\n    public override StreamWriter AppendText()\n    {\n        return new StreamWriter(new MockFileStream(mockFileSystem, FullName, FileMode.Append, FileAccess.Write));\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo CopyTo(string destFileName)\n    {\n        return CopyTo(destFileName, false);\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo CopyTo(string destFileName, bool overwrite)\n    {\n        if (destFileName == FullName)\n        {\n            return this;\n        }\n        mockFile.Copy(FullName, destFileName, overwrite);\n        return mockFileSystem.FileInfo.New(destFileName);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create()\n    {\n        var result = mockFile.Create(FullName);\n        refreshOnNextRead = true;\n        return result;\n    }\n\n    /// <inheritdoc />\n    public override StreamWriter CreateText()\n    {\n        var result = mockFile.CreateText(FullName);\n        refreshOnNextRead = true;\n        return result;\n    }\n\n    /// <inheritdoc />\n    public override void Decrypt()\n    {\n        var mockFileData = GetMockFileDataForWrite();\n        mockFileData.Attributes &= ~FileAttributes.Encrypted;\n    }\n\n    /// <inheritdoc />\n    public override void Encrypt()\n    {\n        var mockFileData = GetMockFileDataForWrite();\n        mockFileData.Attributes |= FileAttributes.Encrypted;\n    }\n\n    /// <inheritdoc />\n    public override void MoveTo(string destFileName)\n    {\n        mockFile.Move(path, destFileName);\n        path = mockFileSystem.Path.GetFullPath(destFileName);\n    }\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    /// <inheritdoc />\n    public override void MoveTo(string destFileName, bool overwrite)\n    {\n        mockFile.Move(path, destFileName, overwrite);\n        path = mockFileSystem.Path.GetFullPath(destFileName);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode)\n    {\n        return mockFile.Open(FullName, mode);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode, FileAccess access)\n    {\n        return mockFile.Open(FullName, mode, access);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode, FileAccess access, FileShare share)\n    {\n        return mockFile.Open(FullName, mode, access, share);\n    }\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileStreamOptions options)\n    {\n        return mockFile.Open(FullName, options.Mode, options.Access, options.Share);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenRead() => mockFile.OpenRead(path);\n\n    /// <inheritdoc />\n    public override StreamReader OpenText() => mockFile.OpenText(path);\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenWrite() => mockFile.OpenWrite(path);\n\n    /// <inheritdoc />\n    public override IFileInfo Replace(string destinationFileName, string destinationBackupFileName)\n    {\n        return Replace(destinationFileName, destinationBackupFileName, false);\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors)\n    {\n        mockFile.Replace(path, destinationFileName, destinationBackupFileName, ignoreMetadataErrors);\n        return mockFileSystem.FileInfo.New(destinationFileName);\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo Directory\n    {\n        get\n        {\n            return mockFileSystem.DirectoryInfo.New(DirectoryName);\n        }\n    }\n\n    /// <inheritdoc />\n    public override string DirectoryName\n    {\n        get\n        {\n            // System.IO.Path.GetDirectoryName does only string manipulation,\n            // so it's safe to delegate.\n            return Path.GetDirectoryName(path);\n        }\n    }\n\n    /// <inheritdoc />\n    public override bool IsReadOnly\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            return (mockFileData.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;\n        }\n        set\n        {\n            var mockFileData = GetMockFileDataForWrite();\n            if (value)\n            {\n                mockFileData.Attributes |= FileAttributes.ReadOnly;\n            }\n            else\n            {\n                mockFileData.Attributes &= ~FileAttributes.ReadOnly;\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public override long Length\n    {\n        get\n        {\n            var mockFileData = GetMockFileDataForRead();\n            if (mockFileData == null || mockFileData.IsDirectory)\n            {\n                throw CommonExceptions.FileNotFound(path);\n            }\n            return mockFileData.Contents.Length;\n        }\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return originalPath;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return GetMockFileData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        return GetMockFileData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        GetMockFileData().AccessControl = value as FileSecurity;\n    }\n\n    private MockFileData GetMockFileData()\n    {\n        return mockFileSystem.GetFile(path)\n               ?? throw CommonExceptions.FileNotFound(path);\n    }\n\n    private static DateTime AdjustUnspecifiedKind(DateTime time, DateTimeKind fallbackKind)\n    {\n        if (time.Kind == DateTimeKind.Unspecified)\n        {\n            return DateTime.SpecifyKind(time, fallbackKind);\n        }\n\n        return time;\n    }\n\n    private MockFileData GetMockFileDataForRead()\n    {\n        if (refreshOnNextRead)\n        {\n            Refresh();\n            refreshOnNextRead = false;\n        }\n        return cachedMockFileData;\n    }\n\n    private MockFileData GetMockFileDataForWrite()\n    {\n        refreshOnNextRead = true;\n        return mockFileSystem.GetFile(path)\n               ?? throw CommonExceptions.FileNotFound(path);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileInfoFactory.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileInfoFactory : IFileInfoFactory\n{\n    private readonly IMockFileDataAccessor mockFileSystem;\n\n    /// <inheritdoc />\n    public MockFileInfoFactory(IMockFileDataAccessor mockFileSystem)\n    {\n        this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => mockFileSystem;\n\n    /// <inheritdoc />\n    public IFileInfo New(string fileName)\n    {\n        return new MockFileInfo(mockFileSystem, fileName);\n    }\n\n    /// <inheritdoc />\n    public IFileInfo Wrap(FileInfo fileInfo)\n    {\n        if (fileInfo == null)\n        {\n            return null;\n        }\n\n        return new MockFileInfo(mockFileSystem, fileInfo.FullName);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStream.cs",
    "content": "﻿using System.Threading.Tasks;\nusing System.Threading;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileStream : FileSystemStream, IFileSystemAclSupport\n{\n    /// <summary>\n    ///     Wrapper around a <see cref=\"Stream\" /> with no backing store, which\n    ///     is used as a replacement for a <see cref=\"FileSystemStream\" />. As such\n    ///     it implements the same properties and methods as a <see cref=\"FileSystemStream\" />.\n    /// </summary>\n    public new static FileSystemStream Null { get; } = new NullFileSystemStream();\n\n    private class NullFileSystemStream : FileSystemStream\n    {\n        /// <summary>\n        /// Initializes a new instance of <see cref=\"NullFileSystemStream\" />.\n        /// </summary>\n        public NullFileSystemStream() : base(Null, \".\", true)\n        {\n                \n        }\n    }\n\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n    private readonly string path;\n    private readonly Guid guid = Guid.NewGuid();\n    private readonly FileAccess access = FileAccess.ReadWrite;\n    private readonly FileShare share = FileShare.Read;\n    private readonly FileOptions options;\n    private readonly MockFileData fileData;\n    private bool disposed;\n\n    /// <inheritdoc />\n    public MockFileStream(\n        IMockFileDataAccessor mockFileDataAccessor,\n        string path,\n        FileMode mode,\n        FileAccess access = FileAccess.ReadWrite,\n        FileShare share = FileShare.Read,\n        FileOptions options = FileOptions.None)\n        : base(new MemoryStream(),\n            path == null ? null : Path.GetFullPath(path),\n            (options & FileOptions.Asynchronous) != 0)\n\n    {\n        ThrowIfInvalidModeAccess(mode, access);\n\n        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n        path = mockFileDataAccessor.PathVerifier.FixPath(path);\n        this.path = path;\n        this.options = options;\n\n        if (mockFileDataAccessor.FileExists(path))\n        {\n            if (mode.Equals(FileMode.CreateNew))\n            {\n                throw CommonExceptions.FileAlreadyExists(path);\n            }\n\n            fileData = mockFileDataAccessor.GetFile(path);\n            fileData.CheckFileAccess(path, access);\n\n            var timeAdjustments = GetTimeAdjustmentsForFileStreamWhenFileExists(mode, access);\n            mockFileDataAccessor.AdjustTimes(fileData, timeAdjustments);\n            var existingContents = fileData.Contents;\n            var keepExistingContents =\n                existingContents?.Length > 0 &&\n                mode != FileMode.Truncate && mode != FileMode.Create;\n            if (keepExistingContents)\n            {\n                base.Write(existingContents, 0, existingContents.Length);\n                base.Seek(0, mode == FileMode.Append\n                    ? SeekOrigin.End\n                    : SeekOrigin.Begin);\n            }\n        }\n        else\n        {\n            var directoryPath = mockFileDataAccessor.Path.GetDirectoryName(path);\n            if (!string.IsNullOrEmpty(directoryPath) && !mockFileDataAccessor.Directory.Exists(directoryPath))\n            {\n                throw CommonExceptions.CouldNotFindPartOfPath(path);\n            }\n\n            if (mode.Equals(FileMode.Open) || mode.Equals(FileMode.Truncate))\n            {\n                throw CommonExceptions.FileNotFound(path);\n            }\n\n            fileData = new MockFileData(new byte[] { });\n            mockFileDataAccessor.AdjustTimes(fileData,\n                TimeAdjustments.CreationTime | TimeAdjustments.LastAccessTime);\n            mockFileDataAccessor.AddFile(path, fileData);\n        }\n\n        mockFileDataAccessor.FileHandles.AddHandle(path, guid, access, share);\n        this.access = access;\n        this.share = share;\n    }\n\n    private static void ThrowIfInvalidModeAccess(FileMode mode, FileAccess access)\n    {\n        if (mode == FileMode.Append)\n        {\n            if (access == FileAccess.Read)\n            {\n                throw CommonExceptions.InvalidAccessCombination(mode, access);\n            }\n\n            if (access != FileAccess.Write)\n            {\n                throw CommonExceptions.AppendAccessOnlyInWriteOnlyMode();\n            }\n        }\n\n        if (!access.HasFlag(FileAccess.Write) &&\n            (mode == FileMode.Truncate || mode == FileMode.CreateNew ||\n             mode == FileMode.Create || mode == FileMode.Append))\n        {\n            throw CommonExceptions.InvalidAccessCombination(mode, access);\n        }\n    }\n\n    /// <inheritdoc />\n    public override bool CanRead => access.HasFlag(FileAccess.Read);\n\n    /// <inheritdoc />\n    public override bool CanWrite => access.HasFlag(FileAccess.Write);\n\n    /// <inheritdoc />\n    public override int Read(byte[] buffer, int offset, int count)\n    {\n        mockFileDataAccessor.AdjustTimes(fileData,\n            TimeAdjustments.LastAccessTime);\n        return base.Read(buffer, offset, count);\n    }\n\n    /// <inheritdoc />\n    protected override void Dispose(bool disposing)\n    {\n        if (disposed)\n        {\n            return;\n        }\n        mockFileDataAccessor.FileHandles.RemoveHandle(path, guid);\n        InternalFlush();\n        base.Dispose(disposing);\n        OnClose();\n        disposed = true;\n    }\n\n    /// <inheritdoc cref=\"FileSystemStream.EndWrite(IAsyncResult)\" />\n    public override void EndWrite(IAsyncResult asyncResult)\n    {\n        if (!CanWrite)\n        {\n            throw new NotSupportedException(\"Stream does not support writing.\");\n        }\n        base.EndWrite(asyncResult);\n    }\n\n    /// <inheritdoc />\n    public override void SetLength(long value)\n    {\n        if (!CanWrite)\n        {\n            throw new NotSupportedException(\"Stream does not support writing.\");\n        }\n\n        base.SetLength(value);\n    }\n\n    /// <inheritdoc cref=\"FileSystemStream.Write(byte[], int, int)\" />\n    public override void Write(byte[] buffer, int offset, int count)\n    {\n        if (!CanWrite)\n        {\n            throw new NotSupportedException(\"Stream does not support writing.\");\n        }\n        mockFileDataAccessor.AdjustTimes(fileData,\n            TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n        base.Write(buffer, offset, count);\n    }\n\n#if FEATURE_SPAN\n        /// <inheritdoc />\n        public override void Write(ReadOnlySpan<byte> buffer)\n        {\n            if (!CanWrite)\n            {\n                throw new NotSupportedException(\"Stream does not support writing.\");\n            }\n            mockFileDataAccessor.AdjustTimes(fileData,\n                TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n            base.Write(buffer);\n        }\n#endif\n\n    /// <inheritdoc cref=\"FileSystemStream.WriteAsync(byte[], int, int, CancellationToken)\" />\n    public override Task WriteAsync(byte[] buffer, int offset, int count,\n        CancellationToken cancellationToken)\n    {\n        if (!CanWrite)\n        {\n            throw new NotSupportedException(\"Stream does not support writing.\");\n        }\n        mockFileDataAccessor.AdjustTimes(fileData,\n            TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n        return base.WriteAsync(buffer, offset, count, cancellationToken);\n    }\n\n#if FEATURE_SPAN\n        /// <inheritdoc />\n        public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer,\n                                             CancellationToken cancellationToken = new())\n        {\n            if (!CanWrite)\n            {\n                throw new NotSupportedException(\"Stream does not support writing.\");\n            }\n            mockFileDataAccessor.AdjustTimes(fileData,\n                TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n            return base.WriteAsync(buffer, cancellationToken);\n        }\n#endif\n\n    /// <inheritdoc cref=\"FileSystemStream.WriteByte(byte)\" />\n    public override void WriteByte(byte value)\n    {\n        if (!CanWrite)\n        {\n            throw new NotSupportedException(\"Stream does not support writing.\");\n        }\n        mockFileDataAccessor.AdjustTimes(fileData,\n            TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime);\n        base.WriteByte(value);\n    }\n\n    /// <inheritdoc />\n    public override void Flush()\n    {\n        InternalFlush();\n    }\n\n    /// <inheritdoc />\n    public override void Flush(bool flushToDisk)\n        => InternalFlush();\n\n    /// <inheritdoc />\n    public override Task FlushAsync(CancellationToken cancellationToken)\n    {\n        InternalFlush();\n        return Task.CompletedTask;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return GetMockFileData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        return GetMockFileData().AccessControl;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        GetMockFileData().AccessControl = value as FileSecurity;\n    }\n\n    private MockFileData GetMockFileData()\n    {\n        return mockFileDataAccessor.GetFile(path)\n               ?? throw CommonExceptions.FileNotFound(path);\n    }\n\n    private void InternalFlush()\n    {\n        if (mockFileDataAccessor.FileExists(path))\n        {\n            var mockFileData = mockFileDataAccessor.GetFile(path);\n            /* reset back to the beginning .. */\n            var position = Position;\n            Seek(0, SeekOrigin.Begin);\n            /* .. read everything out */\n            var data = new byte[Length];\n            _ = Read(data, 0, (int)Length);\n            /* restore to original position */\n            Seek(position, SeekOrigin.Begin);\n            /* .. put it in the mock system */\n            mockFileData.Contents = data;\n        }\n    }\n\n    private void OnClose()\n    {\n        if (options.HasFlag(FileOptions.DeleteOnClose) && mockFileDataAccessor.FileExists(path))\n        {\n            mockFileDataAccessor.RemoveFile(path);\n        }\n\n        if (options.HasFlag(FileOptions.Encrypted) && mockFileDataAccessor.FileExists(path))\n        {\n#pragma warning disable CA1416 // Ignore SupportedOSPlatform for testing helper encryption\n            mockFileDataAccessor.FileInfo.New(path).Encrypt();\n#pragma warning restore CA1416\n        }\n    }\n\n    private TimeAdjustments GetTimeAdjustmentsForFileStreamWhenFileExists(FileMode mode, FileAccess access)\n    {\n        switch (mode)\n        {\n            case FileMode.Append:\n            case FileMode.CreateNew:\n                if (access.HasFlag(FileAccess.Read))\n                {\n                    return TimeAdjustments.LastAccessTime;\n                }\n                return TimeAdjustments.None;\n            case FileMode.Create:\n            case FileMode.Truncate:\n                if (access.HasFlag(FileAccess.Write))\n                {\n                    return TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime;\n                }\n                return TimeAdjustments.LastAccessTime;\n            case FileMode.Open:\n            case FileMode.OpenOrCreate:\n            default:\n                return TimeAdjustments.None;\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStreamFactory.cs",
    "content": "using System.Security.AccessControl;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileStreamFactory : IFileStreamFactory\n{\n    private readonly IMockFileDataAccessor mockFileSystem;\n\n    /// <inheritdoc />\n    public MockFileStreamFactory(IMockFileDataAccessor mockFileSystem)\n        => this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n        \n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => mockFileSystem;\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access)\n        => new MockFileStream(mockFileSystem, handle.ToString(), FileMode.Open, access: access);\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access, int bufferSize)\n        => new MockFileStream(mockFileSystem, handle.ToString(), FileMode.Open, access: access);\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync)\n        => new MockFileStream(mockFileSystem, handle.ToString(), FileMode.Open, access: access);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode)\n        => new MockFileStream(mockFileSystem, path, mode);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access)\n        => new MockFileStream(mockFileSystem, path, mode, access);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share)\n        => new MockFileStream(mockFileSystem, path, mode, access, share);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize)\n        => new MockFileStream(mockFileSystem, path, mode, access, share);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync)\n        => new MockFileStream(mockFileSystem, path, mode, access, share);\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize,\n        FileOptions options)\n        => new MockFileStream(mockFileSystem, path, mode, access, share, options);\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileStreamOptions options)\n        => new MockFileStream(mockFileSystem, path, options.Mode, options.Access, options.Share, options.Options);\n#endif\n\n    /// <inheritdoc />\n    public FileSystemStream Wrap(FileStream fileStream)\n        => throw new NotSupportedException(\"You cannot wrap an existing FileStream in the MockFileSystem instance!\");\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystem.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.Serialization;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileSystem : FileSystemBase, IMockFileDataAccessor\n{\n    private const string DEFAULT_CURRENT_DIRECTORY = @\"C:\\\";\n    private const string TEMP_DIRECTORY = @\"C:\\temp\\\";\n\n    private readonly IDictionary<string, FileSystemEntry> files;\n    private readonly IDictionary<string, MockDriveData> drives;\n    private readonly PathVerifier pathVerifier;\n#if FEATURE_SERIALIZABLE\n    [NonSerialized]\n#endif\n    private readonly FileHandles fileHandles = new();\n#if FEATURE_SERIALIZABLE\n    [NonSerialized]\n#endif\n    private Func<DateTime> dateTimeProvider = defaultDateTimeProvider;\n    private static Func<DateTime> defaultDateTimeProvider = () => DateTime.UtcNow;\n\n    /// <inheritdoc />\n    public MockFileSystem() : this(null) { }\n\n    /// <inheritdoc />\n    public MockFileSystem(IDictionary<string, MockFileData> files, string currentDirectory = \"\")\n        : this(files, new MockFileSystemOptions\n        {\n            CurrentDirectory = currentDirectory,\n            CreateDefaultTempDir = true\n        }) { }\n\n    /// <inheritdoc />\n    public MockFileSystem(MockFileSystemOptions options)\n        : this(null, options) { }\n\n    /// <inheritdoc />\n    public MockFileSystem(IDictionary<string, MockFileData> files, MockFileSystemOptions options)\n    {\n        options ??= new MockFileSystemOptions();\n        var currentDirectory = options.CurrentDirectory;\n        if (string.IsNullOrEmpty(currentDirectory))\n        {\n            currentDirectory = XFS.Path(DEFAULT_CURRENT_DIRECTORY);\n        }\n        else if (!System.IO.Path.IsPathRooted(currentDirectory))\n        {\n            throw new ArgumentException(\"Current directory needs to be rooted.\", nameof(currentDirectory));\n        }\n\n        var defaultTempDirectory = XFS.Path(TEMP_DIRECTORY);\n\n        StringOperations = new StringOperations(XFS.IsUnixPlatform());\n        pathVerifier = new PathVerifier(this);\n        this.files = new Dictionary<string, FileSystemEntry>(StringOperations.Comparer);\n        drives = new Dictionary<string, MockDriveData>(StringOperations.Comparer);\n\n        Path = new MockPath(this, defaultTempDirectory);\n        File = new MockFile(this);\n        Directory = new MockDirectory(this, currentDirectory);\n        FileInfo = new MockFileInfoFactory(this);\n        FileVersionInfo = new MockFileVersionInfoFactory(this);\n        FileStream = new MockFileStreamFactory(this);\n        DirectoryInfo = new MockDirectoryInfoFactory(this);\n        DriveInfo = new MockDriveInfoFactory(this);\n        FileSystemWatcher = new MockFileSystemWatcherFactory(this);\n\n        if (files != null)\n        {\n            foreach (var entry in files)\n            {\n                AddFile(entry.Key, entry.Value);\n            }\n        }\n\n        if (!FileExists(currentDirectory))\n        {\n            AddDirectory(currentDirectory);\n        }\n\n        if (options.CreateDefaultTempDir && !FileExists(defaultTempDirectory))\n        {\n            AddDirectory(defaultTempDirectory);\n        }\n    }\n\n    /// <inheritdoc />\n    public StringOperations StringOperations { get; }\n    /// <inheritdoc />\n    public override IFile File { get; }\n    /// <inheritdoc />\n    public override IDirectory Directory { get; }\n    /// <inheritdoc />\n    public override IFileInfoFactory FileInfo { get; }\n    /// <inheritdoc />\n    public override IFileVersionInfoFactory FileVersionInfo { get; }\n    /// <inheritdoc />\n    public override IFileStreamFactory FileStream { get; }\n    /// <inheritdoc />\n    public override IPath Path { get; }\n    /// <inheritdoc />\n    public override IDirectoryInfoFactory DirectoryInfo { get; }\n    /// <inheritdoc />\n    public override IDriveInfoFactory DriveInfo { get; }\n    /// <inheritdoc />\n    public override IFileSystemWatcherFactory FileSystemWatcher { get; }\n    /// <inheritdoc />\n    public IFileSystem FileSystem => this;\n    /// <inheritdoc />\n    public PathVerifier PathVerifier => pathVerifier;\n    /// <inheritdoc />\n    public FileHandles FileHandles => fileHandles;\n\n    /// <summary>\n    /// Replaces the time provider with a mocked instance. This allows to influence the used time in tests.\n    /// <para />\n    /// If not set, the default implementation returns <see cref=\"DateTime.Now\"/>.\n    /// </summary>\n    /// <param name=\"dateTimeProvider\">The function that returns the current <see cref=\"DateTime\"/>.</param>\n    /// <returns></returns>\n    public MockFileSystem MockTime(Func<DateTime> dateTimeProvider)\n    {\n        this.dateTimeProvider = dateTimeProvider ?? defaultDateTimeProvider;\n        return this;\n    }\n\n    //If C:\\foo exists, ensures that trying to save a file to \"C:\\FOO\\file.txt\" instead saves it to \"C:\\foo\\file.txt\".\n    private string GetPathWithCorrectDirectoryCapitalization(string fullPath)\n    {\n        string[] splitPath = fullPath.Split(Path.DirectorySeparatorChar);\n        string leftHalf = fullPath;\n        string rightHalf = \"\";\n\n        for (int i = splitPath.Length - 1; i > 1; i--)\n        {\n            rightHalf = i == splitPath.Length - 1 ? splitPath[i] : splitPath[i] + Path.DirectorySeparatorChar + rightHalf;\n            int lastSeparator = leftHalf.LastIndexOf(Path.DirectorySeparatorChar);\n            leftHalf = lastSeparator > 0 ? leftHalf.Substring(0, lastSeparator) : leftHalf;\n\n            if (DirectoryExistsWithoutFixingPath(leftHalf))\n            {\n                string baseDirectory;\n                lock (files)\n                {\n                    baseDirectory = files[leftHalf].Path;\n                }\n\n                return baseDirectory + Path.DirectorySeparatorChar + rightHalf;\n            }\n        }\n\n        return fullPath.TrimSlashes();\n    }\n\n    /// <inheritdoc />\n    public MockFileData AdjustTimes(MockFileData fileData, TimeAdjustments timeAdjustments)\n    {\n        var now = dateTimeProvider();\n        if (timeAdjustments.HasFlag(TimeAdjustments.CreationTime))\n        {\n            fileData.CreationTime = now;\n        }\n\n        if (timeAdjustments.HasFlag(TimeAdjustments.LastAccessTime))\n        {\n            fileData.LastAccessTime = now;\n        }\n\n        if (timeAdjustments.HasFlag(TimeAdjustments.LastWriteTime))\n        {\n            fileData.LastWriteTime = now;\n        }\n\n        return fileData;\n    }\n\n    /// <inheritdoc />\n    public MockFileData GetFile(string path)\n    {\n        path = pathVerifier.FixPath(path).TrimSlashes();\n        return GetFileWithoutFixingPath(path);\n    }\n\n    /// <inheritdoc />\n    public MockDriveData GetDrive(string name)\n    {\n        name = PathVerifier.NormalizeDriveName(name);\n        lock (drives)\n        {\n            return drives.TryGetValue(name, out var result) ? result : null;\n        }\n    }\n\n    private void SetEntry(string path, MockFileData mockFile)\n    {\n        path = GetPathWithCorrectDirectoryCapitalization(\n            pathVerifier.FixPath(path)\n        ).TrimSlashes();\n\n        lock (files)\n        {\n            files[path] = new FileSystemEntry { Path = path, Data = mockFile };\n        }\n\n        lock (drives)\n        {\n            if (PathVerifier.TryNormalizeDriveName(path, out string driveLetter))\n            {\n                if (!drives.ContainsKey(driveLetter))\n                {\n                    drives[driveLetter] = new MockDriveData();\n                }\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public void AddFile(string path, MockFileData mockFile, bool verifyAccess = true)\n    {\n        var fixedPath = GetPathWithCorrectDirectoryCapitalization(\n            pathVerifier.FixPath(path)\n        );\n\n        mockFile ??= new MockFileData(string.Empty);\n        var file = GetFile(fixedPath);\n\n        if (file != null)\n        {\n            var isReadOnly = (file.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;\n            var isHidden = (file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden;\n\n            if (verifyAccess && (isReadOnly || isHidden))\n            {\n                throw CommonExceptions.AccessDenied(path);\n            }\n            file.CheckFileAccess(fixedPath, FileAccess.Write);\n            mockFile.CreationTime = file.CreationTime;\n        }\n\n        var directoryPath = Path.GetDirectoryName(fixedPath);\n        if (directoryPath == null)\n        {\n            AddDrive(fixedPath, new MockDriveData());\n        }\n        else if (!DirectoryExistsWithoutFixingPath(directoryPath))\n        {\n            AddDirectory(directoryPath);\n        }\n\n        mockFile.FileVersionInfo ??= new MockFileVersionInfo(fixedPath);\n\n        SetEntry(fixedPath, mockFile);\n    }\n\n    /// <summary>\n    /// Add a new file that is empty.\n    /// </summary>\n    /// <param name=\"path\">A string representing the path of the new file to add.</param>\n    public void AddEmptyFile(string path)\n    {\n        AddFile(path, new MockFileData(\"\"));\n    }\n\n    /// <summary>\n    /// Add a new file that is empty.\n    /// </summary>\n    /// <param name=\"path\">An <see cref=\"IFileInfo\"/> representing the path of the new file to add.</param>\n    public void AddEmptyFile(IFileInfo path)\n    {\n        AddEmptyFile(path.FullName);\n        path.Refresh();\n    }\n\n    /// <summary>\n    /// Add a new, empty directory.\n    /// </summary>\n    /// <param name=\"path\">An <see cref=\"IDirectoryInfo\"/> representing the path of the new directory to add.</param>\n    public void AddDirectory(IDirectoryInfo path)\n    {\n        AddDirectory(path.FullName);\n        path.Refresh();\n    }\n\n    /// <summary>\n    /// Add a new file with its contents set to a specified <see cref=\"MockFileData\"/>.\n    /// </summary>\n    /// <param name=\"path\">An <see cref=\"IFileInfo\"/> representing the path of the new file to add.</param>\n    /// <param name=\"data\">The data to use for the contents of the new file.</param>\n    /// <param name=\"verifyAccess\">Flag indicating if the access conditions should be verified.</param>\n    public void AddFile(IFileInfo path, MockFileData data, bool verifyAccess = true)\n    {\n        AddFile(path.FullName, data, verifyAccess);\n        path.Refresh();\n    }\n\n    /// <summary>\n    /// Gets a file.\n    /// </summary>\n    /// <param name=\"path\">The path of the file to get.</param>\n    /// <returns>The file. <see langword=\"null\"/> if the file does not exist.</returns>\n    public MockFileData GetFile(IFileInfo path)\n    {\n        return GetFile(path.FullName);\n    }\n\n    /// <inheritdoc />\n    public void AddDirectory(string path)\n    {\n        var fixedPath = GetPathWithCorrectDirectoryCapitalization(\n            pathVerifier.FixPath(path)\n        );\n        var separator = Path.DirectorySeparatorChar.ToString();\n\n        if (FileExists(fixedPath) && FileIsReadOnly(fixedPath))\n        {\n            throw CommonExceptions.AccessDenied(fixedPath);\n        }\n        var lastIndex = 0;\n        var isUnc =\n            StringOperations.StartsWith(fixedPath, @\"\\\\\") ||\n            StringOperations.StartsWith(fixedPath, @\"//\");\n\n        if (isUnc)\n        {\n            //First, confirm they aren't trying to create '\\\\server\\'\n            lastIndex = StringOperations.IndexOf(fixedPath, separator, 2);\n\n            if (lastIndex < 0)\n            {\n                throw CommonExceptions.InvalidUncPath(nameof(path));\n            }\n\n            /*\n             * Although CreateDirectory(@\"\\\\server\\share\\\") is not going to work in real code, we allow it here for the purposes of setting up test doubles.\n             * See PR https://github.com/TestableIO/System.IO.Abstractions/pull/90 for conversation\n             */\n        }\n\n        while ((lastIndex = StringOperations.IndexOf(fixedPath, separator, lastIndex + 1)) > -1)\n        {\n            var segment = fixedPath.Substring(0, lastIndex + 1);\n            if (!DirectoryExistsWithoutFixingPath(segment))\n            {\n                SetEntry(segment, new MockDirectoryData());\n            }\n        }\n\n        var s = StringOperations.EndsWith(fixedPath, separator) ? fixedPath : fixedPath + separator;\n        SetEntry(s, new MockDirectoryData());\n    }\n\n    /// <inheritdoc />\n    public void AddFileFromEmbeddedResource(string path, Assembly resourceAssembly, string embeddedResourcePath)\n    {\n        using (var embeddedResourceStream = resourceAssembly.GetManifestResourceStream(embeddedResourcePath))\n        {\n            if (embeddedResourceStream == null)\n            {\n                throw new ArgumentException(\"Resource not found in assembly\", nameof(embeddedResourcePath));\n            }\n\n            using (var streamReader = new BinaryReader(embeddedResourceStream))\n            {\n                var fileData = streamReader.ReadBytes((int)embeddedResourceStream.Length);\n                AddFile(path, new MockFileData(fileData));\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssembly, string embeddedResourcePath)\n    {\n        var matchingResources = resourceAssembly.GetManifestResourceNames().Where(f => f.StartsWith(embeddedResourcePath));\n        foreach (var resource in matchingResources)\n        {\n            using (var embeddedResourceStream = resourceAssembly.GetManifestResourceStream(resource))\n            using (var streamReader = new BinaryReader(embeddedResourceStream))\n            {\n                var fileName = resource.Substring(embeddedResourcePath.Length + 1);\n                var fileData = streamReader.ReadBytes((int)embeddedResourceStream.Length);\n                var filePath = Path.Combine(path, fileName);\n                AddFile(filePath, new MockFileData(fileData));\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public void AddDrive(string name, MockDriveData mockDrive)\n    {\n        name = PathVerifier.NormalizeDriveName(name);\n        lock (drives)\n        {\n            drives[name] = mockDrive;\n        }\n    }\n\n    /// <inheritdoc />\n    public void MoveDirectory(string sourcePath, string destPath)\n    {\n        sourcePath = pathVerifier.FixPath(sourcePath);\n        destPath = pathVerifier.FixPath(destPath);\n\n        var sourcePathSequence = sourcePath.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);\n\n        lock (files)\n        {\n            var affectedPaths = files.Keys\n                .Where(p => PathStartsWith(p, sourcePathSequence))\n                .ToList();\n\n            foreach (var path in affectedPaths)\n            {\n                var newPath = Path.Combine(destPath, path.Substring(sourcePath.Length).TrimStart(Path.DirectorySeparatorChar));\n                var entry = files[path];\n                entry.Path = newPath;\n                files[newPath] = entry;\n                files.Remove(path);\n            }\n        }\n\n        bool PathStartsWith(string path, string[] minMatch)\n        {\n            var pathSequence = path.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries);\n            if (pathSequence.Length < minMatch.Length)\n            {\n                return false;\n            }\n\n            for (var i = 0; i < minMatch.Length; i++)\n            {\n                if (!StringOperations.Equals(minMatch[i], pathSequence[i]))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n    }\n\n    /// <inheritdoc />\n    public void RemoveFile(string path, bool verifyAccess = true)\n    {\n        path = pathVerifier.FixPath(path);\n\n        lock (files)\n        {\n            if (FileExists(path) && verifyAccess && (FileIsReadOnly(path) || Directory.Exists(path) && AnyFileIsReadOnly(path)))\n            {\n                throw CommonExceptions.AccessDenied(path);\n            }\n\n            files.Remove(path);\n        }\n    }\n\n    /// <inheritdoc />\n    public bool FileExists(string path)\n    {\n        if (string.IsNullOrEmpty(path))\n        {\n            return false;\n        }\n\n        path = pathVerifier.FixPath(path).TrimSlashes();\n\n        lock (files)\n        {\n            return files.ContainsKey(path);\n        }\n    }\n\n    /// <inheritdoc />\n    public IEnumerable<string> AllPaths\n    {\n        get\n        {\n            lock (files)\n            {\n                return files.Keys.ToArray();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public IEnumerable<string> AllNodes\n    {\n        get\n        {\n            lock (files)\n            {\n                return AllPaths.Where(path => !IsStartOfAnotherPath(path)).ToArray();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public IEnumerable<string> AllFiles\n    {\n        get\n        {\n            lock (files)\n            {\n                return files.Where(f => !f.Value.Data.IsDirectory).Select(f => f.Key).ToArray();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public IEnumerable<string> AllDirectories\n    {\n        get\n        {\n            lock (files)\n            {\n                return files.Where(f => f.Value.Data.IsDirectory).Select(f => f.Key).ToArray();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public IEnumerable<string> AllDrives\n    {\n        get\n        {\n            lock (drives)\n            {\n                return drives.Keys.ToArray();\n            }\n        }\n    }\n\n    [OnDeserializing]\n    private void OnDeserializing(StreamingContext c)\n    {\n        dateTimeProvider = defaultDateTimeProvider;\n    }\n\n    private bool AnyFileIsReadOnly(string path)\n    {\n        return Directory.GetFiles(path).Any(file => FileIsReadOnly(file));\n    }\n\n    private bool IsStartOfAnotherPath(string path)\n    {\n        return AllPaths.Any(otherPath => otherPath.StartsWith(path) && otherPath != path);\n    }\n\n    private MockFileData GetFileWithoutFixingPath(string path)\n    {\n        lock (files)\n        {\n            return files.TryGetValue(path, out var result) ? result.Data : null;\n        }\n    }\n\n    private bool DirectoryExistsWithoutFixingPath(string path)\n    {\n        lock (files)\n        {\n            return files.TryGetValue(path, out var result) && result.Data.IsDirectory;\n        }\n    }\n\n    private bool FileIsReadOnly(string path)\n    {\n        return (GetFile(path).Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;\n    }\n\n#if FEATURE_SERIALIZABLE\n    [Serializable]\n#endif\n    private class FileSystemEntry\n    {\n        public string Path { get; set; }\n        public MockFileData Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemOptions.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n///     Constructor options for <see cref=\"MockFileSystem\" />\n/// </summary>\npublic class MockFileSystemOptions\n{\n    /// <summary>\n    ///     The <see cref=\"Directory.GetCurrentDirectory()\" /> with which the <see cref=\"MockFileSystem\" /> is initialized.\n    /// </summary>\n    public string CurrentDirectory { get; init; } = \"\";\n\n    /// <summary>\n    /// Flag indicating, if a temporary directory should be created.\n    /// </summary>\n    public bool CreateDefaultTempDir { get; init; } = true;\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileSystemWatcherFactory.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileSystemWatcherFactory : IFileSystemWatcherFactory\n{\n\n    ///\n    public MockFileSystemWatcherFactory(MockFileSystem mockFileSystem)\n    {\n        FileSystem = mockFileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New()\n        => throw new NotImplementedException(StringResources.Manager.GetString(\"FILE_SYSTEM_WATCHER_NOT_IMPLEMENTED_EXCEPTION\"));\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New(string path)\n        => throw new NotImplementedException(StringResources.Manager.GetString(\"FILE_SYSTEM_WATCHER_NOT_IMPLEMENTED_EXCEPTION\"));\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New(string path, string filter)\n        => throw new NotImplementedException(StringResources.Manager.GetString(\"FILE_SYSTEM_WATCHER_NOT_IMPLEMENTED_EXCEPTION\"));\n\n    /// <inheritdoc />\n    public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)\n    {\n        if (fileSystemWatcher == null)\n        {\n            return null;\n        }\n\n        throw new NotImplementedException(StringResources.Manager.GetString(\"FILE_SYSTEM_WATCHER_NOT_IMPLEMENTED_EXCEPTION\"));\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfo.cs",
    "content": "﻿using System.Diagnostics;\nusing System.Text;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileVersionInfo : FileVersionInfoBase\n{\n    /// <inheritdoc />\n    public MockFileVersionInfo(\n        string fileName,\n        string fileVersion = null,\n        string productVersion = null,\n        string fileDescription = null,\n        string productName = null,\n        string companyName = null,\n        string comments = null,\n        string internalName = null,\n        bool isDebug = false,\n        bool isPatched = false,\n        bool isPrivateBuild = false,\n        bool isPreRelease = false,\n        bool isSpecialBuild = false,\n        string language = null,\n        string legalCopyright = null,\n        string legalTrademarks = null,\n        string originalFilename = null,\n        string privateBuild = null,\n        string specialBuild = null)\n    {\n        FileName = fileName;\n        FileVersion = fileVersion;\n        ProductVersion = productVersion;\n        FileDescription = fileDescription;\n        ProductName = productName;\n        CompanyName = companyName;\n        Comments = comments;\n        InternalName = internalName;\n        IsDebug = isDebug;\n        IsPatched = isPatched;\n        IsPrivateBuild = isPrivateBuild;\n        IsPreRelease = isPreRelease;\n        IsSpecialBuild = isSpecialBuild;\n        Language = language;\n        LegalCopyright = legalCopyright;\n        LegalTrademarks = legalTrademarks;\n        OriginalFilename = originalFilename;\n        PrivateBuild = privateBuild;\n        SpecialBuild = specialBuild;\n\n        if (Version.TryParse(fileVersion, out Version version))\n        {\n            FileMajorPart = version.Major;\n            FileMinorPart = version.Minor;\n            FileBuildPart = version.Build;\n            FilePrivatePart = version.Revision;\n        }\n\n        var parsedProductVersion = ProductVersionParser.Parse(productVersion);\n\n        ProductMajorPart = parsedProductVersion.Major;\n        ProductMinorPart = parsedProductVersion.Minor;\n        ProductBuildPart = parsedProductVersion.Build;\n        ProductPrivatePart = parsedProductVersion.PrivatePart;\n    }\n\n    /// <inheritdoc/>\n    public override string FileName { get; }\n\n    /// <inheritdoc/>\n    public override string FileVersion { get; }\n\n    /// <inheritdoc/>\n    public override string ProductVersion { get; }\n\n    /// <inheritdoc/>\n    public override string FileDescription { get; }\n\n    /// <inheritdoc/>\n    public override string ProductName { get; }\n\n    /// <inheritdoc/>\n    public override string CompanyName { get; }\n\n    /// <inheritdoc/>\n    public override string Comments { get; }\n\n    /// <inheritdoc/>\n    public override string InternalName { get; }\n\n    /// <inheritdoc/>\n    public override bool IsDebug { get; }\n\n    /// <inheritdoc/>\n    public override bool IsPatched { get; }\n\n    /// <inheritdoc/>\n    public override bool IsPrivateBuild { get; }\n\n    /// <inheritdoc/>\n    public override bool IsPreRelease { get; }\n\n    /// <inheritdoc/>\n    public override bool IsSpecialBuild { get; }\n\n    /// <inheritdoc/>\n    public override string Language { get; }\n\n    /// <inheritdoc/>\n    public override string LegalCopyright { get; }\n\n    /// <inheritdoc/>\n    public override string LegalTrademarks { get; }\n\n    /// <inheritdoc/>\n    public override string OriginalFilename { get; }\n\n    /// <inheritdoc/>\n    public override string PrivateBuild { get; }\n\n    /// <inheritdoc/>\n    public override string SpecialBuild { get; }\n\n    /// <inheritdoc/>\n    public override int FileMajorPart { get; }\n\n    /// <inheritdoc/>\n    public override int FileMinorPart { get; }\n\n    /// <inheritdoc/>\n    public override int FileBuildPart { get; }\n\n    /// <inheritdoc/>\n    public override int FilePrivatePart { get; }\n\n    /// <inheritdoc/>\n    public override int ProductMajorPart { get; }\n\n    /// <inheritdoc/>\n    public override int ProductMinorPart { get; }\n\n    /// <inheritdoc/>\n    public override int ProductBuildPart { get; }\n\n    /// <inheritdoc/>\n    public override int ProductPrivatePart { get; }\n\n    /// <inheritdoc cref=\"FileVersionInfo.ToString\" />\n    public override string ToString()\n    {\n        // An initial capacity of 512 was chosen because it is large enough to cover\n        // the size of the static strings with enough capacity left over to cover\n        // average length property values.\n        var sb = new StringBuilder(512);\n        sb.Append(\"File:             \").AppendLine(FileName);\n        sb.Append(\"InternalName:     \").AppendLine(InternalName);\n        sb.Append(\"OriginalFilename: \").AppendLine(OriginalFilename);\n        sb.Append(\"FileVersion:      \").AppendLine(FileVersion);\n        sb.Append(\"FileDescription:  \").AppendLine(FileDescription);\n        sb.Append(\"Product:          \").AppendLine(ProductName);\n        sb.Append(\"ProductVersion:   \").AppendLine(ProductVersion);\n        sb.Append(\"Debug:            \").AppendLine(IsDebug.ToString());\n        sb.Append(\"Patched:          \").AppendLine(IsPatched.ToString());\n        sb.Append(\"PreRelease:       \").AppendLine(IsPreRelease.ToString());\n        sb.Append(\"PrivateBuild:     \").AppendLine(IsPrivateBuild.ToString());\n        sb.Append(\"SpecialBuild:     \").AppendLine(IsSpecialBuild.ToString());\n        sb.Append(\"Language:         \").AppendLine(Language);\n        return sb.ToString();\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileVersionInfoFactory.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockFileVersionInfoFactory : IFileVersionInfoFactory\n{\n    private readonly IMockFileDataAccessor mockFileSystem;\n\n    /// <inheritdoc />\n    public MockFileVersionInfoFactory(IMockFileDataAccessor mockFileSystem)\n    {\n        this.mockFileSystem = mockFileSystem ?? throw new ArgumentNullException(nameof(mockFileSystem));\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem => mockFileSystem;\n\n    /// <inheritdoc />\n    public IFileVersionInfo GetVersionInfo(string fileName)\n    {\n        MockFileData mockFileData = mockFileSystem.GetFile(fileName);\n\n        if (mockFileData != null)\n        {\n            return mockFileData.FileVersionInfo;\n        }\n\n        throw CommonExceptions.FileNotFound(fileName);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockPath.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// PathWrapper calls direct to Path but all this does is string manipulation so we can inherit directly from PathWrapper as no IO is done\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class MockPath : PathWrapper\n{\n    private readonly IMockFileDataAccessor mockFileDataAccessor;\n    private readonly string defaultTempDirectory;\n\n    /// <inheritdoc />\n    public MockPath(IMockFileDataAccessor mockFileDataAccessor) : this(mockFileDataAccessor, string.Empty) { }\n\n    /// <inheritdoc />\n    public MockPath(IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) : base(mockFileDataAccessor?.FileSystem)\n    {\n        this.mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n        this.defaultTempDirectory = !string.IsNullOrEmpty(defaultTempDirectory) ? defaultTempDirectory : base.GetTempPath();\n    }\n\n#if FEATURE_PATH_EXISTS\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        return mockFileDataAccessor.FileExists(path);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string GetFullPath(string path)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path), StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n\n        if (string.IsNullOrWhiteSpace(path))\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(nameof(path));\n        }\n\n        path = path.Replace(AltDirectorySeparatorChar, DirectorySeparatorChar);\n\n        bool isUnc =\n            mockFileDataAccessor.StringOperations.StartsWith(path, @\"\\\\\") ||\n            mockFileDataAccessor.StringOperations.StartsWith(path, @\"//\");\n\n        string root = GetPathRoot(path);\n\n        bool hasTrailingSlash = path.Length > 1 && path[path.Length - 1] == DirectorySeparatorChar;\n\n        string[] pathSegments;\n\n        if (root.Length == 0)\n        {\n            // relative path on the current drive or volume\n            path = mockFileDataAccessor.Directory.GetCurrentDirectory() + DirectorySeparatorChar + path;\n            pathSegments = GetSegments(path);\n        }\n        else if (isUnc)\n        {\n            // unc path\n            pathSegments = GetSegments(path);\n            if (pathSegments.Length < 2)\n            {\n                throw CommonExceptions.InvalidUncPath(nameof(path));\n            }\n        }\n        else if (mockFileDataAccessor.StringOperations.Equals(@\"\\\", root) ||\n                 mockFileDataAccessor.StringOperations.Equals(@\"/\", root))\n        {\n            // absolute path on the current drive or volume\n            pathSegments = GetSegments(GetPathRoot(mockFileDataAccessor.Directory.GetCurrentDirectory()), path);\n        }\n        else\n        {\n            pathSegments = GetSegments(path);\n        }\n\n        // unc paths need at least two segments, the others need one segment\n        var isUnixRooted = mockFileDataAccessor.StringOperations.StartsWith(\n            mockFileDataAccessor.Directory.GetCurrentDirectory(),\n            \"/\");\n\n        var minPathSegments = isUnc\n            ? 2\n            : isUnixRooted ? 0 : 1;\n\n        var stack = new Stack<string>();\n        foreach (var segment in pathSegments)\n        {\n            if (mockFileDataAccessor.StringOperations.Equals(\"..\", segment))\n            {\n                // only pop, if afterwards are at least the minimal amount of path segments\n                if (stack.Count > minPathSegments)\n                {\n                    stack.Pop();\n                }\n            }\n            else if (mockFileDataAccessor.StringOperations.Equals(\".\", segment))\n            {\n                // ignore .\n            }\n            else\n            {\n                stack.Push(segment);\n            }\n        }\n\n        var fullPath = string.Join(string.Format(CultureInfo.InvariantCulture, \"{0}\", DirectorySeparatorChar), stack.Reverse().ToArray());\n\n        if (hasTrailingSlash)\n        {\n            fullPath += DirectorySeparatorChar;\n        }\n\n        if (isUnixRooted && !isUnc)\n        {\n            fullPath = \"/\" + fullPath;\n        }\n        else if (isUnixRooted)\n        {\n            fullPath = @\"//\" + fullPath;\n        }\n        else if (isUnc)\n        {\n            fullPath = @\"\\\\\" + fullPath;\n        }\n\n        return fullPath;\n    }\n\n    private string[] GetSegments(params string[] paths)\n    {\n        return paths.SelectMany(path => path.Split(new[] { DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries)).ToArray();\n    }\n\n    /// <inheritdoc />\n    public override string GetTempFileName()\n    {\n        string fileName = mockFileDataAccessor.Path.GetRandomFileName();\n        string tempDir = this.GetTempPath();\n\n        string fullPath = mockFileDataAccessor.Path.Combine(tempDir, fileName);\n\n        mockFileDataAccessor.AddFile(fullPath, new MockFileData(string.Empty));\n\n        return fullPath;\n    }\n\n    /// <inheritdoc />\n    public override string GetTempPath() => defaultTempDirectory;\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public override string GetRelativePath(string relativeTo, string path)\n    {\n        if (relativeTo == null)\n        {\n            throw new ArgumentNullException(nameof(relativeTo), StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n\n        if (string.IsNullOrWhiteSpace(relativeTo))\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(nameof(relativeTo));\n        }\n\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path), StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n\n        if (path.Length == 0)\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(nameof(path));\n        }\n\n        relativeTo = GetFullPath(relativeTo);\n        path = GetFullPath(path);\n\n        return Path.GetRelativePath(relativeTo, path);\n    }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/MockUnixSupport.cs",
    "content": "﻿using System.Text.RegularExpressions;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides helper methods for handling paths in a portable way.\n/// </summary>\npublic static class MockUnixSupport\n{\n    private static readonly Regex pathTransform = new Regex(@\"^[a-zA-Z]:(?<path>.*)$\");\n\n    /// <summary>\n    /// Normalizes the given path so that it works on all platfoms.\n    /// </summary>\n    public static string Path(string path) => path != null && IsUnixPlatform()\n        ? pathTransform.Replace(path, \"${path}\").Replace(@\"\\\", \"/\")\n        : path;\n\n    /// <summary>\n    /// Determines whether the current runtime platform is Unix.\n    /// </summary>\n    public static bool IsUnixPlatform() => IO.Path.DirectorySeparatorChar == '/';\n\n    /// <summary>\n    /// Determines whether the current runtime platform is Windows.\n    /// </summary>\n    public static bool IsWindowsPlatform() => IO.Path.DirectorySeparatorChar == '\\\\';\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/PathVerifier.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\n/// <summary>\n/// Provides helper methods for verifying paths.\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class PathVerifier\n{\n    private static readonly char[] AdditionalInvalidPathChars = { '*', '?' };\n    private readonly IMockFileDataAccessor _mockFileDataAccessor;\n\n    // Windows supports extended-length paths with a `\\\\?\\` prefix, to work around low path length limits.\n    // Ref: https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry\n    private const string WINDOWS_EXTENDED_LENGTH_PATH_PREFIX = @\"\\\\?\\\";\n\n    /// <summary>\n    /// Creates a new verifier instance.\n    /// </summary>\n    public PathVerifier(IMockFileDataAccessor mockFileDataAccessor)\n    {\n        _mockFileDataAccessor = mockFileDataAccessor ?? throw new ArgumentNullException(nameof(mockFileDataAccessor));\n    }\n\n    /// <summary>\n    /// Determines whether the given path is legal.\n    /// </summary>\n    public void IsLegalAbsoluteOrRelative(string path, string paramName)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(paramName, StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n\n        if (path == string.Empty)\n        {\n            throw new ArgumentException(\"Empty file name is not legal.\", paramName);\n        }\n\n        if (path.Trim() == string.Empty)\n        {\n            throw CommonExceptions.PathIsNotOfALegalForm(paramName);\n        }\n\n        if (XFS.IsWindowsPlatform() && !IsValidUseOfVolumeSeparatorChar(path))\n        {\n\n            throw CommonExceptions.InvalidUseOfVolumeSeparator();\n        }\n\n        if (ExtractFileName(path).IndexOfAny(_mockFileDataAccessor.Path.GetInvalidFileNameChars()) > -1)\n        {\n            throw CommonExceptions.IllegalCharactersInPath();\n        }\n\n        var filePath = ExtractFilePath(path);\n\n        if (HasIllegalCharacters(filePath, checkAdditional: false))\n        {\n            throw CommonExceptions.IllegalCharactersInPath();\n        }\n    }\n\n    private static bool IsValidUseOfVolumeSeparatorChar(string path)\n    {\n        if (XFS.IsWindowsPlatform() && path.StartsWith(WINDOWS_EXTENDED_LENGTH_PATH_PREFIX))\n        {\n            // Skip over the `\\\\?\\` prefix if there is one.\n            path = path.Substring(WINDOWS_EXTENDED_LENGTH_PATH_PREFIX.Length);\n        }\n\n        var lastVolSepIndex = path.LastIndexOf(Path.VolumeSeparatorChar);\n        return lastVolSepIndex == -1 || lastVolSepIndex == 1 && char.IsLetter(path[0]);\n    }\n\n    private string ExtractFileName(string fullFileName)\n    {\n        return fullFileName.Split(\n            _mockFileDataAccessor.Path.DirectorySeparatorChar,\n            _mockFileDataAccessor.Path.AltDirectorySeparatorChar).Last();\n    }\n\n    private string ExtractFilePath(string fullFileName)\n    {\n        var extractFilePath = fullFileName.Split(\n            _mockFileDataAccessor.Path.DirectorySeparatorChar,\n            _mockFileDataAccessor.Path.AltDirectorySeparatorChar);\n        return string.Join(_mockFileDataAccessor.Path.DirectorySeparatorChar.ToString(), extractFilePath.Take(extractFilePath.Length - 1));\n    }\n\n    /// <summary>\n    /// Determines whether the given path contains illegal characters.\n    /// </summary>\n    public bool HasIllegalCharacters(string path, bool checkAdditional)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path));\n        }\n\n        var invalidPathChars = _mockFileDataAccessor.Path.GetInvalidPathChars();\n\n        if (checkAdditional)\n        {\n            // AdditionalInvalidPathChars includes '?', but this character is allowed in extended-length\n            // windows path prefixes (`\\\\?\\`). If we're dealing with such a path, check for invalid\n            // characters after the prefix.\n            if (XFS.IsWindowsPlatform() && path.StartsWith(WINDOWS_EXTENDED_LENGTH_PATH_PREFIX))\n            {\n                path = path.Substring(WINDOWS_EXTENDED_LENGTH_PATH_PREFIX.Length);\n            }\n\n            return path.IndexOfAny(invalidPathChars.Concat(AdditionalInvalidPathChars).ToArray()) >= 0;\n        }\n\n        return path.IndexOfAny(invalidPathChars) >= 0;\n    }\n\n    /// <summary>\n    /// Throws an excpetion if the given path contains invalid characters.\n    /// </summary>\n    public void CheckInvalidPathChars(string path, bool checkAdditional = false)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path));\n        }\n\n        if (HasIllegalCharacters(path, checkAdditional))\n        {\n            throw CommonExceptions.IllegalCharactersInPath();\n        }\n    }\n\n    /// <summary>\n    /// Determines the normalized drive name used for drive identification.\n    /// </summary>\n    /// <exception cref=\"ArgumentException\">Thrown if the <paramref name=\"name\"/> is not a valid drive name.</exception>\n    public string NormalizeDriveName(string name)\n    {\n        return TryNormalizeDriveName(name, out var result)\n            ? result\n            : throw new ArgumentException(\n                @\"Object must be a root directory (\"\"C:\\\"\") or a drive letter (\"\"C\"\").\");\n    }\n\n    /// <summary>\n    /// Tries to determine the normalized drive name used for drive identification.\n    /// </summary>\n    public bool TryNormalizeDriveName(string name, out string result)\n    {\n        if (name == null)\n        {\n            throw new ArgumentNullException(nameof(name));\n        }\n\n        const string DRIVE_SEPARATOR = @\":\\\";\n\n        if (name.Length == 1\n            || (name.Length == 2 && name[1] == ':')\n            || (name.Length == 3 && _mockFileDataAccessor.StringOperations.EndsWith(name, DRIVE_SEPARATOR)))\n        {\n            name = name[0] + DRIVE_SEPARATOR;\n        }\n        else\n        {\n            CheckInvalidPathChars(name);\n            name = _mockFileDataAccessor.Path.GetPathRoot(name);\n\n            if (string.IsNullOrEmpty(name) || _mockFileDataAccessor.StringOperations.StartsWith(name, @\"\\\\\"))\n            {\n                result = null;\n                return false;\n            }\n        }\n\n        result = name;\n        return true;\n    }\n\n    /// <summary>\n    /// Resolves and normalizes a path.\n    /// </summary>\n    internal string FixPath(string path)\n    {\n        if (path == null)\n        {\n            throw new ArgumentNullException(nameof(path), StringResources.Manager.GetString(\"VALUE_CANNOT_BE_NULL\"));\n        }\n\n        var pathSeparatorFixed = path.Replace(\n            _mockFileDataAccessor.Path.AltDirectorySeparatorChar,\n            _mockFileDataAccessor.Path.DirectorySeparatorChar\n        );\n        var fullPath = _mockFileDataAccessor.Path.GetFullPath(pathSeparatorFixed);\n\n        return fullPath;\n    }\n}\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/Polyfills/SupportedOSPlatformAttribute.cs",
    "content": "#if !FEATURE_SUPPORTED_OS_ATTRIBUTE\nnamespace System.Runtime.Versioning\n{\n    [AttributeUsage(AttributeTargets.All)]\n    internal class SupportedOSPlatformAttribute : Attribute\n    {\n        public SupportedOSPlatformAttribute(string _)\n        {\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/ProductVersionParser.cs",
    "content": "﻿using System.Reflection;\nusing System.Text.RegularExpressions;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides functionality to parse a product version string into its major, minor, build, and private parts.\n/// </summary>\ninternal static class ProductVersionParser\n{\n    /// <summary>\n    /// Parses a product version string and extracts the numeric values for the major, minor, build, and private parts,\n    /// mimicking the behavior of the <see cref=\"AssemblyInformationalVersionAttribute\"/> attribute.\n    /// </summary>\n    /// <param name=\"productVersion\">The product version string to parse.</param>\n    /// <returns>\n    /// A <see cref=\"ProductVersion\"/> object containing the parsed major, minor, build, and private parts. \n    /// If the input is invalid, returns a <see cref=\"ProductVersion\"/> with all parts set to 0.\n    /// </returns>\n    /// <remarks>\n    /// The method splits the input string into segments separated by dots ('.') and attempts to extract\n    /// the leading numeric value from each segment. A maximum of 4 segments are processed; if more than\n    /// 4 segments are present, all segments are ignored. Additionally, if a segment does not contain \n    /// a valid numeric part at its start or it contains more than just a number, the rest of the segments are ignored.\n    /// </remarks>\n    public static ProductVersion Parse(string productVersion)\n    {\n        if (string.IsNullOrWhiteSpace(productVersion))\n        {\n            return new();\n        }\n\n        var segments = productVersion.Split('.');\n        if (segments.Length > 4)\n        {\n            // if more than 4 segments are present, all segments are ignored\n            return new();\n        }\n\n        var regex = new Regex(@\"^\\d+\");\n\n        int[] parts = new int[4];\n\n        for (int i = 0; i < segments.Length; i++)\n        {\n            var match = regex.Match(segments[i]);\n            if (match.Success && int.TryParse(match.Value, out int number))\n            {\n                parts[i] = number;\n\n                if (match.Value != segments[i])\n                {\n                    // when a segment contains more than a number, the rest of the segments are ignored\n                    break;\n                }\n            }\n            else\n            {\n                // when a segment is not valid, the rest of the segments are ignored\n                break;\n            }\n        }\n\n        return new()\n        {\n            Major = parts[0],\n            Minor = parts[1],\n            Build = parts[2],\n            PrivatePart = parts[3]\n        };\n    }\n\n    /// <summary>\n    /// Represents a product version with numeric parts for major, minor, build, and private versions.\n    /// </summary>\n    public class ProductVersion\n    {\n        /// <summary>\n        /// Gets the major part of the version number\n        /// </summary>\n        public int Major { get; init; }\n\n        /// <summary>\n        /// Gets the minor part of the version number\n        /// </summary>\n        public int Minor { get; init; }\n\n        /// <summary>\n        /// Gets the build part of the version number\n        /// </summary>\n        public int Build { get; init; }\n\n        /// <summary>\n        /// Gets the private part of the version number\n        /// </summary>\n        public int PrivatePart { get; init; }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ACCESS_TO_THE_PATH_IS_DENIED\" xml:space=\"preserve\">\n    <value>Access to the path '{0}' is denied.</value>\n  </data>\n  <data name=\"COULD_NOT_FIND_PART_OF_PATH_EXCEPTION\" xml:space=\"preserve\">\n    <value>Could not find a part of the path '{0}'.</value>\n  </data>\n  <data name=\"ILLEGAL_CHARACTERS_IN_PATH_EXCEPTION\" xml:space=\"preserve\">\n    <value>Illegal characters in path.</value>\n  </data>\n  <data name=\"NOT_IMPLEMENTED_EXCEPTION\" xml:space=\"preserve\">\n    <value>This test helper hasn't been implemented yet. They are implemented on an as-needed basis. As it seems like you need it, now would be a great time to send us a pull request over at https://github.com/TestableIO/System.IO.Abstractions. You know, because it's open source and all.</value>\n  </data>\n  <data name=\"THE_PATH_IS_NOT_OF_A_LEGAL_FORM\" xml:space=\"preserve\">\n    <value>The path is not of a legal form.</value>\n  </data>\n  <data name=\"VALUE_CANNOT_BE_NULL\" xml:space=\"preserve\">\n    <value>Value cannot be null.</value>\n  </data>\n  <data name=\"PATH_CANNOT_BE_THE_EMPTY_STRING_OR_ALL_WHITESPACE\" xml:space=\"preserve\">\n    <value>Path cannot be the empty string or all whitespace.</value>\n  </data>\n  <data name=\"FILENAME_CANNOT_BE_NULL\" xml:space=\"preserve\">\n    <value>File name cannot be null.</value>\n  </data>\n  <data name=\"COULD_NOT_FIND_FILE_EXCEPTION\" xml:space=\"preserve\">\n    <value>Could not find file '{0}'.</value>\n  </data>\n  <data name=\"FILE_SYSTEM_WATCHER_NOT_IMPLEMENTED_EXCEPTION\" xml:space=\"preserve\">\n    <value>MockFileSystem does not have a built-in FileSystemWatcher implementation. You must provide your own mock or implementation of IFileSystemWatcherFactory and assign it to MockFileSystem.FileSystemWatcher.</value>\n  </data>\n  <data name=\"PROCESS_CANNOT_ACCESS_FILE_IN_USE\" xml:space=\"preserve\">\n    <value>The process cannot access the file because it is being used by another process.</value>\n  </data>\n  <data name=\"PROCESS_CANNOT_ACCESS_FILE_IN_USE_WITH_FILENAME\" xml:space=\"preserve\">\n    <value>The process cannot access the file '{0}' because it is being used by another process.</value>\n  </data>\n  <data name=\"FILE_ALREADY_EXISTS\" xml:space=\"preserve\">\n    <value>The file '{0}' already exists.</value>\n  </data>\n  <data name=\"APPEND_ACCESS_ONLY_IN_WRITE_ONLY_MODE\" xml:space=\"preserve\">\n    <value>Append access can be requested only in write-only mode.</value>\n  </data>\n  <data name=\"INVALID_ACCESS_COMBINATION\" xml:space=\"preserve\">\n    <value>Combining FileMode: {0} with FileAccess: {1} is invalid.</value>\n  </data>\n  <data name=\"CANNOT_CREATE_BECAUSE_SAME_NAME_ALREADY_EXISTS\" xml:space=\"preserve\">\n    <value>Cannot create '{0}' because a file or directory with the same name already exists.</value>\n  </data>\n  <data name=\"NAME_CANNOT_BE_RESOLVED_BY_THE_SYSTEM\" xml:space=\"preserve\">\n    <value>The name of the file cannot be resolved by the system. : '{0}'</value>\n  </data>\n  <data name=\"PATH_DOES_NOT_EXIST_OR_COULD_NOT_BE_FOUND\" xml:space=\"preserve\">\n    <value>'{0}' does not exist or could not be found.</value>\n  </data>\n</root>"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Diagnostics.Contracts;\nusing System.Linq;\nusing System.Text;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\nusing XFS = MockUnixSupport;\n\ninternal static class StringExtensions\n{\n    [Pure]\n    public static string[] SplitLines(this string input)\n    {\n        var list = new List<string>();\n        using (var reader = new StringReader(input))\n        {\n            string str;\n            while ((str = reader.ReadLine()) != null)\n            {\n                list.Add(str);\n            }\n        }\n\n        return list.ToArray();\n    }\n\n    [Pure]\n    public static string Replace(this string source, string oldValue, string newValue, StringComparison comparisonType)\n    {\n        // from http://stackoverflow.com/a/22565605 with some adaptions\n        if (string.IsNullOrEmpty(oldValue))\n        {\n            throw new ArgumentNullException(nameof(oldValue));\n        }\n\n        if (source.Length == 0)\n        {\n            return source;\n        }\n\n        if (newValue == null)\n        {\n            newValue = string.Empty;\n        }\n\n        var result = new StringBuilder();\n        int startingPos = 0;\n        int nextMatch;\n        while ((nextMatch = source.IndexOf(oldValue, startingPos, comparisonType)) > -1)\n        {\n            result.Append(source, startingPos, nextMatch - startingPos);\n            result.Append(newValue);\n            startingPos = nextMatch + oldValue.Length;\n        }\n\n        result.Append(source, startingPos, source.Length - startingPos);\n\n        return result.ToString();\n    }\n\n    [Pure]\n    public static string TrimSlashes(this string path)\n    {\n        if (string.IsNullOrEmpty(path))\n        {\n            return path;\n        }\n\n        var trimmed = path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n\n        if (XFS.IsUnixPlatform()\n            && (path[0] == Path.DirectorySeparatorChar || path[0] == Path.AltDirectorySeparatorChar)\n            && trimmed == \"\")\n        {\n            return Path.DirectorySeparatorChar.ToString();\n        }\n\n        if (XFS.IsWindowsPlatform()\n            && trimmed.Length == 2\n            && char.IsLetter(trimmed[0])\n            && trimmed[1] == ':')\n        {\n            return trimmed + Path.DirectorySeparatorChar;\n        }\n\n        return trimmed;\n    }\n\n    [Pure]\n    public static string NormalizeSlashes(this string path)\n    {\n        path = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);\n        var sep = Path.DirectorySeparatorChar.ToString();\n        var doubleSep = sep + sep;\n\n        var prefixSeps = new string(path.TakeWhile(c => c == Path.DirectorySeparatorChar).ToArray());\n        path = path.Substring(prefixSeps.Length);\n\n        // UNC Paths start with double slash but no reason\n        // to have more than 2 slashes at the start of a path\n        if (XFS.IsWindowsPlatform() && prefixSeps.Length >= 2)\n        {\n            prefixSeps = prefixSeps.Substring(0, 2);\n        }\n        else if (prefixSeps.Length > 1)\n        {\n            prefixSeps = prefixSeps.Substring(0, 1);\n        }\n\n        while (true)\n        {\n            var newPath = path.Replace(doubleSep, sep);\n\n            if (path == newPath)\n            {\n                return prefixSeps + path;\n            }\n\n            path = newPath;\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringOperations.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Provides operations against path strings dependeing on the case-senstivity of the runtime platform.\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class StringOperations\n{\n    private readonly bool caseSensitive;\n    private readonly StringComparison comparison;\n\n    /// <summary>\n    /// Creates a new instance.\n    /// </summary>\n    public StringOperations(bool caseSensitive)\n    {\n        this.caseSensitive = caseSensitive;\n        comparison = caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;\n    }\n\n    /// <summary>\n    /// Provides a string comparer.\n    /// </summary>\n    public StringComparer Comparer => caseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase;\n    /// <summary>\n    /// Determines whether the given string starts with the given prefix.\n    /// </summary>\n    public bool StartsWith(string s, string prefix) => s.StartsWith(prefix, comparison);\n    /// <summary>\n    /// Determines whether the given string ends with the given suffix.\n    /// </summary>\n    public bool EndsWith(string s, string suffix) => s.EndsWith(suffix, comparison);\n    /// <summary>\n    /// Determines whether the given strings are equal.\n    /// </summary>\n    public bool Equals(string x, string y) => string.Equals(x, y, comparison);\n    /// <summary>\n    /// Determines whether the given characters are equal.\n    /// </summary>\n    public bool Equals(char x, char y) => caseSensitive ? x == y : char.ToUpper(x) == char.ToUpper(y);\n    /// <summary>\n    /// Determines the index of the given substring in the string.\n    /// </summary>\n    public int IndexOf(string s, string substring) => s.IndexOf(substring, comparison);\n    /// <summary>\n    /// Determines the index of the given substring in the string.\n    /// </summary>\n    public int IndexOf(string s, string substring, int startIndex) => s.IndexOf(substring, startIndex, comparison);\n    /// <summary>\n    /// Determines whether the given string contains the given substring.\n    /// </summary>\n    public bool Contains(string s, string substring) => s.IndexOf(substring, comparison) >= 0;\n    /// <summary>\n    /// Replaces a given value by a new value.\n    /// </summary>\n    public string Replace(string s, string oldValue, string newValue) => s.Replace(oldValue, newValue, comparison);\n    /// <summary>\n    /// Provides the lower-case representation of the given character.\n    /// </summary>\n    public char ToLower(char c) => caseSensitive ? c : char.ToLower(c);\n    /// <summary>\n    /// Provides the upper-case representation of the given character.\n    /// </summary>\n    public char ToUpper(char c) => caseSensitive ? c : char.ToUpper(c);\n    /// <summary>\n    /// Provides the lower-case representation of the given string.\n    /// </summary>\n    public string ToLower(string s) => caseSensitive ? s : s.ToLower();\n    /// <summary>\n    /// Provides the upper-case representation of the given string.\n    /// </summary>\n    public string ToUpper(string s) => caseSensitive ? s : s.ToUpper();\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/StringResources.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\n\nnamespace System.IO.Abstractions.TestingHelpers;\n\ninternal static class StringResources\n{\n    public static ResourceManager Manager { get; } = new ResourceManager(\n        $\"{typeof(StringResources).Namespace}.Properties.Resources\",\n        typeof(StringResources).GetTypeInfo().Assembly);\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions.TestingHelpers</AssemblyName>\n        <RootNamespace>System.IO.Abstractions.TestingHelpers</RootNamespace>\n        <Description>A set of pre-built mocks to help when testing file system interactions.</Description>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"Testably.Abstractions.FileSystem.Interface\"/>\n        <ProjectReference Include=\"../TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj\"/>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.TestingHelpers/TimeAdjustments.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers;\n\n/// <summary>\n/// Flags indicating which times to adjust for a <see cref=\"MockFileData\"/>.\n/// </summary>\n[Flags]\npublic enum TimeAdjustments\n{\n    /// <summary>\n    /// Adjusts no times on the <see cref=\"MockFileData\"/>\n    /// </summary>\n    None = 0,\n    /// <summary>\n    /// Adjusts the <see cref=\"MockFileData.CreationTime\"/>\n    /// </summary>\n    CreationTime = 1 << 0,\n    /// <summary>\n    /// Adjusts the <see cref=\"MockFileData.LastAccessTime\"/>\n    /// </summary>\n    LastAccessTime = 1 << 1,\n    /// <summary>\n    /// Adjusts the <see cref=\"MockFileData.LastWriteTime\"/>\n    /// </summary>\n    LastWriteTime = 1 << 2,\n    /// <summary>\n    /// Adjusts all times on the <see cref=\"MockFileData\"/>\n    /// </summary>\n    All = ~0\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/Converters.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace System.IO.Abstractions;\n\ninternal static class Converters\n{\n    internal static IEnumerable<FileSystemInfoBase> WrapFileSystemInfos(this IEnumerable<FileSystemInfo> input, IFileSystem fileSystem)\n        => input.Select(info => WrapFileSystemInfo(fileSystem, info));\n\n    internal static FileSystemInfoBase[] WrapFileSystemInfos(this FileSystemInfo[] input, IFileSystem fileSystem)\n        => input.Select(info => WrapFileSystemInfo(fileSystem, info)).ToArray();\n\n    internal static FileSystemInfoBase WrapFileSystemInfo(this FileSystemInfo input, IFileSystem fileSystem)\n        => WrapFileSystemInfo(fileSystem, input);\n\n    internal static IEnumerable<DirectoryInfoBase> WrapDirectories(this IEnumerable<DirectoryInfo> input, IFileSystem fileSystem)\n        => input.Select(info => WrapDirectoryInfo(fileSystem, info));\n\n    internal static DirectoryInfoBase[] WrapDirectories(this DirectoryInfo[] input, IFileSystem fileSystem)\n        => input.Select(info => WrapDirectoryInfo(fileSystem, info)).ToArray();\n\n    internal static IEnumerable<FileInfoBase> WrapFiles(this IEnumerable<FileInfo> input, IFileSystem fileSystem)\n        => input.Select(info => WrapFileInfo(fileSystem, info));\n\n    internal static FileInfoBase[] WrapFiles(this FileInfo[] input, IFileSystem fileSystem)\n        => input.Select(info => WrapFileInfo(fileSystem, info)).ToArray();\n\n    private static FileSystemInfoBase WrapFileSystemInfo(IFileSystem fileSystem, FileSystemInfo item)\n    {\n        if (item is null)\n        {\n            return null;\n        }\n\n        if (item is FileInfo fileInfo)\n        {\n            return WrapFileInfo(fileSystem, fileInfo);\n        }\n        else if (item is DirectoryInfo directoryInfo)\n        {\n            return WrapDirectoryInfo(fileSystem, directoryInfo);\n        }\n        else\n        {\n            throw new NotImplementedException(string.Format(\n                CultureInfo.InvariantCulture,\n                \"The type {0} is not recognized by the System.IO.Abstractions library.\",\n                item.GetType().AssemblyQualifiedName\n            ));\n        }\n    }\n\n    private static FileInfoBase WrapFileInfo(IFileSystem fileSystem, FileInfo f)\n        => f is null ? null : new FileInfoWrapper(fileSystem, f);\n\n    private static DirectoryInfoBase WrapDirectoryInfo(IFileSystem fileSystem, DirectoryInfo d)\n        => d is null ? null : new DirectoryInfoWrapper(fileSystem, d);\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryAclExtensions.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n///     ACL (access control list) extension methods for <see cref=\"IDirectory\" />.\n/// </summary>\npublic static class DirectoryAclExtensions\n{\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"System.IO.FileSystemAclExtensions.CreateDirectory(DirectorySecurity, string)\" />\n#else\n        /// <inheritdoc cref=\"Directory.CreateDirectory(string, DirectorySecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void CreateDirectory(this IDirectory directory,\n        string path,\n        DirectorySecurity directorySecurity)\n    {\n        IDirectoryInfo directoryInfo = directory.FileSystem.DirectoryInfo.New(path);\n        directoryInfo.Create(directorySecurity);\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(DirectoryInfo)\"/>\n#else\n        /// <inheritdoc cref=\"Directory.GetAccessControl(string)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static DirectorySecurity GetAccessControl(\n        this IDirectory directory, string path)\n    {\n        IDirectoryInfo directoryInfo = directory.FileSystem.DirectoryInfo.New(path);\n        return directoryInfo.GetAccessControl();\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(DirectoryInfo)\"/>\n#else\n        /// <inheritdoc cref=\"Directory.GetAccessControl(string, AccessControlSections)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static DirectorySecurity GetAccessControl(\n        this IDirectory directory,\n        string path,\n        AccessControlSections includeSections)\n    {\n        IDirectoryInfo directoryInfo = directory.FileSystem.DirectoryInfo.New(path);\n        return directoryInfo.GetAccessControl(includeSections);\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.SetAccessControl(DirectoryInfo, DirectorySecurity)\"/>\n#else\n        /// <inheritdoc cref=\"Directory.SetAccessControl(string, DirectorySecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void SetAccessControl(this IDirectory directory,\n        string path,\n        DirectorySecurity directorySecurity)\n    {\n        IDirectoryInfo directoryInfo = directory.FileSystem.DirectoryInfo.New(path);\n        directoryInfo.SetAccessControl(directorySecurity);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryBase.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"Directory\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class DirectoryBase : IDirectory\n{\n    /// <summary>\n    /// Base class for calling static methods of <see cref=\"Directory\"/>\n    /// </summary>\n    protected DirectoryBase(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem;\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal DirectoryBase() { }\n\n    /// <summary>\n    /// Exposes the underlying filesystem implementation. This is useful for implementing extension methods.\n    /// </summary>\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc cref=\"IDirectory.CreateDirectory(string)\"/>\n    public abstract IDirectoryInfo CreateDirectory(string path);\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc cref=\"IDirectory.CreateDirectory(string, UnixFileMode)\"/>\n        public abstract IDirectoryInfo CreateDirectory(string path, UnixFileMode unixCreateMode);\n#endif\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc cref=\"IDirectory.CreateSymbolicLink(string, string)\"/>\n        public abstract IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n#endif\n\n#if FEATURE_CREATE_TEMP_SUBDIRECTORY\n        /// <inheritdoc cref=\"IDirectory.CreateTempSubdirectory(string)\"/>\n        public abstract IDirectoryInfo CreateTempSubdirectory(string prefix = null);\n#endif\n    /// <inheritdoc cref=\"IDirectory.Delete(string)\"/>\n    public abstract void Delete(string path);\n\n    /// <inheritdoc cref=\"IDirectory.Delete(string,bool)\"/>\n    public abstract void Delete(string path, bool recursive);\n\n    /// <inheritdoc cref=\"IDirectory.Exists\"/>\n    public abstract bool Exists(string path);\n        \n    /// <inheritdoc cref=\"IDirectory.GetCreationTime\"/>\n    public abstract DateTime GetCreationTime(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetCreationTimeUtc\"/>\n    public abstract DateTime GetCreationTimeUtc(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetCurrentDirectory\"/>\n    public abstract string GetCurrentDirectory();\n\n    /// <inheritdoc cref=\"IDirectory.GetDirectories(string)\"/>\n    public abstract string[] GetDirectories(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetDirectories(string,string)\"/>\n    public abstract string[] GetDirectories(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.GetDirectories(string,string,SearchOption)\"/>\n    public abstract string[] GetDirectories(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.GetDirectories(string,string,EnumerationOptions)\"/>\n        public abstract string[] GetDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectory.GetDirectoryRoot\"/>\n    public abstract string GetDirectoryRoot(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetFiles(string)\"/>\n    public abstract string[] GetFiles(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetFiles(string,string)\"/>\n    public abstract string[] GetFiles(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.GetFiles(string,string,SearchOption)\"/>\n    public abstract string[] GetFiles(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.GetFiles(string,string,EnumerationOptions)\"/>\n        public abstract string[] GetFiles(string path, string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectory.GetFileSystemEntries(string)\"/>\n    public abstract string[] GetFileSystemEntries(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetFileSystemEntries(string,string)\"/>\n    public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.GetFileSystemEntries(string,string,SearchOption)\"/>\n    public abstract string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.GetFileSystemEntries(string,string,EnumerationOptions)\"/>\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern,\n            EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectory.GetLastAccessTime\"/>\n    public abstract DateTime GetLastAccessTime(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetLastAccessTimeUtc\"/>\n    public abstract DateTime GetLastAccessTimeUtc(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetLastWriteTime\"/>\n    public abstract DateTime GetLastWriteTime(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetLastWriteTimeUtc\"/>\n    public abstract DateTime GetLastWriteTimeUtc(string path);\n\n    /// <inheritdoc cref=\"IDirectory.GetLogicalDrives\"/>\n    public abstract string[] GetLogicalDrives();\n\n    /// <inheritdoc cref=\"IDirectory.GetParent\"/>\n    public abstract IDirectoryInfo GetParent(string path);\n\n    /// <inheritdoc cref=\"IDirectory.Move\"/>\n    public abstract void Move(string sourceDirName, string destDirName);\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc cref=\"IDirectory.ResolveLinkTarget(string, bool)\"/>\n        public abstract IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n#endif\n        \n    /// <inheritdoc cref=\"IDirectory.SetCreationTime\"/>\n    public abstract void SetCreationTime(string path, DateTime creationTime);\n\n    /// <inheritdoc cref=\"IDirectory.SetCreationTimeUtc\"/>\n    public abstract void SetCreationTimeUtc(string path, DateTime creationTimeUtc);\n\n    /// <inheritdoc cref=\"IDirectory.SetCurrentDirectory\"/>\n    public abstract void SetCurrentDirectory(string path);\n\n    /// <inheritdoc cref=\"IDirectory.SetLastAccessTime\"/>\n    public abstract void SetLastAccessTime(string path, DateTime lastAccessTime);\n\n    /// <inheritdoc cref=\"IDirectory.SetLastAccessTimeUtc\"/>\n    public abstract void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc);\n\n    /// <inheritdoc cref=\"IDirectory.SetLastWriteTime\"/>\n    public abstract void SetLastWriteTime(string path, DateTime lastWriteTime);\n\n    /// <inheritdoc cref=\"IDirectory.SetLastWriteTimeUtc\"/>\n    public abstract void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateDirectories(string)\"/>\n    public abstract IEnumerable<string> EnumerateDirectories(string path);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateDirectories(string,string)\"/>\n    public abstract IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateDirectories(string,string,SearchOption)\"/>\n    public abstract IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.EnumerateDirectories(string,string,EnumerationOptions)\"/>\n        public abstract IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFiles(string)\"/>\n    public abstract IEnumerable<string> EnumerateFiles(string path);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFiles(string,string)\"/>\n    public abstract IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFiles(string,string,SearchOption)\"/>\n    public abstract IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.EnumerateFiles(string,string,EnumerationOptions)\"/>\n        public abstract IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFileSystemEntries(string)\"/>\n    public abstract IEnumerable<string> EnumerateFileSystemEntries(string path);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFileSystemEntries(string,string)\"/>\n    public abstract IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectory.EnumerateFileSystemEntries(string,string,SearchOption)\"/>\n    public abstract IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc cref=\"IDirectory.EnumerateFileSystemEntries(string,string,EnumerationOptions)\"/>\n        public abstract IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoAclExtensions.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n///     ACL (access control list) extension methods for <see cref=\"IDirectoryInfo\" />.\n/// </summary>\npublic static class DirectoryInfoAclExtensions\n{\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.Create(DirectoryInfo,DirectorySecurity)\"/>\n#else\n        /// <inheritdoc cref=\"DirectoryInfo.Create(DirectorySecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void Create(this IDirectoryInfo directoryInfo,\n        DirectorySecurity directorySecurity)\n    {\n        IFileSystemAclSupport aclSupport = directoryInfo as IFileSystemAclSupport;\n        if (aclSupport == null)\n        {\n            throw new NotSupportedException(\"The directory info does not support ACL extensions\");\n        }\n\n        directoryInfo.Create();\n        aclSupport.SetAccessControl(directorySecurity);\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(DirectoryInfo)\"/>\n#else\n        /// <inheritdoc cref=\"DirectoryInfo.GetAccessControl()\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static DirectorySecurity GetAccessControl(\n        this IDirectoryInfo directoryInfo)\n    {\n        IFileSystemAclSupport aclSupport = directoryInfo as IFileSystemAclSupport;\n        var directorySecurity = aclSupport?.GetAccessControl() as DirectorySecurity;\n        if (aclSupport == null || directorySecurity == null)\n        {\n            throw new NotSupportedException(\"The directory info does not support ACL extensions\");\n        }\n\n        return directorySecurity;\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(DirectoryInfo,AccessControlSections)\"/>\n#else\n        /// <inheritdoc cref=\"DirectoryInfo.GetAccessControl(AccessControlSections)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static DirectorySecurity GetAccessControl(\n        this IDirectoryInfo directoryInfo,\n        AccessControlSections includeSections)\n    {\n        IFileSystemAclSupport aclSupport = directoryInfo as IFileSystemAclSupport;\n        var directorySecurity = aclSupport?.GetAccessControl((IFileSystemAclSupport.AccessControlSections) includeSections) as DirectorySecurity;\n        if (aclSupport == null || directorySecurity == null)\n        {\n            throw new NotSupportedException(\"The directory info does not support ACL extensions\");\n        }\n\n        return directorySecurity;\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.SetAccessControl(DirectoryInfo,DirectorySecurity)\"/>\n#else\n        /// <inheritdoc cref=\"DirectoryInfo.SetAccessControl(DirectorySecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void SetAccessControl(this IDirectoryInfo directoryInfo,\n        DirectorySecurity directorySecurity)\n    {\n        IFileSystemAclSupport aclSupport = directoryInfo as IFileSystemAclSupport;\n        if (aclSupport == null)\n        {\n            throw new NotSupportedException(\"The directory info does not support ACL extensions\");\n        }\n            \n        aclSupport.SetAccessControl(directorySecurity);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoBase.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"IDirectoryInfo\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class DirectoryInfoBase : FileSystemInfoBase, IDirectoryInfo\n{\n    /// <summary>\n    /// Base class for calling methods of <see cref=\"DirectoryInfo\"/>\n    /// </summary>\n    protected DirectoryInfoBase(IFileSystem fileSystem) : base(fileSystem)\n    {\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal DirectoryInfoBase() { }\n\n    /// <inheritdoc cref=\"IDirectoryInfo.Create()\"/>\n    public abstract void Create();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.CreateSubdirectory(string)\"/>\n    public abstract IDirectoryInfo CreateSubdirectory(string path);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.Delete(bool)\"/>\n    public abstract void Delete(bool recursive);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateDirectories()\"/>\n    public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateDirectories(string)\"/>\n    public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateDirectories(string,SearchOption)\"/>\n    public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateDirectories(string,EnumerationOptions)\"/>\n    public abstract IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFiles()\"/>\n    public abstract IEnumerable<IFileInfo> EnumerateFiles();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFiles(string)\"/>\n    public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFiles(string,SearchOption)\"/>\n    public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFiles(string,EnumerationOptions)\"/>\n    public abstract IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFileSystemInfos()\"/>\n    public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFileSystemInfos(string)\"/>\n    public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFileSystemInfos(string,SearchOption)\"/>\n    public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.EnumerateFileSystemInfos(string,EnumerationOptions)\"/>\n    public abstract IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n        \n    /// <inheritdoc cref=\"IDirectoryInfo.GetDirectories()\"/>\n    public abstract IDirectoryInfo[] GetDirectories();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetDirectories(string)\"/>\n    public abstract IDirectoryInfo[] GetDirectories(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetDirectories(string,SearchOption)\"/>\n    public abstract IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.GetDirectories(string,EnumerationOptions)\"/>\n    public abstract IDirectoryInfo[] GetDirectories(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFiles(string)\"/>\n    public abstract IFileInfo[] GetFiles();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFiles(string)\"/>\n    public abstract IFileInfo[] GetFiles(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFiles(string,SearchOption)\"/>\n    public abstract IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption);\n\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFiles(string,EnumerationOptions)\"/>\n    public abstract IFileInfo[] GetFiles(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFileSystemInfos()\"/>\n    public abstract IFileSystemInfo[] GetFileSystemInfos();\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFileSystemInfos(string)\"/>\n    public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFileSystemInfos(string,SearchOption)\"/>\n    public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption);\n\n#if FEATURE_ENUMERATION_OPTIONS\n    /// <inheritdoc cref=\"IDirectoryInfo.GetFileSystemInfos(string,EnumerationOptions)\"/>\n    public abstract IFileSystemInfo[] GetFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions);\n#endif\n\n    /// <inheritdoc cref=\"IDirectoryInfo.MoveTo\"/>\n    public abstract void MoveTo(string destDirName);\n        \n    /// <inheritdoc cref=\"IDirectoryInfo.Parent\"/>\n    public abstract IDirectoryInfo Parent { get; }\n\n    /// <inheritdoc cref=\"IDirectoryInfo.Root\"/>\n    public abstract IDirectoryInfo Root { get; }\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"DirectoryInfo\"/> to a <see cref=\"DirectoryInfoBase\"/>.\n    /// </summary>\n    public static implicit operator DirectoryInfoBase(DirectoryInfo directoryInfo)\n    {\n        if (directoryInfo == null)\n        {\n            return null;\n        }\n        return new DirectoryInfoWrapper(new FileSystem(), directoryInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoFactory.cs",
    "content": "namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class DirectoryInfoFactory : IDirectoryInfoFactory\n{\n    private readonly IFileSystem fileSystem;\n\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"IDirectoryInfo\"/>\n    /// </summary>\n    public DirectoryInfoFactory(IFileSystem fileSystem)\n    {\n        this.fileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => fileSystem;\n\n    /// <inheritdoc />\n    public IDirectoryInfo New(string path)\n    {\n        var realDirectoryInfo = new DirectoryInfo(path);\n        return new DirectoryInfoWrapper(fileSystem, realDirectoryInfo);\n    }\n        \n    /// <inheritdoc />\n    public IDirectoryInfo Wrap(DirectoryInfo directoryInfo)\n    {\n        if (directoryInfo == null)\n        {\n            return null;\n        }\n\n        return new DirectoryInfoWrapper(fileSystem, directoryInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryInfoWrapper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"DirectoryInfoBase\" />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class DirectoryInfoWrapper : DirectoryInfoBase, IFileSystemAclSupport\n{\n    private readonly DirectoryInfo instance;\n\n    /// <summary>\n    /// Wrapper class for calling methods of <see cref=\"DirectoryInfo\"/>\n    /// </summary>\n    public DirectoryInfoWrapper(IFileSystem fileSystem, DirectoryInfo instance) : base(fileSystem)\n    {\n        this.instance = instance ?? throw new ArgumentNullException(nameof(instance));\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override void CreateAsSymbolicLink(string pathToTarget)\n        {\n            instance.CreateAsSymbolicLink(pathToTarget);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void Delete()\n    {\n        instance.Delete();\n    }\n\n    /// <inheritdoc />\n    public override void Refresh()\n    {\n        instance.Refresh();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)\n        {\n            return instance.ResolveLinkTarget(returnFinalTarget)\n                .WrapFileSystemInfo(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override FileAttributes Attributes\n    {\n        get { return instance.Attributes; }\n        set { instance.Attributes = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTime\n    {\n        get { return instance.CreationTime; }\n        set { instance.CreationTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTimeUtc\n    {\n        get { return instance.CreationTimeUtc; }\n        set { instance.CreationTimeUtc = value; }\n    }\n\n    /// <inheritdoc />\n    public override bool Exists\n    {\n        get { return instance.Exists; }\n    }\n\n    /// <inheritdoc />\n    public override string Extension\n    {\n        get { return instance.Extension; }\n    }\n\n    /// <inheritdoc />\n    public override string FullName\n    {\n        get { return instance.FullName; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTime\n    {\n        get { return instance.LastAccessTime; }\n        set { instance.LastAccessTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTimeUtc\n    {\n        get { return instance.LastAccessTimeUtc; }\n        set { instance.LastAccessTimeUtc = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTime\n    {\n        get { return instance.LastWriteTime; }\n        set { instance.LastWriteTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTimeUtc\n    {\n        get { return instance.LastWriteTimeUtc; }\n        set { instance.LastWriteTimeUtc = value; }\n    }\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n        /// <inheritdoc />\n        public override string LinkTarget\n        {\n            get { return instance.LinkTarget; }\n        }\n#endif\n\n    /// <inheritdoc />\n    public override string Name\n    {\n        get { return instance.Name; }\n    }\n\n    /// <inheritdoc />\n    public override void Create()\n    {\n        instance.Create();\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo CreateSubdirectory(string path)\n    {\n        return new DirectoryInfoWrapper(FileSystem, instance.CreateSubdirectory(path));\n    }\n\n    /// <inheritdoc />\n    public override void Delete(bool recursive)\n    {\n        instance.Delete(recursive);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories()\n    {\n        return instance.EnumerateDirectories().Select(directoryInfo => new DirectoryInfoWrapper(FileSystem, directoryInfo));\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern)\n    {\n        return instance.EnumerateDirectories(searchPattern).Select(directoryInfo => new DirectoryInfoWrapper(FileSystem, directoryInfo));\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption)\n    {\n        return instance.EnumerateDirectories(searchPattern, searchOption).Select(directoryInfo => new DirectoryInfoWrapper(FileSystem, directoryInfo));\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<IDirectoryInfo> EnumerateDirectories(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.EnumerateDirectories(searchPattern, enumerationOptions).Select(directoryInfo => new DirectoryInfoWrapper(FileSystem, directoryInfo));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles()\n    {\n        return instance.EnumerateFiles().Select(fileInfo => new FileInfoWrapper(FileSystem, fileInfo));\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern)\n    {\n        return instance.EnumerateFiles(searchPattern).Select(fileInfo => new FileInfoWrapper(FileSystem, fileInfo));\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption)\n    {\n        return instance.EnumerateFiles(searchPattern, searchOption).Select(fileInfo => new FileInfoWrapper(FileSystem, fileInfo));\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<IFileInfo> EnumerateFiles(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.EnumerateFiles(searchPattern, enumerationOptions).Select(fileInfo => new FileInfoWrapper(FileSystem, fileInfo));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos()\n    {\n        return instance.EnumerateFileSystemInfos().WrapFileSystemInfos(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern)\n    {\n        return instance.EnumerateFileSystemInfos(searchPattern).WrapFileSystemInfos(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, SearchOption searchOption)\n    {\n        return instance.EnumerateFileSystemInfos(searchPattern, searchOption).WrapFileSystemInfos(FileSystem);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.EnumerateFileSystemInfos(searchPattern, enumerationOptions).WrapFileSystemInfos(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories()\n    {\n        return instance.GetDirectories().WrapDirectories(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories(string searchPattern)\n    {\n        return instance.GetDirectories(searchPattern).WrapDirectories(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo[] GetDirectories(string searchPattern, SearchOption searchOption)\n    {\n        return instance.GetDirectories(searchPattern, searchOption).WrapDirectories(FileSystem);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IDirectoryInfo[] GetDirectories(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.GetDirectories(searchPattern, enumerationOptions).WrapDirectories(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles()\n    {\n        return instance.GetFiles().WrapFiles(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles(string searchPattern)\n    {\n        return instance.GetFiles(searchPattern).WrapFiles(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption)\n    {\n        return instance.GetFiles(searchPattern, searchOption).WrapFiles(FileSystem);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IFileInfo[] GetFiles(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.GetFiles(searchPattern, enumerationOptions).WrapFiles(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos()\n    {\n        return instance.GetFileSystemInfos().WrapFileSystemInfos(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern)\n    {\n        return instance.GetFileSystemInfos(searchPattern).WrapFileSystemInfos(FileSystem);\n    }\n\n    /// <inheritdoc />\n    public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, SearchOption searchOption)\n    {\n        return instance.GetFileSystemInfos(searchPattern, searchOption).WrapFileSystemInfos(FileSystem);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IFileSystemInfo[] GetFileSystemInfos(string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return instance.GetFileSystemInfos(searchPattern, enumerationOptions).WrapFileSystemInfos(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void MoveTo(string destDirName)\n    {\n        instance.MoveTo(destDirName);\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo Parent\n    {\n        get\n        {\n            if (instance.Parent == null)\n            {\n                return null;\n            }\n            else\n            {\n                return new DirectoryInfoWrapper(FileSystem, instance.Parent);\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo Root\n        => new DirectoryInfoWrapper(FileSystem, instance.Root);\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return instance.ToString();\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return instance.GetAccessControl();\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        return instance.GetAccessControl((AccessControlSections)includeSections);\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        if (value is DirectorySecurity directorySecurity)\n        {\n            this.instance.SetAccessControl(directorySecurity);\n        }\n        else\n        {\n            throw new ArgumentException(\"value must be of type `FileSecurity`\");\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DirectoryWrapper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"DirectoryBase\" />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class DirectoryWrapper : DirectoryBase\n{\n    /// <inheritdoc />\n    public DirectoryWrapper(IFileSystem fileSystem) : base(fileSystem)\n    {\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo CreateDirectory(string path)\n    {\n        var directoryInfo = new DirectoryInfo(path);\n        directoryInfo.Create();\n        return new DirectoryInfoWrapper(FileSystem, directoryInfo);\n    }\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        [UnsupportedOSPlatform(\"windows\")]\n        public override IDirectoryInfo CreateDirectory(string path, UnixFileMode unixCreateMode)\n        {\n            return new DirectoryInfoWrapper(FileSystem,\n                Directory.CreateDirectory(path, unixCreateMode));\n        }\n#endif\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)\n        {\n            return Directory.CreateSymbolicLink(path, pathToTarget)\n                .WrapFileSystemInfo(FileSystem);\n        }\n#endif\n\n#if FEATURE_CREATE_TEMP_SUBDIRECTORY\n        /// <inheritdoc />\n        public override IDirectoryInfo CreateTempSubdirectory(string prefix = null)\n        {\n            return new DirectoryInfoWrapper(FileSystem, \n                Directory.CreateTempSubdirectory(prefix));\n        }\n#endif\n    /// <inheritdoc />\n    public override void Delete(string path)\n    {\n        Directory.Delete(path);\n    }\n\n    /// <inheritdoc />\n    public override void Delete(string path, bool recursive)\n    {\n        Directory.Delete(path, recursive);\n    }\n\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        return Directory.Exists(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTime(string path)\n    {\n        return Directory.GetCreationTime(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTimeUtc(string path)\n    {\n        return Directory.GetCreationTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetCurrentDirectory()\n    {\n        return Directory.GetCurrentDirectory();\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path)\n    {\n        return Directory.GetDirectories(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path, string searchPattern)\n    {\n        return Directory.GetDirectories(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetDirectories(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.GetDirectories(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.GetDirectories(path, searchPattern, enumerationOptions);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override string GetDirectoryRoot(string path)\n    {\n        return Directory.GetDirectoryRoot(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path)\n    {\n        return Directory.GetFiles(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path, string searchPattern)\n    {\n        return Directory.GetFiles(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFiles(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.GetFiles(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.GetFiles(path, searchPattern, enumerationOptions);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path)\n    {\n        return Directory.GetFileSystemEntries(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path, string searchPattern)\n    {\n        return Directory.GetFileSystemEntries(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.GetFileSystemEntries(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override string[] GetFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.GetFileSystemEntries(path, searchPattern, enumerationOptions);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTime(string path)\n    {\n        return Directory.GetLastAccessTime(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTimeUtc(string path)\n    {\n        return Directory.GetLastAccessTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTime(string path)\n    {\n        return Directory.GetLastWriteTime(path);\n    }\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTimeUtc(string path)\n    {\n        return Directory.GetLastWriteTimeUtc(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] GetLogicalDrives()\n    {\n        return Directory.GetLogicalDrives();\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo GetParent(string path)\n    {\n        var parent = Directory.GetParent(path);\n\n        if (parent == null)\n        {\n            return null;\n        }\n\n        return new DirectoryInfoWrapper(FileSystem, parent);\n    }\n\n    /// <inheritdoc />\n    public override void Move(string sourceDirName, string destDirName)\n    {\n        Directory.Move(sourceDirName, destDirName);\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)\n        {\n            return Directory.ResolveLinkTarget(linkPath, returnFinalTarget)\n                .WrapFileSystemInfo(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTime(string path, DateTime creationTime)\n    {\n        Directory.SetCreationTime(path, creationTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetCreationTimeUtc(string path, DateTime creationTimeUtc)\n    {\n        Directory.SetCreationTimeUtc(path, creationTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override void SetCurrentDirectory(string path)\n    {\n        Directory.SetCurrentDirectory(path);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastAccessTime(string path, DateTime lastAccessTime)\n    {\n        Directory.SetLastAccessTime(path, lastAccessTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc)\n    {\n        Directory.SetLastAccessTimeUtc(path, lastAccessTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastWriteTime(string path, DateTime lastWriteTime)\n    {\n        Directory.SetLastWriteTime(path, lastWriteTime);\n    }\n\n    /// <inheritdoc />\n    public override void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc)\n    {\n        Directory.SetLastWriteTimeUtc(path, lastWriteTimeUtc);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path)\n    {\n        return Directory.EnumerateDirectories(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern)\n    {\n        return Directory.EnumerateDirectories(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.EnumerateDirectories(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.EnumerateDirectories(path, searchPattern, enumerationOptions);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path)\n    {\n        return Directory.EnumerateFiles(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern)\n    {\n        return Directory.EnumerateFiles(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.EnumerateFiles(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.EnumerateFiles(path, searchPattern, enumerationOptions);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path)\n    {\n        return Directory.EnumerateFileSystemEntries(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern)\n    {\n        return Directory.EnumerateFileSystemEntries(path, searchPattern);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption)\n    {\n        return Directory.EnumerateFileSystemEntries(path, searchPattern, searchOption);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        /// <inheritdoc />\n        public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)\n        {\n            return Directory.EnumerateFileSystemEntries(path, searchPattern, enumerationOptions);\n        }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoBase.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class DriveInfoBase : IDriveInfo\n{\n    /// <summary>\n    /// Base class for calling methods of <see cref=\"DriveInfo\"/>\n    /// </summary>\n    protected DriveInfoBase(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal DriveInfoBase() { }\n\n    /// <summary>\n    /// Exposes the underlying filesystem implementation. This is useful for implementing extension methods.\n    /// </summary>\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.AvailableFreeSpace\"/>\n    public abstract long AvailableFreeSpace { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.DriveFormat\"/>\n    public abstract string DriveFormat { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.DriveType\"/>\n    public abstract DriveType DriveType { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.IsReady\"/>\n    public abstract bool IsReady { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.Name\"/>\n    public abstract string Name { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.RootDirectory\"/>\n    public abstract IDirectoryInfo RootDirectory { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.TotalFreeSpace\"/>\n    public abstract long TotalFreeSpace { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.TotalSize\"/>\n    public abstract long TotalSize { get; }\n\n    /// <inheritdoc cref=\"IDriveInfo.VolumeLabel\"/>\n    public abstract string VolumeLabel { get; set; }\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"DriveInfo\"/> to a <see cref=\"DriveInfoBase\"/>.\n    /// </summary>\n    public static implicit operator DriveInfoBase(DriveInfo driveInfo)\n    {\n        if (driveInfo == null)\n        {\n            return null;\n        }\n\n        return new DriveInfoWrapper(new FileSystem(), driveInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoFactory.cs",
    "content": "﻿namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class DriveInfoFactory : IDriveInfoFactory\n{\n    private readonly IFileSystem fileSystem;\n\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"IDriveInfo\"/>\n    /// </summary>\n    public DriveInfoFactory(IFileSystem fileSystem)\n    {\n        this.fileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => fileSystem;\n\n    /// <inheritdoc />\n    public IDriveInfo[] GetDrives()\n    {\n        var driveInfos = DriveInfo.GetDrives();\n        var driveInfoWrappers = new DriveInfoBase[driveInfos.Length];\n        for (int index = 0; index < driveInfos.Length; index++)\n        {\n            var driveInfo = driveInfos[index];\n            driveInfoWrappers[index] = new DriveInfoWrapper(fileSystem, driveInfo);\n        }\n\n        return driveInfoWrappers;\n    }\n\n    /// <inheritdoc />\n    public IDriveInfo New(string driveName)\n    {\n        var realDriveInfo = new DriveInfo(driveName);\n        return new DriveInfoWrapper(fileSystem, realDriveInfo);\n    }\n\n    /// <inheritdoc />\n    public IDriveInfo Wrap(DriveInfo driveInfo)\n    {\n        if (driveInfo == null)\n        {\n            return null;\n        }\n\n        return new DriveInfoWrapper(fileSystem, driveInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/DriveInfoWrapper.cs",
    "content": "﻿using System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n/// The wrapper for a <see cref=\"DriveInfo\"/>.\n/// </summary>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class DriveInfoWrapper : DriveInfoBase\n{\n    /// <summary>\n    /// The instance of the real <see cref=\"FileSystem\"/>.\n    /// </summary>\n    private readonly DriveInfo instance;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DriveInfoWrapper\"/> class, which acts as a wrapper for a drive info.\n    /// </summary>\n    /// <param name=\"fileSystem\">The underlying IFileSystem.</param>\n    /// <param name=\"instance\">The drive info.</param>\n    public DriveInfoWrapper(IFileSystem fileSystem, DriveInfo instance) : base(fileSystem)\n    {\n        this.instance = instance ?? throw new ArgumentNullException(nameof(instance));\n    }\n\n    /// <summary>\n    /// Gets or sets the name of a drive, such as C:\\.\n    /// </summary>\n    /// <value>The name of the drive.</value>\n    /// <remarks>\n    /// This property is the name assigned to the drive, such as C:\\ or E:\\.\n    /// </remarks>\n    public override string Name\n    {\n        get { return instance.Name; }\n    }\n\n    /// <summary>\n    /// Gets or sets the drive type, such as CD-ROM, removable, network, or fixed.\n    /// </summary>\n    /// <value>One of the enumeration values that specifies a drive type.</value>\n    /// <remarks>\n    /// The DriveType property indicates whether a drive is one of the following: CDRom, Fixed, Network, NoRootDirectory, Ram, Removable, or Unknown.\n    /// These values are described in the DriveType enumeration.\n    /// </remarks>\n    public override DriveType DriveType\n    {\n        get { return instance.DriveType; }\n    }\n\n    /// <summary>\n    /// Gets or sets the name of the file system, such as NTFS or FAT32.\n    /// </summary>\n    /// <remarks>\n    /// Use DriveFormat to determine what formatting a drive uses.\n    /// </remarks>\n    /// <value>The name of the file system on the specified drive.</value>\n    /// <exception cref=\"UnauthorizedAccessException\">Thrown if the access to the drive information is denied.</exception>\n    /// <exception cref=\"DriveNotFoundException\">Thrown if the drive does not exist or is not mapped.</exception>\n    /// <exception cref=\"IOException\">Thrown if an I/O error occurred (for example, a disk error or a drive was not ready).</exception>\n    public override string DriveFormat\n    {\n        get { return instance.DriveFormat; }\n    }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether a drive is ready.\n    /// </summary>\n    /// <value>\n    /// <see langword=\"true\"/> if the drive is ready; <see langword=\"false\"/> if the drive is not ready.\n    /// </value>\n    /// <remarks>\n    /// IsReady indicates whether a drive is ready.\n    /// For example, it indicates whether a CD is in a CD drive or whether a removable storage device is ready for read/write operations.\n    /// If you do not test whether a drive is ready, and it is not ready, querying the drive using <see cref=\"DriveInfoBase\"/> will raise an IOException.\n    /// Do not rely on IsReady to avoid catching exceptions from other members such as TotalSize, TotalFreeSpace, and <see cref=\"DriveInfoBase.DriveFormat\"/>.\n    /// Between the time that your code checks IsReady and then accesses one of the other properties (even if the access occurs immediately after the check),\n    ///  a drive may have been disconnected or a disk may have been removed.\n    /// </remarks>\n    public override bool IsReady\n    {\n        get { return instance.IsReady; }\n    }\n\n    /// <summary>\n    /// Gets or sets the amount of available free space on a drive, in bytes.\n    /// </summary>\n    /// <value>The amount of free space available on the drive, in bytes.</value>\n    /// <remarks>\n    /// This property indicates the amount of free space available on the drive.\n    /// Note that this number may be different from the TotalFreeSpace number because this property takes into account disk quotas.\n    /// </remarks>\n    /// <exception cref=\"UnauthorizedAccessException\">Thrown if the access to the drive information is denied.</exception>\n    /// <exception cref=\"IOException\">Thrown if an I/O error occurred (for example, a disk error or a drive was not ready).</exception>\n    public override long AvailableFreeSpace\n    {\n        get { return instance.AvailableFreeSpace; }\n    }\n\n    /// <summary>\n    /// Gets or sets the total amount of free space available on a drive, in bytes.\n    /// </summary>\n    /// <value>The total free space available on a drive, in bytes.</value>\n    /// <remarks>This property indicates the total amount of free space available on the drive, not just what is available to the current user.</remarks>\n    /// <exception cref=\"UnauthorizedAccessException\">Thrown if the access to the drive information is denied.</exception>\n    /// <exception cref=\"DriveNotFoundException\">Thrown if the drive does not exist or is not mapped.</exception>\n    /// <exception cref=\"IOException\">Thrown if an I/O error occurred (for example, a disk error or a drive was not ready).</exception>\n    public override long TotalFreeSpace\n    {\n        get { return instance.TotalFreeSpace; }\n    }\n\n    /// <summary>\n    /// Gets or sets the total size of storage space on a drive, in bytes.\n    /// </summary>\n    /// <value>The total size of the drive, in bytes.</value>\n    /// <remarks>\n    /// This property indicates the total size of the drive in bytes, not just what is available to the current user.\n    /// </remarks>\n    /// <exception cref=\"UnauthorizedAccessException\">Thrown if the access to the drive information is denied.</exception>\n    /// <exception cref=\"DriveNotFoundException\">Thrown if the drive does not exist or is not mapped.</exception>\n    /// <exception cref=\"IOException\">Thrown if an I/O error occurred (for example, a disk error or a drive was not ready).</exception>\n    public override long TotalSize\n    {\n        get { return instance.TotalSize; }\n    }\n\n    /// <summary>\n    /// Gets or sets the root directory of a drive.\n    /// </summary>\n    /// <value>An object that contains the root directory of the drive.</value>\n    public override IDirectoryInfo RootDirectory\n    {\n        get { return new DirectoryInfoWrapper(FileSystem, instance.RootDirectory); }\n    }\n\n    /// <summary>\n    /// Gets or sets the volume label of a drive.\n    /// </summary>\n    /// <value>The volume label.</value>\n    /// <remarks>\n    /// The label length is determined by the operating system. For example, NTFS allows a volume label to be up to 32 characters long. Note that <see langword=\"null\"/> is a valid VolumeLabel.\n    /// </remarks>\n    /// <exception cref=\"IOException\">Thrown if an I/O error occurred (for example, a disk error or a drive was not ready).</exception>\n    /// <exception cref=\"DriveNotFoundException\">Thrown if the drive does not exist or is not mapped.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">Thrown if the caller does not have the required permission.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// Thrown if the volume label is being set on a network or CD-ROM drive\n    /// -or-\n    /// Access to the drive information is denied.\n    /// </exception>\n    public override string VolumeLabel\n    {\n        get { return instance.VolumeLabel; }\n\n        [SupportedOSPlatform(\"windows\")]\n#pragma warning disable CA1416\n        set { instance.VolumeLabel = value; }\n#pragma warning restore CA1416\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return instance.ToString();\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileAclExtensions.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n///     ACL (access control list) extension methods for <see cref=\"IFile\" />.\n/// </summary>\npublic static class FileAclExtensions\n{\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(FileInfo)\"/>\n#else\n        /// <inheritdoc cref=\"File.GetAccessControl(string)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static FileSecurity GetAccessControl(\n        this IFile file, string path)\n    {\n        IFileInfo fileInfo = file.FileSystem.FileInfo.New(path);\n        return fileInfo.GetAccessControl();\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(FileInfo,AccessControlSections)\"/>\n#else\n        /// <inheritdoc cref=\"File.GetAccessControl(string,AccessControlSections)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static FileSecurity GetAccessControl(\n        this IFile file,\n        string path,\n        AccessControlSections includeSections)\n    {\n        IFileInfo fileInfo = file.FileSystem.FileInfo.New(path);\n        return fileInfo.GetAccessControl(includeSections);\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.SetAccessControl(FileInfo,FileSecurity)\"/>\n#else\n        /// <inheritdoc cref=\"File.SetAccessControl(string,FileSecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void SetAccessControl(this IFile file,\n        string path,\n        FileSecurity fileSecurity)\n    {\n        IFileInfo fileInfo = file.FileSystem.FileInfo.New(path);\n        fileInfo.SetAccessControl(fileSecurity);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.Async.cs",
    "content": "﻿#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace System.IO.Abstractions\n{\n    partial class FileBase\n    {\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,byte[],CancellationToken)\"/>\n        public abstract Task AppendAllBytesAsync(string path, byte[] bytes,\n            CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public abstract Task AppendAllBytesAsync(string path, ReadOnlyMemory<byte> bytes,\n            CancellationToken cancellationToken = default);\n#endif\n\n        /// <inheritdoc cref=\"IFile.AppendAllLinesAsync(string,IEnumerable{string},CancellationToken)\"/>\n        public abstract Task AppendAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.AppendAllLinesAsync(string,IEnumerable{string},Encoding,CancellationToken)\"/>\n        public abstract Task AppendAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default);\n\n\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,string,CancellationToken)\"/>\n        public abstract Task AppendAllTextAsync(String path, String contents, CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,string,Encoding,CancellationToken)\"/>\n        public abstract Task AppendAllTextAsync(String path, String contents, Encoding encoding, CancellationToken cancellationToken = default);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public abstract Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents,\n            CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public abstract Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default);\n#endif\n\n        /// <inheritdoc cref=\"IFile.ReadAllBytesAsync\"/>\n        public abstract Task<byte[]> ReadAllBytesAsync(string path, CancellationToken cancellationToken = default);\n        /// <inheritdoc cref=\"IFile.ReadAllLinesAsync(string,CancellationToken)\"/>\n        public abstract Task<string[]> ReadAllLinesAsync(string path, CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.ReadAllLinesAsync(string,Encoding,CancellationToken)\"/>\n        public abstract Task<string[]> ReadAllLinesAsync(string path, Encoding encoding, CancellationToken cancellationToken = default);\n\n        ///<inheritdoc cref=\"IFile.ReadAllTextAsync(string,CancellationToken)\"/>\n        public abstract Task<string> ReadAllTextAsync(string path, CancellationToken cancellationToken = default);\n\n        ///<inheritdoc cref=\"IFile.ReadAllTextAsync(string,Encoding,CancellationToken)\"/>\n        public abstract Task<string> ReadAllTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default);\n\n#if FEATURE_READ_LINES_ASYNC\n        ///<inheritdoc cref=\"IFile.ReadLinesAsync(string,Encoding,CancellationToken)\"/>\n        public abstract IAsyncEnumerable<string> ReadLinesAsync(string path,\n            CancellationToken cancellationToken = default);\n\n        ///<inheritdoc cref=\"IFile.ReadLinesAsync(string,Encoding,CancellationToken)\"/>\n        public abstract IAsyncEnumerable<string> ReadLinesAsync(string path, Encoding encoding,\n            CancellationToken cancellationToken = default);\n#endif\n\n        /// <inheritdoc cref=\"IFile.WriteAllBytesAsync(string,byte[],CancellationToken)\"/>\n        public abstract Task WriteAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public abstract Task WriteAllBytesAsync(string path, ReadOnlyMemory<byte> bytes,\n            CancellationToken cancellationToken = default);\n#endif\n\n        /// <inheritdoc cref=\"IFile.WriteAllLinesAsync(string,IEnumerable{string},CancellationToken)\"/>\n        public abstract Task WriteAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.WriteAllLinesAsync(string,IEnumerable{string},Encoding,CancellationToken)\"/>\n        public abstract Task WriteAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default);\n        \n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,string,CancellationToken)\"/>\n        public abstract Task WriteAllTextAsync(string path, string contents, CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,string,Encoding,CancellationToken)\"/>\n        public abstract Task WriteAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public abstract Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents,\n            CancellationToken cancellationToken = default);\n\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public abstract Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default);\n#endif\n    }\n}\n\n#endif"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileBase.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"File\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract partial class FileBase : IFile\n{\n    /// <summary>\n    /// Base class for calling static methods of <see cref=\"File\"/>\n    /// </summary>\n    protected FileBase(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem;\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal FileBase() { }\n\n    /// <summary>\n    /// Exposes the underlying filesystem implementation. This is useful for implementing extension methods.\n    /// </summary>\n    public IFileSystem FileSystem { get; }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,byte[])\"/>\n        public abstract void AppendAllBytes(string path, byte[] bytes);\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,ReadOnlySpan{byte})\"/>\n        public abstract void AppendAllBytes(string path, ReadOnlySpan<byte> bytes);\n#endif\n\n    /// <inheritdoc cref=\"IFile.AppendAllLines(string,IEnumerable{string})\"/>\n    public abstract void AppendAllLines(string path, IEnumerable<string> contents);\n\n    /// <inheritdoc cref=\"IFile.AppendAllLines(string,IEnumerable{string},Encoding)\"/>\n    public abstract void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding);\n\n    /// <inheritdoc cref=\"IFile.AppendAllText(string,string)\"/>\n    public abstract void AppendAllText(string path, string contents);\n\n    /// <inheritdoc cref=\"IFile.AppendAllText(string,string,Encoding)\"/>\n    public abstract void AppendAllText(string path, string contents, Encoding encoding);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char})\"/>\n        public abstract void AppendAllText(string path, ReadOnlySpan<char> contents);\n\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public abstract void AppendAllText(string path, ReadOnlySpan<char> contents, Encoding encoding);\n#endif\n\n    /// <inheritdoc cref=\"IFile.AppendText\"/>\n    public abstract StreamWriter AppendText(string path);\n\n    /// <inheritdoc cref=\"IFile.Copy(string,string)\"/>\n    public abstract void Copy(string sourceFileName, string destFileName);\n\n    /// <inheritdoc cref=\"IFile.Copy(string,string,bool)\"/>\n    public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n\n    /// <inheritdoc cref=\"IFile.Create(string)\"/>\n    public abstract FileSystemStream Create(string path);\n\n    /// <inheritdoc cref=\"IFile.Create(string,int)\"/>\n    public abstract FileSystemStream Create(string path, int bufferSize);\n\n    /// <inheritdoc cref=\"IFile.Create(string,int,FileOptions)\"/>\n    public abstract FileSystemStream Create(string path, int bufferSize, FileOptions options);\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc cref=\"IFile.CreateSymbolicLink(string, string)\"/>\n    public abstract IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n#endif\n    /// <inheritdoc cref=\"IFile.CreateText\"/>\n    public abstract StreamWriter CreateText(string path);\n\n    /// <inheritdoc cref=\"IFile.Decrypt\"/>\n    public abstract void Decrypt(string path);\n\n    /// <inheritdoc cref=\"IFile.Delete\"/>\n    public abstract void Delete(string path);\n\n    /// <inheritdoc cref=\"IFile.Encrypt\"/>\n    public abstract void Encrypt(string path);\n\n    /// <inheritdoc cref=\"IFile.Exists\"/>\n    public abstract bool Exists(string path);\n        \n    /// <inheritdoc cref=\"IFile.GetAttributes(string)\"/>\n    public abstract FileAttributes GetAttributes(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetCreationTime(SafeFileHandle)\"/>\n        public abstract FileAttributes GetAttributes(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetCreationTime(string)\"/>\n    public abstract DateTime GetCreationTime(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetCreationTime(SafeFileHandle)\"/>\n        public abstract DateTime GetCreationTime(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetCreationTimeUtc(string)\"/>\n    public abstract DateTime GetCreationTimeUtc(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetCreationTimeUtc(SafeFileHandle)\"/>\n        public abstract DateTime GetCreationTimeUtc(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetLastAccessTime(string)\"/>\n    public abstract DateTime GetLastAccessTime(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetLastAccessTime(SafeFileHandle)\"/>\n        public abstract DateTime GetLastAccessTime(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetLastAccessTimeUtc(string)\"/>\n    public abstract DateTime GetLastAccessTimeUtc(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetLastAccessTimeUtc(SafeFileHandle)\"/>\n        public abstract DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetLastWriteTime(string)\"/>\n    public abstract DateTime GetLastWriteTime(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetLastWriteTime(SafeFileHandle)\"/>\n        public abstract DateTime GetLastWriteTime(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.GetLastWriteTimeUtc(string)\"/>\n    public abstract DateTime GetLastWriteTimeUtc(string path);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetLastWriteTimeUtc(SafeFileHandle)\"/>\n        public abstract DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle);\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc cref=\"IFile.GetUnixFileMode(string)\"/>\n        public abstract UnixFileMode GetUnixFileMode(string path);\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.GetUnixFileMode(SafeFileHandle)\"/>\n        public abstract UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle);\n#endif\n\n    /// <inheritdoc cref=\"IFile.Move(string,string)\"/>\n    public abstract void Move(string sourceFileName, string destFileName);\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    /// <inheritdoc cref=\"IFile.Move(string,string,bool)\"/>\n    public abstract void Move(string sourceFileName, string destFileName, bool overwrite);\n#endif\n\n    /// <inheritdoc cref=\"IFile.Open(string,FileMode)\"/>\n    public abstract FileSystemStream Open(string path, FileMode mode);\n\n    /// <inheritdoc cref=\"IFile.Open(string,FileMode,FileAccess)\"/>\n    public abstract FileSystemStream Open(string path, FileMode mode, FileAccess access);\n\n    /// <inheritdoc cref=\"IFile.Open(string,FileMode,FileAccess,FileShare)\"/>\n    public abstract FileSystemStream Open(string path, FileMode mode, FileAccess access, FileShare share);\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc cref=\"IFile.Open(string,FileStreamOptions)\"/>\n    public abstract FileSystemStream Open(string path, FileStreamOptions options);\n#endif\n\n    /// <inheritdoc cref=\"IFile.OpenRead\"/>\n    public abstract FileSystemStream OpenRead(string path);\n\n    /// <inheritdoc cref=\"IFile.OpenText\"/>\n    public abstract StreamReader OpenText(string path);\n\n    /// <inheritdoc cref=\"IFile.OpenWrite\"/>\n    public abstract FileSystemStream OpenWrite(string path);\n\n    /// <inheritdoc cref=\"IFile.ReadAllBytes\"/>\n    public abstract byte[] ReadAllBytes(string path);\n        \n    /// <inheritdoc cref=\"IFile.ReadAllLines(string)\"/>\n    public abstract string[] ReadAllLines(string path);\n\n    /// <inheritdoc cref=\"IFile.ReadAllLines(string,Encoding)\"/>\n    public abstract string[] ReadAllLines(string path, Encoding encoding);\n        \n    /// <inheritdoc cref=\"IFile.ReadAllText(string)\"/>\n    public abstract string ReadAllText(string path);\n\n    /// <inheritdoc cref=\"IFile.ReadAllText(string,Encoding)\"/>\n    public abstract string ReadAllText(string path, Encoding encoding);\n        \n    /// <inheritdoc cref=\"IFile.ReadLines(string)\"/>\n    public abstract IEnumerable<string> ReadLines(string path);\n\n    /// <inheritdoc cref=\"IFile.ReadLines(string,Encoding)\"/>\n    public abstract IEnumerable<string> ReadLines(string path, Encoding encoding);\n\n    /// <inheritdoc cref=\"IFile.Replace(string,string,string)\"/>\n    public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n\n    /// <inheritdoc cref=\"IFile.Replace(string,string,string,bool)\"/>\n    public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc cref=\"IFile.ResolveLinkTarget(string,bool)\"/>\n    public abstract IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n#endif\n        \n    /// <inheritdoc cref=\"IFile.SetAttributes(string, FileAttributes)\"/>\n    public abstract void SetAttributes(string path, FileAttributes fileAttributes);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetAttributes(SafeFileHandle, FileAttributes)\"/>\n        public abstract void SetAttributes(SafeFileHandle fileHandle, FileAttributes fileAttributes);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetCreationTime(string, DateTime)\"/>\n    public abstract void SetCreationTime(string path, DateTime creationTime);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetCreationTime(SafeFileHandle, DateTime)\"/>\n        public abstract void SetCreationTime(SafeFileHandle fileHandle, DateTime creationTime);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetCreationTimeUtc(string, DateTime)\"/>\n    public abstract void SetCreationTimeUtc(string path, DateTime creationTimeUtc);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetCreationTimeUtc(SafeFileHandle, DateTime)\"/>\n        public abstract void SetCreationTimeUtc(SafeFileHandle fileHandle, DateTime creationTimeUtc);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetLastAccessTime(string, DateTime)\"/>\n    public abstract void SetLastAccessTime(string path, DateTime lastAccessTime);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetLastAccessTime(SafeFileHandle, DateTime)\"/>\n        public abstract void SetLastAccessTime(SafeFileHandle fileHandle, DateTime lastAccessTime);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetLastAccessTimeUtc(string, DateTime)\"/>\n    public abstract void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetLastAccessTimeUtc(SafeFileHandle, DateTime)\"/>\n        public abstract void SetLastAccessTimeUtc(SafeFileHandle fileHandle, DateTime lastAccessTimeUtc);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetLastWriteTime(string, DateTime)\"/>\n    public abstract void SetLastWriteTime(string path, DateTime lastWriteTime);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetLastWriteTime(SafeFileHandle, DateTime)\"/>\n        public abstract void SetLastWriteTime(SafeFileHandle fileHandle, DateTime lastWriteTime);\n#endif\n\n    /// <inheritdoc cref=\"IFile.SetLastWriteTimeUtc(string, DateTime)\"/>\n    public abstract void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc);\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetLastWriteTimeUtc(SafeFileHandle, DateTime)\"/>\n        public abstract void SetLastWriteTimeUtc(SafeFileHandle fileHandle, DateTime lastWriteTimeUtc);\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc cref=\"IFile.SetUnixFileMode(string, UnixFileMode)\"/>\n        public abstract void SetUnixFileMode(string path, UnixFileMode mode);\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc cref=\"IFile.SetUnixFileMode(SafeFileHandle, UnixFileMode)\"/>\n        public abstract void SetUnixFileMode(SafeFileHandle fileHandle, UnixFileMode mode);\n#endif\n\n    /// <inheritdoc cref=\"IFile.WriteAllBytes(string, byte[])\"/>\n    public abstract void WriteAllBytes(string path, byte[] bytes);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytes(string,ReadOnlySpan{byte})\"/>\n        public abstract void WriteAllBytes(string path, ReadOnlySpan<byte> bytes);\n#endif\n\n    /// <inheritdoc cref=\"IFile.WriteAllLines(string,IEnumerable{string})\"/>\n    public abstract void WriteAllLines(string path, IEnumerable<string> contents);\n\n    /// <inheritdoc cref=\"IFile.WriteAllLines(string,IEnumerable{string},Encoding)\"/>\n    public abstract void WriteAllLines(string path, IEnumerable<string> contents, Encoding encoding);\n\n    /// <inheritdoc cref=\"IFile.WriteAllLines(string,string[])\"/>\n    public abstract void WriteAllLines(string path, string[] contents);\n\n    /// <inheritdoc cref=\"IFile.WriteAllLines(string,string[],Encoding)\"/>\n    public abstract void WriteAllLines(string path, string[] contents, Encoding encoding);\n\n    /// <inheritdoc cref=\"IFile.WriteAllText(string,string)\"/>\n    public abstract void WriteAllText(string path, string contents);\n\n    /// <inheritdoc cref=\"IFile.WriteAllText(string,string,Encoding)\"/>\n    public abstract void WriteAllText(string path, string contents, Encoding encoding);\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char})\"/>\n        public abstract void WriteAllText(string path, ReadOnlySpan<char> contents);\n\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public abstract void WriteAllText(string path, ReadOnlySpan<char> contents, Encoding encoding);\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoAclExtensions.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n///     ACL (access control list) extension methods for <see cref=\"IFileInfo\" />.\n/// </summary>\npublic static class FileInfoAclExtensions\n{\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(FileInfo)\"/>\n#else\n        /// <inheritdoc cref=\"FileInfo.GetAccessControl()\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static FileSecurity GetAccessControl(\n        this IFileInfo fileInfo)\n    {\n        IFileSystemAclSupport aclSupport = fileInfo as IFileSystemAclSupport;\n        var fileSecurity = aclSupport?.GetAccessControl() as FileSecurity;\n        if (aclSupport == null || fileSecurity == null)\n        {\n            throw new NotSupportedException(\"The file info does not support ACL extensions\");\n        }\n\n        return fileSecurity;\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(FileInfo,AccessControlSections)\"/>\n#else\n        /// <inheritdoc cref=\"File.GetAccessControl(string,AccessControlSections)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static FileSecurity GetAccessControl(\n        this IFileInfo fileInfo,\n        AccessControlSections includeSections)\n    {\n        IFileSystemAclSupport aclSupport = fileInfo as IFileSystemAclSupport;\n        var fileSecurity = aclSupport?.GetAccessControl((IFileSystemAclSupport.AccessControlSections)includeSections) as FileSecurity;\n        if (aclSupport == null || fileSecurity == null)\n        {\n            throw new NotSupportedException(\"The file info does not support ACL extensions\");\n        }\n\n        return fileSecurity;\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.SetAccessControl(FileInfo, FileSecurity)\" />\n#else\n        /// <inheritdoc cref=\"FileInfo.SetAccessControl(FileSecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void SetAccessControl(this IFileInfo fileInfo,\n        FileSecurity fileSecurity)\n    {\n        IFileSystemAclSupport aclSupport = fileInfo as IFileSystemAclSupport;\n        if (aclSupport == null)\n        {\n            throw new NotSupportedException(\"The file info does not support ACL extensions\");\n        }\n\n        aclSupport.SetAccessControl(fileSecurity);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoBase.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileInfo\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class FileInfoBase : FileSystemInfoBase, IFileInfo\n{\n    /// <summary>\n    /// Base class for calling methods of <see cref=\"FileInfo\"/>\n    /// </summary>\n    protected FileInfoBase(IFileSystem fileSystem) : base(fileSystem)\n    {\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal FileInfoBase() { }\n\n    /// <inheritdoc cref=\"IFileInfo.AppendText\"/>\n    public abstract StreamWriter AppendText();\n\n    /// <inheritdoc cref=\"IFileInfo.CopyTo(string)\"/>\n    public abstract IFileInfo CopyTo(string destFileName);\n\n    /// <inheritdoc cref=\"IFileInfo.CopyTo(string,bool)\"/>\n    public abstract IFileInfo CopyTo(string destFileName, bool overwrite);\n\n    /// <inheritdoc cref=\"IFileInfo.Create\"/>\n    public abstract FileSystemStream Create();\n\n    /// <inheritdoc cref=\"IFileInfo.CreateText\"/>\n    public abstract StreamWriter CreateText();\n\n    /// <inheritdoc cref=\"IFileInfo.Decrypt\"/>\n    public abstract void Decrypt();\n\n    /// <inheritdoc cref=\"IFileInfo.Encrypt\"/>\n    public abstract void Encrypt();\n\n    /// <inheritdoc cref=\"IFileInfo.MoveTo(string)\"/>\n    public abstract void MoveTo(string destFileName);\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    /// <inheritdoc cref=\"IFileInfo.MoveTo(string,bool)\"/>\n    public abstract void MoveTo(string destFileName, bool overwrite);\n#endif\n\n    /// <inheritdoc cref=\"IFileInfo.Open(FileMode)\"/>\n    public abstract FileSystemStream Open(FileMode mode);\n\n    /// <inheritdoc cref=\"IFileInfo.Open(FileMode,FileAccess)\"/>\n    public abstract FileSystemStream Open(FileMode mode, FileAccess access);\n\n    /// <inheritdoc cref=\"IFileInfo.Open(FileMode,FileAccess,FileShare)\"/>\n    public abstract FileSystemStream Open(FileMode mode, FileAccess access, FileShare share);\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc cref=\"IFileInfo.Open(FileStreamOptions)\"/>\n    public abstract FileSystemStream Open(FileStreamOptions options);\n#endif\n\n    /// <inheritdoc cref=\"IFileInfo.OpenRead\"/>\n    public abstract FileSystemStream OpenRead();\n\n    /// <inheritdoc cref=\"IFileInfo.OpenText\"/>\n    public abstract StreamReader OpenText();\n\n    /// <inheritdoc cref=\"IFileInfo.OpenWrite\"/>\n    public abstract FileSystemStream OpenWrite();\n\n    /// <inheritdoc cref=\"IFileInfo.Replace(string,string)\"/>\n    public abstract IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n\n    /// <inheritdoc cref=\"IFileInfo.Replace(string,string,bool)\"/>\n    public abstract IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n\n    /// <inheritdoc cref=\"IFileInfo.Directory\"/>\n    public abstract IDirectoryInfo Directory { get; }\n\n    /// <inheritdoc cref=\"IFileInfo.DirectoryName\"/>\n    public abstract string DirectoryName { get; }\n\n    /// <inheritdoc cref=\"IFileInfo.IsReadOnly\"/>\n    public abstract bool IsReadOnly { get; set; }\n\n    /// <inheritdoc cref=\"IFileInfo.Length\"/>\n    public abstract long Length { get; }\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"FileInfo\"/> to a <see cref=\"FileInfoBase\"/>.\n    /// </summary>\n    public static implicit operator FileInfoBase(FileInfo fileInfo)\n    {\n        if (fileInfo == null)\n        {\n            return null;\n        }\n\n        return new FileInfoWrapper(new FileSystem(), fileInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoFactory.cs",
    "content": "﻿namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class FileInfoFactory : IFileInfoFactory\n{\n    private readonly IFileSystem fileSystem;\n\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"IFileInfo\"/>\n    /// </summary>\n    public FileInfoFactory(IFileSystem fileSystem)\n    {\n        this.fileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem\n        => fileSystem;\n\n\n    /// <inheritdoc />\n    public IFileInfo New(string fileName)\n    {\n        var realFileInfo = new FileInfo(fileName);\n        return new FileInfoWrapper(fileSystem, realFileInfo);\n    }\n        \n    /// <inheritdoc />\n    public IFileInfo Wrap(FileInfo fileInfo)\n    {\n        if (fileInfo == null)\n        {\n            return null;\n        }\n\n        return new FileInfoWrapper(fileSystem, fileInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileInfoWrapper.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileInfoBase\" />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileInfoWrapper : FileInfoBase, IFileSystemAclSupport\n{\n    private readonly FileInfo instance;\n\n    /// <summary>\n    /// Wrapper class for calling methods of <see cref=\"FileInfo\"/>\n    /// </summary>\n    public FileInfoWrapper(IFileSystem fileSystem, FileInfo instance) : base(fileSystem)\n    {\n        this.instance = instance ?? throw new ArgumentNullException(nameof(instance));\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override void CreateAsSymbolicLink(string pathToTarget)\n    {\n        instance.CreateAsSymbolicLink(pathToTarget);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override void Delete()\n    {\n        instance.Delete();\n    }\n\n    /// <inheritdoc />\n    public override void Refresh()\n    {\n        instance.Refresh();\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc />\n    public override IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget)\n    {\n        return instance.ResolveLinkTarget(returnFinalTarget)\n            .WrapFileSystemInfo(FileSystem);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileAttributes Attributes\n    {\n        get { return instance.Attributes; }\n        set { instance.Attributes = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTime\n    {\n        get { return instance.CreationTime; }\n        set { instance.CreationTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime CreationTimeUtc\n    {\n        get { return instance.CreationTimeUtc; }\n        set { instance.CreationTimeUtc = value; }\n    }\n\n    /// <inheritdoc />\n    public override bool Exists\n    {\n        get { return instance.Exists; }\n    }\n\n    /// <inheritdoc />\n    public override string Extension\n    {\n        get { return instance.Extension; }\n    }\n\n    /// <inheritdoc />\n    public override string FullName\n    {\n        get { return instance.FullName; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTime\n    {\n        get { return instance.LastAccessTime; }\n        set { instance.LastAccessTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastAccessTimeUtc\n    {\n        get { return instance.LastAccessTimeUtc; }\n        set { instance.LastAccessTimeUtc = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTime\n    {\n        get { return instance.LastWriteTime; }\n        set { instance.LastWriteTime = value; }\n    }\n\n    /// <inheritdoc />\n    public override DateTime LastWriteTimeUtc\n    {\n        get { return instance.LastWriteTimeUtc; }\n        set { instance.LastWriteTimeUtc = value; }\n    }\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n    /// <inheritdoc />\n    public override string LinkTarget\n    {\n        get { return instance.LinkTarget; }\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string Name\n    {\n        get { return instance.Name; }\n    }\n\n    /// <inheritdoc />\n    public override StreamWriter AppendText()\n    {\n        return instance.AppendText();\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo CopyTo(string destFileName)\n    {\n        return new FileInfoWrapper(FileSystem, instance.CopyTo(destFileName));\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo CopyTo(string destFileName, bool overwrite)\n    {\n        return new FileInfoWrapper(FileSystem, instance.CopyTo(destFileName, overwrite));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create()\n    {\n        return new FileStreamWrapper(instance.Create());\n    }\n\n    /// <inheritdoc />\n    public override StreamWriter CreateText()\n    {\n        return instance.CreateText();\n    }\n\n    /// <inheritdoc />\n    [SupportedOSPlatform(\"windows\")]\n    public override void Decrypt()\n    {\n        instance.Decrypt();\n    }\n\n    /// <inheritdoc />\n    [SupportedOSPlatform(\"windows\")]\n    public override void Encrypt()\n    {\n        instance.Encrypt();\n    }\n\n    /// <inheritdoc />\n    public override void MoveTo(string destFileName)\n    {\n        instance.MoveTo(destFileName);\n    }\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    /// <inheritdoc />\n    public override void MoveTo(string destFileName, bool overwrite)\n    {\n        instance.MoveTo(destFileName, overwrite);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode)\n    {\n        return new FileStreamWrapper(instance.Open(mode));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode, FileAccess access)\n    {\n        return new FileStreamWrapper(instance.Open(mode, access));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileMode mode, FileAccess access, FileShare share)\n    {\n        return new FileStreamWrapper(instance.Open(mode, access, share));\n    }\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc />\n    public override FileSystemStream Open(FileStreamOptions options)\n    {\n        return new FileStreamWrapper(instance.Open(options));\n    }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenRead()\n    {\n        return new FileStreamWrapper(instance.OpenRead());\n    }\n\n    /// <inheritdoc />\n    public override StreamReader OpenText()\n    {\n        return instance.OpenText();\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenWrite()\n    {\n        return new FileStreamWrapper(instance.OpenWrite());\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo Replace(string destinationFileName, string destinationBackupFileName)\n    {\n        return new FileInfoWrapper(FileSystem, instance.Replace(destinationFileName, destinationBackupFileName));\n    }\n\n    /// <inheritdoc />\n    public override IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors)\n    {\n        return new FileInfoWrapper(FileSystem, instance.Replace(destinationFileName, destinationBackupFileName, ignoreMetadataErrors));\n    }\n\n    /// <inheritdoc />\n    public override IDirectoryInfo Directory\n    {\n        get { return new DirectoryInfoWrapper(FileSystem, instance.Directory); }\n    }\n\n    /// <inheritdoc />\n    public override string DirectoryName\n    {\n        get { return instance.DirectoryName; }\n    }\n\n    /// <inheritdoc />\n    public override bool IsReadOnly\n    {\n        get { return instance.IsReadOnly; }\n        set { instance.IsReadOnly = value; }\n    }\n\n    /// <inheritdoc />\n    public override long Length\n    {\n        get { return instance.Length; }\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        return instance.ToString();\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return instance.GetAccessControl();\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        return instance.GetAccessControl((AccessControlSections)includeSections);\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        if (value is FileSecurity fileSecurity)\n        {\n            this.instance.SetAccessControl(fileSecurity);\n        }\n        else\n        {\n            throw new ArgumentException(\"value must be of type `FileSecurity`\");\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamAclExtensions.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\n/// <summary>\n///     ACL (access control list) extension methods for <see cref=\"FileSystemStream\" />.\n/// </summary>\npublic static class FileStreamAclExtensions\n{\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.GetAccessControl(FileStream)\" />\n#else\n        /// <inheritdoc cref=\"FileStream.GetAccessControl()\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static FileSecurity GetAccessControl(this FileSystemStream fileStream)\n    {\n        IFileSystemAclSupport aclSupport = fileStream as IFileSystemAclSupport;\n        var fileSecurity = aclSupport?.GetAccessControl() as FileSecurity;\n        if (aclSupport == null || fileSecurity == null)\n        {\n            throw new NotSupportedException(\"The file stream does not support ACL extensions\");\n        }\n\n        return fileSecurity;\n    }\n\n#if FEATURE_FILE_SYSTEM_ACL_EXTENSIONS\n    /// <inheritdoc cref=\"FileSystemAclExtensions.SetAccessControl(FileStream, FileSecurity)\" />\n#else\n        /// <inheritdoc cref=\"FileStream.SetAccessControl(FileSecurity)\"/>\n#endif\n    [SupportedOSPlatform(\"windows\")]\n    public static void SetAccessControl(this FileSystemStream fileStream,\n        FileSecurity fileSecurity)\n    {\n        IFileSystemAclSupport aclSupport = fileStream as IFileSystemAclSupport;\n        if (aclSupport == null)\n        {\n            throw new NotSupportedException(\"The file info does not support ACL extensions\");\n        }\n\n        aclSupport.SetAccessControl(fileSecurity);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamFactory.cs",
    "content": "﻿using Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal sealed class FileStreamFactory : IFileStreamFactory\n{\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"FileSystemStream\"/>\n    /// </summary>\n    public FileStreamFactory(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access)\n        => new FileStreamWrapper(new FileStream(handle, access));\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access, int bufferSize)\n        => new FileStreamWrapper(new FileStream(handle, access, bufferSize));\n\n    /// <inheritdoc />\n    public FileSystemStream New(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync)\n        => new FileStreamWrapper(new FileStream(handle, access, bufferSize, isAsync));\n\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode)\n        => new FileStreamWrapper(new FileStream(path, mode));\n\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access)\n        => new FileStreamWrapper(new FileStream(path, mode, access));\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share)\n        => new FileStreamWrapper(new FileStream(path, mode, access, share));\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize)\n        => new FileStreamWrapper(new FileStream(path, mode, access, share, bufferSize));\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync)\n        => new FileStreamWrapper(new FileStream(path, mode, access, share, bufferSize, useAsync));\n\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize,\n        FileOptions options)\n        => new FileStreamWrapper(new FileStream(path, mode, access, share, bufferSize, options));\n\n#if FEATURE_FILESTREAM_OPTIONS\n    /// <inheritdoc />\n    public FileSystemStream New(string path, FileStreamOptions options)\n        => new FileStreamWrapper(new FileStream(path, options));\n#endif\n\n    /// <inheritdoc />\n    public FileSystemStream Wrap(FileStream fileStream)\n        => new FileStreamWrapper(fileStream);\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileStreamWrapper.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\n\nnamespace System.IO.Abstractions;\n\ninternal sealed class FileStreamWrapper : FileSystemStream, IFileSystemAclSupport\n{\n    private readonly FileStream fileStream;\n\n    public FileStreamWrapper(FileStream fileStream)\n        : base(fileStream, fileStream.Name, fileStream.IsAsync)\n\n    {\n        this.fileStream = fileStream;\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl()\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl()\n    {\n        return fileStream.GetAccessControl();\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.GetAccessControl(IFileSystemAclSupport.AccessControlSections)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public object GetAccessControl(IFileSystemAclSupport.AccessControlSections includeSections)\n    {\n        throw new NotSupportedException(\"GetAccessControl with includeSections is not supported for FileStreams\");\n    }\n\n    /// <inheritdoc cref=\"IFileSystemAclSupport.SetAccessControl(object)\" />\n    [SupportedOSPlatform(\"windows\")]\n    public void SetAccessControl(object value)\n    {\n        if (value is FileSecurity fileSecurity)\n        {\n            this.fileStream.SetAccessControl(fileSecurity);\n        }\n        else\n        {\n            throw new ArgumentException(\"value must be of type `FileSecurity`\");\n        }\n    }\n\n    /// <inheritdoc />\n    public override void Flush(bool flushToDisk)\n        => fileStream.Flush(flushToDisk);\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystem.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileSystem : FileSystemBase\n{\n    /// <inheritdoc />\n    public FileSystem()\n    {\n        DriveInfo = new DriveInfoFactory(this);\n        DirectoryInfo = new DirectoryInfoFactory(this);\n        FileInfo = new FileInfoFactory(this);\n        FileVersionInfo = new FileVersionInfoFactory(this);\n        Path = new PathWrapper(this);\n        File = new FileWrapper(this);\n        Directory = new DirectoryWrapper(this);\n        FileStream = new FileStreamFactory(this);\n        FileSystemWatcher = new FileSystemWatcherFactory(this);\n    }\n\n    /// <inheritdoc />\n    public override IDirectory Directory { get; }\n\n    /// <inheritdoc />\n    public override IFile File { get; }\n\n    /// <inheritdoc />\n    public override IFileInfoFactory FileInfo { get; }\n\n    /// <inheritdoc />\n    public override IFileVersionInfoFactory FileVersionInfo { get; }\n\n    /// <inheritdoc />\n    public override IFileStreamFactory FileStream { get; }\n\n    /// <inheritdoc />\n    public override IPath Path { get; }\n\n    /// <inheritdoc />\n    public override IDirectoryInfoFactory DirectoryInfo { get; }\n\n    /// <inheritdoc />\n    public override IDriveInfoFactory DriveInfo { get; }\n\n    /// <inheritdoc />\n    public override IFileSystemWatcherFactory FileSystemWatcher { get; }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemBase.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class FileSystemBase : IFileSystem\n{\n    /// <inheritdoc />\n    public abstract IDirectory Directory { get; }\n\n    /// <inheritdoc />\n    public abstract IFile File { get; }\n\n    /// <inheritdoc />\n    public abstract IFileInfoFactory FileInfo { get; }\n\n    /// <inheritdoc />\n    public abstract IFileVersionInfoFactory FileVersionInfo { get; }\n\n    /// <inheritdoc />\n    public abstract IFileStreamFactory FileStream { get; }\n\n    /// <inheritdoc />\n    public abstract IPath Path { get; }\n\n    /// <inheritdoc />\n    public abstract IDirectoryInfoFactory DirectoryInfo { get; }\n\n    /// <inheritdoc />\n    public abstract IDriveInfoFactory DriveInfo { get; }\n\n    /// <inheritdoc />\n    public abstract IFileSystemWatcherFactory FileSystemWatcher { get; }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemInfoBase.cs",
    "content": "﻿using System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileSystemInfo\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class FileSystemInfoBase : IFileSystemInfo\n{\n    /// <summary>\n    /// Base class for calling methods of <see cref=\"FileSystemInfo\"/>\n    /// </summary>\n    protected FileSystemInfoBase(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal FileSystemInfoBase() { }\n\n    /// <summary>\n    /// Exposes the underlying filesystem implementation. This is useful for implementing extension methods.\n    /// </summary>\n    public IFileSystem FileSystem { get; }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc cref=\"FileSystemInfo.CreateAsSymbolicLink(string)\"/>\n    public abstract void CreateAsSymbolicLink(string pathToTarget);\n#endif\n\n    /// <inheritdoc cref=\"FileSystemInfo.Delete\"/>\n    public abstract void Delete();\n\n    /// <inheritdoc cref=\"FileSystemInfo.Refresh\"/>\n    public abstract void Refresh();\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n    /// <inheritdoc cref=\"FileSystemInfo.ResolveLinkTarget(bool)\"/>\n    public abstract IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget);\n#endif\n\n    /// <inheritdoc cref=\"FileSystemInfo.Attributes\"/>\n    public abstract FileAttributes Attributes { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.CreationTime\"/>\n    public abstract DateTime CreationTime { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.CreationTimeUtc\"/>\n    public abstract DateTime CreationTimeUtc { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.Exists\"/>\n    public abstract bool Exists { get; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.Extension\"/>\n    public abstract string Extension { get; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.FullName\"/>\n    public abstract string FullName { get; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.LastAccessTime\"/>\n    public abstract DateTime LastAccessTime { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.LastAccessTimeUtc\"/>\n    public abstract DateTime LastAccessTimeUtc { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.LastWriteTime\"/>\n    public abstract DateTime LastWriteTime { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemInfo.LastWriteTimeUtc\"/>\n    public abstract DateTime LastWriteTimeUtc { get; set; }\n\n#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET\n    /// <inheritdoc cref=\"FileSystemInfo.LinkTarget\"/>\n    public abstract string LinkTarget { get; }\n#endif\n\n    /// <inheritdoc cref=\"FileSystemInfo.Name\"/>\n    public abstract string Name { get; }\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc cref=\"IFileSystemInfo.UnixFileMode\"/>\n        public UnixFileMode UnixFileMode\n        {\n            get;\n            [UnsupportedOSPlatform(\"windows\")] set;\n        }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherBase.cs",
    "content": "﻿using System.ComponentModel;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"FileSystemWatcher\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class FileSystemWatcherBase : IFileSystemWatcher\n{\n    /// <inheritdoc />\n    public abstract IFileSystem FileSystem { get; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.IncludeSubdirectories\"/>\n    public abstract bool IncludeSubdirectories { get; set; }\n\n    /// <inheritdoc cref=\"ComponentModel.Container\"/>\n    public abstract IContainer Container { get; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.EnableRaisingEvents\"/>\n    public abstract bool EnableRaisingEvents { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Filter\"/>\n    public abstract string Filter { get; set; }\n\n#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS\n    /// <inheritdoc cref=\"FileSystemWatcher.Filters\"/>\n    public abstract Collections.ObjectModel.Collection<string> Filters { get; }\n#endif\n\n    /// <inheritdoc cref=\"FileSystemWatcher.InternalBufferSize\"/>\n    public abstract int InternalBufferSize { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.NotifyFilter\"/>\n    public abstract NotifyFilters NotifyFilter { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Path\"/>\n    public abstract string Path { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Site\"/>\n    public abstract ISite Site { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.SynchronizingObject\"/>\n    public abstract ISynchronizeInvoke SynchronizingObject { get; set; }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Changed\"/>\n    public virtual event FileSystemEventHandler Changed;\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Created\"/>\n    public virtual event FileSystemEventHandler Created;\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Deleted\"/>\n    public virtual event FileSystemEventHandler Deleted;\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Error\"/>\n    public virtual event ErrorEventHandler Error;\n\n    /// <inheritdoc cref=\"FileSystemWatcher.Renamed\"/>\n    public virtual event RenamedEventHandler Renamed;\n\n    /// <inheritdoc cref=\"FileSystemWatcher.BeginInit\"/>\n    public abstract void BeginInit();\n\n    /// <inheritdoc />\n    public void Dispose()\n    {\n        Dispose(true);\n        GC.SuppressFinalize(this);\n    }\n\n    /// <inheritdoc cref=\"FileSystemWatcher.EndInit\"/>\n    public abstract void EndInit();\n        \n    /// <inheritdoc cref=\"FileSystemWatcher.WaitForChanged(WatcherChangeTypes)\"/>\n    public abstract IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType);\n\n    /// <inheritdoc cref=\"FileSystemWatcher.WaitForChanged(WatcherChangeTypes,int)\"/>\n    public abstract IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, int timeout);\n\n#if FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN\n        /// <inheritdoc cref=\"FileSystemWatcher.WaitForChanged(WatcherChangeTypes,TimeSpan)\"/>\n        public abstract IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, TimeSpan timeout);\n#endif\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"FileSystemWatcher\"/> to a <see cref=\"FileSystemWatcherBase\"/>.\n    /// </summary>\n    public static implicit operator FileSystemWatcherBase(FileSystemWatcher watcher)\n    {\n        if (watcher == null)\n        {\n            return null;\n        }\n\n        return new FileSystemWatcherWrapper(new FileSystem(), watcher);\n    }\n\n    /// <summary>\n    /// Callback executed during <see cref=\"IDisposable.Dispose()\"/>\n    /// </summary>\n    public virtual void Dispose(bool disposing)\n    {\n        // do nothing\n    }\n\n    /// <summary>\n    /// Invokes the <see cref=\"Created\"/> event.\n    /// </summary>\n    protected void OnCreated(object sender, FileSystemEventArgs args)\n    {\n        Created?.Invoke(sender, args);\n    }\n\n    /// <summary>\n    /// Invokes the <see cref=\"Changed\"/> event.\n    /// </summary>\n    protected void OnChanged(object sender, FileSystemEventArgs args)\n    {\n        Changed?.Invoke(sender, args);\n    }\n\n    /// <summary>\n    /// Invokes the <see cref=\"Deleted\"/> event.\n    /// </summary>\n    protected void OnDeleted(object sender, FileSystemEventArgs args)\n    {\n        Deleted?.Invoke(sender, args);\n    }\n\n    /// <summary>\n    /// Invokes the <see cref=\"Renamed\"/> event.\n    /// </summary>\n    protected void OnRenamed(object sender, RenamedEventArgs args)\n    {\n        Renamed?.Invoke(sender, args);\n    }\n\n    /// <summary>\n    /// Invokes the <see cref=\"Error\"/> event.\n    /// </summary>\n    protected void OnError(object sender, ErrorEventArgs args)\n    {\n        Error?.Invoke(sender, args);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherFactory.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileSystemWatcherFactory : IFileSystemWatcherFactory\n{\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"IFileSystemWatcher\"/>\n    /// </summary>\n    public FileSystemWatcherFactory(IFileSystem fileSystem)\n    {\n        FileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New()\n        => new FileSystemWatcherWrapper(FileSystem);\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New(string path)\n        => new FileSystemWatcherWrapper(FileSystem, path);\n\n    /// <inheritdoc />\n    public IFileSystemWatcher New(string path, string filter)\n        => new FileSystemWatcherWrapper(FileSystem, path, filter);\n\n    /// <inheritdoc />\n    public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)\n    {\n        if (fileSystemWatcher == null)\n        {\n            return null;\n        }\n\n        return new FileSystemWatcherWrapper(FileSystem, fileSystemWatcher);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileSystemWatcherWrapper.cs",
    "content": "﻿using System.ComponentModel;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileSystemWatcherWrapper : FileSystemWatcherBase\n{\n#if FEATURE_SERIALIZABLE\n    [NonSerialized]\n#endif\n    private readonly FileSystemWatcher watcher;\n\n    /// <inheritdoc />\n    public FileSystemWatcherWrapper(IFileSystem fileSystem)\n        : this(fileSystem, new FileSystemWatcher())\n    {\n        // do nothing\n    }\n\n    /// <inheritdoc />\n    public FileSystemWatcherWrapper(IFileSystem fileSystem, string path)\n        : this(fileSystem, new FileSystemWatcher(path))\n    {\n        // do nothing\n    }\n\n    /// <inheritdoc />\n    public FileSystemWatcherWrapper(IFileSystem fileSystem, string path, string filter)\n        : this(fileSystem, new FileSystemWatcher(path, filter))\n    {\n        // do nothing\n    }\n\n    /// <inheritdoc />\n    public FileSystemWatcherWrapper(IFileSystem fileSystem, FileSystemWatcher watcher)\n    {\n        FileSystem = fileSystem;\n        this.watcher = watcher ?? throw new ArgumentNullException(nameof(watcher));\n        this.watcher.Created += OnCreated;\n        this.watcher.Changed += OnChanged;\n        this.watcher.Deleted += OnDeleted;\n        this.watcher.Error += OnError;\n        this.watcher.Renamed += OnRenamed;\n    }\n\n    /// <inheritdoc />\n    public override IFileSystem FileSystem { get; }\n\n    /// <inheritdoc />\n    public override bool IncludeSubdirectories\n    {\n        get { return watcher.IncludeSubdirectories; }\n        set { watcher.IncludeSubdirectories = value; }\n    }\n\n    /// <inheritdoc />\n    public override IContainer Container\n        => watcher.Container;\n\n    /// <inheritdoc />\n    public override bool EnableRaisingEvents\n    {\n        get { return watcher.EnableRaisingEvents; }\n        set { watcher.EnableRaisingEvents = value; }\n    }\n\n    /// <inheritdoc />\n    public override string Filter\n    {\n        get { return watcher.Filter; }\n        set { watcher.Filter = value; }\n    }\n\n#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS\n        /// <inheritdoc />\n        public override Collections.ObjectModel.Collection<string> Filters\n        {\n            get { return watcher.Filters; }\n        }\n#endif\n\n    /// <inheritdoc />\n    public override int InternalBufferSize\n    {\n        get { return watcher.InternalBufferSize; }\n        set { watcher.InternalBufferSize = value; }\n    }\n\n    /// <inheritdoc />\n    public override NotifyFilters NotifyFilter\n    {\n        get { return watcher.NotifyFilter; }\n        set { watcher.NotifyFilter = value; }\n    }\n\n    /// <inheritdoc />\n    public override string Path\n    {\n        get { return watcher.Path; }\n        set { watcher.Path = value; }\n    }\n\n    /// <inheritdoc />\n    public override ISite Site\n    {\n        get { return watcher.Site; }\n        set { watcher.Site = value; }\n    }\n\n    /// <inheritdoc />\n    public override ISynchronizeInvoke SynchronizingObject\n    {\n        get { return watcher.SynchronizingObject; }\n        set { watcher.SynchronizingObject = value; }\n    }\n\n    /// <inheritdoc />\n    public override void BeginInit()\n    {\n        watcher.BeginInit();\n    }\n\n    /// <inheritdoc />\n    public override void Dispose(bool disposing)\n    {\n        if (disposing)\n        {\n            watcher.Created -= OnCreated;\n            watcher.Changed -= OnChanged;\n            watcher.Deleted -= OnDeleted;\n            watcher.Error -= OnError;\n            watcher.Renamed -= OnRenamed;\n            watcher.Dispose();\n        }\n\n        base.Dispose(disposing);\n    }\n\n    /// <inheritdoc />\n    public override void EndInit()\n    {\n        watcher.EndInit();\n    }\n\n    /// <inheritdoc />\n    public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType)\n    {\n        return new WaitForChangedResultWrapper(watcher.WaitForChanged(changeType));\n    }\n\n    /// <inheritdoc />\n    public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, int timeout)\n    {\n        return new WaitForChangedResultWrapper(watcher.WaitForChanged(changeType, timeout));\n    }\n\n#if FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN\n        /// <inheritdoc />\n        public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, TimeSpan timeout)\n        {\n            return new WaitForChangedResultWrapper(watcher.WaitForChanged(changeType, timeout));\n        }\n#endif\n\n    private readonly struct WaitForChangedResultWrapper\n        : IWaitForChangedResult, IEquatable<WaitForChangedResultWrapper>\n    {\n        private readonly WaitForChangedResult instance;\n\n        public WaitForChangedResultWrapper(WaitForChangedResult instance)\n        {\n            this.instance = instance;\n        }\n\n        /// <inheritdoc cref=\"IWaitForChangedResult.ChangeType\" />\n        public WatcherChangeTypes ChangeType\n            => instance.ChangeType;\n\n        /// <inheritdoc cref=\"IWaitForChangedResult.Name\" />\n        public string Name\n            => instance.Name;\n\n        /// <inheritdoc cref=\"IWaitForChangedResult.OldName\" />\n        public string OldName\n            => instance.OldName;\n\n        /// <inheritdoc cref=\"IWaitForChangedResult.TimedOut\" />\n        public bool TimedOut\n            => instance.TimedOut;\n\n        /// <inheritdoc cref=\"IEquatable{WaitForChangedResultWrapper}.Equals(WaitForChangedResultWrapper)\" />\n        public bool Equals(WaitForChangedResultWrapper other)\n        {\n            return instance.Equals(other.instance);\n        }\n\n        /// <inheritdoc cref=\"object.Equals(object)\" />\n        public override bool Equals(object obj)\n        {\n            return obj is WaitForChangedResultWrapper other\n                   && Equals(other);\n        }\n\n        /// <inheritdoc cref=\"object.GetHashCode()\" />\n        public override int GetHashCode()\n        {\n            return instance.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoBase.cs",
    "content": "﻿using System.Diagnostics;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"IFileVersionInfo\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class FileVersionInfoBase : IFileVersionInfo\n{\n    /// <inheritdoc cref=\"IFileVersionInfo.Comments\" />\n    public abstract string Comments { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.CompanyName\" />\n    public abstract string CompanyName { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileBuildPart\" />\n    public abstract int FileBuildPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileDescription\" />\n    public abstract string FileDescription { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileMajorPart\" />\n    public abstract int FileMajorPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileMinorPart\" />\n    public abstract int FileMinorPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileName\" />\n    public abstract string FileName { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FilePrivatePart\" />\n    public abstract int FilePrivatePart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.FileVersion\" />\n    public abstract string FileVersion { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.InternalName\" />\n    public abstract string InternalName { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.IsDebug\" />\n    public abstract bool IsDebug { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.IsPatched\" />\n    public abstract bool IsPatched { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.IsPrivateBuild\" />\n    public abstract bool IsPrivateBuild { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.IsPreRelease\" />\n    public abstract bool IsPreRelease { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.IsSpecialBuild\" />\n    public abstract bool IsSpecialBuild { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.Language\" />\n    public abstract string Language { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.LegalCopyright\" />\n    public abstract string LegalCopyright { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.LegalTrademarks\" />\n    public abstract string LegalTrademarks { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.OriginalFilename\" />\n    public abstract string OriginalFilename { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.PrivateBuild\" />\n    public abstract string PrivateBuild { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductBuildPart\" />\n    public abstract int ProductBuildPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductMajorPart\" />\n    public abstract int ProductMajorPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductMinorPart\" />\n    public abstract int ProductMinorPart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductName\" />\n    public abstract string ProductName { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductPrivatePart\" />\n    public abstract int ProductPrivatePart { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.ProductVersion\" />\n    public abstract string ProductVersion { get; }\n\n    /// <inheritdoc cref=\"IFileVersionInfo.SpecialBuild\" />\n    public abstract string SpecialBuild { get; }\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"FileVersionInfo\"/> to a <see cref=\"FileVersionInfoBase\"/>.\n    /// </summary>\n    public static implicit operator FileVersionInfoBase(FileVersionInfo fileVersionInfo)\n    {\n        if (fileVersionInfo == null)\n        {\n            return null;\n        }\n\n        return new FileVersionInfoWrapper(fileVersionInfo);\n    }\n\n    /// <inheritdoc cref=\"FileVersionInfo.ToString()\" />\n    public new abstract string ToString();\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoFactory.cs",
    "content": "﻿namespace System.IO.Abstractions;\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\ninternal class FileVersionInfoFactory : IFileVersionInfoFactory\n{\n    private readonly IFileSystem fileSystem;\n\n    /// <summary>\n    /// Base factory class for creating a <see cref=\"IFileVersionInfo\"/>\n    /// </summary>\n    public FileVersionInfoFactory(IFileSystem fileSystem)\n    {\n        this.fileSystem = fileSystem;\n    }\n\n    /// <inheritdoc />\n    public IFileSystem FileSystem => fileSystem;\n\n    /// <inheritdoc />\n    public IFileVersionInfo GetVersionInfo(string fileName)\n    {\n        Diagnostics.FileVersionInfo fileVersionInfo = Diagnostics.FileVersionInfo.GetVersionInfo(fileName);\n\n        return new FileVersionInfoWrapper(fileVersionInfo);\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileVersionInfoWrapper.cs",
    "content": "﻿using System.Diagnostics;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class FileVersionInfoWrapper : FileVersionInfoBase\n{\n    private readonly FileVersionInfo instance;\n\n    /// <inheritdoc />\n    public FileVersionInfoWrapper(FileVersionInfo fileVersionInfo)\n    {\n        instance = fileVersionInfo;\n    }\n\n    /// <inheritdoc/>\n    public override string Comments\n    {\n        get { return instance.Comments; }\n    }\n\n    /// <inheritdoc/>\n    public override string CompanyName\n    {\n        get { return instance.CompanyName; }\n    }\n\n    /// <inheritdoc/>\n    public override int FileBuildPart\n    {\n        get { return instance.FileBuildPart; }\n    }\n\n    /// <inheritdoc/>\n    public override string FileDescription\n    {\n        get { return instance.FileDescription; }\n    }\n\n    /// <inheritdoc/>\n    public override int FileMajorPart\n    {\n        get { return instance.FileMajorPart; }\n    }\n\n    /// <inheritdoc/>\n    public override int FileMinorPart\n    {\n        get { return instance.FileMinorPart; }\n    }\n\n    /// <inheritdoc/>\n    public override string FileName\n    {\n        get { return instance.FileName; }\n    }\n\n    /// <inheritdoc/>\n    public override int FilePrivatePart\n    {\n        get { return instance.FilePrivatePart; }\n    }\n\n    /// <inheritdoc/>\n    public override string FileVersion\n    {\n        get { return instance.FileVersion; }\n    }\n\n    /// <inheritdoc/>\n    public override string InternalName\n    {\n        get { return instance.InternalName; }\n    }\n\n    /// <inheritdoc/>\n    public override bool IsDebug\n    {\n        get { return instance.IsDebug; }\n    }\n\n    /// <inheritdoc/>\n    public override bool IsPatched\n    {\n        get { return instance.IsPatched; }\n    }\n\n    /// <inheritdoc/>\n    public override bool IsPrivateBuild\n    {\n        get { return instance.IsPrivateBuild; }\n    }\n\n    /// <inheritdoc/>\n    public override bool IsPreRelease\n    {\n        get { return instance.IsPreRelease; }\n    }\n\n    /// <inheritdoc/>\n    public override bool IsSpecialBuild\n    {\n        get { return instance.IsSpecialBuild; }\n    }\n\n    /// <inheritdoc/>\n    public override string Language\n    {\n        get { return instance.Language; }\n    }\n\n    /// <inheritdoc/>\n    public override string LegalCopyright\n    {\n        get { return instance.LegalCopyright; }\n    }\n\n    /// <inheritdoc/>\n    public override string LegalTrademarks\n    {\n        get { return instance.LegalTrademarks; }\n    }\n\n    /// <inheritdoc/>\n    public override string OriginalFilename\n    {\n        get { return instance.OriginalFilename; }\n    }\n\n    /// <inheritdoc/>\n    public override string PrivateBuild\n    {\n        get { return instance.PrivateBuild; }\n    }\n\n    /// <inheritdoc/>\n    public override int ProductBuildPart\n    {\n        get { return instance.ProductBuildPart; }\n    }\n\n    /// <inheritdoc/>\n    public override int ProductMajorPart\n    {\n        get { return instance.ProductMajorPart; }\n    }\n\n    /// <inheritdoc/>\n    public override int ProductMinorPart\n    {\n        get { return instance.ProductMinorPart; }\n    }\n\n    /// <inheritdoc/>\n    public override string ProductName\n    {\n        get { return instance.ProductName; }\n    }\n\n    /// <inheritdoc/>\n    public override int ProductPrivatePart\n    {\n        get { return instance.ProductPrivatePart; }\n    }\n\n    /// <inheritdoc/>\n    public override string ProductVersion\n    {\n        get { return instance.ProductVersion; }\n    }\n\n    /// <inheritdoc/>\n    public override string SpecialBuild\n    {\n        get { return instance.SpecialBuild; }\n    }\n\n    /// <inheritdoc cref=\"FileVersionInfo.ToString\" />\n    public override string ToString()\n    {\n        return instance.ToString();\n    }\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.Async.cs",
    "content": "﻿#if FEATURE_ASYNC_FILE\n\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Threading;\n\nnamespace System.IO.Abstractions\n{\n    partial class FileWrapper\n    {\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,byte[],CancellationToken)\"/>\n        public override Task AppendAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllBytesAsync(path, bytes, cancellationToken);\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public override Task AppendAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllBytesAsync(path, bytes, cancellationToken);\n        }\n#endif\n        /// <inheritdoc />\n        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllLinesAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task AppendAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllLinesAsync(path, contents, encoding, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task AppendAllTextAsync(string path, string contents, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllTextAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task AppendAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllTextAsync(path, contents, encoding, cancellationToken);\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllTextAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public override Task AppendAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default)\n        {\n            return File.AppendAllTextAsync(path, contents, encoding, cancellationToken);\n        }\n#endif\n\n        /// <inheritdoc />\n        public override Task<byte[]> ReadAllBytesAsync(string path, CancellationToken cancellationToken = default)\n        {\n            return File.ReadAllBytesAsync(path, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task<string[]> ReadAllLinesAsync(string path, CancellationToken cancellationToken = default)\n        {\n            return File.ReadAllLinesAsync(path, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task<string[]> ReadAllLinesAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.ReadAllLinesAsync(path, encoding, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task<string> ReadAllTextAsync(string path, CancellationToken cancellationToken = default)\n        {\n            return File.ReadAllTextAsync(path, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task<string> ReadAllTextAsync(string path, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.ReadAllTextAsync(path, encoding, cancellationToken);\n        }\n\n#if FEATURE_READ_LINES_ASYNC\n        /// <inheritdoc />\n        public override IAsyncEnumerable<string> ReadLinesAsync(string path,\n            CancellationToken cancellationToken = default)\n            => File.ReadLinesAsync(path, cancellationToken);\n\n        /// <inheritdoc />\n        public override IAsyncEnumerable<string> ReadLinesAsync(string path, Encoding encoding,\n            CancellationToken cancellationToken = default)\n            => File.ReadLinesAsync(path, encoding, cancellationToken);\n#endif\n\n        /// <inheritdoc />\n        public override Task WriteAllBytesAsync(string path, byte[] bytes, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllBytesAsync(path, bytes, cancellationToken);\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytesAsync(string,ReadOnlyMemory{byte},CancellationToken)\"/>\n        public override Task WriteAllBytesAsync(string path, ReadOnlyMemory<byte> bytes, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllBytesAsync(path, bytes, cancellationToken);\n        }\n#endif\n\n        /// <inheritdoc />\n        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllLinesAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task WriteAllLinesAsync(string path, IEnumerable<string> contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllLinesAsync(path, contents, encoding, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task WriteAllTextAsync(string path, string contents, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllTextAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc />\n        public override Task WriteAllTextAsync(string path, string contents, Encoding encoding, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllTextAsync(path, contents, encoding, cancellationToken);\n        }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},CancellationToken)\"/>\n        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllTextAsync(path, contents, cancellationToken);\n        }\n\n        /// <inheritdoc cref=\"IFile.WriteAllTextAsync(string,ReadOnlyMemory{char},Encoding,CancellationToken)\"/>\n        public override Task WriteAllTextAsync(string path, ReadOnlyMemory<char> contents, Encoding encoding,\n            CancellationToken cancellationToken = default)\n        {\n            return File.WriteAllTextAsync(path, contents, encoding, cancellationToken);\n        }\n#endif\n    }\n}\n#endif\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/FileWrapper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\n\nnamespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic partial class FileWrapper : FileBase\n{\n    /// <inheritdoc />\n    public FileWrapper(IFileSystem fileSystem) : base(fileSystem)\n    {\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,byte[])\"/>\n        public override void AppendAllBytes(string path, byte[] bytes)\n        {\n            File.AppendAllBytes(path, bytes);\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllBytes(string,ReadOnlySpan{byte})\"/>\n        public override void AppendAllBytes(string path, ReadOnlySpan<byte> bytes)\n        {\n            File.AppendAllBytes(path, bytes);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void AppendAllLines(string path, IEnumerable<string> contents)\n    {\n        File.AppendAllLines(path, contents);\n    }\n\n    /// <inheritdoc />\n    public override void AppendAllLines(string path, IEnumerable<string> contents, Encoding encoding)\n    {\n        File.AppendAllLines(path, contents, encoding);\n    }\n\n\n    /// <inheritdoc />\n    public override void AppendAllText(string path, string contents)\n    {\n        File.AppendAllText(path, contents);\n    }\n\n    /// <inheritdoc />\n    public override void AppendAllText(string path, string contents, Encoding encoding)\n    {\n        File.AppendAllText(path, contents, encoding);\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char})\"/>\n        public override void AppendAllText(string path, ReadOnlySpan<char> contents)\n        {\n            File.AppendAllText(path, contents);\n        }\n\n        /// <inheritdoc cref=\"IFile.AppendAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public override void AppendAllText(string path, ReadOnlySpan<char> contents, Encoding encoding)\n        {\n            File.AppendAllText(path, contents, encoding);\n        }\n#endif\n        \n    /// <inheritdoc />\n    public override StreamWriter AppendText(string path)\n    {\n        return File.AppendText(path);\n    }\n\n    /// <inheritdoc />\n    public override void Copy(string sourceFileName, string destFileName)\n    {\n        File.Copy(sourceFileName, destFileName);\n    }\n\n    /// <inheritdoc />\n    public override void Copy(string sourceFileName, string destFileName, bool overwrite)\n    {\n        File.Copy(sourceFileName, destFileName, overwrite);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path)\n    {\n        return new FileStreamWrapper(File.Create(path));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path, int bufferSize)\n    {\n        return new FileStreamWrapper(File.Create(path, bufferSize));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Create(string path, int bufferSize, FileOptions options)\n    {\n        return new FileStreamWrapper(File.Create(path, bufferSize, options));\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget)\n        {\n            return File.CreateSymbolicLink(path, pathToTarget)\n                .WrapFileSystemInfo(FileSystem);\n        }\n#endif\n    /// <inheritdoc />\n    public override StreamWriter CreateText(string path)\n    {\n        return File.CreateText(path);\n    }\n\n    /// <inheritdoc />\n    [SupportedOSPlatform(\"windows\")]\n    public override void Decrypt(string path)\n    {\n        File.Decrypt(path);\n    }\n\n    /// <inheritdoc />\n    public override void Delete(string path)\n    {\n        File.Delete(path);\n    }\n\n    /// <inheritdoc />\n    [SupportedOSPlatform(\"windows\")]\n    public override void Encrypt(string path)\n    {\n        File.Encrypt(path);\n    }\n\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        return File.Exists(path);\n    }\n\n    /// <inheritdoc />\n    public override FileAttributes GetAttributes(string path)\n    {\n        return File.GetAttributes(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override FileAttributes GetAttributes(SafeFileHandle fileHandle)\n        {\n            return File.GetAttributes(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTime(string path)\n    {\n        return File.GetCreationTime(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetCreationTime(SafeFileHandle fileHandle)\n        {\n            return File.GetCreationTime(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetCreationTimeUtc(string path)\n    {\n        return File.GetCreationTimeUtc(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetCreationTimeUtc(SafeFileHandle fileHandle)\n        {\n            return File.GetCreationTimeUtc(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTime(string path)\n    {\n        return File.GetLastAccessTime(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastAccessTime(SafeFileHandle fileHandle)\n        {\n            return File.GetLastAccessTime(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastAccessTimeUtc(string path)\n    {\n        return File.GetLastAccessTimeUtc(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastAccessTimeUtc(SafeFileHandle fileHandle)\n        {\n            return File.GetLastAccessTimeUtc(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTime(string path)\n    {\n        return File.GetLastWriteTime(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastWriteTime(SafeFileHandle fileHandle)\n        {\n            return File.GetLastWriteTime(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override DateTime GetLastWriteTimeUtc(string path)\n    {\n        return File.GetLastWriteTimeUtc(path);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override DateTime GetLastWriteTimeUtc(SafeFileHandle fileHandle)\n        {\n            return File.GetLastWriteTimeUtc(fileHandle);\n        }\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        [UnsupportedOSPlatform(\"windows\")]\n        public override UnixFileMode GetUnixFileMode(string path)\n        {\n            return File.GetUnixFileMode(path);\n        }\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        [UnsupportedOSPlatform(\"windows\")]\n        public override UnixFileMode GetUnixFileMode(SafeFileHandle fileHandle)\n        {\n            return File.GetUnixFileMode(fileHandle);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void Move(string sourceFileName, string destFileName)\n    {\n        File.Move(sourceFileName, destFileName);\n    }\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n        /// <inheritdoc />\n        public override void Move(string sourceFileName, string destFileName, bool overwrite)\n        {\n            File.Move(sourceFileName, destFileName, overwrite);\n        }\n#endif\n\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode)\n    {\n        return new FileStreamWrapper(File.Open(path, mode));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode, FileAccess access)\n    {\n        return new FileStreamWrapper(File.Open(path, mode, access));\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream Open(string path, FileMode mode, FileAccess access, FileShare share)\n    {\n        return new FileStreamWrapper(File.Open(path, mode, access, share));\n    }\n\n#if FEATURE_FILESTREAM_OPTIONS\n        /// <inheritdoc />\n        public override FileSystemStream Open(string path, FileStreamOptions options)\n        {\n            return new FileStreamWrapper(File.Open(path, options));\n        }\n#endif\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenRead(string path)\n    {\n        return new FileStreamWrapper(File.OpenRead(path));\n    }\n\n    /// <inheritdoc />\n    public override StreamReader OpenText(string path)\n    {\n        return File.OpenText(path);\n    }\n\n    /// <inheritdoc />\n    public override FileSystemStream OpenWrite(string path)\n    {\n        return new FileStreamWrapper(File.OpenWrite(path));\n    }\n\n    /// <inheritdoc />\n    public override byte[] ReadAllBytes(string path)\n    {\n        return File.ReadAllBytes(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] ReadAllLines(string path)\n    {\n        return File.ReadAllLines(path);\n    }\n\n    /// <inheritdoc />\n    public override string[] ReadAllLines(string path, Encoding encoding)\n    {\n        return File.ReadAllLines(path, encoding);\n    }\n\n    /// <inheritdoc />\n    public override string ReadAllText(string path)\n    {\n        return File.ReadAllText(path);\n    }\n\n    /// <inheritdoc />\n    public override string ReadAllText(string path, Encoding encoding)\n    {\n        return File.ReadAllText(path, encoding);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> ReadLines(string path)\n    {\n        return File.ReadLines(path);\n    }\n\n    /// <inheritdoc />\n    public override IEnumerable<string> ReadLines(string path, Encoding encoding)\n    {\n        return File.ReadLines(path, encoding);\n    }\n\n    /// <inheritdoc />\n    public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName)\n    {\n        File.Replace(sourceFileName, destinationFileName, destinationBackupFileName);\n    }\n\n    /// <inheritdoc />\n    public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors)\n    {\n        File.Replace(sourceFileName, destinationFileName, destinationBackupFileName, ignoreMetadataErrors);\n    }\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n        /// <inheritdoc />\n        public override IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget)\n        {\n            return File.ResolveLinkTarget(linkPath, returnFinalTarget)\n                .WrapFileSystemInfo(FileSystem);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetAttributes(string path, FileAttributes fileAttributes)\n    {\n        File.SetAttributes(path, fileAttributes);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetAttributes(SafeFileHandle fileHandle, FileAttributes fileAttributes)\n        {\n            File.SetAttributes(fileHandle, fileAttributes);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTime(string path, DateTime creationTime)\n    {\n        File.SetCreationTime(path, creationTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetCreationTime(SafeFileHandle fileHandle, DateTime creationTime)\n        {\n            File.SetCreationTime(fileHandle, creationTime);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetCreationTimeUtc(string path, DateTime creationTimeUtc)\n    {\n        File.SetCreationTimeUtc(path, creationTimeUtc);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetCreationTimeUtc(SafeFileHandle fileHandle, DateTime creationTimeUtc)\n        {\n            File.SetCreationTimeUtc(fileHandle, creationTimeUtc);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastAccessTime(string path, DateTime lastAccessTime)\n    {\n        File.SetLastAccessTime(path, lastAccessTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastAccessTime(SafeFileHandle fileHandle, DateTime lastAccessTime)\n        {\n            File.SetLastAccessTime(fileHandle, lastAccessTime);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastAccessTimeUtc(string path, DateTime lastAccessTimeUtc)\n    {\n        File.SetLastAccessTimeUtc(path, lastAccessTimeUtc);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastAccessTimeUtc(SafeFileHandle fileHandle, DateTime lastAccessTimeUtc)\n        {\n            File.SetLastAccessTimeUtc(fileHandle, lastAccessTimeUtc);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastWriteTime(string path, DateTime lastWriteTime)\n    {\n        File.SetLastWriteTime(path, lastWriteTime);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastWriteTime(SafeFileHandle fileHandle, DateTime lastWriteTime)\n        {\n            File.SetLastWriteTime(fileHandle, lastWriteTime);\n        }\n#endif\n\n    /// <inheritdoc />\n    public override void SetLastWriteTimeUtc(string path, DateTime lastWriteTimeUtc)\n    {\n        File.SetLastWriteTimeUtc(path, lastWriteTimeUtc);\n    }\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        public override void SetLastWriteTimeUtc(SafeFileHandle fileHandle, DateTime lastWriteTimeUtc)\n        {\n            File.SetLastWriteTimeUtc(fileHandle, lastWriteTimeUtc);\n        }\n#endif\n\n#if FEATURE_UNIX_FILE_MODE\n        /// <inheritdoc />\n        [UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(string path, UnixFileMode mode)\n        {\n            File.SetUnixFileMode(path, mode);\n        }\n#endif\n\n#if FEATURE_FILE_ATTRIBUTES_VIA_HANDLE\n        /// <inheritdoc />\n        [UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(SafeFileHandle fileHandle, UnixFileMode mode)\n        {\n            File.SetUnixFileMode(fileHandle, mode);\n        }\n#endif\n\n    /// <summary>\n    /// Creates a new file, writes the specified byte array to the file, and then closes the file.\n    /// If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"bytes\">The bytes to write to the file. </param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// Given a byte array and a file path, this method opens the specified file, writes the contents of the byte array to the file, and then closes the file.\n    /// </remarks>\n    public override void WriteAllBytes(string path, byte[] bytes)\n    {\n        File.WriteAllBytes(path, bytes);\n    }\n        \n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllBytes(string,ReadOnlySpan{byte})\"/>\n        public override void WriteAllBytes(string path, ReadOnlySpan<byte> bytes)\n        {\n            File.WriteAllBytes(path, bytes);\n        }\n#endif\n\n    /// <summary>\n    /// Creates a new file, writes a collection of strings to the file, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The lines to write to the file.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     You can use this method to create the contents for a collection class that takes an <see cref=\"IEnumerable{T}\"/> in its constructor, such as a <see cref=\"List{T}\"/>, <see cref=\"HashSet{T}\"/>, or a <see cref=\"SortedSet{T}\"/> class.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, IEnumerable<string> contents)\n    {\n        File.WriteAllLines(path, contents);\n    }\n\n    /// <summary>\n    /// Creates a new file by using the specified encoding, writes a collection of strings to the file, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The lines to write to the file.</param>\n    /// <param name=\"encoding\">The character encoding to use.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/>, <paramref name=\"contents\"/>, or <paramref name=\"encoding\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     You can use this method to create a file that contains the following:\n    /// <list type=\"bullet\">\n    /// <item>\n    /// <description>The results of a LINQ to Objects query on the lines of a file, as obtained by using the ReadLines method.</description>\n    /// </item>\n    /// <item>\n    /// <description>The contents of a collection that implements an <see cref=\"IEnumerable{T}\"/> of strings.</description>\n    /// </item>\n    /// </list>\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, IEnumerable<string> contents, Encoding encoding)\n    {\n        File.WriteAllLines(path, contents, encoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string array to the file by using the specified encoding, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The string array to write to the file.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     The default behavior of the WriteAllLines method is to write out data using UTF-8 encoding without a byte order mark (BOM). If it is necessary to include a UTF-8 identifier, such as a byte order mark, at the beginning of a file, use the <see cref=\"FileBase.WriteAllLines(string,string[],System.Text.Encoding)\"/> method overload with <see cref=\"UTF8Encoding\"/> encoding.\n    /// </para>\n    /// <para>\n    ///     Given a string array and a file path, this method opens the specified file, writes the string array to the file using the specified encoding,\n    ///     and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, string[] contents)\n    {\n        File.WriteAllLines(path, contents);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string array to the file by using the specified encoding, and then closes the file.\n    /// </summary>\n    /// <param name=\"path\">The file to write to.</param>\n    /// <param name=\"contents\">The string array to write to the file.</param>\n    /// <param name=\"encoding\">An <see cref=\"Encoding\"/> object that represents the character encoding applied to the string array.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\">Either <paramref name=\"path\"/> or <paramref name=\"contents\"/> is <see langword=\"null\"/>.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// <paramref name=\"path\"/> specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// <paramref name=\"path\"/> specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// <para>\n    ///     If the target file already exists, it is overwritten.\n    /// </para>\n    /// <para>\n    ///     Given a string array and a file path, this method opens the specified file, writes the string array to the file using the specified encoding,\n    ///     and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllLines(string path, string[] contents, Encoding encoding)\n    {\n        File.WriteAllLines(path, contents, encoding);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to. </param>\n    /// <param name=\"contents\">The string to write to the file. </param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// This method uses UTF-8 encoding without a Byte-Order Mark (BOM), so using the <see cref=\"M:Encoding.GetPreamble\"/> method will return an empty byte array.\n    /// If it is necessary to include a UTF-8 identifier, such as a byte order mark, at the beginning of a file, use the <see cref=\"FileBase.WriteAllText(string,string,System.Text.Encoding)\"/> method overload with <see cref=\"UTF8Encoding\"/> encoding.\n    /// <para>\n    /// Given a string and a file path, this method opens the specified file, writes the string to the file, and then closes the file.\n    /// </para>\n    /// </remarks>\n    public override void WriteAllText(string path, string contents)\n    {\n        File.WriteAllText(path, contents);\n    }\n\n    /// <summary>\n    /// Creates a new file, writes the specified string to the file using the specified encoding, and then closes the file. If the target file already exists, it is overwritten.\n    /// </summary>\n    /// <param name=\"path\">The file to write to. </param>\n    /// <param name=\"contents\">The string to write to the file. </param>\n    /// <param name=\"encoding\">The encoding to apply to the string.</param>\n    /// <exception cref=\"ArgumentException\"><paramref name=\"path\"/> is a zero-length string, contains only white space, or contains one or more invalid characters as defined by <see cref=\"Path.GetInvalidPathChars\"/>.</exception>\n    /// <exception cref=\"ArgumentNullException\"><paramref name=\"path\"/> is <see langword=\"null\"/> or contents is empty.</exception>\n    /// <exception cref=\"PathTooLongException\">\n    /// The specified path, file name, or both exceed the system-defined maximum length.\n    /// For example, on Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260 characters.\n    /// </exception>\n    /// <exception cref=\"DirectoryNotFoundException\">The specified path is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"IOException\">An I/O error occurred while opening the file.</exception>\n    /// <exception cref=\"UnauthorizedAccessException\">\n    /// path specified a file that is read-only.\n    /// -or-\n    /// This operation is not supported on the current platform.\n    /// -or-\n    /// path specified a directory.\n    /// -or-\n    /// The caller does not have the required permission.\n    /// </exception>\n    /// <exception cref=\"FileNotFoundException\">The file specified in <paramref name=\"path\"/> was not found.</exception>\n    /// <exception cref=\"NotSupportedException\"><paramref name=\"path\"/> is in an invalid format.</exception>\n    /// <exception cref=\"System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <remarks>\n    /// Given a string and a file path, this method opens the specified file, writes the string to the file using the specified encoding, and then closes the file.\n    /// The file handle is guaranteed to be closed by this method, even if exceptions are raised.\n    /// </remarks>\n    public override void WriteAllText(string path, string contents, Encoding encoding)\n    {\n        File.WriteAllText(path, contents, encoding);\n    }\n\n#if FEATURE_FILE_SPAN\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char})\"/>\n        public override void WriteAllText(string path, ReadOnlySpan<char> contents)\n        {\n            File.WriteAllText(path, contents);\n        }\n\n        /// <inheritdoc cref=\"IFile.WriteAllText(string,ReadOnlySpan{char},Encoding)\"/>\n        public override void WriteAllText(string path, ReadOnlySpan<char> contents, Encoding encoding)\n        {\n            File.WriteAllText(path, contents, encoding);\n        }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc cref=\"Path\"/>\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic abstract class PathBase : IPath\n{\n    /// <summary>\n    /// Base class for calling static methods of <see cref=\"Path\"/>\n    /// </summary>\n    protected PathBase(IFileSystem fileSystem)\n    {\n        this.FileSystem = fileSystem;\n    }\n\n    [Obsolete(\"This constructor only exists to support mocking libraries.\", error: true)]\n    internal PathBase() { }\n\n    /// <summary>\n    /// Exposes the underlying filesystem implementation. This is useful for implementing extension methods.\n    /// </summary>\n    public IFileSystem FileSystem { get; }\n\n    /// <inheritdoc cref=\"Path.AltDirectorySeparatorChar\"/>\n    public abstract char AltDirectorySeparatorChar { get; }\n\n    /// <inheritdoc cref=\"Path.DirectorySeparatorChar\"/>\n    public abstract char DirectorySeparatorChar { get; }\n\n    /// <inheritdoc cref=\"Path.InvalidPathChars\"/>\n    [Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n    public abstract char[] InvalidPathChars { get; }\n\n    /// <inheritdoc cref=\"Path.PathSeparator\"/>\n    public abstract char PathSeparator { get; }\n\n    /// <inheritdoc cref=\"Path.VolumeSeparatorChar\"/>\n    public abstract char VolumeSeparatorChar { get; }\n\n    /// <inheritdoc cref=\"Path.ChangeExtension\"/>\n    public abstract string ChangeExtension(string path, string extension);\n\n    /// <inheritdoc cref=\"Path.Combine(string[])\"/>\n    public abstract string Combine(params string[] paths);\n        \n#if FEATURE_PATH_SPAN\n        /// <inheritdoc cref=\"Path.Combine(ReadOnlySpan{string})\"/>\n        public abstract string Combine(params ReadOnlySpan<string> paths);\n#endif\n\n    /// <inheritdoc cref=\"Path.Combine(string,string)\"/>\n    public abstract string Combine(string path1, string path2);\n\n    /// <inheritdoc cref=\"Path.Combine(string,string,string)\"/>\n    public abstract string Combine(string path1, string path2, string path3);\n\n    /// <inheritdoc cref=\"Path.Combine(string,string,string,string)\"/>\n    public abstract string Combine(string path1, string path2, string path3, string path4);\n\n#if FEATURE_PATH_EXISTS\n    /// <inheritdoc cref=\"Path.Exists(string)\" />\n    public abstract bool Exists(string path);\n#endif\n\n    /// <inheritdoc cref=\"Path.GetDirectoryName(string)\"/>\n    public abstract string GetDirectoryName(string path);\n\n    /// <inheritdoc cref=\"Path.GetExtension(string)\"/>\n    public abstract string GetExtension(string path);\n\n    /// <inheritdoc cref=\"Path.GetFileName(string)\"/>\n    public abstract string GetFileName(string path);\n\n    /// <inheritdoc cref=\"Path.GetFileNameWithoutExtension(string)\"/>\n    public abstract string GetFileNameWithoutExtension(string path);\n\n    /// <inheritdoc cref=\"Path.GetFullPath(string)\"/>\n    public abstract string GetFullPath(string path);\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc cref=\"Path.GetFullPath(string, string)\"/>\n    public abstract string GetFullPath(string path, string basePath);\n#endif\n\n    /// <inheritdoc cref=\"Path.GetInvalidFileNameChars\"/>\n    public abstract char[] GetInvalidFileNameChars();\n\n    /// <inheritdoc cref=\"Path.GetInvalidPathChars\"/>\n    public abstract char[] GetInvalidPathChars();\n\n    /// <inheritdoc cref=\"Path.GetPathRoot(string)\"/>\n    public abstract string GetPathRoot(string path);\n\n    /// <inheritdoc cref=\"Path.GetRandomFileName\"/>\n    public abstract string GetRandomFileName();\n\n    /// <inheritdoc cref=\"Path.GetTempFileName\"/>\n    public abstract string GetTempFileName();\n\n    /// <inheritdoc cref=\"Path.GetTempPath\"/>\n    public abstract string GetTempPath();\n\n    /// <inheritdoc cref=\"Path.HasExtension(string)\"/>\n    public abstract bool HasExtension(string path);\n\n    /// <inheritdoc cref=\"Path.IsPathRooted(string)\"/>\n    public abstract bool IsPathRooted(string path);\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public abstract bool IsPathFullyQualified(string path);\n\n    /// <inheritdoc />\n    public abstract string GetRelativePath(string relativeTo, string path);\n#endif\n\n#if FEATURE_PATH_JOIN_WITH_SPAN\n    /// <inheritdoc />\n    public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2);\n\n    /// <inheritdoc />\n    public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3);\n\n#if FEATURE_PATH_SPAN\n        /// <inheritdoc cref=\"Path.Join(ReadOnlySpan{string})\"/>\n        public abstract string Join(params ReadOnlySpan<string> paths);\n#endif\n\n    /// <inheritdoc />\n    public abstract bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, Span<char> destination, out int charsWritten);\n\n    /// <inheritdoc />\n    public abstract bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, Span<char> destination, out int charsWritten);\n#endif\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public abstract bool HasExtension(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract bool IsPathFullyQualified(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract bool IsPathRooted(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> GetExtension(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> GetFileName(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> GetPathRoot(ReadOnlySpan<char> path);\n\n#endif\n#if FEATURE_PATH_JOIN_WITH_PARAMS\n    /// <inheritdoc />\n    public abstract string Join(params string[] paths);\n\n    /// <inheritdoc />\n    public abstract string Join(string path1, string path2);\n    /// <inheritdoc />\n\n    public abstract string Join(string path1, string path2, string path3);\n\n#endif\n\n#if FEATURE_ENDS_IN_DIRECTORY_SEPARATOR\n    /// <inheritdoc />\n    public abstract bool EndsInDirectorySeparator(ReadOnlySpan<char> path);\n    /// <inheritdoc />\n    public abstract bool EndsInDirectorySeparator(string path);\n    /// <inheritdoc />\n    public abstract ReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOnlySpan<char> path);\n\n    /// <inheritdoc />\n    public abstract string TrimEndingDirectorySeparator(string path);\n#endif\n\n#if FEATURE_PATH_JOIN_WITH_FOUR_PATHS\n\n    /// <inheritdoc />\n    public abstract string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, ReadOnlySpan<char> path4);\n    /// <inheritdoc />\n    public abstract string Join(string path1, string path2, string path3, string path4);\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs",
    "content": "﻿namespace System.IO.Abstractions;\n\n/// <inheritdoc />\n#if FEATURE_SERIALIZABLE\n[Serializable]\n#endif\npublic class PathWrapper : PathBase\n{\n    /// <inheritdoc />\n    public PathWrapper(IFileSystem fileSystem) : base(fileSystem)\n    {\n    }\n\n    /// <inheritdoc />\n    public override char AltDirectorySeparatorChar\n    {\n        get { return Path.AltDirectorySeparatorChar; }\n    }\n\n    /// <inheritdoc />\n    public override char DirectorySeparatorChar\n    {\n        get { return Path.DirectorySeparatorChar; }\n    }\n\n    /// <inheritdoc />\n    [Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n    public override char[] InvalidPathChars\n    {\n        get { return Path.InvalidPathChars; }\n    }\n\n    /// <inheritdoc />\n    public override char PathSeparator\n    {\n        get { return Path.PathSeparator; }\n    }\n\n    /// <inheritdoc />\n    public override char VolumeSeparatorChar\n    {\n        get { return Path.VolumeSeparatorChar; }\n    }\n\n    /// <inheritdoc />\n    public override string ChangeExtension(string path, string extension)\n    {\n        return Path.ChangeExtension(path, extension);\n    }\n\n    /// <inheritdoc />\n    public override string Combine(params string[] paths)\n    {\n        return Path.Combine(paths);\n    }\n\n#if FEATURE_PATH_SPAN\n    /// <inheritdoc />\n    public override string Combine(params ReadOnlySpan<string> paths)\n    {\n        return Path.Combine(paths);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string Combine(string path1, string path2)\n    {\n        return Path.Combine(path1, path2);\n    }\n\n    /// <inheritdoc />\n    public override string Combine(string path1, string path2, string path3)\n    {\n        return Path.Combine(path1, path2, path3);\n    }\n\n    /// <inheritdoc />\n    public override string Combine(string path1, string path2, string path3, string path4)\n    {\n        return Path.Combine(path1, path2, path3, path4);\n    }\n\n#if FEATURE_PATH_EXISTS\n    /// <inheritdoc />\n    public override bool Exists(string path)\n    {\n        return Path.Exists(path);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override string GetDirectoryName(string path)\n    {\n        return Path.GetDirectoryName(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetExtension(string path)\n    {\n        return Path.GetExtension(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetFileName(string path)\n    {\n        return Path.GetFileName(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetFileNameWithoutExtension(string path)\n    {\n        return Path.GetFileNameWithoutExtension(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetFullPath(string path)\n    {\n        return Path.GetFullPath(path);\n    }\n\n# if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public override string GetFullPath(string path, string basePath)\n    {\n        return Path.GetFullPath(path, basePath);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override char[] GetInvalidFileNameChars()\n    {\n        return Path.GetInvalidFileNameChars();\n    }\n\n    /// <inheritdoc />\n    public override char[] GetInvalidPathChars()\n    {\n        return Path.GetInvalidPathChars();\n    }\n\n    /// <inheritdoc />\n    public override string GetPathRoot(string path)\n    {\n        return Path.GetPathRoot(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetRandomFileName()\n    {\n        return Path.GetRandomFileName();\n    }\n\n    /// <inheritdoc />\n    public override string GetTempFileName()\n    {\n        return Path.GetTempFileName();\n    }\n\n    /// <inheritdoc />\n    public override string GetTempPath()\n    {\n        return Path.GetTempPath();\n    }\n\n    /// <inheritdoc />\n    public override bool HasExtension(string path)\n    {\n        return Path.HasExtension(path);\n    }\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public override bool IsPathFullyQualified(string path)\n    {\n        return Path.IsPathFullyQualified(path);\n    }\n\n    /// <inheritdoc />\n    public override string GetRelativePath(string relativeTo, string path)\n    {\n        return Path.GetRelativePath(relativeTo, path);\n    }\n#endif\n\n#if FEATURE_PATH_JOIN_WITH_SPAN\n    /// <inheritdoc />\n    public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2) =>\n        Path.Join(path1, path2);\n\n    /// <inheritdoc />\n    public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3) =>\n        Path.Join(path1, path2, path3);\n\n#if FEATURE_PATH_SPAN\n    /// <inheritdoc />\n    public override string Join(params ReadOnlySpan<string> paths)\n    {\n        return Path.Join(paths);\n    }\n#endif\n\n    /// <inheritdoc />\n    public override bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, Span<char> destination, out int charsWritten) =>\n        Path.TryJoin(path1, path2, destination, out charsWritten);\n\n    /// <inheritdoc />\n    public override bool TryJoin(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, Span<char> destination, out int charsWritten) =>\n        Path.TryJoin(path1, path2, path3, destination, out charsWritten);\n#endif\n\n    /// <inheritdoc />\n    public override bool IsPathRooted(string path)\n    {\n        return Path.IsPathRooted(path);\n    }\n\n#if FEATURE_ENDS_IN_DIRECTORY_SEPARATOR\n    /// <inheritdoc />\n    public override bool EndsInDirectorySeparator(ReadOnlySpan<char> path)\n    {\n        return Path.EndsInDirectorySeparator(path);\n    }\n\n    /// <inheritdoc />\n    public override bool EndsInDirectorySeparator(string path)\n    {\n        return Path.EndsInDirectorySeparator(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOnlySpan<char> path)\n    {\n        return Path.TrimEndingDirectorySeparator(path);\n    }\n\n    /// <inheritdoc />\n    public override string TrimEndingDirectorySeparator(string path)\n    {\n        return Path.TrimEndingDirectorySeparator(path);\n    }\n#endif\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    /// <inheritdoc />\n    public override bool HasExtension(ReadOnlySpan<char> path)\n    {\n        return Path.HasExtension(path);\n    }\n\n    /// <inheritdoc />\n    public override bool IsPathFullyQualified(ReadOnlySpan<char> path)\n    {\n        return Path.IsPathFullyQualified(path);\n    }\n\n    /// <inheritdoc />\n    public override bool IsPathRooted(ReadOnlySpan<char> path)\n    {\n        return Path.IsPathRooted(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char> path)\n    {\n        return Path.GetDirectoryName(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> GetExtension(ReadOnlySpan<char> path)\n    {\n        return Path.GetExtension(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> GetFileName(ReadOnlySpan<char> path)\n    {\n        return Path.GetFileName(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnlySpan<char> path)\n    {\n        return Path.GetFileNameWithoutExtension(path);\n    }\n\n    /// <inheritdoc />\n    public override ReadOnlySpan<char> GetPathRoot(ReadOnlySpan<char> path)\n    {\n        return Path.GetPathRoot(path);\n    }\n#endif\n\n#if FEATURE_PATH_JOIN_WITH_FOUR_PATHS\n    /// <inheritdoc />\n    public override string Join(string path1, string path2, string path3, string path4)\n    {\n        return Path.Join(path1, path2, path3, path4);\n    }\n\n    /// <inheritdoc />\n    public override string Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, ReadOnlySpan<char> path4)\n    {\n        return Path.Join(path1, path2, path3, path4);\n    }\n#endif\n\n#if FEATURE_PATH_JOIN_WITH_PARAMS\n    /// <inheritdoc />\n    public override string Join(string path1, string path2)\n    {\n        return Path.Join(path1, path2);\n    }\n\n    /// <inheritdoc />\n    public override string Join(string path1, string path2, string path3)\n    {\n        return Path.Join(path1, path2, path3);\n    }\n\n    /// <inheritdoc />\n    public override string Join(params string[] paths)\n    {\n        return Path.Join(paths);\n    }\n#endif\n}"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/Polyfills/SupportedOSPlatformAttribute.cs",
    "content": "#if !FEATURE_SUPPORTED_OS_ATTRIBUTE\nnamespace System.Runtime.Versioning\n{\n    [AttributeUsage(AttributeTargets.All)]\n    internal class SupportedOSPlatformAttribute : Attribute\n    {\n        public SupportedOSPlatformAttribute(string _)\n        {\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "src/TestableIO.System.IO.Abstractions.Wrappers/TestableIO.System.IO.Abstractions.Wrappers.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <AssemblyName>TestableIO.System.IO.Abstractions.Wrappers</AssemblyName>\n        <RootNamespace>System.IO.Abstractions</RootNamespace>\n        <Description>A set of abstractions to help make file system interactions testable.</Description>\n    </PropertyGroup>\n\n    <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.1' OR '$(TargetFramework)' == 'netstandard2.0'\">\n        <PackageReference Include=\"System.IO.FileSystem.AccessControl\"/>\n    </ItemGroup>\n    <ItemGroup>\n        <PackageReference Include=\"Testably.Abstractions.FileSystem.Interface\"/>\n    </ItemGroup>\n\n    <ItemGroup>\n        <AssemblyAttribute Include=\"System.CLSCompliantAttribute\">\n            <_Parameter1>true</_Parameter1>\n        </AssemblyAttribute>\n    </ItemGroup>\n    \n    <ItemGroup>\n        <InternalsVisibleTo Include=\"DynamicProxyGenAssembly2\" PublicKey=\"0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\"/>\n    </ItemGroup>\n\n</Project>"
  },
  {
    "path": "tests/Directory.Build.props",
    "content": "<Project>\n\n    <Import Project=\"$(MSBuildThisFileDirectory)/../Directory.Build.props\"\n            Condition=\"Exists('$(MSBuildThisFileDirectory)/../Directory.Build.props')\"/>\n\n    <PropertyGroup>\n        <TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>\n        <TargetFrameworks Condition=\"!$([MSBuild]::IsOsUnixLike())\">$(TargetFrameworks);net472</TargetFrameworks>\n        <NoWarn>$(NoWarn);S2699</NoWarn>\n        <IsPackable>false</IsPackable>\n        <IsTestable>true</IsTestable>\n    </PropertyGroup>\n\n    <ItemGroup>\n        <PackageReference Include=\"coverlet.collector\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n        <PackageReference Include=\"GitHubActionsTestLogger\" />\n        <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n        <PackageReference Include=\"Mockolate\" />\n        <PackageReference Include=\"NUnit\" />\n        <PackageReference Include=\"NUnit.Analyzers\">\n            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n            <PrivateAssets>all</PrivateAssets>\n        </PackageReference>\n        <PackageReference Include=\"NUnit3TestAdapter\" />\n        <PackageReference Include=\"aweXpect\"/>\n        <PackageReference Include=\"aweXpect.Testably\"/>\n        <PackageReference Include=\"aweXpect.Mockolate\"/>\n    </ItemGroup>\n\n    <PropertyGroup>\n        <!--\n          Allow deprecated binary formatter functionality on .NET 8 so that we can test it\n        -->\n        <EnableUnsafeBinaryFormatterSerialization Condition=\"'$(TargetFramework)' == 'net8.0'\">true</EnableUnsafeBinaryFormatterSerialization>\n    </PropertyGroup>\n    \n</Project>\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiAcceptance.cs",
    "content": "﻿namespace TestableIO.System.IO.Abstractions.Api.Tests;\n\npublic sealed class ApiAcceptance\n{\n\t/// <summary>\n\t///     Execute this test to update the expected public API to the current API surface.\n\t/// </summary>\n\t[TestCase]\n\t[Explicit]\n\tpublic async Task AcceptApiChanges()\n\t{\n\t\tstring[] assemblyNames =\n\t\t[\n            \"TestableIO.System.IO.Abstractions.Wrappers\",\n            \"TestableIO.System.IO.Abstractions.TestingHelpers\",\n\t\t];\n\n\t\tforeach (string assemblyName in assemblyNames)\n\t\t{\n\t\t\tforeach (string framework in Helper.GetTargetFrameworks())\n\t\t\t{\n\t\t\t\tstring publicApi = Helper.CreatePublicApi(framework, assemblyName)\n\t\t\t\t\t.Replace(\"\\n\", Environment.NewLine);\n\t\t\t\tHelper.SetExpectedApi(framework, assemblyName, publicApi);\n\t\t\t}\n\t\t}\n\n        await That(assemblyNames).IsNotEmpty();\n\t}\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/ApiApprovalTests.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace TestableIO.System.IO.Abstractions.Api.Tests;\n\n/// <summary>\n///     Whenever a test fails, this means that the public API surface changed.\n///     If the change was intentional, execute the <see cref=\"ApiAcceptance.AcceptApiChanges()\" /> test to take over the\n///     current public API surface. The changes will become part of the pull request and will be reviewed accordingly.\n/// </summary>\npublic sealed class ApiApprovalTests\n{\n    [TestCaseSource(nameof(TargetFrameworksTheoryData))]\n    public async Task VerifyPublicApiForWrappers(string framework)\n    {\n        const string assemblyName = \"TestableIO.System.IO.Abstractions.Wrappers\";\n\n        var publicApi = Helper.CreatePublicApi(framework, assemblyName);\n        var expectedApi = Helper.GetExpectedApi(framework, assemblyName);\n\n        await That(publicApi).IsEqualTo(expectedApi);\n    }\n\n    [TestCaseSource(nameof(TargetFrameworksTheoryData))]\n    public async Task VerifyPublicApiForTestingHelpers(string framework)\n    {\n        const string assemblyName = \"TestableIO.System.IO.Abstractions.TestingHelpers\";\n\n        var publicApi = Helper.CreatePublicApi(framework, assemblyName);\n        var expectedApi = Helper.GetExpectedApi(framework, assemblyName);\n\n        await That(publicApi).IsEqualTo(expectedApi);\n    }\n\n    private static IEnumerable<string> TargetFrameworksTheoryData()\n    {\n        List<string> theoryData = new();\n        foreach (var targetFramework in Helper.GetTargetFrameworks())\n        {\n            theoryData.Add(targetFramework);\n        }\n\n        return theoryData;\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net10.0.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v10.0\", FrameworkDisplayName=\".NET 10.0\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void AppendAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        [System.Runtime.CompilerServices.AsyncIteratorStateMachine(typeof(System.IO.Abstractions.TestingHelpers.MockFile.<ReadLinesAsync>d__14))]\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, [System.Runtime.CompilerServices.EnumeratorCancellation] System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string LinkTarget { get; set; }\n        public string TextContents { get; set; }\n        public System.IO.UnixFileMode UnixMode { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(System.ReadOnlySpan<byte> buffer) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileStreamOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override bool Exists(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net472.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETFramework,Version=v4.7.2\", FrameworkDisplayName=\".NET Framework 4.7.2\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string TextContents { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override string GetFullPath(string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net6.0.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v6.0\", FrameworkDisplayName=\".NET 6.0\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string LinkTarget { get; set; }\n        public string TextContents { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(System.ReadOnlySpan<byte> buffer) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileStreamOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override string GetFullPath(string path) { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net8.0.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v8.0\", FrameworkDisplayName=\".NET 8.0\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        [System.Runtime.CompilerServices.AsyncIteratorStateMachine(typeof(System.IO.Abstractions.TestingHelpers.MockFile.<ReadLinesAsync>d__10))]\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, [System.Runtime.CompilerServices.EnumeratorCancellation] System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string LinkTarget { get; set; }\n        public string TextContents { get; set; }\n        public System.IO.UnixFileMode UnixMode { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(System.ReadOnlySpan<byte> buffer) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileStreamOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override bool Exists(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_net9.0.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v9.0\", FrameworkDisplayName=\".NET 9.0\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void AppendAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        [System.Runtime.CompilerServices.AsyncIteratorStateMachine(typeof(System.IO.Abstractions.TestingHelpers.MockFile.<ReadLinesAsync>d__14))]\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, [System.Runtime.CompilerServices.EnumeratorCancellation] System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string LinkTarget { get; set; }\n        public string TextContents { get; set; }\n        public System.IO.UnixFileMode UnixMode { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(System.ReadOnlySpan<byte> buffer) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileStreamOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override bool Exists(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.0.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETStandard,Version=v2.0\", FrameworkDisplayName=\".NET Standard 2.0\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string TextContents { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override string GetFullPath(string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.TestingHelpers_netstandard2.1.txt",
    "content": "[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETStandard,Version=v2.1\", FrameworkDisplayName=\".NET Standard 2.1\")]\npublic class FileHandles\n{\n    public FileHandles() { }\n    public void AddHandle(string path, System.Guid guid, System.IO.FileAccess access, System.IO.FileShare share) { }\n    public void RemoveHandle(string path, System.Guid guid) { }\n}\nnamespace System.IO.Abstractions.TestingHelpers\n{\n    public interface IMockFileDataAccessor : System.IO.Abstractions.IFileSystem\n    {\n        System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        FileHandles FileHandles { get; }\n        System.IO.Abstractions.IFileSystem FileSystem { get; }\n        System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        void AddDirectory(string path);\n        void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive);\n        void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true);\n        void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath);\n        System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments);\n        bool FileExists(string path);\n        System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name);\n        System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path);\n        void MoveDirectory(string sourcePath, string destPath);\n        void RemoveFile(string path, bool verifyAccess = true);\n    }\n    [System.Serializable]\n    public class MockDirectory : System.IO.Abstractions.DirectoryBase\n    {\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string currentDirectory) { }\n        public MockDirectory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, System.IO.Abstractions.FileBase fileBase, string currentDirectory) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public class MockDirectoryData : System.IO.Abstractions.TestingHelpers.MockFileData\n    {\n        public MockDirectoryData() { }\n        public new System.Security.AccessControl.DirectorySecurity AccessControl { get; set; }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfo : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockDirectoryInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string directoryPath) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDirectoryInfoFactory : System.IO.Abstractions.IDirectoryInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDirectoryInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDirectoryInfo New(string path) { }\n        public System.IO.Abstractions.IDirectoryInfo Wrap(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class MockDriveData\n    {\n        public MockDriveData() { }\n        public MockDriveData(System.IO.Abstractions.TestingHelpers.MockDriveData template) { }\n        public long AvailableFreeSpace { get; set; }\n        public string DriveFormat { get; set; }\n        public System.IO.DriveType DriveType { get; set; }\n        public bool IsReady { get; set; }\n        public long TotalFreeSpace { get; set; }\n        public long TotalSize { get; set; }\n        public string VolumeLabel { get; set; }\n    }\n    [System.Serializable]\n    public class MockDriveInfo : System.IO.Abstractions.DriveInfoBase\n    {\n        public MockDriveInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string name) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockDriveInfoFactory : System.IO.Abstractions.IDriveInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockDriveInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IDriveInfo[] GetDrives() { }\n        public System.IO.Abstractions.IDriveInfo New(string driveName) { }\n        public System.IO.Abstractions.IDriveInfo Wrap(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class MockFile : System.IO.Abstractions.FileBase\n    {\n        public MockFile(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public class MockFileData\n    {\n        public static readonly System.DateTimeOffset DefaultDateTimeOffset;\n        public static readonly System.Text.Encoding DefaultEncoding;\n        public MockFileData(System.IO.Abstractions.TestingHelpers.MockFileData template) { }\n        public MockFileData(byte[] contents) { }\n        public MockFileData(string textContents) { }\n        public MockFileData(string textContents, System.Text.Encoding encoding) { }\n        public System.Security.AccessControl.FileSecurity AccessControl { get; set; }\n        public System.IO.FileShare AllowedFileShare { get; set; }\n        public System.IO.FileAttributes Attributes { get; set; }\n        public byte[] Contents { get; set; }\n        public System.DateTimeOffset CreationTime { get; set; }\n        public System.IO.Abstractions.IFileVersionInfo FileVersionInfo { get; set; }\n        public bool IsDirectory { get; }\n        public System.DateTimeOffset LastAccessTime { get; set; }\n        public System.DateTimeOffset LastWriteTime { get; set; }\n        public string TextContents { get; set; }\n        public static System.IO.Abstractions.TestingHelpers.MockFileData op_Implicit(string s) { }\n    }\n    [System.Serializable]\n    public class MockFileInfo : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileInfo(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem, string path) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileInfoFactory : System.IO.Abstractions.IFileInfoFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileInfo New(string fileName) { }\n        public System.IO.Abstractions.IFileInfo Wrap(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class MockFileStream : System.IO.Abstractions.FileSystemStream, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public MockFileStream(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string path, System.IO.FileMode mode, System.IO.FileAccess access = 3, System.IO.FileShare share = 1, System.IO.FileOptions options = 0) { }\n        public override bool CanRead { get; }\n        public override bool CanWrite { get; }\n        public static System.IO.Abstractions.FileSystemStream Null { get; }\n        protected override void Dispose(bool disposing) { }\n        public override void EndWrite(System.IAsyncResult asyncResult) { }\n        public override void Flush() { }\n        public override void Flush(bool flushToDisk) { }\n        public override System.Threading.Tasks.Task FlushAsync(System.Threading.CancellationToken cancellationToken) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override int Read(byte[] buffer, int offset, int count) { }\n        public void SetAccessControl(object value) { }\n        public override void SetLength(long value) { }\n        public override void Write(System.ReadOnlySpan<byte> buffer) { }\n        public override void Write(byte[] buffer, int offset, int count) { }\n        public override System.Threading.Tasks.ValueTask WriteAsync(System.ReadOnlyMemory<byte> buffer, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken) { }\n        public override void WriteByte(byte value) { }\n    }\n    [System.Serializable]\n    public class MockFileStreamFactory : System.IO.Abstractions.IFileStreamFactory, System.IO.Abstractions.IFileSystemEntity\n    {\n        public MockFileStreamFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public System.IO.Abstractions.FileSystemStream New(Microsoft.Win32.SafeHandles.SafeFileHandle handle, System.IO.FileAccess access, int bufferSize, bool isAsync) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options) { }\n        public System.IO.Abstractions.FileSystemStream New(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, int bufferSize, bool useAsync) { }\n        public System.IO.Abstractions.FileSystemStream Wrap(System.IO.FileStream fileStream) { }\n    }\n    [System.Serializable]\n    public class MockFileSystem : System.IO.Abstractions.FileSystemBase, System.IO.Abstractions.IFileSystem, System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor\n    {\n        public MockFileSystem() { }\n        public MockFileSystem(System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, System.IO.Abstractions.TestingHelpers.MockFileSystemOptions options) { }\n        public MockFileSystem(System.Collections.Generic.IDictionary<string, System.IO.Abstractions.TestingHelpers.MockFileData> files, string currentDirectory = \"\") { }\n        public System.Collections.Generic.IEnumerable<string> AllDirectories { get; }\n        public System.Collections.Generic.IEnumerable<string> AllDrives { get; }\n        public System.Collections.Generic.IEnumerable<string> AllFiles { get; }\n        public System.Collections.Generic.IEnumerable<string> AllNodes { get; }\n        public System.Collections.Generic.IEnumerable<string> AllPaths { get; }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public FileHandles FileHandles { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n        public System.IO.Abstractions.TestingHelpers.PathVerifier PathVerifier { get; }\n        public System.IO.Abstractions.TestingHelpers.StringOperations StringOperations { get; }\n        public void AddDirectory(System.IO.Abstractions.IDirectoryInfo path) { }\n        public void AddDirectory(string path) { }\n        public void AddDrive(string name, System.IO.Abstractions.TestingHelpers.MockDriveData mockDrive) { }\n        public void AddEmptyFile(System.IO.Abstractions.IFileInfo path) { }\n        public void AddEmptyFile(string path) { }\n        public void AddFile(System.IO.Abstractions.IFileInfo path, System.IO.Abstractions.TestingHelpers.MockFileData data, bool verifyAccess = true) { }\n        public void AddFile(string path, System.IO.Abstractions.TestingHelpers.MockFileData mockFile, bool verifyAccess = true) { }\n        public void AddFileFromEmbeddedResource(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public void AddFilesFromEmbeddedNamespace(string path, System.Reflection.Assembly resourceAssembly, string embeddedResourcePath) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData AdjustTimes(System.IO.Abstractions.TestingHelpers.MockFileData fileData, System.IO.Abstractions.TestingHelpers.TimeAdjustments timeAdjustments) { }\n        public bool FileExists(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockDriveData GetDrive(string name) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(System.IO.Abstractions.IFileInfo path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileData GetFile(string path) { }\n        public System.IO.Abstractions.TestingHelpers.MockFileSystem MockTime(System.Func<System.DateTime> dateTimeProvider) { }\n        public void MoveDirectory(string sourcePath, string destPath) { }\n        public void RemoveFile(string path, bool verifyAccess = true) { }\n    }\n    public class MockFileSystemOptions\n    {\n        public MockFileSystemOptions() { }\n        public bool CreateDefaultTempDir { get; init; }\n        public string CurrentDirectory { get; init; }\n    }\n    [System.Serializable]\n    public class MockFileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public MockFileSystemWatcherFactory(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfo : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public MockFileVersionInfo(\n                    string fileName,\n                    string fileVersion = null,\n                    string productVersion = null,\n                    string fileDescription = null,\n                    string productName = null,\n                    string companyName = null,\n                    string comments = null,\n                    string internalName = null,\n                    bool isDebug = false,\n                    bool isPatched = false,\n                    bool isPrivateBuild = false,\n                    bool isPreRelease = false,\n                    bool isSpecialBuild = false,\n                    string language = null,\n                    string legalCopyright = null,\n                    string legalTrademarks = null,\n                    string originalFilename = null,\n                    string privateBuild = null,\n                    string specialBuild = null) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class MockFileVersionInfoFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileVersionInfoFactory\n    {\n        public MockFileVersionInfoFactory(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileVersionInfo GetVersionInfo(string fileName) { }\n    }\n    [System.Serializable]\n    public class MockPath : System.IO.Abstractions.PathWrapper\n    {\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public MockPath(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor, string defaultTempDirectory) { }\n        public override string GetFullPath(string path) { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n    }\n    public static class MockUnixSupport\n    {\n        public static bool IsUnixPlatform() { }\n        public static bool IsWindowsPlatform() { }\n        public static string Path(string path) { }\n    }\n    [System.Serializable]\n    public class PathVerifier\n    {\n        public PathVerifier(System.IO.Abstractions.TestingHelpers.IMockFileDataAccessor mockFileDataAccessor) { }\n        public void CheckInvalidPathChars(string path, bool checkAdditional = false) { }\n        public bool HasIllegalCharacters(string path, bool checkAdditional) { }\n        public void IsLegalAbsoluteOrRelative(string path, string paramName) { }\n        public string NormalizeDriveName(string name) { }\n        public bool TryNormalizeDriveName(string name, out string result) { }\n    }\n    [System.Serializable]\n    public class StringOperations\n    {\n        public StringOperations(bool caseSensitive) { }\n        public System.StringComparer Comparer { get; }\n        public bool Contains(string s, string substring) { }\n        public bool EndsWith(string s, string suffix) { }\n        public bool Equals(char x, char y) { }\n        public bool Equals(string x, string y) { }\n        public int IndexOf(string s, string substring) { }\n        public int IndexOf(string s, string substring, int startIndex) { }\n        public string Replace(string s, string oldValue, string newValue) { }\n        public bool StartsWith(string s, string prefix) { }\n        public char ToLower(char c) { }\n        public string ToLower(string s) { }\n        public char ToUpper(char c) { }\n        public string ToUpper(string s) { }\n    }\n    [System.Flags]\n    public enum TimeAdjustments\n    {\n        None = 0,\n        CreationTime = 1,\n        LastAccessTime = 2,\n        LastWriteTime = 4,\n        All = -1,\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net10.0.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v10.0\", FrameworkDisplayName=\".NET 10.0\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        [set: System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes);\n        public abstract void AppendAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllText(string path, System.ReadOnlySpan<char> contents);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract void Move(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode);\n        public abstract void SetUnixFileMode(string path, System.IO.UnixFileMode mode);\n        public abstract void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllText(string path, System.ReadOnlySpan<char> contents);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n    }\n    public static class FileInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract void MoveTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt() { }\n        public override void Delete() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string LinkTarget { get; }\n        public abstract string Name { get; }\n        [set: System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public System.IO.UnixFileMode UnixFileMode { get; set; }\n        public abstract void CreateAsSymbolicLink(string pathToTarget);\n        public abstract void Delete();\n        public abstract void Refresh();\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget);\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void AppendAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract bool EndsInDirectorySeparator(string path);\n        public abstract bool Exists(string path);\n        public abstract System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path);\n        public abstract string GetDirectoryName(string path);\n        public abstract System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetExtension(string path);\n        public abstract System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path);\n        public abstract string GetFileName(string path);\n        public abstract System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract string GetFullPath(string path, string basePath);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path);\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetRelativePath(string relativeTo, string path);\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(System.ReadOnlySpan<char> path);\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathFullyQualified(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathFullyQualified(string path);\n        public abstract bool IsPathRooted(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathRooted(string path);\n        public abstract string Join([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths);\n        public abstract string Join(params string[] paths);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2);\n        public abstract string Join(string path1, string path2);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3);\n        public abstract string Join(string path1, string path2, string path3);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4);\n        public abstract string Join(string path1, string path2, string path3, string path4);\n        public abstract System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract string TrimEndingDirectorySeparator(string path);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override bool EndsInDirectorySeparator(string path) { }\n        public override bool Exists(string path) { }\n        public override System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path) { }\n        public override string GetDirectoryName(string path) { }\n        public override System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetExtension(string path) { }\n        public override System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path) { }\n        public override string GetFileName(string path) { }\n        public override System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetFullPath(string path, string basePath) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path) { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(System.ReadOnlySpan<char> path) { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathFullyQualified(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathFullyQualified(string path) { }\n        public override bool IsPathRooted(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathRooted(string path) { }\n        public override string Join([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths) { }\n        public override string Join(params string[] paths) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2) { }\n        public override string Join(string path1, string path2) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3) { }\n        public override string Join(string path1, string path2, string path3) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4) { }\n        public override string Join(string path1, string path2, string path3, string path4) { }\n        public override System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override string TrimEndingDirectorySeparator(string path) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net472.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETFramework,Version=v4.7.2\", FrameworkDisplayName=\".NET Framework 4.7.2\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n    }\n    public static class FileInfoAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string Name { get; }\n        public abstract void Delete();\n        public abstract void Refresh();\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract string GetDirectoryName(string path);\n        public abstract string GetExtension(string path);\n        public abstract string GetFileName(string path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathRooted(string path);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override string GetDirectoryName(string path) { }\n        public override string GetExtension(string path) { }\n        public override string GetFileName(string path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathRooted(string path) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net6.0.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v6.0\", FrameworkDisplayName=\".NET 6.0\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        [set: System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract void Move(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n    }\n    public static class FileInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract void MoveTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt() { }\n        public override void Delete() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string LinkTarget { get; }\n        public abstract string Name { get; }\n        public abstract void CreateAsSymbolicLink(string pathToTarget);\n        public abstract void Delete();\n        public abstract void Refresh();\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget);\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract bool EndsInDirectorySeparator(string path);\n        public abstract System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path);\n        public abstract string GetDirectoryName(string path);\n        public abstract System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetExtension(string path);\n        public abstract System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path);\n        public abstract string GetFileName(string path);\n        public abstract System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract string GetFullPath(string path, string basePath);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path);\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetRelativePath(string relativeTo, string path);\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(System.ReadOnlySpan<char> path);\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathFullyQualified(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathFullyQualified(string path);\n        public abstract bool IsPathRooted(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathRooted(string path);\n        public abstract string Join(params string[] paths);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2);\n        public abstract string Join(string path1, string path2);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3);\n        public abstract string Join(string path1, string path2, string path3);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4);\n        public abstract string Join(string path1, string path2, string path3, string path4);\n        public abstract System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract string TrimEndingDirectorySeparator(string path);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override bool EndsInDirectorySeparator(string path) { }\n        public override System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path) { }\n        public override string GetDirectoryName(string path) { }\n        public override System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetExtension(string path) { }\n        public override System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path) { }\n        public override string GetFileName(string path) { }\n        public override System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetFullPath(string path, string basePath) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path) { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(System.ReadOnlySpan<char> path) { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathFullyQualified(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathFullyQualified(string path) { }\n        public override bool IsPathRooted(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathRooted(string path) { }\n        public override string Join(params string[] paths) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2) { }\n        public override string Join(string path1, string path2) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3) { }\n        public override string Join(string path1, string path2, string path3) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4) { }\n        public override string Join(string path1, string path2, string path3, string path4) { }\n        public override System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override string TrimEndingDirectorySeparator(string path) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net8.0.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v8.0\", FrameworkDisplayName=\".NET 8.0\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        [set: System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract void Move(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode);\n        public abstract void SetUnixFileMode(string path, System.IO.UnixFileMode mode);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n    }\n    public static class FileInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract void MoveTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt() { }\n        public override void Delete() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string LinkTarget { get; }\n        public abstract string Name { get; }\n        [set: System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public System.IO.UnixFileMode UnixFileMode { get; set; }\n        public abstract void CreateAsSymbolicLink(string pathToTarget);\n        public abstract void Delete();\n        public abstract void Refresh();\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget);\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract bool EndsInDirectorySeparator(string path);\n        public abstract bool Exists(string path);\n        public abstract System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path);\n        public abstract string GetDirectoryName(string path);\n        public abstract System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetExtension(string path);\n        public abstract System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path);\n        public abstract string GetFileName(string path);\n        public abstract System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract string GetFullPath(string path, string basePath);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path);\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetRelativePath(string relativeTo, string path);\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(System.ReadOnlySpan<char> path);\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathFullyQualified(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathFullyQualified(string path);\n        public abstract bool IsPathRooted(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathRooted(string path);\n        public abstract string Join(params string[] paths);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2);\n        public abstract string Join(string path1, string path2);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3);\n        public abstract string Join(string path1, string path2, string path3);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4);\n        public abstract string Join(string path1, string path2, string path3, string path4);\n        public abstract System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract string TrimEndingDirectorySeparator(string path);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override bool EndsInDirectorySeparator(string path) { }\n        public override bool Exists(string path) { }\n        public override System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path) { }\n        public override string GetDirectoryName(string path) { }\n        public override System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetExtension(string path) { }\n        public override System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path) { }\n        public override string GetFileName(string path) { }\n        public override System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetFullPath(string path, string basePath) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path) { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(System.ReadOnlySpan<char> path) { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathFullyQualified(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathFullyQualified(string path) { }\n        public override bool IsPathRooted(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathRooted(string path) { }\n        public override string Join(params string[] paths) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2) { }\n        public override string Join(string path1, string path2) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3) { }\n        public override string Join(string path1, string path2, string path3) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4) { }\n        public override string Join(string path1, string path2, string path3, string path4) { }\n        public override System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override string TrimEndingDirectorySeparator(string path) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_net9.0.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETCoreApp,Version=v9.0\", FrameworkDisplayName=\".NET 9.0\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path, System.IO.UnixFileMode unixCreateMode) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateTempSubdirectory(string prefix = null) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        [set: System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes);\n        public abstract void AppendAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllText(string path, System.ReadOnlySpan<char> contents);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle);\n        public abstract System.IO.UnixFileMode GetUnixFileMode(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract void Move(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget);\n        public abstract void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode);\n        public abstract void SetUnixFileMode(string path, System.IO.UnixFileMode mode);\n        public abstract void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllText(string path, System.ReadOnlySpan<char> contents);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n    }\n    public static class FileInfoAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract void MoveTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string LinkTarget { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override void CreateAsSymbolicLink(string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt() { }\n        public override void Delete() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl() { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override void MoveTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string LinkTarget { get; }\n        public abstract string Name { get; }\n        [set: System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public System.IO.UnixFileMode UnixFileMode { get; set; }\n        public abstract void CreateAsSymbolicLink(string pathToTarget);\n        public abstract void Delete();\n        public abstract void Refresh();\n        public abstract System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(bool returnFinalTarget);\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override System.Collections.ObjectModel.Collection<string> Filters { get; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, System.TimeSpan timeout) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void AppendAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.Abstractions.IFileSystemInfo CreateSymbolicLink(string path, string pathToTarget) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        [System.Runtime.Versioning.SupportedOSPlatform(\"windows\")]\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override System.IO.UnixFileMode GetUnixFileMode(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override void Move(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileStreamOptions options) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IAsyncEnumerable<string> ReadLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(string linkPath, bool returnFinalTarget) { }\n        public override void SetAttributes(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.FileAttributes fileAttributes) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTime) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime creationTimeUtc) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.DateTime lastWriteTimeUtc) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle fileHandle, System.IO.UnixFileMode mode) { }\n        [System.Runtime.Versioning.UnsupportedOSPlatform(\"windows\")]\n        public override void SetUnixFileMode(string path, System.IO.UnixFileMode mode) { }\n        public override void WriteAllBytes(string path, System.ReadOnlySpan<byte> bytes) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, System.ReadOnlyMemory<byte> bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, System.ReadOnlySpan<char> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, System.ReadOnlyMemory<char> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract bool EndsInDirectorySeparator(string path);\n        public abstract bool Exists(string path);\n        public abstract System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path);\n        public abstract string GetDirectoryName(string path);\n        public abstract System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetExtension(string path);\n        public abstract System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path);\n        public abstract string GetFileName(string path);\n        public abstract System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract string GetFullPath(string path, string basePath);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path);\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetRelativePath(string relativeTo, string path);\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(System.ReadOnlySpan<char> path);\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathFullyQualified(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathFullyQualified(string path);\n        public abstract bool IsPathRooted(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathRooted(string path);\n        public abstract string Join([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths);\n        public abstract string Join(params string[] paths);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2);\n        public abstract string Join(string path1, string path2);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3);\n        public abstract string Join(string path1, string path2, string path3);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4);\n        public abstract string Join(string path1, string path2, string path3, string path4);\n        public abstract System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path);\n        public abstract string TrimEndingDirectorySeparator(string path);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override bool EndsInDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override bool EndsInDirectorySeparator(string path) { }\n        public override bool Exists(string path) { }\n        public override System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path) { }\n        public override string GetDirectoryName(string path) { }\n        public override System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetExtension(string path) { }\n        public override System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path) { }\n        public override string GetFileName(string path) { }\n        public override System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetFullPath(string path, string basePath) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path) { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(System.ReadOnlySpan<char> path) { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathFullyQualified(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathFullyQualified(string path) { }\n        public override bool IsPathRooted(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathRooted(string path) { }\n        public override string Join([System.Runtime.CompilerServices.ScopedRef] System.ReadOnlySpan<string> paths) { }\n        public override string Join(params string[] paths) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2) { }\n        public override string Join(string path1, string path2) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3) { }\n        public override string Join(string path1, string path2, string path3) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.ReadOnlySpan<char> path4) { }\n        public override string Join(string path1, string path2, string path3, string path4) { }\n        public override System.ReadOnlySpan<char> TrimEndingDirectorySeparator(System.ReadOnlySpan<char> path) { }\n        public override string TrimEndingDirectorySeparator(string path) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_netstandard2.0.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETStandard,Version=v2.0\", FrameworkDisplayName=\".NET Standard 2.0\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n    }\n    public static class FileInfoAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string Name { get; }\n        public abstract void Delete();\n        public abstract void Refresh();\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract string GetDirectoryName(string path);\n        public abstract string GetExtension(string path);\n        public abstract string GetFileName(string path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathRooted(string path);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override string GetDirectoryName(string path) { }\n        public override string GetExtension(string path) { }\n        public override string GetFileName(string path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathRooted(string path) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Expected/TestableIO.System.IO.Abstractions.Wrappers_netstandard2.1.txt",
    "content": "[assembly: System.CLSCompliant(true)]\n[assembly: System.Reflection.AssemblyMetadata(\"RepositoryUrl\", \"https://github.com/TestableIO/System.IO.Abstractions.git\")]\n[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(@\"DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7\")]\n[assembly: System.Runtime.Versioning.TargetFramework(\".NETStandard,Version=v2.1\", FrameworkDisplayName=\".NET Standard 2.1\")]\nnamespace System.IO.Abstractions\n{\n    public static class DirectoryAclExtensions\n    {\n        public static void CreateDirectory(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectory directory, string path, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryBase : System.IO.Abstractions.IDirectory, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DirectoryBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path);\n        public abstract void Delete(string path);\n        public abstract void Delete(string path, bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract bool Exists(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract string GetCurrentDirectory();\n        public abstract string[] GetDirectories(string path);\n        public abstract string[] GetDirectories(string path, string searchPattern);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string GetDirectoryRoot(string path);\n        public abstract string[] GetFileSystemEntries(string path);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract string[] GetFiles(string path);\n        public abstract string[] GetFiles(string path, string searchPattern);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract string[] GetLogicalDrives();\n        public abstract System.IO.Abstractions.IDirectoryInfo GetParent(string path);\n        public abstract void Move(string sourceDirName, string destDirName);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetCurrentDirectory(string path);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n    }\n    public static class DirectoryInfoAclExtensions\n    {\n        public static void Create(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo) { }\n        public static System.Security.AccessControl.DirectorySecurity GetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IDirectoryInfo directoryInfo, System.Security.AccessControl.DirectorySecurity directorySecurity) { }\n    }\n    [System.Serializable]\n    public abstract class DirectoryInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IDirectoryInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected DirectoryInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public abstract void Create();\n        public abstract System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path);\n        public abstract void Delete(bool recursive);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles();\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories();\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos();\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles();\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions);\n        public abstract System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption);\n        public abstract void MoveTo(string destDirName);\n        public static System.IO.Abstractions.DirectoryInfoBase op_Implicit(System.IO.DirectoryInfo directoryInfo) { }\n    }\n    [System.Serializable]\n    public class DirectoryInfoWrapper : System.IO.Abstractions.DirectoryInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public DirectoryInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DirectoryInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Parent { get; }\n        public override System.IO.Abstractions.IDirectoryInfo Root { get; }\n        public override void Create() { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(string path) { }\n        public override void Delete() { }\n        public override void Delete(bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IDirectoryInfo> EnumerateDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileSystemInfo> EnumerateFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles() { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<System.IO.Abstractions.IFileInfo> EnumerateFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories() { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IDirectoryInfo[] GetDirectories(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos() { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileSystemInfo[] GetFileSystemInfos(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles() { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.IO.Abstractions.IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption) { }\n        public override void MoveTo(string destDirName) { }\n        public override void Refresh() { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class DirectoryWrapper : System.IO.Abstractions.DirectoryBase\n    {\n        public DirectoryWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override System.IO.Abstractions.IDirectoryInfo CreateDirectory(string path) { }\n        public override void Delete(string path) { }\n        public override void Delete(string path, bool recursive) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override System.Collections.Generic.IEnumerable<string> EnumerateFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override bool Exists(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override string GetCurrentDirectory() { }\n        public override string[] GetDirectories(string path) { }\n        public override string[] GetDirectories(string path, string searchPattern) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetDirectories(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string GetDirectoryRoot(string path) { }\n        public override string[] GetFileSystemEntries(string path) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFileSystemEntries(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override string[] GetFiles(string path) { }\n        public override string[] GetFiles(string path, string searchPattern) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions) { }\n        public override string[] GetFiles(string path, string searchPattern, System.IO.SearchOption searchOption) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override string[] GetLogicalDrives() { }\n        public override System.IO.Abstractions.IDirectoryInfo GetParent(string path) { }\n        public override void Move(string sourceDirName, string destDirName) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetCurrentDirectory(string path) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n    }\n    [System.Serializable]\n    public abstract class DriveInfoBase : System.IO.Abstractions.IDriveInfo, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected DriveInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract long AvailableFreeSpace { get; }\n        public abstract string DriveFormat { get; }\n        public abstract System.IO.DriveType DriveType { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract bool IsReady { get; }\n        public abstract string Name { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public abstract long TotalFreeSpace { get; }\n        public abstract long TotalSize { get; }\n        public abstract string VolumeLabel { get; set; }\n        public static System.IO.Abstractions.DriveInfoBase op_Implicit(System.IO.DriveInfo driveInfo) { }\n    }\n    [System.Serializable]\n    public class DriveInfoWrapper : System.IO.Abstractions.DriveInfoBase\n    {\n        public DriveInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.DriveInfo instance) { }\n        public override long AvailableFreeSpace { get; }\n        public override string DriveFormat { get; }\n        public override System.IO.DriveType DriveType { get; }\n        public override bool IsReady { get; }\n        public override string Name { get; }\n        public override System.IO.Abstractions.IDirectoryInfo RootDirectory { get; }\n        public override long TotalFreeSpace { get; }\n        public override long TotalSize { get; }\n        public override string VolumeLabel { get; set; }\n        public override string ToString() { }\n    }\n    public static class FileAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFile file, string path, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileBase : System.IO.Abstractions.IFile, System.IO.Abstractions.IFileSystemEntity\n    {\n        protected FileBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void AppendAllText(string path, string contents);\n        public abstract void AppendAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.IO.StreamWriter AppendText(string path);\n        public abstract void Copy(string sourceFileName, string destFileName);\n        public abstract void Copy(string sourceFileName, string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize);\n        public abstract System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options);\n        public abstract System.IO.StreamWriter CreateText(string path);\n        public abstract void Decrypt(string path);\n        public abstract void Delete(string path);\n        public abstract void Encrypt(string path);\n        public abstract bool Exists(string path);\n        public abstract System.IO.FileAttributes GetAttributes(string path);\n        public abstract System.DateTime GetCreationTime(string path);\n        public abstract System.DateTime GetCreationTimeUtc(string path);\n        public abstract System.DateTime GetLastAccessTime(string path);\n        public abstract System.DateTime GetLastAccessTimeUtc(string path);\n        public abstract System.DateTime GetLastWriteTime(string path);\n        public abstract System.DateTime GetLastWriteTimeUtc(string path);\n        public abstract void Move(string sourceFileName, string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead(string path);\n        public abstract System.IO.StreamReader OpenText(string path);\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite(string path);\n        public abstract byte[] ReadAllBytes(string path);\n        public abstract System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string[] ReadAllLines(string path);\n        public abstract string[] ReadAllLines(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract string ReadAllText(string path);\n        public abstract string ReadAllText(string path, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path);\n        public abstract System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);\n        public abstract void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public abstract void SetAttributes(string path, System.IO.FileAttributes fileAttributes);\n        public abstract void SetCreationTime(string path, System.DateTime creationTime);\n        public abstract void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc);\n        public abstract void SetLastAccessTime(string path, System.DateTime lastAccessTime);\n        public abstract void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc);\n        public abstract void SetLastWriteTime(string path, System.DateTime lastWriteTime);\n        public abstract void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc);\n        public abstract void WriteAllBytes(string path, byte[] bytes);\n        public abstract System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents);\n        public abstract void WriteAllLines(string path, string[] contents);\n        public abstract void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding);\n        public abstract void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n        public abstract void WriteAllText(string path, string contents);\n        public abstract void WriteAllText(string path, string contents, System.Text.Encoding encoding);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default);\n        public abstract System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default);\n    }\n    public static class FileInfoAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo) { }\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.AccessControlSections includeSections) { }\n        public static void SetAccessControl(this System.IO.Abstractions.IFileInfo fileInfo, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public abstract class FileInfoBase : System.IO.Abstractions.FileSystemInfoBase, System.IO.Abstractions.IFileInfo, System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public abstract string DirectoryName { get; }\n        public abstract bool IsReadOnly { get; set; }\n        public abstract long Length { get; }\n        public abstract System.IO.StreamWriter AppendText();\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName);\n        public abstract System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite);\n        public abstract System.IO.Abstractions.FileSystemStream Create();\n        public abstract System.IO.StreamWriter CreateText();\n        public abstract void Decrypt();\n        public abstract void Encrypt();\n        public abstract void MoveTo(string destFileName);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access);\n        public abstract System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);\n        public abstract System.IO.Abstractions.FileSystemStream OpenRead();\n        public abstract System.IO.StreamReader OpenText();\n        public abstract System.IO.Abstractions.FileSystemStream OpenWrite();\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName);\n        public abstract System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors);\n        public static System.IO.Abstractions.FileInfoBase op_Implicit(System.IO.FileInfo fileInfo) { }\n    }\n    [System.Serializable]\n    public class FileInfoWrapper : System.IO.Abstractions.FileInfoBase, System.IO.Abstractions.IFileSystemAclSupport\n    {\n        public FileInfoWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileInfo instance) { }\n        public override System.IO.FileAttributes Attributes { get; set; }\n        public override System.DateTime CreationTime { get; set; }\n        public override System.DateTime CreationTimeUtc { get; set; }\n        public override System.IO.Abstractions.IDirectoryInfo Directory { get; }\n        public override string DirectoryName { get; }\n        public override bool Exists { get; }\n        public override string Extension { get; }\n        public override string FullName { get; }\n        public override bool IsReadOnly { get; set; }\n        public override System.DateTime LastAccessTime { get; set; }\n        public override System.DateTime LastAccessTimeUtc { get; set; }\n        public override System.DateTime LastWriteTime { get; set; }\n        public override System.DateTime LastWriteTimeUtc { get; set; }\n        public override long Length { get; }\n        public override string Name { get; }\n        public override System.IO.StreamWriter AppendText() { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName) { }\n        public override System.IO.Abstractions.IFileInfo CopyTo(string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create() { }\n        public override System.IO.StreamWriter CreateText() { }\n        public override void Decrypt() { }\n        public override void Delete() { }\n        public override void Encrypt() { }\n        public object GetAccessControl() { }\n        public object GetAccessControl(System.IO.Abstractions.IFileSystemAclSupport.AccessControlSections includeSections) { }\n        public override void MoveTo(string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead() { }\n        public override System.IO.StreamReader OpenText() { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite() { }\n        public override void Refresh() { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName) { }\n        public override System.IO.Abstractions.IFileInfo Replace(string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public void SetAccessControl(object value) { }\n        public override string ToString() { }\n    }\n    public static class FileStreamAclExtensions\n    {\n        public static System.Security.AccessControl.FileSecurity GetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream) { }\n        public static void SetAccessControl(this System.IO.Abstractions.FileSystemStream fileStream, System.Security.AccessControl.FileSecurity fileSecurity) { }\n    }\n    [System.Serializable]\n    public class FileSystem : System.IO.Abstractions.FileSystemBase\n    {\n        public FileSystem() { }\n        public override System.IO.Abstractions.IDirectory Directory { get; }\n        public override System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public override System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public override System.IO.Abstractions.IFile File { get; }\n        public override System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public override System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public override System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public override System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public override System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemBase : System.IO.Abstractions.IFileSystem\n    {\n        protected FileSystemBase() { }\n        public abstract System.IO.Abstractions.IDirectory Directory { get; }\n        public abstract System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }\n        public abstract System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }\n        public abstract System.IO.Abstractions.IFile File { get; }\n        public abstract System.IO.Abstractions.IFileInfoFactory FileInfo { get; }\n        public abstract System.IO.Abstractions.IFileStreamFactory FileStream { get; }\n        public abstract System.IO.Abstractions.IFileSystemWatcherFactory FileSystemWatcher { get; }\n        public abstract System.IO.Abstractions.IFileVersionInfoFactory FileVersionInfo { get; }\n        public abstract System.IO.Abstractions.IPath Path { get; }\n    }\n    [System.Serializable]\n    public abstract class FileSystemInfoBase : System.IO.Abstractions.IFileSystemInfo\n    {\n        protected FileSystemInfoBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract System.IO.FileAttributes Attributes { get; set; }\n        public abstract System.DateTime CreationTime { get; set; }\n        public abstract System.DateTime CreationTimeUtc { get; set; }\n        public abstract bool Exists { get; }\n        public abstract string Extension { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string FullName { get; }\n        public abstract System.DateTime LastAccessTime { get; set; }\n        public abstract System.DateTime LastAccessTimeUtc { get; set; }\n        public abstract System.DateTime LastWriteTime { get; set; }\n        public abstract System.DateTime LastWriteTimeUtc { get; set; }\n        public abstract string Name { get; }\n        public abstract void Delete();\n        public abstract void Refresh();\n    }\n    [System.Serializable]\n    public abstract class FileSystemWatcherBase : System.IDisposable, System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcher\n    {\n        protected FileSystemWatcherBase() { }\n        public abstract System.ComponentModel.IContainer Container { get; }\n        public abstract bool EnableRaisingEvents { get; set; }\n        public abstract System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public abstract string Filter { get; set; }\n        public abstract bool IncludeSubdirectories { get; set; }\n        public abstract int InternalBufferSize { get; set; }\n        public abstract System.IO.NotifyFilters NotifyFilter { get; set; }\n        public abstract string Path { get; set; }\n        public abstract System.ComponentModel.ISite Site { get; set; }\n        public abstract System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public virtual event System.IO.FileSystemEventHandler Changed;\n        public virtual event System.IO.FileSystemEventHandler Created;\n        public virtual event System.IO.FileSystemEventHandler Deleted;\n        public virtual event System.IO.ErrorEventHandler Error;\n        public virtual event System.IO.RenamedEventHandler Renamed;\n        public abstract void BeginInit();\n        public void Dispose() { }\n        public virtual void Dispose(bool disposing) { }\n        public abstract void EndInit();\n        protected void OnChanged(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnCreated(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnDeleted(object sender, System.IO.FileSystemEventArgs args) { }\n        protected void OnError(object sender, System.IO.ErrorEventArgs args) { }\n        protected void OnRenamed(object sender, System.IO.RenamedEventArgs args) { }\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType);\n        public abstract System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout);\n        public static System.IO.Abstractions.FileSystemWatcherBase op_Implicit(System.IO.FileSystemWatcher watcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherFactory : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IFileSystemWatcherFactory\n    {\n        public FileSystemWatcherFactory(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public System.IO.Abstractions.IFileSystemWatcher New() { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path) { }\n        public System.IO.Abstractions.IFileSystemWatcher New(string path, string filter) { }\n        public System.IO.Abstractions.IFileSystemWatcher Wrap(System.IO.FileSystemWatcher fileSystemWatcher) { }\n    }\n    [System.Serializable]\n    public class FileSystemWatcherWrapper : System.IO.Abstractions.FileSystemWatcherBase\n    {\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, System.IO.FileSystemWatcher watcher) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path) { }\n        public FileSystemWatcherWrapper(System.IO.Abstractions.IFileSystem fileSystem, string path, string filter) { }\n        public override System.ComponentModel.IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override System.IO.Abstractions.IFileSystem FileSystem { get; }\n        public override string Filter { get; set; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override System.IO.NotifyFilters NotifyFilter { get; set; }\n        public override string Path { get; set; }\n        public override System.ComponentModel.ISite Site { get; set; }\n        public override System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get; set; }\n        public override void BeginInit() { }\n        public override void Dispose(bool disposing) { }\n        public override void EndInit() { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType) { }\n        public override System.IO.Abstractions.IWaitForChangedResult WaitForChanged(System.IO.WatcherChangeTypes changeType, int timeout) { }\n    }\n    [System.Serializable]\n    public abstract class FileVersionInfoBase : System.IO.Abstractions.IFileVersionInfo\n    {\n        protected FileVersionInfoBase() { }\n        public abstract string Comments { get; }\n        public abstract string CompanyName { get; }\n        public abstract int FileBuildPart { get; }\n        public abstract string FileDescription { get; }\n        public abstract int FileMajorPart { get; }\n        public abstract int FileMinorPart { get; }\n        public abstract string FileName { get; }\n        public abstract int FilePrivatePart { get; }\n        public abstract string FileVersion { get; }\n        public abstract string InternalName { get; }\n        public abstract bool IsDebug { get; }\n        public abstract bool IsPatched { get; }\n        public abstract bool IsPreRelease { get; }\n        public abstract bool IsPrivateBuild { get; }\n        public abstract bool IsSpecialBuild { get; }\n        public abstract string Language { get; }\n        public abstract string LegalCopyright { get; }\n        public abstract string LegalTrademarks { get; }\n        public abstract string OriginalFilename { get; }\n        public abstract string PrivateBuild { get; }\n        public abstract int ProductBuildPart { get; }\n        public abstract int ProductMajorPart { get; }\n        public abstract int ProductMinorPart { get; }\n        public abstract string ProductName { get; }\n        public abstract int ProductPrivatePart { get; }\n        public abstract string ProductVersion { get; }\n        public abstract string SpecialBuild { get; }\n        public abstract string ToString();\n        public static System.IO.Abstractions.FileVersionInfoBase op_Implicit(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n    }\n    [System.Serializable]\n    public class FileVersionInfoWrapper : System.IO.Abstractions.FileVersionInfoBase\n    {\n        public FileVersionInfoWrapper(System.Diagnostics.FileVersionInfo fileVersionInfo) { }\n        public override string Comments { get; }\n        public override string CompanyName { get; }\n        public override int FileBuildPart { get; }\n        public override string FileDescription { get; }\n        public override int FileMajorPart { get; }\n        public override int FileMinorPart { get; }\n        public override string FileName { get; }\n        public override int FilePrivatePart { get; }\n        public override string FileVersion { get; }\n        public override string InternalName { get; }\n        public override bool IsDebug { get; }\n        public override bool IsPatched { get; }\n        public override bool IsPreRelease { get; }\n        public override bool IsPrivateBuild { get; }\n        public override bool IsSpecialBuild { get; }\n        public override string Language { get; }\n        public override string LegalCopyright { get; }\n        public override string LegalTrademarks { get; }\n        public override string OriginalFilename { get; }\n        public override string PrivateBuild { get; }\n        public override int ProductBuildPart { get; }\n        public override int ProductMajorPart { get; }\n        public override int ProductMinorPart { get; }\n        public override string ProductName { get; }\n        public override int ProductPrivatePart { get; }\n        public override string ProductVersion { get; }\n        public override string SpecialBuild { get; }\n        public override string ToString() { }\n    }\n    [System.Serializable]\n    public class FileWrapper : System.IO.Abstractions.FileBase\n    {\n        public FileWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void AppendAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void AppendAllText(string path, string contents) { }\n        public override void AppendAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task AppendAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.IO.StreamWriter AppendText(string path) { }\n        public override void Copy(string sourceFileName, string destFileName) { }\n        public override void Copy(string sourceFileName, string destFileName, bool overwrite) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize) { }\n        public override System.IO.Abstractions.FileSystemStream Create(string path, int bufferSize, System.IO.FileOptions options) { }\n        public override System.IO.StreamWriter CreateText(string path) { }\n        public override void Decrypt(string path) { }\n        public override void Delete(string path) { }\n        public override void Encrypt(string path) { }\n        public override bool Exists(string path) { }\n        public override System.IO.FileAttributes GetAttributes(string path) { }\n        public override System.DateTime GetCreationTime(string path) { }\n        public override System.DateTime GetCreationTimeUtc(string path) { }\n        public override System.DateTime GetLastAccessTime(string path) { }\n        public override System.DateTime GetLastAccessTimeUtc(string path) { }\n        public override System.DateTime GetLastWriteTime(string path) { }\n        public override System.DateTime GetLastWriteTimeUtc(string path) { }\n        public override void Move(string sourceFileName, string destFileName) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access) { }\n        public override System.IO.Abstractions.FileSystemStream Open(string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) { }\n        public override System.IO.Abstractions.FileSystemStream OpenRead(string path) { }\n        public override System.IO.StreamReader OpenText(string path) { }\n        public override System.IO.Abstractions.FileSystemStream OpenWrite(string path) { }\n        public override byte[] ReadAllBytes(string path) { }\n        public override System.Threading.Tasks.Task<byte[]> ReadAllBytesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string[] ReadAllLines(string path) { }\n        public override string[] ReadAllLines(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string[]> ReadAllLinesAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override string ReadAllText(string path) { }\n        public override string ReadAllText(string path, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task<string> ReadAllTextAsync(string path, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path) { }\n        public override System.Collections.Generic.IEnumerable<string> ReadLines(string path, System.Text.Encoding encoding) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName) { }\n        public override void Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName, bool ignoreMetadataErrors) { }\n        public override void SetAttributes(string path, System.IO.FileAttributes fileAttributes) { }\n        public override void SetCreationTime(string path, System.DateTime creationTime) { }\n        public override void SetCreationTimeUtc(string path, System.DateTime creationTimeUtc) { }\n        public override void SetLastAccessTime(string path, System.DateTime lastAccessTime) { }\n        public override void SetLastAccessTimeUtc(string path, System.DateTime lastAccessTimeUtc) { }\n        public override void SetLastWriteTime(string path, System.DateTime lastWriteTime) { }\n        public override void SetLastWriteTimeUtc(string path, System.DateTime lastWriteTimeUtc) { }\n        public override void WriteAllBytes(string path, byte[] bytes) { }\n        public override System.Threading.Tasks.Task WriteAllBytesAsync(string path, byte[] bytes, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents) { }\n        public override void WriteAllLines(string path, string[] contents) { }\n        public override void WriteAllLines(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding) { }\n        public override void WriteAllLines(string path, string[] contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllLinesAsync(string path, System.Collections.Generic.IEnumerable<string> contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n        public override void WriteAllText(string path, string contents) { }\n        public override void WriteAllText(string path, string contents, System.Text.Encoding encoding) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Threading.CancellationToken cancellationToken = default) { }\n        public override System.Threading.Tasks.Task WriteAllTextAsync(string path, string contents, System.Text.Encoding encoding, System.Threading.CancellationToken cancellationToken = default) { }\n    }\n    [System.Serializable]\n    public abstract class PathBase : System.IO.Abstractions.IFileSystemEntity, System.IO.Abstractions.IPath\n    {\n        protected PathBase(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public abstract char AltDirectorySeparatorChar { get; }\n        public abstract char DirectorySeparatorChar { get; }\n        public System.IO.Abstractions.IFileSystem FileSystem { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public abstract char[] InvalidPathChars { get; }\n        public abstract char PathSeparator { get; }\n        public abstract char VolumeSeparatorChar { get; }\n        public abstract string ChangeExtension(string path, string extension);\n        public abstract string Combine(params string[] paths);\n        public abstract string Combine(string path1, string path2);\n        public abstract string Combine(string path1, string path2, string path3);\n        public abstract string Combine(string path1, string path2, string path3, string path4);\n        public abstract System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path);\n        public abstract string GetDirectoryName(string path);\n        public abstract System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetExtension(string path);\n        public abstract System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path);\n        public abstract string GetFileName(string path);\n        public abstract System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path);\n        public abstract string GetFileNameWithoutExtension(string path);\n        public abstract string GetFullPath(string path);\n        public abstract string GetFullPath(string path, string basePath);\n        public abstract char[] GetInvalidFileNameChars();\n        public abstract char[] GetInvalidPathChars();\n        public abstract System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path);\n        public abstract string GetPathRoot(string path);\n        public abstract string GetRandomFileName();\n        public abstract string GetRelativePath(string relativeTo, string path);\n        public abstract string GetTempFileName();\n        public abstract string GetTempPath();\n        public abstract bool HasExtension(System.ReadOnlySpan<char> path);\n        public abstract bool HasExtension(string path);\n        public abstract bool IsPathFullyQualified(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathFullyQualified(string path);\n        public abstract bool IsPathRooted(System.ReadOnlySpan<char> path);\n        public abstract bool IsPathRooted(string path);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2);\n        public abstract string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten);\n        public abstract bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten);\n    }\n    [System.Serializable]\n    public class PathWrapper : System.IO.Abstractions.PathBase\n    {\n        public PathWrapper(System.IO.Abstractions.IFileSystem fileSystem) { }\n        public override char AltDirectorySeparatorChar { get; }\n        public override char DirectorySeparatorChar { get; }\n        [System.Obsolete(\"Please use GetInvalidPathChars or GetInvalidFileNameChars instead.\")]\n        public override char[] InvalidPathChars { get; }\n        public override char PathSeparator { get; }\n        public override char VolumeSeparatorChar { get; }\n        public override string ChangeExtension(string path, string extension) { }\n        public override string Combine(params string[] paths) { }\n        public override string Combine(string path1, string path2) { }\n        public override string Combine(string path1, string path2, string path3) { }\n        public override string Combine(string path1, string path2, string path3, string path4) { }\n        public override System.ReadOnlySpan<char> GetDirectoryName(System.ReadOnlySpan<char> path) { }\n        public override string GetDirectoryName(string path) { }\n        public override System.ReadOnlySpan<char> GetExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetExtension(string path) { }\n        public override System.ReadOnlySpan<char> GetFileName(System.ReadOnlySpan<char> path) { }\n        public override string GetFileName(string path) { }\n        public override System.ReadOnlySpan<char> GetFileNameWithoutExtension(System.ReadOnlySpan<char> path) { }\n        public override string GetFileNameWithoutExtension(string path) { }\n        public override string GetFullPath(string path) { }\n        public override string GetFullPath(string path, string basePath) { }\n        public override char[] GetInvalidFileNameChars() { }\n        public override char[] GetInvalidPathChars() { }\n        public override System.ReadOnlySpan<char> GetPathRoot(System.ReadOnlySpan<char> path) { }\n        public override string GetPathRoot(string path) { }\n        public override string GetRandomFileName() { }\n        public override string GetRelativePath(string relativeTo, string path) { }\n        public override string GetTempFileName() { }\n        public override string GetTempPath() { }\n        public override bool HasExtension(System.ReadOnlySpan<char> path) { }\n        public override bool HasExtension(string path) { }\n        public override bool IsPathFullyQualified(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathFullyQualified(string path) { }\n        public override bool IsPathRooted(System.ReadOnlySpan<char> path) { }\n        public override bool IsPathRooted(string path) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2) { }\n        public override string Join(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.Span<char> destination, out int charsWritten) { }\n        public override bool TryJoin(System.ReadOnlySpan<char> path1, System.ReadOnlySpan<char> path2, System.ReadOnlySpan<char> path3, System.Span<char> destination, out int charsWritten) { }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Helper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing PublicApiGenerator;\n\nnamespace TestableIO.System.IO.Abstractions.Api.Tests;\n\npublic static class Helper\n{\n    public static string CreatePublicApi(string framework, string assemblyName)\n    {\n#if DEBUG\n        var configuration = \"Debug\";\n#else\n\t\tstring configuration = \"Release\";\n#endif\n        var assemblyFile =\n            CombinedPaths(\"src\", assemblyName, \"bin\", configuration, framework, $\"{assemblyName}.dll\");\n        var assembly = Assembly.LoadFile(assemblyFile);\n        var publicApi = assembly.GeneratePublicApi(new ApiGeneratorOptions\n        {\n            AllowNamespacePrefixes = [\"System.IO.Abstractions\",],\n        });\n        return publicApi.Replace(\"\\r\\n\", \"\\n\");\n    }\n\n    public static string GetExpectedApi(string framework, string assemblyName)\n    {\n        var expectedPath = CombinedPaths(\"tests\", \"TestableIO.System.IO.Abstractions.Api.Tests\",\n            \"Expected\", $\"{assemblyName}_{framework}.txt\");\n        try\n        {\n            return File.ReadAllText(expectedPath)\n                .Replace(\"\\r\\n\", \"\\n\");\n        }\n        catch\n        {\n            return string.Empty;\n        }\n    }\n\n    public static IEnumerable<string> GetTargetFrameworks()\n    {\n        var csproj = CombinedPaths(\"src\", \"Directory.Build.props\");\n        var project = XDocument.Load(csproj);\n        var targetFrameworks =\n            project.XPathSelectElement(\"/Project/PropertyGroup/TargetFrameworks\");\n        foreach (var targetFramework in targetFrameworks!.Value.Split(';')) yield return targetFramework;\n    }\n\n    public static void SetExpectedApi(string framework, string assemblyName, string publicApi)\n    {\n        var expectedPath = CombinedPaths(\"tests\", \"TestableIO.System.IO.Abstractions.Api.Tests\",\n            \"Expected\", $\"{assemblyName}_{framework}.txt\");\n        Directory.CreateDirectory(Path.GetDirectoryName(expectedPath)!);\n        File.WriteAllText(expectedPath, publicApi);\n    }\n\n    private static string CombinedPaths(params string[] paths)\n    {\n        return Path.GetFullPath(Path.Combine(paths.Prepend(GetSolutionDirectory()).ToArray()));\n    }\n\n    private static string GetSolutionDirectory([CallerFilePath] string path = \"\")\n    {\n        return Path.Combine(Path.GetDirectoryName(path)!, \"..\", \"..\");\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/TestableIO.System.IO.Abstractions.Api.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<TargetFrameworks>net8.0</TargetFrameworks>\n\t</PropertyGroup>\n\n\t<ItemGroup>\n\t\t<ProjectReference Include=\"..\\..\\src\\TestableIO.System.IO.Abstractions.TestingHelpers\\TestableIO.System.IO.Abstractions.TestingHelpers.csproj\" />\n\t\t<ProjectReference Include=\"..\\..\\src\\TestableIO.System.IO.Abstractions.Wrappers\\TestableIO.System.IO.Abstractions.Wrappers.csproj\" />\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"PublicApiGenerator\"/>\n\t</ItemGroup>\n\n\t<ItemGroup>\n\t\t<Folder Include=\"Expected\\\"/>\n\t</ItemGroup>\n</Project>\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Api.Tests/Usings.cs",
    "content": "﻿global using System;\nglobal using System.Threading.Tasks;\nglobal using NUnit.Framework;\nglobal using aweXpect;\nglobal using static aweXpect.Expect;\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/ApiParityTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing aweXpect;\nusing static aweXpect.Expect;\nusing NUnit.Framework;\nusing static System.Reflection.BindingFlags;\n\nnamespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class ApiParityTests\n{\n    [Test]\n    public async Task File() =>\n        await AssertParity(\n            typeof(File),\n            typeof(FileBase)\n        );\n\n    [Test]\n    public async Task FileInfo() =>\n        await AssertParity(\n            typeof(FileInfo),\n            typeof(FileInfoBase)\n        );\n\n    [Test]\n    public async Task FileVersionInfo() =>\n        await AssertParity(\n            typeof(Diagnostics.FileVersionInfo),\n            typeof(FileVersionInfoBase)\n        );\n\n    [Test]\n    public async Task Directory() =>\n        await AssertParity(\n            typeof(Directory),\n            typeof(DirectoryBase)\n        );\n\n    [Test]\n    public async Task DirectoryInfo() =>\n        await AssertParity(\n            typeof(DirectoryInfo),\n            typeof(DirectoryInfoBase)\n        );\n\n    [Test]\n    public async Task DriveInfo() =>\n        await AssertParity(\n            typeof(DriveInfo),\n            typeof(DriveInfoBase)\n        );\n\n    [Test]\n    public async Task Path() =>\n        await AssertParity(\n            typeof(Path),\n            typeof(PathBase)\n        );\n\n    [Test]\n    public async Task FileSystemWatcher() =>\n        await AssertParity(\n            typeof(FileSystemWatcher),\n            typeof(FileSystemWatcherBase)\n        );\n\n    private async Task AssertParity(Type referenceType, Type abstractionType)\n    {\n        static IEnumerable<string> GetMembers(Type type) => type\n            .GetMembers(bindingAttr: Instance | Static | Public | FlattenHierarchy)\n            .Select(x => x.ToString())\n            .OrderBy(x => x, StringComparer.Ordinal);\n        var referenceMembers = GetMembers(referenceType)\n            .Select(x => x.Replace(\"System.IO.FileStream\", \"System.IO.Abstractions.FileSystemStream\"))\n            .Select(x => x.Replace(\"System.IO.Abstractions.FileSystemStreamOptions\", \"System.IO.FileStreamOptions\"))\n            .Select(x => x.Replace(\"System.IO.FileSystemInfo\", \"System.IO.Abstractions.IFileSystemInfo\"))\n            .Select(x => x.Replace(\"System.IO.FileInfo\", \"System.IO.Abstractions.IFileInfo\"))\n            .Select(x => x.Replace(\"System.IO.DirectoryInfo\", \"System.IO.Abstractions.IDirectoryInfo\"))\n            .Select(x => x.Replace(\"System.IO.DriveInfo\", \"System.IO.Abstractions.IDriveInfo\"))\n            .Select(x => x.Replace(\"System.IO.WaitForChangedResult\", \"System.IO.Abstractions.IWaitForChangedResult\"))\n            .Where(x => x != \"System.Diagnostics.FileVersionInfo GetVersionInfo(System.String)\");\n        var abstractionMembers = GetMembers(abstractionType)\n            .Where(x => !x.Contains(\"op_Implicit\"))\n            .Where(x => x != \"System.IO.Abstractions.IFileSystem get_FileSystem()\")\n            .Where(x => x != \"System.IO.Abstractions.IFileSystem FileSystem\");\n        var diff = new ApiDiff(\n            extraMembers: abstractionMembers.Except(referenceMembers),\n            missingMembers: referenceMembers.Except(abstractionMembers)\n        );\n\n        var serializedDiff = JsonSerializer.Serialize(diff, SerializerOptions);\n\n        var snapshotPath = IO.Path.GetFullPath(\"../../../__snapshots__/\");\n        var fileName = $\"ApiParityTests.{referenceType.Name}_{snapshotSuffix}.snap\";\n        var fileContent = IO.File.ReadAllText(IO.Path.Combine(snapshotPath, fileName));\n\n        await That(fileContent).IsEqualTo(serializedDiff)\n            .IgnoringNewlineStyle()\n            .IgnoringTrailingWhiteSpace();\n    }\n\n    private static JsonSerializerOptions SerializerOptions = new()\n    {\n        WriteIndented = true\n    };\n        \n    private readonly struct ApiDiff\n    {\n        public ApiDiff(IEnumerable<string> extraMembers, IEnumerable<string> missingMembers)\n        {\n            ExtraMembers = extraMembers.ToArray();\n            MissingMembers = missingMembers.ToArray();\n\n        }\n\n        public string[] ExtraMembers { get; }\n        public string[] MissingMembers { get; }\n    }\n\n#if NET472\n        private const string snapshotSuffix = \".NET Framework 4.7.2\";\n#elif NET6_0\n        private const string snapshotSuffix = \".NET 6.0\";\n#elif NET8_0\n        private const string snapshotSuffix = \".NET 8.0\";\n#elif NET9_0\n        private const string snapshotSuffix = \".NET 9.0\";\n#elif NET10_0\n        private const string snapshotSuffix = \".NET 10.0\";\n#else\n#error Unknown target framework.\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/TestableIO.System.IO.Abstractions.Parity.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <PropertyGroup>\n    <Description>The unit tests for our the parity checks</Description>\n    <AssemblyName>System.IO.Abstractions.Parity.Tests</AssemblyName>\n    <RootNamespace>System.IO.Abstractions.Parity.Tests</RootNamespace>\n  </PropertyGroup>\n  \n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\TestableIO.System.IO.Abstractions.Wrappers\\TestableIO.System.IO.Abstractions.Wrappers.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Text.Json\"/>\n  </ItemGroup>\n  \n</Project>\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DirectoryInfo_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDirectoryInfo CreateSubdirectory(System.String, System.Security.AccessControl.DirectorySecurity)\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"System.Runtime.Remoting.ObjRef CreateObjRef(System.Type)\",\n    \"System.Security.AccessControl.DirectorySecurity GetAccessControl()\",\n    \"System.Security.AccessControl.DirectorySecurity GetAccessControl(System.Security.AccessControl.AccessControlSections)\",\n    \"Void .ctor(System.String)\",\n    \"Void Create(System.Security.AccessControl.DirectorySecurity)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\",\n    \"Void SetAccessControl(System.Security.AccessControl.DirectorySecurity)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Directory_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDirectoryInfo CreateDirectory(System.String, System.Security.AccessControl.DirectorySecurity)\",\n    \"System.Security.AccessControl.DirectorySecurity GetAccessControl(System.String)\",\n    \"System.Security.AccessControl.DirectorySecurity GetAccessControl(System.String, System.Security.AccessControl.AccessControlSections)\",\n    \"Void SetAccessControl(System.String, System.Security.AccessControl.DirectorySecurity)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(System.String)\"\n  ]\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(System.String)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(System.String)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(System.String)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.DriveInfo_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.IDriveInfo[] GetDrives()\",\n    \"Void .ctor(System.String)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileInfo_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"System.Runtime.Remoting.ObjRef CreateObjRef(System.Type)\",\n    \"System.Security.AccessControl.FileSecurity GetAccessControl()\",\n    \"System.Security.AccessControl.FileSecurity GetAccessControl(System.Security.AccessControl.AccessControlSections)\",\n    \"Void .ctor(System.String)\",\n    \"Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)\",\n    \"Void SetAccessControl(System.Security.AccessControl.FileSecurity)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor()\",\n    \"Void .ctor(System.String)\",\n    \"Void .ctor(System.String, System.String)\",\n    \"Void add_Disposed(System.EventHandler)\",\n    \"Void remove_Disposed(System.EventHandler)\"\n  ]\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor()\",\n    \"Void .ctor(System.String)\",\n    \"Void .ctor(System.String, System.String)\",\n    \"Void add_Disposed(System.EventHandler)\",\n    \"Void remove_Disposed(System.EventHandler)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor()\",\n    \"Void .ctor(System.String)\",\n    \"Void .ctor(System.String, System.String)\",\n    \"Void add_Disposed(System.EventHandler)\",\n    \"Void remove_Disposed(System.EventHandler)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"Void .ctor()\",\n    \"Void .ctor(System.String)\",\n    \"Void .ctor(System.String, System.String)\",\n    \"Void add_Disposed(System.EventHandler)\",\n    \"Void remove_Disposed(System.EventHandler)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Void Dispose(Boolean)\"\n  ],\n  \"MissingMembers\": [\n    \"System.EventHandler Disposed\",\n    \"System.Object GetLifetimeService()\",\n    \"System.Object InitializeLifetimeService()\",\n    \"System.Runtime.Remoting.ObjRef CreateObjRef(System.Type)\",\n    \"Void .ctor()\",\n    \"Void .ctor(System.String)\",\n    \"Void .ctor(System.String, System.String)\",\n    \"Void add_Disposed(System.EventHandler)\",\n    \"Void remove_Disposed(System.EventHandler)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.FileVersionInfo_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions, Int64)\"\n  ]\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions, Int64)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions, Int64)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"Microsoft.Win32.SafeHandles.SafeFileHandle OpenHandle(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, System.IO.FileOptions, Int64)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.File_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [],\n  \"MissingMembers\": [\n    \"System.IO.Abstractions.FileSystemStream Create(System.String, Int32, System.IO.FileOptions, System.Security.AccessControl.FileSecurity)\",\n    \"System.Security.AccessControl.FileSecurity GetAccessControl(System.String)\",\n    \"System.Security.AccessControl.FileSecurity GetAccessControl(System.String, System.Security.AccessControl.AccessControlSections)\",\n    \"Void SetAccessControl(System.String, System.Security.AccessControl.FileSecurity)\"\n  ]\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 10.0.snap",
    "content": "{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get_PathSeparator()\",\n    \"Char get_VolumeSeparatorChar()\",\n    \"Char[] get_InvalidPathChars()\"\n  ],\n  \"MissingMembers\": []\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 6.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get_PathSeparator()\",\n    \"Char get_VolumeSeparatorChar()\",\n    \"Char[] get_InvalidPathChars()\"\n  ],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 8.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get_PathSeparator()\",\n    \"Char get_VolumeSeparatorChar()\",\n    \"Char[] get_InvalidPathChars()\"\n  ],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get_PathSeparator()\",\n    \"Char get_VolumeSeparatorChar()\",\n    \"Char[] get_InvalidPathChars()\"\n  ],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Parity.Tests/__snapshots__/ApiParityTests.Path_.NET Framework 4.7.2.snap",
    "content": "﻿{\n  \"ExtraMembers\": [\n    \"Char get_AltDirectorySeparatorChar()\",\n    \"Char get_DirectorySeparatorChar()\",\n    \"Char get_PathSeparator()\",\n    \"Char get_VolumeSeparatorChar()\",\n    \"Char[] get_InvalidPathChars()\"\n  ],\n  \"MissingMembers\": []\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryArgumentPathTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockDirectoryArgumentPathTests\n{\n    private static IEnumerable<Action<IDirectory>> GetFileSystemActionsForArgumentNullException()\n    {\n        yield return ds => ds.Delete(null);\n        yield return ds => ds.Delete(null, true);\n        yield return ds => ds.CreateDirectory(null);\n        if (MockUnixSupport.IsWindowsPlatform())\n        {\n#pragma warning disable CA1416\n            yield return ds => ds.CreateDirectory(null, new DirectorySecurity());\n#pragma warning restore CA1416\n        }\n        yield return ds => ds.SetCreationTime(null, DateTime.Now);\n        yield return ds => ds.SetCreationTimeUtc(null, DateTime.Now);\n        yield return ds => ds.SetLastAccessTime(null, DateTime.Now);\n        yield return ds => ds.SetLastAccessTimeUtc(null, DateTime.Now);\n        yield return ds => ds.SetLastWriteTime(null, DateTime.Now);\n        yield return ds => ds.SetLastWriteTimeUtc(null, DateTime.Now);\n        yield return ds => ds.EnumerateDirectories(null);\n        yield return ds => ds.EnumerateDirectories(null, \"foo\");\n        yield return ds => ds.EnumerateDirectories(null, \"foo\", SearchOption.AllDirectories);\n    }\n\n    [TestCaseSource(nameof(GetFileSystemActionsForArgumentNullException))]\n    public async Task Operations_ShouldThrowArgumentNullExceptionIfPathIsNull(Action<IDirectory> action)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action wrapped = () => action(fileSystem.Directory);\n\n        // Assert\n        var exception = await That(wrapped).Throws<ArgumentNullException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryGetAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Security.AccessControl;\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\n[SupportedOSPlatform(\"windows\")]\npublic class MockDirectoryGetAccessControlTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockDirectory_GetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.Directory.GetAccessControl(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_GetAccessControl_ShouldThrowDirectoryNotFoundExceptionIfDirectoryDoesNotExistInMockData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var expectedDirectoryName = XFS.Path(@\"c:\\a\");\n\n        // Act\n        Action action = () => fileSystem.Directory.GetAccessControl(expectedDirectoryName);\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetAccessControl_ShouldReturnAccessControlOfDirectoryData()\n    {\n        // Arrange\n        var expectedDirectorySecurity = new DirectorySecurity();\n        expectedDirectorySecurity.SetAccessRuleProtection(false, false);\n\n        var filePath = XFS.Path(@\"c:\\a\\\");\n        var fileData = new MockDirectoryData()\n        {\n            AccessControl = expectedDirectorySecurity,\n        };\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        // Act\n        var directorySecurity = fileSystem.Directory.GetAccessControl(filePath);\n\n        // Assert\n        await That(directorySecurity).IsEqualTo(expectedDirectorySecurity);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\n[SupportedOSPlatform(\"windows\")]\npublic class MockDirectoryInfoAccessControlTests\n{\n    [Test]\n    public async Task MockDirectoryInfo_GetAccessControl_ShouldReturnAccessControlOfDirectoryData()\n    {\n        // Arrange\n        var expectedDirectorySecurity = new DirectorySecurity();\n        expectedDirectorySecurity.SetAccessRuleProtection(false, false);\n\n        var filePath = XFS.Path(@\"c:\\a\\\");\n        var fileData = new MockDirectoryData()\n        {\n            AccessControl = expectedDirectorySecurity,\n        };\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        var directorInfo = fileSystem.DirectoryInfo.New(filePath);\n\n        // Act\n        var directorySecurity = directorInfo.GetAccessControl();\n\n        // Assert\n        await That(directorySecurity).IsEqualTo(expectedDirectorySecurity);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_SetAccessControl_ShouldSetAccessControlOfDirectoryData()\n    {\n        // Arrange\n        var filePath = XFS.Path(@\"c:\\a\\\");\n        var fileData = new MockDirectoryData();\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        var directorInfo = fileSystem.DirectoryInfo.New(filePath);\n\n        // Act\n        var expectedAccessControl = new DirectorySecurity();\n        expectedAccessControl.SetAccessRuleProtection(false, false);\n        directorInfo.SetAccessControl(expectedAccessControl);\n\n        // Assert\n        var accessControl = directorInfo.GetAccessControl();\n        await That(accessControl).IsEqualTo(expectedAccessControl);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoFactoryTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockDirectoryInfoFactoryTests\n{\n    [Test]\n    public async Task MockDirectoryInfoFactory_Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new MockFileSystem();\n\n        var result = fileSystem.DirectoryInfo.Wrap(null);\n            \n        await That(result).IsNull();\n    }\n\n    [Test]\n    public async Task MockDirectoryInfoFactory_Wrap_ShouldKeepNameAndFullName()\n    {\n        var fs = new MockFileSystem();\n        var directoryInfo = new DirectoryInfo(@\"C:\\subfolder\\file\");\n        var wrappedDirectoryInfo = fs.DirectoryInfo.Wrap(directoryInfo);\n\n        await That(wrappedDirectoryInfo.FullName).IsEqualTo(directoryInfo.FullName);\n        await That(wrappedDirectoryInfo.Name).IsEqualTo(directoryInfo.Name);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoSymlinkTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockDirectoryInfoSymlinkTests\n{\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n\n    [Test]\n    public async Task MockDirectoryInfo_ResolveLinkTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n\n        var result = fileSystem.DirectoryInfo.New(\"foo\").ResolveLinkTarget(false);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.DirectoryInfo.New(\"foo1\").ResolveLinkTarget(true);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.DirectoryInfo.New(\"foo1\").ResolveLinkTarget(false);\n\n        await That(result.Name).IsEqualTo(\"foo\");\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n\n        await That(() =>\n        {\n            fileSystem.DirectoryInfo.New(\"bar\").ResolveLinkTarget(false);\n        }).Throws<IOException>();\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockDirectoryInfoTests\n{\n    public static IEnumerable<object[]> MockDirectoryInfo_GetExtension_Cases\n    {\n        get\n        {\n            yield return new object[] { XFS.Path(@\"c:\\temp\") };\n            yield return new object[] { XFS.Path(@\"c:\\temp\\\") };\n        }\n    }\n\n    [TestCaseSource(nameof(MockDirectoryInfo_GetExtension_Cases))]\n    public async Task MockDirectoryInfo_GetExtension_ShouldReturnEmptyString(string directoryPath)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var result = directoryInfo.Extension;\n\n        // Assert\n        await That(result).IsEmpty();\n    }\n\n    public static IEnumerable<object[]> MockDirectoryInfo_Exists_Cases\n    {\n        get\n        {\n            yield return new object[] { XFS.Path(@\"c:\\temp\\folder\"), true };\n            yield return new object[] { XFS.Path(@\"c:\\temp\\folder\\notExistant\"), false };\n        }\n    }\n\n    [TestCaseSource(nameof(MockDirectoryInfo_Exists_Cases))]\n    public async Task MockDirectoryInfo_Exists(string path, bool expected)\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"Hello World\")}\n        });\n        var directoryInfo = new MockDirectoryInfo(fileSystem, path);\n\n        var result = directoryInfo.Exists;\n\n        await That(result).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Attributes_ShouldReturnMinusOneForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n        FileAttributes expected = (FileAttributes)(-1);\n\n        await That(directoryInfo.Attributes).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Attributes_Clear_ShouldRemainDirectory()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\existing\\directory\");\n        fileSystem.Directory.CreateDirectory(path);\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n        directoryInfo.Attributes = 0;\n\n        await That(fileSystem.File.Exists(path)).IsFalse();\n        await That(directoryInfo.Attributes).IsEqualTo(FileAttributes.Directory);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Attributes_SetterShouldThrowDirectoryNotFoundExceptionOnNonExistingFileOrDirectory()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.Attributes = FileAttributes.Hidden).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectoryInfo_GetFiles_ShouldWorkWithUNCPath()\n    {\n        var fileName = XFS.Path(@\"\\\\unc\\folder\\file.txt\");\n        var directoryName = XFS.Path(@\"\\\\unc\\folder\");\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {fileName, \"\"}\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryName);\n\n        // Act\n        var files = directoryInfo.GetFiles();\n\n        // Assert\n        await That(files[0].FullName).IsEqualTo(fileName);\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectoryInfo_GetFiles_ShouldWorkWithUNCPath_WhenCurrentDirectoryIsUnc()\n    {\n        var fileName = XFS.Path(@\"\\\\unc\\folder\\file.txt\");\n        var directoryName = XFS.Path(@\"\\\\unc\\folder\");\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {fileName, \"\"}\n        });\n            \n        fileSystem.Directory.SetCurrentDirectory(directoryName);\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryName);\n            \n        // Act\n        var files = directoryInfo.GetFiles();\n\n        // Assert\n        await That(files[0].FullName).IsEqualTo(fileName);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_FullName_ShouldReturnFullNameWithoutIncludingTrailingPathDelimiter()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {\n                XFS.Path(@\"c:\\temp\\folder\\file.txt\"),\n                new MockFileData(\"Hello World\")\n            }\n        });\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n\n        var result = directoryInfo.FullName;\n\n        await That(result).IsEqualTo(XFS.Path(@\"c:\\temp\\folder\"));\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_GetFileSystemInfos_ShouldReturnBothDirectoriesAndFiles()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"Hello World\") },\n            { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() }\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n        var result = directoryInfo.GetFileSystemInfos();\n\n        await That(result.Length).IsEqualTo(2);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnBothDirectoriesAndFiles()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"Hello World\") },\n            { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() }\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n        var result = directoryInfo.EnumerateFileSystemInfos().ToArray();\n\n        await That(result.Length).IsEqualTo(2);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_GetFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPattern()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"Hello World\") },\n            { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() },\n            { XFS.Path(@\"c:\\temp\\folder\\older\"), new MockDirectoryData() }\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n        var result = directoryInfo.GetFileSystemInfos(\"f*\");\n\n        await That(result.Length).IsEqualTo(2);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPattern()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"Hello World\") },\n            { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() },\n            { XFS.Path(@\"c:\\temp\\folder\\older\"), new MockDirectoryData() }\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n        var result = directoryInfo.EnumerateFileSystemInfos(\"f*\", SearchOption.AllDirectories).ToArray();\n\n        await That(result.Length).IsEqualTo(2);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPatternRecursive()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"\") },\n            { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() },\n            { XFS.Path(@\"c:\\temp\\folder\\older\"), new MockDirectoryData() }\n        });\n\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\\"));\n        var result = directoryInfo.EnumerateFileSystemInfos(\"*\", SearchOption.AllDirectories).ToArray();\n\n        await That(result.Length).IsEqualTo(5);\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n        [Test]\n        public async Task MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAndNamesWithSearchPatternRecursiveEnumerateOptions()\n        {\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"c:\\temp\\folder\\file.txt\"), new MockFileData(\"\") },\n                { XFS.Path(@\"c:\\temp\\folder\\folder\"), new MockDirectoryData() },\n                { XFS.Path(@\"c:\\temp\\folder\\older\"), new MockDirectoryData() }\n            });\n\n            var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\\"));\n\n            var enumerationOptions = new EnumerationOptions()\n            {\n                RecurseSubdirectories = true,\n            };\n\n            var result = directoryInfo.EnumerateFileSystemInfos(\"*\", enumerationOptions).ToArray();\n\n            await That(result.Length).IsEqualTo(5);\n        }\n#endif\n\n    [Test]\n    public async Task MockDirectoryInfo_GetParent_ShouldReturnDirectoriesAndNamesWithSearchPattern()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\a\\b\\c\"));\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\a\\b\\c\"));\n\n        // Act\n        var result = directoryInfo.Parent;\n\n        // Assert\n        await That(result.FullName).IsEqualTo(XFS.Path(@\"c:\\a\\b\"));\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_EnumerateFiles_ShouldReturnAllFiles()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            //Files \"above\" in folder we're querying\n            { XFS.Path(@\"c:\\temp\\a.txt\"), \"\" },\n\n            //Files in the folder we're querying\n            { XFS.Path(@\"c:\\temp\\folder\\b.txt\"), \"\" },\n            { XFS.Path(@\"c:\\temp\\folder\\c.txt\"), \"\" },\n\n            //Files \"below\" the folder we're querying\n            { XFS.Path(@\"c:\\temp\\folder\\deeper\\d.txt\"), \"\" }\n        });\n\n        // Act\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n\n        // Assert\n        await That(directoryInfo.EnumerateFiles().ToList().Select(x => x.Name).ToArray()).IsEqualTo(new[] { \"b.txt\", \"c.txt\" });\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_EnumerateDirectories_ShouldReturnAllDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            //A file we want to ignore entirely\n            { XFS.Path(@\"c:\\temp\\folder\\a.txt\"), \"\" },\n\n            //Some files in sub folders (which we also want to ignore entirely)\n            { XFS.Path(@\"c:\\temp\\folder\\b\\file.txt\"), \"\" },\n            { XFS.Path(@\"c:\\temp\\folder\\c\\other.txt\"), \"\" },\n        });\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\temp\\folder\"));\n\n        // Act\n        var directories = directoryInfo.EnumerateDirectories().Select(a => a.Name).ToArray();\n\n        // Assert\n        await That(directories).IsEqualTo(new[] { \"b\", \"c\" });\n    }\n\n    [TestCase(@\"\\\\unc\\folder\", @\"\\\\unc\\folder\")]\n    [TestCase(@\"\\\\unc/folder\\\\foo\", @\"\\\\unc\\folder\\foo\")]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectoryInfo_FullName_ShouldReturnNormalizedUNCPath(string directoryPath, string expectedFullName)\n    {\n        // Arrange\n        directoryPath = XFS.Path(directoryPath);\n        expectedFullName = XFS.Path(expectedFullName);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var actualFullName = directoryInfo.FullName;\n\n        // Assert\n        await That(actualFullName).IsEqualTo(expectedFullName);\n    }\n\n    [TestCase(@\"c:\\temp\\\\folder\", @\"c:\\temp\\folder\")]\n    [TestCase(@\"c:\\temp//folder\", @\"c:\\temp\\folder\")]\n    [TestCase(@\"c:\\temp//\\\\///folder\", @\"c:\\temp\\folder\")]\n    public async Task MockDirectoryInfo_FullName_ShouldReturnNormalizedPath(string directoryPath, string expectedFullName)\n    {\n        // Arrange\n        directoryPath = XFS.Path(directoryPath);\n        expectedFullName = XFS.Path(expectedFullName);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var actualFullName = directoryInfo.FullName;\n\n        // Assert\n        await That(actualFullName).IsEqualTo(expectedFullName);\n    }\n\n    [TestCase(@\"c:\\temp\\folder  \", @\"c:\\temp\\folder\")]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockDirectoryInfo_FullName_ShouldReturnPathWithTrimmedTrailingSpaces(string directoryPath, string expectedFullName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var actualFullName = directoryInfo.FullName;\n\n        // Assert\n        await That(actualFullName).IsEqualTo(expectedFullName);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_MoveTo_ShouldUpdateFullName()\n    {\n        // Arrange\n        var path = XFS.Path(@\"c:\\source\");\n        var destination = XFS.Path(@\"c:\\destination\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(path);\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n\n        // Act\n        directoryInfo.MoveTo(destination);\n\n        // Assert\n        await That(directoryInfo.FullName).IsEqualTo(destination);\n    }\n\n    [TestCase(@\"c:\\temp\\\\folder \", @\"folder\")]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockDirectoryInfo_Name_ShouldReturnNameWithTrimmedTrailingSpaces(string directoryPath, string expectedName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var actualName = directoryInfo.Name;\n\n        // Assert\n        await That(actualName).IsEqualTo(expectedName);\n    }\n\n    [TestCase(@\"c:\\\", @\"c:\\\")]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockDirectoryInfo_Name_ShouldReturnPathRoot_IfDirectoryPathIsPathRoot(string directoryPath, string expectedName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, directoryPath);\n\n        // Act\n        var actualName = directoryInfo.Name;\n\n        // Assert\n        await That(actualName).IsEqualTo(expectedName);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Constructor_ShouldThrowArgumentNullException_IfArgumentDirectoryIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => new MockDirectoryInfo(fileSystem, null);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Constructor_ShouldThrowArgumentNullException_IfArgumentFileSystemIsNull()\n    {\n        // Arrange\n        // nothing to do\n\n        // Act\n        Action action = () => new MockDirectoryInfo(null, XFS.Path(@\"c:\\foo\\bar\\folder\"));\n\n        // Assert\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Constructor_ShouldThrowArgumentException_IfArgumentDirectoryIsEmpty()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => new MockDirectoryInfo(fileSystem, string.Empty);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [TestCase(@\"c:\\temp\\folder\\folder\")]\n    [TestCase(@\"..\\..\\..\\Desktop\")]\n    public async Task MockDirectoryInfo_ToString_ShouldReturnDirectoryName(string directoryName)\n    {\n        // Arrange\n        var directoryPath = XFS.Path(directoryName);\n\n        // Act\n        var mockDirectoryInfo = new MockDirectoryInfo(new MockFileSystem(), directoryPath);\n\n        // Assert\n        await That(mockDirectoryInfo.ToString()).IsEqualTo(directoryPath);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Exists_ShouldReturnCachedData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\abc\");\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n\n        // Act\n        fileSystem.AddDirectory(path);\n\n        // Assert\n        await That(directoryInfo.Exists).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Exists_ShouldUpdateCachedDataOnRefresh()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\abc\");\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n\n        // Act\n        fileSystem.AddDirectory(path);\n        directoryInfo.Refresh();\n\n        // Assert\n        await That(directoryInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task Directory_exists_after_creation()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = fileSystem.DirectoryInfo.New(XFS.Path(@\"c:\\abc\"));\n\n        // Act\n        directoryInfo.Create();\n\n        // Assert\n        await That(directoryInfo.Exists).IsTrue();\n    }\n\n    [Test, WindowsOnly(WindowsSpecifics.AccessControlLists)]\n    public async Task Directory_exists_after_creation_with_security()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = fileSystem.DirectoryInfo.New(XFS.Path(@\"c:\\abc\"));\n\n        // Act\n#pragma warning disable CA1416\n        directoryInfo.Create(new DirectorySecurity());\n#pragma warning restore CA1416\n\n        // Assert\n        await That(directoryInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task Directory_does_not_exist_after_delete()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\abc\"));\n\n        // Act\n        directoryInfo.Delete();\n\n        // Assert\n        await That(directoryInfo.Exists).IsFalse();\n    }\n\n    [Test]\n    public async Task Directory_does_not_exist_after_recursive_delete()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\abc\"));\n\n        // Act\n        directoryInfo.Delete(true);\n\n        // Assert\n        await That(directoryInfo.Exists).IsFalse();\n    }\n\n    [Test]\n    public async Task Directory_still_exists_after_move()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\abc\"));\n\n        // Act\n        directoryInfo.MoveTo(XFS.Path(@\"c:\\abc2\"));\n\n        // Assert\n        await That(directoryInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_LastAccessTime_ShouldReflectChangedValue()\n    {\n        // Arrange  \n        var path = XFS.Path(@\"c:\\abc\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockDirectoryData() }\n        });\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n        var lastAccessTime = new DateTime(2022, 1, 8);\n\n        // Act\n        directoryInfo.LastAccessTime = lastAccessTime;\n\n        // Assert\n        await That(directoryInfo.LastAccessTime).IsEqualTo(lastAccessTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_CreationTime_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.CreationTime;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_LastAccessTime_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.LastAccessTime;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_LastWriteTime_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.LastWriteTime;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_CreationTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.CreationTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_LastAccessTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.LastAccessTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_LastWriteTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        var result = directoryInfo.LastWriteTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockDirectoryInfo_Create_WithConflictingFile_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\"));\n        var sut = fileSystem.DirectoryInfo.New(XFS.Path(@\"c:\\foo\\bar.txt\"));\n\n        // Act\n        Action action = () => sut.Create();\n\n        // Assert\n        await That(action).Throws<IOException>();\n    }\n\n    public async Task MockDirectoryInfo_CreationTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.CreationTime = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n    public async Task MockDirectoryInfo_LastAccessTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.LastAccessTime = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n    public async Task MockDirectoryInfo_LastWriteTime_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.LastWriteTime = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n    public async Task MockDirectoryInfo_CreationTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.CreationTimeUtc = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n    public async Task MockDirectoryInfo_LastAccessTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.LastAccessTimeUtc = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n    public async Task MockDirectoryInfo_LastWriteTimeUtc_SetterShouldThrowDirectoryNotFoundExceptionForNonExistingDirectory()\n    {\n        var newTime = new DateTime(2022, 04, 06);\n        var fileSystem = new MockFileSystem();\n        var directoryInfo = new MockDirectoryInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\"));\n\n        await That(() => directoryInfo.LastWriteTime = newTime).Throws<DirectoryNotFoundException>();\n    }\n\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySetAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing System.Runtime.Versioning;\nusing Security.AccessControl;\nusing XFS = MockUnixSupport;\n\n[TestFixture]\n[SupportedOSPlatform(\"windows\")]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\npublic class MockDirectorySetAccessControlTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockDirectory_SetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var directorySecurity = new DirectorySecurity();\n\n        // Act\n        Action action = () => fileSystem.Directory.SetAccessControl(path, directorySecurity);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_SetAccessControl_ShouldThrowDirectoryNotFoundExceptionIfDirectoryDoesNotExistInMockData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var expectedFileName = XFS.Path(@\"c:\\a\\\");\n        var directorySecurity = new DirectorySecurity();\n\n        // Act\n        Action action = () => fileSystem.Directory.SetAccessControl(expectedFileName, directorySecurity);\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_SetAccessControl_ShouldSetAccessControlOfDirectoryData()\n    {\n        // Arrange\n        var filePath = XFS.Path(@\"c:\\a\\\");\n        var fileData = new MockDirectoryData();\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        // Act\n        var expectedAccessControl = new DirectorySecurity();\n        expectedAccessControl.SetAccessRuleProtection(false, false);\n        fileSystem.Directory.SetAccessControl(filePath, expectedAccessControl);\n\n        // Assert\n        var accessControl = fileSystem.Directory.GetAccessControl(filePath);\n        await That(accessControl).IsEqualTo(expectedAccessControl);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockDirectorySymlinkTests\n{\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldReturnFileSystemInfo()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        var path = XFS.Path(@\"C:\\bar\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        IFileSystemInfo fileSystemInfo = fileSystem.Directory.CreateSymbolicLink(path, pathToTarget);\n\n        // Assert\n        await That(fileSystemInfo.FullName).IsEqualTo(path);\n        await That(fileSystemInfo.LinkTarget).IsEqualTo(pathToTarget);\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldSucceedFromDirectoryInfo()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        var path = XFS.Path(@\"C:\\bar\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        fileSystem.Directory.CreateSymbolicLink(path, pathToTarget);\n        IDirectoryInfo directoryInfo = fileSystem.DirectoryInfo.New(path);\n\n        // Assert\n        await That(directoryInfo.FullName).IsEqualTo(path);\n        await That(directoryInfo.LinkTarget).IsEqualTo(pathToTarget);\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithNullPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(null, pathToTarget)).Throws<ArgumentNullException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithNullTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(path);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(path, null)).Throws<ArgumentNullException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithEmptyPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(\"\", pathToTarget)).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithEmptyTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(path);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(path, \"\")).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(\" \", pathToTarget)).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(path);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(path, \" \")).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalCharactersInPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        fileSystem.AddDirectory(pathToTarget);\n\n        // Act\n        Action ex = () => fileSystem.Directory.CreateSymbolicLink(@\"C:\\bar_?_\", pathToTarget);\n\n        // Assert\n        await That(ex).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailWithIllegalCharactersInTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\foo\");\n\n        // Act\n        Action ex = () => fileSystem.Directory.CreateSymbolicLink(path, @\"C:\\bar_?_\");\n\n        // Assert\n        await That(ex).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldFailIfPathExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo\");\n        string path = XFS.Path(@\"C:\\Folder\\bar\");\n        fileSystem.AddDirectory(pathToTarget);\n        fileSystem.AddDirectory(path);\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateSymbolicLink(path, pathToTarget)).Throws<IOException>();\n\n        // Assert\n        await That(ex.Message).Contains(\"path\");\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldNotFailIfTargetDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo\");\n        string pathToTarget = XFS.Path(@\"C:\\Target\");\n\n        // Act\n        var fileSystemInfo = fileSystem.Directory.CreateSymbolicLink(path, pathToTarget);\n\n        // Assert\n        await That(fileSystemInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateSymbolicLink_ShouldSetReparsePointAttribute()\n    {\n        var path = \"foo\";\n        var pathToTarget = \"bar\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(pathToTarget);\n\n        fileSystem.Directory.CreateSymbolicLink(path, pathToTarget);\n\n        var attributes = fileSystem.DirectoryInfo.New(path).Attributes;\n        await That(attributes.HasFlag(FileAttributes.ReparsePoint)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_ResolveLinkTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n\n        var result = fileSystem.Directory.ResolveLinkTarget(\"foo\", false);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockDirectory_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink()\n    {\n        // The maximum number of symbolic links that are followed:\n        // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n        var maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        var previousPath = \"bar\";\n        for (int i = 0; i < maxResolveLinks; i++)\n        {\n            string newPath = $\"foo-{i}\";\n            fileSystem.Directory.CreateSymbolicLink(newPath, previousPath);\n            previousPath = newPath;\n        }\n\n        var result = fileSystem.Directory.ResolveLinkTarget(previousPath, true);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockDirectory_ResolveLinkTarget_WithFinalTargetWithTooManyLinks_ShouldThrowIOException()\n    {\n        // The maximum number of symbolic links that are followed:\n        // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n        var maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n        maxResolveLinks++;\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        var previousPath = \"bar\";\n        for (int i = 0; i < maxResolveLinks; i++)\n        {\n            string newPath = $\"foo-{i}\";\n            fileSystem.Directory.CreateSymbolicLink(newPath, previousPath);\n            previousPath = newPath;\n        }\n\n        await That(() => fileSystem.Directory.ResolveLinkTarget(previousPath, true)).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.Directory.ResolveLinkTarget(\"foo1\", false);\n\n        await That(result.Name).IsEqualTo(\"foo\");\n    }\n\n    [Test]\n    public async Task MockDirectory_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"bar\");\n        fileSystem.Directory.CreateSymbolicLink(\"foo\", \"bar\");\n\n        await That(() =>\n        {\n            fileSystem.Directory.ResolveLinkTarget(\"bar\", false);\n        }).Throws<IOException>();\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing aweXpect.Equivalency;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockDirectoryTests\n{\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldReturnAllFilesBelowPathWhenPatternIsEmptyAndSearchOptionIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldReturnFilesDirectlyBelowPathWhenPatternIsEmptyAndSearchOptionIsTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"*\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldReturnAllPatternMatchingFilesWhenEnumerationOptionHasRecurseSubdirectoriesSetToTrue()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\b.txt\"),\n            XFS.Path(@\"c:\\c.txt\"),\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.txt\", new EnumerationOptions { RecurseSubdirectories = true });\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n#endif\n\n    private MockFileSystem SetupFileSystem()\n    {\n        return new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\d\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\d\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\c.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\d\"), new MockFileData(\"Demo text content\") }\n        });\n\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldReturnFilesDirectlyBelowPathWhenPatternIsWildcardAndSearchOptionIsTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"*\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPattern()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.gif\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithThreeCharacterLongFileExtension_RespectingAllDirectorySearchOption()\n    {\n        // Arrange\n        var additionalFilePath = XFS.Path(@\"c:\\a\\a\\c.gifx\");\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(additionalFilePath, new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifx.xyz\"), new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifz\\xyz\"), new MockFileData(string.Empty));\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.gif\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            additionalFilePath\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithThreeCharacterLongFileExtension_RespectingTopDirectorySearchOption()\n    {\n        // Arrange\n        var additionalFilePath = XFS.Path(@\"c:\\a\\c.gifx\");\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(additionalFilePath, new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifx.xyz\"), new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifx\"), new MockFileData(string.Empty));\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            additionalFilePath\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"*.gif\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternOnlyIfTheFileExtensionIsThreeCharacterLong()\n    {\n        // Arrange\n        var additionalFilePath = XFS.Path(@\"c:\\a\\c.gi\");\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(additionalFilePath, new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifx.xyz\"), new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gif\"), new MockFileData(string.Empty));\n        fileSystem.AddFile(XFS.Path(@\"c:\\a\\a\\c.gifx\"), new MockFileData(string.Empty));\n        var expected = new[]\n        {\n            additionalFilePath\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\a\"), \"*.gi\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternWithDotsInFilenames()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.there.are.dots.in.this.filename.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\c.gif\"), new MockFileData(\"Demo text content\") },\n        });\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.there.are.dots.in.this.filename.gif\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_FilterShouldFindFilesWithSpecialChars()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.1#.pdf\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\b\\b #1.txt\"), new MockFileData(\"Demo text content\") }\n        });\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.1#.pdf\"),\n            XFS.Path(@\"c:\\b\\b #1.txt\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.*\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterByExtensionBasedSearchPatternAndSearchOptionTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[] { XFS.Path(@\"c:\\a.gif\") };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterForAllFilesWithNoExtensionsAndSearchOptionTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again.\"), new MockFileData(\"some content\"));\n\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\d\"),\n            XFS.Path(@\"C:\\mytestfilename\"),\n            XFS.Path(@\"C:\\mytestfilename.\"),\n            XFS.Path(@\"C:\\mytestfile.name.\"),\n            XFS.Path(@\"C:\\mytestfile.name.again.\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"C:\\\"), \"*.\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterForAllFilesWithNoExtensionsAndSearchOptionAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfilename\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfilename.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name.again\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name.again.\"), new MockFileData(\"some content\"));\n\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\d\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\d\"),\n            XFS.Path(@\"C:\\specialNameFormats\\mytestfilename\"),\n            XFS.Path(@\"C:\\specialNameFormats\\mytestfilename.\"),\n            XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name.\"),\n            XFS.Path(@\"C:\\specialNameFormats\\mytestfile.name.again.\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), \"*.\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndNonTrivialFilterAndSearchOptionTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again.\"), new MockFileData(\"some content\"));\n\n        var expected = new[]\n        {\n            XFS.Path(@\"C:\\mytestfilename\"),\n            XFS.Path(@\"C:\\mytestfilename.\"),\n            XFS.Path(@\"C:\\mytestfile.name.\"),\n            XFS.Path(@\"C:\\mytestfile.name.again.\")\n\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"C:\\\"), \"my??s*.\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndNonTrivialFilter2AndSearchOptionTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again.\"), new MockFileData(\"some content\"));\n\n        var expected = new[]\n        {\n            XFS.Path(@\"C:\\mytestfile.name\"),\n            XFS.Path(@\"C:\\mytestfile.name.\"),\n            XFS.Path(@\"C:\\mytestfile.name.again.\")\n\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"C:\\\"), \"my*.n*.\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFilterForFilesWithNoExtensionsAndFilterThatIncludesDotAndSearchOptionTopDirectoryOnly()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfilename.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again\"), new MockFileData(\"some content\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\mytestfile.name.again.\"), new MockFileData(\"some content\"));\n\n        var expected = new[]\n        {\n            XFS.Path(@\"C:\\mytestfile.name\"),\n            XFS.Path(@\"C:\\mytestfile.name.\"),\n            XFS.Path(@\"C:\\mytestfile.name.again.\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.GetFiles(XFS.Path(@\"C:\\\"), \"my*.n*.\", SearchOption.TopDirectoryOnly);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    private async Task ExecuteTimeAttributeTest(DateTime time, Action<IFileSystem, string, DateTime> setter, Func<IFileSystem, string, DateTime> getter)\n    {\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        setter(fileSystem, path, time);\n        var result = getter(fileSystem, path);\n\n        // Assert\n        await That(result).IsEqualTo(time);\n    }\n\n    [Test]\n    public async Task MockDirectory_GetCreationTime_ShouldReturnCreationTimeFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.File.SetCreationTime(p, d),\n            (fs, p) => fs.Directory.GetCreationTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetCreationTimeUtc_ShouldReturnCreationTimeUtcFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.File.SetCreationTimeUtc(p, d),\n            (fs, p) => fs.Directory.GetCreationTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetLastAccessTime_ShouldReturnLastAccessTimeFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.File.SetLastAccessTime(p, d),\n            (fs, p) => fs.Directory.GetLastAccessTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetLastAccessTimeUtc_ShouldReturnLastAccessTimeUtcFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.File.SetLastAccessTimeUtc(p, d),\n            (fs, p) => fs.Directory.GetLastAccessTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetLastWriteTime_ShouldReturnLastWriteTimeFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.File.SetLastWriteTime(p, d),\n            (fs, p) => fs.Directory.GetLastWriteTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetLastWriteTimeUtc_ShouldReturnLastWriteTimeUtcFromFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.File.SetLastWriteTimeUtc(p, d),\n            (fs, p) => fs.Directory.GetLastWriteTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetCreationTime_ShouldSetCreationTimeOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.Directory.SetCreationTime(p, d),\n            (fs, p) => fs.File.GetCreationTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetCreationTimeUtc_ShouldSetCreationTimeUtcOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.Directory.SetCreationTimeUtc(p, d),\n            (fs, p) => fs.File.GetCreationTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetLastAccessTime_ShouldSetLastAccessTimeOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.Directory.SetLastAccessTime(p, d),\n            (fs, p) => fs.File.GetLastAccessTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetLastAccessTimeUtc_ShouldSetLastAccessTimeUtcOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.Directory.SetLastAccessTimeUtc(p, d),\n            (fs, p) => fs.File.GetLastAccessTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetLastWriteTime_ShouldSetLastWriteTimeOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42),\n            (fs, p, d) => fs.Directory.SetLastWriteTime(p, d),\n            (fs, p) => fs.File.GetLastWriteTime(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_SetLastWriteTimeUtc_ShouldSetLastWriteTimeUtcOnFile()\n    {\n        await ExecuteTimeAttributeTest(\n            new DateTime(2010, 6, 4, 13, 26, 42, DateTimeKind.Utc),\n            (fs, p, d) => fs.Directory.SetLastWriteTimeUtc(p, d),\n            (fs, p) => fs.File.GetLastWriteTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnTrueForDirectoryDefinedInMemoryFileSystemWithoutTrailingSlash()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\foo\"));\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnTrueForDirectoryDefinedInMemoryFileSystemWithTrailingSlash()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\foo\\\"));\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithoutTrailingSlash()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\baz\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithTrailingSlash()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\baz\\\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnFalseForDirectoryNotDefinedInMemoryFileSystemWithSimilarFileName()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\baz.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\baz\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnTrueForDirectoryCreatedViaMocks()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\") }\n        });\n        fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\bar\"));\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\bar\"));\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnTrueForFolderContainingFileAddedToMockFileSystem()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\"));\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\foo\\\"));\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [TestCase(@\"\\\\s\")]\n    [TestCase(@\"<\")]\n    [TestCase(\"\\t\")]\n    public async Task MockDirectory_Exists_ShouldReturnFalseForIllegalPath(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var result = fileSystem.Directory.Exists(path);\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateDirectory_WithConflictingFile_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\"));\n            \n        // Act\n        Action action = () => fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\foo\\bar.txt\"));\n\n        // Assert\n        await That(action).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnFalseForFiles()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\foo\\bar.txt\"), new MockFileData(\"Demo text content\"));\n\n        // Act\n        var result = fileSystem.Directory.Exists(XFS.Path(@\"c:\\foo\\bar.txt\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateDirectory_ShouldCreateFolderInMemoryFileSystem()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\bar\"));\n\n        // Assert\n        await That(fileSystem.FileExists(XFS.Path(@\"c:\\bar\\\"))).IsTrue();\n        await That(fileSystem.AllDirectories.Any(d => d == XFS.Path(@\"c:\\bar\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateDirectory_ShouldThrowIfIllegalCharacterInPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        Action createDelegate = () => fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\bar_?_\"));\n\n        // Assert\n        await That(createDelegate).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectory_CreateDirectory_ShouldSupportExtendedLengthPaths()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var directoryInfo = fileSystem.Directory.CreateDirectory(XFS.Path(@\"\\\\?\\c:\\bar\"));\n        fileSystem.File.WriteAllText(@\"\\\\?\\c:\\bar\\grok.txt\", \"hello world\\n\");\n\n        // Assert\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"\\\\?\\c:\\bar\"))).IsTrue();\n        await That(directoryInfo.FullName).IsEqualTo(@\"\\\\?\\c:\\bar\");\n        await That(fileSystem.File.ReadAllText(@\"\\\\?\\c:\\bar\\grok.txt\")).IsEqualTo(\"hello world\\n\");\n        await That(fileSystem.Directory.GetFiles(@\"\\\\?\\c:\\bar\")).HasSingle()\n            .Which.IsEqualTo(@\"\\\\?\\c:\\bar\\grok.txt\");\n    }\n\n    // Issue #210\n    [Test]\n    public async Task MockDirectory_CreateDirectory_ShouldIgnoreExistingDirectoryRegardlessOfTrailingSlash()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\\"), new MockDirectoryData() }\n        });\n\n        // Act/Assert\n        await That(() => fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\foo\"))).DoesNotThrow();\n        await That(() => fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\foo\\\"))).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBase()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\bar\"));\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockDirectory_CreateDirectory_ShouldTrimTrailingSpaces()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\temp\\folder \"));\n\n        // Assert\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\temp\\folder\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_CreMockDirectory_CreateDirectory_ShouldReturnDirectoryInfoBaseWhenDirectoryExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo\\\"), new MockDirectoryData() }\n        });\n\n        // Act\n        var result = fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\foo\\\"));\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectory_CreateDirectory_ShouldWorkWithUNCPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        fileSystem.Directory.CreateDirectory(@\"\\\\server\\share\\path\\to\\create\");\n\n        // Assert\n        await That(fileSystem.Directory.Exists(@\"\\\\server\\share\\path\\to\\create\\\")).IsTrue();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectory_CreateDirectory_ShouldFailIfTryingToCreateUNCPathOnlyServer()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var ex = await That(() => fileSystem.Directory.CreateDirectory(@\"\\\\server\")).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.Message).StartsWith(\"The UNC path should be of the form \\\\\\\\server\\\\share.\");\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockDirectory_CreateDirectory_ShouldSucceedIfTryingToCreateUNCPathShare()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        fileSystem.Directory.CreateDirectory(@\"\\\\server\\share\");\n\n        // Assert\n        await That(fileSystem.Directory.Exists(@\"\\\\server\\share\\\")).IsTrue();\n    }\n\n#if FEATURE_CREATE_TEMP_SUBDIRECTORY\n        [Test]\n        public async Task MockDirectory_CreateTempSubdirectory_ShouldCreateSubdirectoryInTempDirectory()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            var result = fileSystem.Directory.CreateTempSubdirectory();\n\n            // Assert\n            await That(fileSystem.Directory.Exists(result.FullName)).IsTrue();\n            await That(result.FullName).StartsWith(fileSystem.Path.GetTempPath());\n        }\n\n        [Test]\n        public async Task MockDirectory_CreateTempSubdirectoryWithPrefix_ShouldCreateDirectoryWithGivenPrefixInTempDirectory()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            var result = fileSystem.Directory.CreateTempSubdirectory(\"foo-\");\n\n            // Assert\n            await That(fileSystem.Directory.Exists(result.FullName)).IsTrue();\n            await That(Path.GetFileName(result.FullName).StartsWith(\"foo-\")).IsTrue();\n            await That(result.FullName.Contains(fileSystem.Path.GetTempPath())).IsTrue();\n        }\n#endif\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldDeleteDirectory()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        fileSystem.Directory.Delete(XFS.Path(@\"c:\\bar\"), true);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\bar\"))).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldNotDeleteAllDirectories()\n    {\n        // Arrange\n        var folder1Path = XFS.Path(@\"D:\\Test\\Program\");\n        var folder1SubFolderPath = XFS.Path(@\"D:\\Test\\Program\\Subfolder\");\n        var folder2Path = XFS.Path(@\"D:\\Test\\Program_bak\");\n\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.AddDirectory(folder1Path);\n        fileSystem.AddDirectory(folder2Path);\n        fileSystem.AddDirectory(folder1SubFolderPath);\n\n        // Act\n        fileSystem.Directory.Delete(folder1Path, recursive: true);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(folder1Path)).IsFalse();\n        await That(fileSystem.Directory.Exists(folder1SubFolderPath)).IsFalse();\n        await That(fileSystem.Directory.Exists(folder2Path)).IsTrue();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.CaseInsensitivity)]\n    public async Task MockDirectory_Delete_ShouldDeleteDirectoryCaseInsensitively()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        fileSystem.Directory.Delete(XFS.Path(@\"c:\\BAR\"), true);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\bar\"))).IsFalse();\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.CaseSensitivity)]\n    public async Task MockDirectory_Delete_ShouldThrowDirectoryNotFoundException_WhenSpecifiedWithInDifferentCase()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { \"/bar/foo.txt\", new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        Action action = () => fileSystem.Directory.Delete(\"/BAR\", true);\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.CaseSensitivity)]\n    public async Task MockDirectory_Delete_ShouldDeleteDirectoryCaseSensitively()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { \"/bar/foo.txt\", new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        fileSystem.Directory.Delete(\"/bar\", true);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(\"/bar\")).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldThrowDirectoryNotFoundException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        var ex = await That(() => fileSystem.Directory.Delete(XFS.Path(@\"c:\\baz\"))).Throws<DirectoryNotFoundException>();\n\n        await That(ex.Message).IsEqualTo($\"'{XFS.Path(\"c:\\\\baz\")}' does not exist or could not be found.\");\n    }\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldThrowIOException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\\foo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\bar\\baz.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        var ex = await That(() => fileSystem.Directory.Delete(XFS.Path(@\"c:\\bar\"))).Throws<IOException>();\n\n        await That(ex.Message).IsEqualTo(\"The directory specified by \" + XFS.Path(\"c:\\\\bar\") + \" is read-only, or recursive is false and \" + XFS.Path(\"c:\\\\bar\") + \" is not an empty directory.\");\n    }\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldDeleteDirectoryRecursively()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\\foo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\bar\\bar2\\foo.txt\"), new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        fileSystem.DirectoryInfo.New(XFS.Path(@\"c:\\bar\")).Delete(true);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\bar\"))).IsFalse();\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\bar\\bar2\"))).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Delete_ShouldThrowIOException_WhenPathIsAFile()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\foo.txt\"), new MockFileData(\"Demo text content\") },\n        });\n\n        // Act\n        Action action = () => fileSystem.Directory.Delete(XFS.Path(@\"c:\\foo.txt\"));\n\n        // Assert\n        await That(action).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFileSystemEntries_Returns_Files_And_Directories()\n    {\n        string testPath = XFS.Path(@\"c:\\foo\\bar.txt\");\n        string testDir = XFS.Path(@\"c:\\foo\\bar\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testPath, new MockFileData(\"Demo text content\") },\n            { testDir,  new MockDirectoryData() }\n        });\n\n        var entries = fileSystem.Directory.GetFileSystemEntries(XFS.Path(@\"c:\\foo\")).OrderBy(k => k);\n        await That(entries.Count()).IsEqualTo(2);\n        await That(entries.First()).IsEqualTo(testDir);\n        await That(entries.Last()).IsEqualTo(testPath);\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFileSystemEntries_ShouldNotReturnSubDirectory_WithSearchOption()\n    {\n        string testPath = XFS.Path(@\"c:\\foo\\bar.txt\");\n        string testDir = XFS.Path(@\"c:\\foo\\bar\");\n        string testSubDir = XFS.Path(@\"c:\\foo\\bar\\baz\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testPath, new MockFileData(\"Demo text content\") },\n            { testSubDir,  new MockDirectoryData() },\n        });\n\n        var entries = fileSystem.Directory.GetFileSystemEntries(XFS.Path(@\"c:\\foo\"), \"*\", SearchOption.TopDirectoryOnly).OrderBy(k => k);\n        await That(entries.Count()).IsEqualTo(2);\n        await That(entries.First()).IsEqualTo(testDir);\n        await That(entries.Last()).IsEqualTo(testPath);\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldThrowArgumentNullException_IfPathParamIsNull()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n\n        Action action = () => fileSystem.Directory.GetFiles(null);\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldThrowDirectoryNotFoundException_IfPathDoesNotExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\Foo\"), \"*a.txt\");\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_Returns_Files()\n    {\n        string testPath = XFS.Path(@\"c:\\foo\\bar.txt\");\n        string testDir = XFS.Path(@\"c:\\foo\\bar\\\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testPath, new MockFileData(\"Demo text content\") },\n            { testDir,  new MockDirectoryData() }\n        });\n\n        var entries = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\foo\")).OrderBy(k => k);\n        await That(entries.Count()).IsEqualTo(1);\n        await That(entries.First()).IsEqualTo(testPath);\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_Returns_Files_WithRelativePath()\n    {\n        // arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n\n        string directory = XFS.Path(@\"C:\\foo\");\n\n        fileSystem.Directory.SetCurrentDirectory(directory);\n        fileSystem.AddFile(XFS.Path(@\"C:\\test.txt\"), new MockFileData(\"Some ASCII text.\"));\n\n        await That(fileSystem.Directory.GetFiles(XFS.Path(@\"..\\\")).Length).IsEqualTo(1); // Assert with relative path\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldThrowAnArgumentNullException_IfSearchPatternIsNull()\n    {\n        // Arrange\n        var directoryPath = XFS.Path(@\"c:\\Foo\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(directoryPath, null);\n\n        // Assert\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternEndsWithTwoDots()\n    {\n        // Arrange\n        var directoryPath = XFS.Path(@\"c:\\Foo\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(directoryPath, \"*a..\");\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(@\"..\\\")]\n    [TestCase(@\"aaa\\vv..\\\")]\n    [TestCase(@\"a..\\b\")]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternContainsTwoDotsFollowedByOneBackslash(string searchPattern)\n    {\n        // Arrange\n        var directoryPath = XFS.Path(@\"c:\\Foo\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(directoryPath, searchPattern);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(@\"a../b\")]\n    [TestCase(@\"../\")]\n    public async Task MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternContainsTwoDotsFollowedByOneSlash(string searchPattern)\n    {\n        // Arrange\n        var directoryPath = XFS.Path(@\"c:\\Foo\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(directoryPath, searchPattern);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetFiles_ShouldFindFilesContainingTwoOrMoreDots()\n    {\n        // Arrange\n        string testPath = XFS.Path(@\"c:\\foo..r\\bar.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testPath, new MockFileData(string.Empty) }\n        });\n\n        // Act\n        var actualResult = fileSystem.Directory.GetFiles(XFS.Path(@\"c:\\\"), XFS.Path(@\"foo..r\\*\"));\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { testPath });\n    }\n\n    [TestCase(\"aa\\t\")]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockDirectory_GetFiles_ShouldThrowAnArgumentException_IfSearchPatternHasIllegalCharacters(string searchPattern)\n    {\n        // Arrange\n        var directoryPath = XFS.Path(@\"c:\\Foo\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.GetFiles(directoryPath, searchPattern);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetRoot_Returns_Root()\n    {\n        string testDir = XFS.Path(@\"c:\\foo\\bar\\\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testDir,  new MockDirectoryData() }\n        });\n\n        await That(fileSystem.Directory.GetDirectoryRoot(XFS.Path(@\"C:\\foo\\bar\"))).IsEqualTo(XFS.Path(\"C:\\\\\"));\n    }\n\n    [Test]\n    public async Task MockDirectory_GetLogicalDrives_Returns_LogicalDrives()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {XFS.Path(@\"c:\\foo\\bar\\\"), new MockDirectoryData()},\n            {XFS.Path(@\"c:\\foo\\baz\\\"), new MockDirectoryData()},\n            {XFS.Path(@\"d:\\bash\\\"), new MockDirectoryData()},\n        });\n\n        var drives = fileSystem.Directory.GetLogicalDrives();\n\n        if (XFS.IsUnixPlatform())\n        {\n            await That(drives.Length).IsEqualTo(1);\n            await That(drives.Contains(\"/\")).IsTrue();\n        }\n        else\n        {\n            await That(drives.Length).IsEqualTo(2);\n            await That(drives.Contains(@\"C:\\\")).IsTrue();\n            await That(drives.Contains(@\"D:\\\")).IsTrue();\n        }\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_Returns_Child_Directories()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"A:\\folder1\\folder2\\folder3\\file.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"A:\\folder1\\folder4\\file2.txt\"), new MockFileData(\"Demo text content 2\") },\n        });\n\n        var directories = fileSystem.Directory.GetDirectories(XFS.Path(@\"A:\\folder1\")).ToArray();\n\n        //Check that it does not returns itself\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\"))).IsFalse();\n\n        //Check that it correctly returns all child directories\n        await That(directories.Count()).IsEqualTo(2);\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\\folder2\"))).IsTrue();\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\\folder4\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_WithTopDirectories_ShouldOnlyReturnTopDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo.foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\.foo\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\Folder\\.foo\\bar\"), new MockFileData(string.Empty));\n\n        // Act\n        var actualResult = fileSystem.Directory.GetDirectories(XFS.Path(@\"C:\\Folder\\\"), \"*.foo\");\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { XFS.Path(@\"C:\\Folder\\.foo\"), XFS.Path(@\"C:\\Folder\\foo.foo\") });\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_RelativeWithNoSubDirectories_ShouldReturnDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"Folder\");\n\n        // Act\n        var actualResult = fileSystem.Directory.GetDirectories(\"Folder\");\n\n        // Assert\n        await That(actualResult).IsEmpty();\n    }\n\n    [TestCase(@\"Folder\\SubFolder\")]\n    [TestCase(@\"Folder\")]\n    public async Task MockDirectory_GetDirectories_RelativeDirectory_WithoutChildren_ShouldReturnNoChildDirectories(string relativeDirPath)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(relativeDirPath);\n\n        // Act\n        var actualResult = fileSystem.Directory.GetDirectories(relativeDirPath);\n\n        // Assert\n        await That(actualResult).IsEmpty();\n    }\n\n    [TestCase(@\"Folder\\SubFolder\")]\n    [TestCase(@\"Folder\")]\n    public async Task MockDirectory_GetDirectories_RelativeDirectory_WithChildren_ShouldReturnChildDirectories(string relativeDirPath)\n    {\n        // Arrange\n        var currentDirectory = XFS.Path(@\"T:\\foo\");\n        var fileSystem = new MockFileSystem(null, currentDirectory: currentDirectory);\n        fileSystem.Directory.CreateDirectory(XFS.Path(relativeDirPath));\n        fileSystem.Directory.CreateDirectory(XFS.Path(relativeDirPath + @\"\\child\"));\n\n        // Act\n        var actualResult = fileSystem.Directory.GetDirectories(XFS.Path(relativeDirPath));\n\n        // Assert\n        await That(actualResult).IsEqualTo(new[] { XFS.Path(relativeDirPath + @\"\\child\") });\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_AbsoluteWithNoSubDirectories_ShouldReturnDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"Folder\");\n\n        // Act\n        var fullPath = fileSystem.Path.GetFullPath(\"Folder\");\n        var actualResult = fileSystem.Directory.GetDirectories(fullPath);\n\n        // Assert\n        await That(actualResult).IsEmpty();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_WithAllDirectories_ShouldReturnsAllMatchingSubFolders()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo.foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\.foo\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\Folder\\.foo\\bar\"), new MockFileData(string.Empty));\n\n        // Act\n        var actualResult = fileSystem.Directory.GetDirectories(XFS.Path(@\"C:\\Folder\\\"), \"*.foo\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { XFS.Path(@\"C:\\Folder\\.foo\"), XFS.Path(@\"C:\\Folder\\foo.foo\"), XFS.Path(@\"C:\\Folder\\.foo\\.foo\") });\n    }\n\n    [Test]\n    public async Task MockDirectory_GetDirectories_ShouldThrowWhenPathIsNotMocked()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\c.gif\"), new MockFileData(\"Demo text content\") },\n        });\n\n        // Act\n        Action action = () => fileSystem.Directory.GetDirectories(XFS.Path(@\"c:\\d\"));\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateDirectories_Returns_Child_Directories()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"A:\\folder1\\folder2\\folder3\\file.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"A:\\folder1\\folder4\\file2.txt\"), new MockFileData(\"Demo text content 2\") },\n        });\n\n        var directories = fileSystem.Directory.EnumerateDirectories(XFS.Path(@\"A:\\folder1\")).ToArray();\n\n        //Check that it does not returns itself\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\"))).IsFalse();\n\n        //Check that it correctly returns all child directories\n        await That(directories.Count()).IsEqualTo(2);\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\\folder2\"))).IsTrue();\n        await That(directories.Contains(XFS.Path(@\"A:\\folder1\\folder4\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateDirectories_WithTopDirectories_ShouldOnlyReturnTopDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo.foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\.foo\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\Folder\\.foo\\bar\"), new MockFileData(string.Empty));\n\n        // Act\n        var actualResult = fileSystem.Directory.EnumerateDirectories(XFS.Path(@\"C:\\Folder\\\"), \"*.foo\");\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { XFS.Path(@\"C:\\Folder\\.foo\"), XFS.Path(@\"C:\\Folder\\foo.foo\") });\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    [Test]\n    public async Task MockDirectory_EnumerateDirectories_WithEnumerationOptionsTopDirectories_ShouldOnlyReturnTopDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo.foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\.foo\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\Folder\\.foo\\bar\"), new MockFileData(string.Empty));\n\n        var enumerationOptions = new EnumerationOptions\n        {\n            RecurseSubdirectories = false\n        };\n\n        // Act\n        var actualResult = fileSystem.Directory.EnumerateDirectories(XFS.Path(@\"C:\\Folder\\\"), \"*.foo\", enumerationOptions);\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { XFS.Path(@\"C:\\Folder\\.foo\"), XFS.Path(@\"C:\\Folder\\foo.foo\") });\n    }\n#endif\n    [Test]\n    public async Task MockDirectory_EnumerateDirectories_WithAllDirectories_ShouldReturnsAllMatchingSubFolders()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\foo.foo\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Folder\\.foo\\.foo\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\Folder\\.foo\\bar\"), new MockFileData(string.Empty));\n\n        // Act\n        var actualResult = fileSystem.Directory.EnumerateDirectories(XFS.Path(@\"C:\\Folder\\\"), \"*.foo\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(actualResult).IsEquivalentTo(new[] { XFS.Path(@\"C:\\Folder\\.foo\"), XFS.Path(@\"C:\\Folder\\foo.foo\"), XFS.Path(@\"C:\\Folder\\.foo\\.foo\") });\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateDirectories_ShouldThrowWhenPathIsNotMocked()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b.gif\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\c.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\b.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\a\\c.gif\"), new MockFileData(\"Demo text content\") },\n        });\n\n        // Act\n        Action action = () => fileSystem.Directory.EnumerateDirectories(XFS.Path(@\"c:\\d\"));\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n        \n    [TestCaseSource(nameof(GetPrefixTestPaths))]\n    public async Task MockDirectory_EnumerateDirectories_ShouldReturnPathsPrefixedWithQueryPath(\n        string queryPath, string expectedPath)\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(\"Folder/SubFolder\");\n            \n        var actualResult = fileSystem.Directory.EnumerateDirectories(queryPath);\n            \n        await That(actualResult).IsEqualTo(new[] { expectedPath });\n    }\n        \n    private static IEnumerable<object[]> GetPrefixTestPaths()\n    {\n        var sep = Path.DirectorySeparatorChar;\n        yield return new object[] { \"Folder\", $\"Folder{sep}SubFolder\" };\n        yield return new object[] { $\"Folder{sep}\", $\"Folder{sep}SubFolder\" };\n        yield return new object[] { $\"Folder{sep}..{sep}.{sep}Folder\", $\"Folder{sep}..{sep}.{sep}Folder{sep}SubFolder\" };\n    }\n\n    public static IEnumerable<object[]> GetPathsForMoving()\n    {\n        yield return new object[] { XFS.Path(@\"a:\\folder1\\\"), XFS.Path(@\"A:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"folder2\\file2.txt\") };\n        yield return new object[] { XFS.Path(@\"A:\\folder1\\\"), XFS.Path(@\"A:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"folder2\\file2.txt\") };\n        yield return new object[] { XFS.Path(@\"a:\\folder1\\\"), XFS.Path(@\"a:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"folder2\\file2.txt\") };\n        yield return new object[] { XFS.Path(@\"A:\\folder1\\\"), XFS.Path(@\"a:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"folder2\\file2.txt\") };\n        yield return new object[] { XFS.Path(@\"A:\\folder1\\\"), XFS.Path(@\"a:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"Folder2\\file2.txt\") };\n        yield return new object[] { XFS.Path(@\"A:\\folder1\\\"), XFS.Path(@\"a:\\folder3\\\"), XFS.Path(\"file.txt\"), XFS.Path(@\"Folder2\\fiLe2.txt\") };\n        yield return new object[] { XFS.Path(@\"A:\\folder1\\\"), XFS.Path(@\"a:\\folder3\\\"), XFS.Path(\"folder444\\\\file.txt\"), XFS.Path(@\"Folder2\\fiLe2.txt\") };\n    }\n\n    [Test]\n    public async Task Move_DirectoryExistsWithDifferentCase_DirectorySuccessfullyMoved()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\OLD_LOCATION\\Data\"));\n        fileSystem.AddFile(XFS.Path(@\"C:\\old_location\\Data\\someFile.txt\"), new MockFileData(\"abc\"));\n\n        // Act\n        fileSystem.Directory.Move(XFS.Path(@\"C:\\old_location\"), XFS.Path(@\"C:\\NewLocation\\\"));\n\n        // Assert\n        await That(fileSystem.File.Exists(XFS.Path(@\"C:\\NewLocation\\Data\\someFile.txt\"))).IsTrue();\n    }\n\n    [TestCaseSource(nameof(GetPathsForMoving))]\n    public async Task MockDirectory_Move_ShouldMoveDirectories(string sourceDirName, string destDirName, string filePathOne, string filePathTwo)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(sourceDirName + filePathOne) , new MockFileData(\"aaa\") },\n            { XFS.Path(sourceDirName + filePathTwo) , new MockFileData(\"bbb\") },\n        });\n\n        // Act\n        fileSystem.DirectoryInfo.New(sourceDirName).MoveTo(destDirName);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(sourceDirName)).IsFalse();\n        await That(fileSystem.File.Exists(XFS.Path(destDirName + filePathOne))).IsTrue();\n        await That(fileSystem.File.Exists(XFS.Path(destDirName + filePathTwo))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldMoveFiles()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { sourceFilePath, new MockFileData(sourceFileContent) }\n        });\n\n        string destFilePath = XFS.Path(@\"c:\\demo1.txt\");\n\n        fileSystem.Directory.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.FileExists(destFilePath)).IsTrue();\n        await That(fileSystem.FileExists(sourceFilePath)).IsFalse();\n        await That(fileSystem.GetFile(destFilePath).TextContents).IsEqualTo(sourceFileContent);\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldMoveDirectoryAttributes()\n    {\n        // Arrange\n        var sourceDirName = XFS.Path(@\"a:\\folder1\\\");\n        var destDirName = XFS.Path(@\"a:\\folder2\\\");\n        const string filePathOne = \"file1.txt\";\n        const string filePathTwo = \"file2.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(sourceDirName + filePathOne) , new MockFileData(\"aaa\") },\n            { XFS.Path(sourceDirName + filePathTwo) , new MockFileData(\"bbb\") },\n        });\n\n        var sourceDirectoryInfo = fileSystem.DirectoryInfo.New(sourceDirName);\n        sourceDirectoryInfo.Attributes |= FileAttributes.System;\n\n        // Act\n        fileSystem.DirectoryInfo.New(sourceDirName).MoveTo(destDirName);\n\n        // Assert\n        var destDirectoryInfo = fileSystem.DirectoryInfo.New(destDirName);\n        await That(destDirectoryInfo.Attributes.HasFlag(FileAttributes.System)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldMoveDirectoryWithReadOnlySubDirectory()\n    {\n        // Arrange\n        var sourceDirName = XFS.Path(@\"a:\\folder1\\\");\n        var sourceSubDirName = XFS.Path(@\"a:\\folder1\\sub\\\");\n\n        var destDirName = XFS.Path(@\"a:\\folder2\\\");\n        var destSubDirName = XFS.Path(@\"a:\\folder2\\sub\\\");\n\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(sourceSubDirName);\n\n        var subDirectoryInfo = fileSystem.DirectoryInfo.New(sourceSubDirName);\n        subDirectoryInfo.Attributes |= FileAttributes.ReadOnly;\n\n        var sourceDirectoryInfo = fileSystem.DirectoryInfo.New(sourceDirName);\n\n        // Act\n        fileSystem.DirectoryInfo.New(sourceDirName).MoveTo(destDirName);\n\n        // Assert\n        await That(fileSystem.Directory.Exists(sourceSubDirName)).IsFalse();\n        await That(fileSystem.FileExists(destSubDirName)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldOnlyMoveDirAndFilesWithinDir()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {XFS.Path(@\"c:\\source\\dummy\"), new MockDirectoryData()},\n            {XFS.Path(@\"c:\\source\\dummy\\content.txt\"), new MockFileData(new byte[] {0})},\n            {XFS.Path(@\"c:\\source\\dummy.txt\"), new MockFileData(new byte[] {0})},\n            {XFS.Path(@\"c:\\source\\dummy2\"), new MockDirectoryData()},\n            {XFS.Path(@\"c:\\destination\"), new MockDirectoryData()},\n        });\n\n        // Act\n        fileSystem.Directory.Move(XFS.Path(@\"c:\\source\\dummy\"), XFS.Path(@\"c:\\destination\\dummy\"));\n\n        // Assert\n        await That(fileSystem.FileExists(XFS.Path(@\"c:\\source\\dummy.txt\"))).IsTrue();\n        await That(fileSystem.Directory.Exists(XFS.Path(@\"c:\\source\\dummy2\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetCurrentDirectory_ShouldReturnValueFromFileSystemConstructor()\n    {\n        string directory = XFS.Path(@\"D:\\folder1\\folder2\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>(), directory);\n\n        var actual = fileSystem.Directory.GetCurrentDirectory();\n\n        await That(actual).IsEqualTo(directory);\n    }\n\n    [Test]\n    public async Task MockDirectory_GetCurrentDirectory_ShouldReturnDefaultPathWhenNotSet()\n    {\n        string directory = XFS.Path(@\"C:\\\");\n\n        var fileSystem = new MockFileSystem();\n\n        var actual = fileSystem.Directory.GetCurrentDirectory();\n\n        await That(actual).IsEqualTo(directory);\n    }\n\n    [Test]\n    public async Task MockDirectory_SetCurrentDirectory_ShouldChangeCurrentDirectory()\n    {\n        string directory = XFS.Path(@\"D:\\folder1\\folder2\");\n        var fileSystem = new MockFileSystem();\n\n        // Precondition\n        await That(fileSystem.Directory.GetCurrentDirectory()).IsNotEqualTo(directory);\n\n        fileSystem.Directory.SetCurrentDirectory(directory);\n\n        await That(fileSystem.Directory.GetCurrentDirectory()).IsEqualTo(directory);\n    }\n\n    [Test]\n    public async Task MockDirectory_SetCurrentDirectory_WithRelativePath_ShouldUseFullPath()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.SetCurrentDirectory(\".\");\n\n        var result = fileSystem.Directory.GetCurrentDirectory();\n\n        await That(fileSystem.Path.IsPathRooted(result)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetParent_ShouldThrowArgumentNullExceptionIfPathIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action act = () => fileSystem.Directory.GetParent(null);\n\n        // Assert\n        await That(act).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetParent_ShouldThrowArgumentExceptionIfPathIsEmpty()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action act = () => fileSystem.Directory.GetParent(string.Empty);\n\n        // Assert\n        await That(act).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetParent_ShouldReturnADirectoryInfoIfPathDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualResult = fileSystem.Directory.GetParent(XFS.Path(@\"c:\\directory\\does\\not\\exist\"));\n\n        // Assert\n        await That(actualResult).IsNotNull();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockDirectory_GetParent_ShouldThrowArgumentExceptionIfPathHasIllegalCharacters()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action act = () => fileSystem.Directory.GetParent(XFS.Path(\"c:\\\\director\\ty\\\\has\\\\illegal\\\\character\"));\n\n        // Assert\n        await That(act).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_GetParent_ShouldReturnNullIfPathIsRoot()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\\"));\n\n        // Act\n        var actualResult = fileSystem.Directory.GetParent(XFS.Path(@\"c:\\\"));\n\n        // Assert\n        await That(actualResult).IsNull();\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.SlashRoot)]\n    public async Task MockDirectory_GetParent_ShouldReturnRootIfDirectoryIsInRoot()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(\"/bar\");\n\n        // Act\n        var parent = fileSystem.Directory.GetParent(\"/bar\");\n\n        // Assert\n        await That(parent.FullName).IsEqualTo(\"/\");\n    }\n\n    public static IEnumerable<string[]> MockDirectory_GetParent_Cases\n    {\n        get\n        {\n            yield return new[] { XFS.Path(@\"c:\\a\"), XFS.Path(@\"c:\\\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\c\\d\"), XFS.Path(@\"c:\\a\\b\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\c\\d\\\"), XFS.Path(@\"c:\\a\\b\\c\") };\n        }\n    }\n\n    public async Task MockDirectory_GetParent_ShouldReturnTheParentWithoutTrailingDirectorySeparatorChar(string path, string expectedResult)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(path);\n\n        // Act\n        var actualResult = fileSystem.Directory.GetParent(path);\n\n        // Assert\n        await That(actualResult.FullName).IsEqualTo(expectedResult);\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldThrowAnIOExceptionIfBothPathAreIdentical()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\a\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(path);\n\n        // Act\n        Action action = () => fileSystem.Directory.Move(path, path);\n\n        // Assert\n        await That(action, \"Source and destination path must be different.\").Throws<IOException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockDirectory_Move_ShouldThrowAnIOExceptionIfDirectoriesAreOnDifferentVolumes()\n    {\n        // Arrange\n        string sourcePath = XFS.Path(@\"c:\\a\");\n        string destPath = XFS.Path(@\"d:\\v\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(sourcePath);\n\n        // Act\n        Action action = () => fileSystem.Directory.Move(sourcePath, destPath);\n\n        // Assert\n        await That(action, \"Source and destination path must have identical roots. Move will not work across volumes.\").Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldThrowADirectoryNotFoundExceptionIfDestinationDirectoryDoesNotExist()\n    {\n        // Arrange\n        string sourcePath = XFS.Path(@\"c:\\a\");\n        string destPath = XFS.Path(@\"c:\\b\");\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.Directory.Move(sourcePath, destPath);\n\n        // Assert\n        await That(action, \"Could not find a part of the path 'c:\\a'.\").Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_Move_ShouldThrowAnIOExceptionIfDestinationDirectoryExists()\n    {\n        // Arrange\n        string sourcePath = XFS.Path(@\"c:\\a\");\n        string destPath = XFS.Path(@\"c:\\b\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(sourcePath);\n        fileSystem.AddDirectory(destPath);\n\n        // Act\n        Action action = () => fileSystem.Directory.Move(sourcePath, destPath);\n\n        // Assert\n        await That(action, \"Cannot create 'c:\\b\\' because a file or directory with the same name already exists.'\").Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        IEnumerable<string> expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFiles(XFS.Path(@\"c:\\a\"), \"*\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    [Test]\n    public async Task MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        IEnumerable<string> expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\")\n        };\n\n        var enumerationOptions = new EnumerationOptions\n        {\n            RecurseSubdirectories = true\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFiles(XFS.Path(@\"c:\\a\"), \"*\", enumerationOptions);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n#endif\n\n    [Test]\n    public async Task MockDirectory_EnumerateFiles_ShouldFilterByExtensionBasedSearchPattern()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.gif\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFiles(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateFiles_WhenFilterIsUnRooted_ShouldFindFilesInCurrentDirectory()\n    {\n        // Arrange\n        var someContent = new MockFileData(String.Empty);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), someContent },\n            { XFS.Path(@\"c:\\a\\a.txt\"), someContent },\n            { XFS.Path(@\"c:\\a\\b\\b.txt\"), someContent },\n            { XFS.Path(@\"c:\\a\\c\\c.txt\"), someContent },\n        });\n\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\b\\b.txt\"),\n        };\n\n        fileSystem.Directory.SetCurrentDirectory(XFS.Path(@\"c:\\a\"));\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFiles(XFS.Path(\"b\"));\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateFiles_WhenFilterIsUnRooted_ShouldNotFindFilesInPathOutsideCurrentDirectory()\n    {\n        // Arrange\n        var someContent = new MockFileData(String.Empty);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), someContent },\n            { XFS.Path(@\"c:\\a\\b\\b.txt\"), someContent },\n            { XFS.Path(@\"c:\\c\\b\\b.txt\"), someContent },\n        });\n\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\b\\b.txt\"),\n        };\n\n        fileSystem.Directory.SetCurrentDirectory(XFS.Path(@\"c:\\a\"));\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFiles(XFS.Path(\"b\"));\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateFileSystemEntries_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndSearchOptionIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        IEnumerable<string> expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFileSystemEntries(XFS.Path(@\"c:\\a\"), \"*\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n    [Test]\n    public async Task MockDirectory_EnumerateFileSystemEntries_ShouldFilterByExtensionBasedSearchPattern()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        var expected = new[]\n        {\n            XFS.Path(@\"c:\\a.gif\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\")\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFileSystemEntries(XFS.Path(@\"c:\\\"), \"*.gif\", SearchOption.AllDirectories);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n\n#if FEATURE_ENUMERATION_OPTIONS\n    [Test]\n    public async Task MockDirectory_EnumerateFileSystemEntries_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories()\n    {\n        // Arrange\n        var fileSystem = SetupFileSystem();\n        IEnumerable<string> expected = new[]\n        {\n            XFS.Path(@\"c:\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\b.gif\"),\n            XFS.Path(@\"c:\\a\\c.txt\"),\n            XFS.Path(@\"c:\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\\a.txt\"),\n            XFS.Path(@\"c:\\a\\a\\b.txt\"),\n            XFS.Path(@\"c:\\a\\a\\c.gif\"),\n            XFS.Path(@\"c:\\a\\a\\d\"),\n            XFS.Path(@\"c:\\a\\a\")\n        };\n\n        var enumerationOptions = new EnumerationOptions\n        {\n            RecurseSubdirectories = true\n        };\n\n        // Act\n        var result = fileSystem.Directory.EnumerateFileSystemEntries(XFS.Path(@\"c:\\a\"), \"*\", enumerationOptions);\n\n        // Assert\n        await That(result).IsEqualTo(expected).InAnyOrder();\n    }\n#endif\n\n    [Test]\n    public async Task MockDirectory_GetAccessControl_ShouldThrowExceptionOnDirectoryNotFound()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n#pragma warning disable CA1416\n        await That(() => fileSystem.Directory.GetAccessControl(XFS.Path(@\"c:\\foo\"))).Throws<DirectoryNotFoundException>();\n#pragma warning restore CA1416\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.AccessControlLists)]\n    [SupportedOSPlatform(\"windows\")]\n    public async Task MockDirectory_GetAccessControl_ShouldReturnNewDirectorySecurity()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(XFS.Path(@\"c:\\foo\\\"));\n\n        // Act\n        DirectorySecurity result = fileSystem.Directory.GetAccessControl(XFS.Path(@\"c:\\foo\\\"));\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    public async Task MockDirectory_SetCreationTime_ShouldNotThrowWithoutTrailingBackslash()\n    {\n        var path = XFS.Path(@\"C:\\NoTrailingBackslash\");\n        var fs = new MockFileSystem();\n        fs.Directory.CreateDirectory(path);\n        await That(()=> fs.Directory.SetCreationTime(path, DateTime.Now)).DoesNotThrow();\n        fs.Directory.Delete(path);\n    }\n\n    private static IEnumerable<TestCaseData> Failing_DirectoryMoveFromToPaths\n    {\n        get\n        {\n            var testTargetDirs = new[]\n            {\n                @\"c:\\temp2\\fd\\df\", @\"c:\\temp2\\fd\\\", @\"c:\\temp2\\fd\\..\\fd\", @\"c:\\temp2\\fd\", @\".\\..\\temp2\\fd\\df\",\n                @\".\\..\\temp2\\fd\\df\\..\", @\".\\..\\temp2\\fd\\df\\..\\\", @\"..\\temp2\\fd\\\", @\".\\temp2\\fd\", @\"temp2\\fd\",\n                @\"c:\\temp3\\exists2\\d3\", @\"c:\\temp4\\exists\"\n            };\n\n            var testSourceDirs = new[] { @\"c:\\temp\\exists\\foldertomove\", @\"c:\\temp3\\exists\", @\"c:\\temp3\" };\n\n            return\n                from s in testSourceDirs\n                from t in testTargetDirs\n                select new TestCaseData(XFS.Path(s), XFS.Path(t));\n        }\n    }\n\n    [Test]\n    [TestCaseSource(nameof(Failing_DirectoryMoveFromToPaths))]\n    public async Task Move_Directory_Throws_When_Target_Directory_Parent_Does_Not_Exist(\n        string sourceDirName,\n        string targetDirName)\n    {\n        // Arange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(sourceDirName);\n\n        // Act\n        await That(() => fileSystem.Directory.Move(sourceDirName, targetDirName))\n            .Throws<DirectoryNotFoundException>();\n\n        // Assert\n        await That(fileSystem.Directory.Exists(targetDirName)).IsFalse();\n        await That(fileSystem.Directory.Exists(sourceDirName)).IsTrue();\n    }\n\n    private static IEnumerable<TestCaseData> Success_DirectoryMoveFromToPaths\n    {\n        get\n        {\n            var testTargetDirs = new[]\n            {\n                @\"c:\\temp2\\\", @\"c:\\temp2\", @\"c:\\temp2\\..\\temp2\", @\".\\..\\temp2\", @\".\\..\\temp2\\..\\temp2\",\n                @\".\\..\\temp2\\fd\\df\\..\\..\", @\".\\..\\temp2\\fd\\df\\..\\..\\\", @\"..\\temp2\", @\".\\temp2\", @\"\\temp2\", @\"temp2\",\n            };\n\n            var testSourceDirs = new[] { @\"c:\\temp3\\exists\\foldertomove\", @\"c:\\temp3\\exists\", @\"c:\\temp4\" };\n\n            return\n                from s in testSourceDirs\n                from t in testTargetDirs\n                select new TestCaseData(XFS.Path(s), XFS.Path(t));\n        }\n    }\n\n    [Test]\n    [TestCaseSource(nameof(Success_DirectoryMoveFromToPaths))]\n    public async Task Move_Directory_DoesNotThrow_When_Target_Directory_Parent_Exists(\n        string sourceDirName,\n        string targetDirName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(sourceDirName);\n\n        // Act\n        await That(() => fileSystem.Directory.Move(sourceDirName, targetDirName)).DoesNotThrow();\n\n        // Assert\n        await That(fileSystem.Directory.Exists(targetDirName)).IsTrue();\n        await That(fileSystem.Directory.Exists(sourceDirName)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockDirectory_Exists_ShouldReturnTrue_IfArgIsFrontSlashAndRootDirExists()\n    {\n        string testDir = XFS.Path(@\"c:\\foo\\bar\\\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { testDir,  new MockDirectoryData() }\n        });\n\n        await That(fileSystem.Directory.Exists(\"/\")).IsEqualTo(true);\n    }\n\n    [Test]\n    public static void MockDirectory_Move_ShouldNotThrowException_InWindows_When_SourceAndDestinationDifferOnlyInCasing()\n    {\n        // Arrange\n        MockFileSystem mockFs = new MockFileSystem();\n        string tempDir = mockFs.Path.GetTempPath();\n        string src = mockFs.Path.Combine(tempDir, \"src\");\n        string dest = mockFs.Path.Combine(tempDir, \"SRC\");\n        IDirectoryInfo srcDir = mockFs.DirectoryInfo.New(src);\n        srcDir.Create();\n        \n        // Act & Assert\n        Assert.DoesNotThrow(() => mockFs.Directory.Move(src, dest));\n    }\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDriveInfoFactoryTests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.Drives)]\npublic class MockDriveInfoFactoryTests\n{\n    [Test]\n    public async Task MockDriveInfoFactory_GetDrives_ShouldReturnDrives()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"Z:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"d:\\Test\"));\n        var factory = new MockDriveInfoFactory(fileSystem);\n\n        // Act\n        var actualResults = factory.GetDrives();\n\n        var actualNames = actualResults.Select(d => d.Name);\n\n        // Assert\n        await That(actualNames).IsEquivalentTo(new[] { @\"C:\\\", @\"Z:\\\", @\"d:\\\" });\n    }\n\n    [Test]\n    public async Task MockDriveInfoFactory_GetDrives_ShouldReturnDrivesWithNoDuplicates()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\Test2\"));\n        fileSystem.AddDirectory(XFS.Path(@\"Z:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"d:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"d:\\Test2\"));\n        var factory = new MockDriveInfoFactory(fileSystem);\n\n        // Act\n        var actualResults = factory.GetDrives();\n\n        var actualNames = actualResults.Select(d => d.Name);\n\n        // Assert\n        await That(actualNames).IsEquivalentTo(new[] { @\"C:\\\", @\"Z:\\\", @\"d:\\\" });\n    }\n\n    [Test]\n    public async Task MockDriveInfoFactory_GetDrives_ShouldReturnOnlyLocalDrives()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"Z:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"d:\\Test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"\\\\anunc\\share\\Zzz\"));\n        var factory = new MockDriveInfoFactory(fileSystem);\n\n        // Act\n        var actualResults = factory.GetDrives();\n\n        var actualNames = actualResults.Select(d => d.Name);\n\n        // Assert\n        await That(actualNames).IsEquivalentTo(new[] { @\"C:\\\", @\"Z:\\\", @\"d:\\\" });\n    }\n\n    [Test]\n    public async Task MockDriveInfoFactory_New_WithDriveShouldReturnDrive()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var factory = new MockDriveInfoFactory(fileSystem);\n\n        // Act\n        var actualResult = factory.New(@\"Z:\\\");\n\n        // Assert\n        await That(actualResult.Name).IsEquivalentTo(@\"Z:\\\");\n    }\n\n    [Test]\n    public async Task MockDriveInfoFactory_New_WithPathShouldReturnDrive()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var factory = new MockDriveInfoFactory(fileSystem);\n\n        // Act\n        var actualResult = factory.New(@\"Z:\\foo\\bar\\\");\n\n        // Assert\n        await That(actualResult.Name).IsEquivalentTo(@\"Z:\\\");\n    }\n\n    [Test]\n    public async Task MockDriveInfoFactory_Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new MockFileSystem();\n\n        var result = fileSystem.DriveInfo.Wrap(null);\n\n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDriveInfoTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Linq;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.Drives)]\npublic class MockDriveInfoTests\n{\n    [TestCase(@\"c:\")]\n    [TestCase(@\"c:\\\")]\n    public async Task MockDriveInfo_Constructor_ShouldInitializeLocalWindowsDrives(string driveName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\Test\"));\n        var path = XFS.Path(driveName);\n\n        // Act\n        var driveInfo = new MockDriveInfo(fileSystem, path);\n\n        // Assert\n        await That(driveInfo.Name).IsEqualTo(@\"c:\\\");\n    }\n\n    [Test]\n    public async Task MockDriveInfo_Constructor_ShouldInitializeLocalWindowsDrives_SpecialForWindows()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\Test\"));\n\n        // Act\n        var driveInfo = new MockDriveInfo(fileSystem, \"c\");\n\n        // Assert\n        await That(driveInfo.Name).IsEqualTo(@\"c:\\\");\n    }\n\n    [TestCase(@\"\\\\unc\\share\")]\n    [TestCase(@\"\\\\unctoo\")]\n    public async Task MockDriveInfo_Constructor_ShouldThrowExceptionIfUncPath(string driveName)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => new MockDriveInfo(fileSystem, XFS.Path(driveName));\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockDriveInfo_RootDirectory_ShouldReturnTheDirectoryBase()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\Test\"));\n        var driveInfo = new MockDriveInfo(fileSystem, \"c:\");\n        var expectedDirectory = XFS.Path(@\"c:\\\");\n\n        // Act\n        var actualDirectory = driveInfo.RootDirectory;\n\n        // Assert\n        await That(actualDirectory.FullName).IsEqualTo(expectedDirectory);\n    }\n\n    [TestCase(\"c:\", \"c:\\\\\")]\n    [TestCase(\"C:\", \"C:\\\\\")]\n    [TestCase(\"d:\", \"d:\\\\\")]\n    [TestCase(\"e:\", \"e:\\\\\")]\n    [TestCase(\"f:\", \"f:\\\\\")]\n    public async Task MockDriveInfo_ToString_ShouldReturnTheDrivePath(string path, string expectedPath)\n    {\n        // Arrange\n        var directoryPath = XFS.Path(path);\n\n        // Act\n        var mockDriveInfo = new MockDriveInfo(new MockFileSystem(), directoryPath);\n\n        // Assert\n        await That(mockDriveInfo.ToString()).IsEqualTo(expectedPath);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_AvailableFreeSpace_ShouldReturnAvailableFreeSpaceOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var availableFreeSpace = 1024L;\n        var driveData = new MockDriveData { AvailableFreeSpace = availableFreeSpace };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.AvailableFreeSpace;\n\n        // Assert\n        await That(result).IsEqualTo(availableFreeSpace);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_DriveFormat_ShouldReturnDriveFormatOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var driveFormat = \"NTFS\";\n        var driveData = new MockDriveData { DriveFormat = driveFormat };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.DriveFormat;\n\n        // Assert\n        await That(result).IsEqualTo(driveFormat);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_DriveType_ShouldReturnDriveTypeOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var driveType = DriveType.Fixed;\n        var driveData = new MockDriveData { DriveType = driveType };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.DriveType;\n\n        // Assert\n        await That(result).IsEqualTo(driveType);\n    }\n\n    [TestCase(true)]\n    [TestCase(false)]\n    public async Task MockDriveInfo_IsReady_ShouldReturnIsReadyOfDriveInMemoryFileSystem(bool isReady)\n    {\n        // Arrange\n        var driveData = new MockDriveData { IsReady = isReady };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.IsReady;\n\n        // Assert\n        await That(result).IsEqualTo(isReady);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_TotalFreeSpace_ShouldReturnTotalFreeSpaceOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var totalFreeSpace = 4096L;\n        var driveData = new MockDriveData { TotalFreeSpace = totalFreeSpace };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.TotalFreeSpace;\n\n        // Assert\n        await That(result).IsEqualTo(totalFreeSpace);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_TotalSize_ShouldReturnTotalSizeOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var totalSize = 8192L;\n        var driveData = new MockDriveData { TotalSize = totalSize };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.TotalSize;\n\n        // Assert\n        await That(result).IsEqualTo(totalSize);\n    }\n\n    [Test]\n    public async Task MockDriveInfo_VolumeLabel_ShouldReturnVolumeLabelOfDriveInMemoryFileSystem()\n    {\n        // Arrange\n        var volumeLabel = \"Windows\";\n        var driveData = new MockDriveData { VolumeLabel = volumeLabel };\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(\"C:\", driveData);\n        var driveInfo = fileSystem.DriveInfo\n            .GetDrives()\n            .Single(x => x.Name == @\"C:\\\");\n\n        // Act\n        var result = driveInfo.VolumeLabel;\n\n        // Assert\n        await That(result).IsEqualTo(volumeLabel);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAdjustTimesTest.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing System.Text;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileAdjustTimesTest\n{\n    [Test]\n    public async Task MockFile_AfterAppendAllText_ShouldUpdateLastAccessAndLastWriteTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.AppendAllText(\"foo.txt\", \"xyz\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(updateTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterCopy_ShouldUpdateCreationAndLastAccessTimeOfDestination()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.Copy(\"foo.txt\", \"bar.txt\");\n\n        var actualSourceCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualDestinationCreationTime = fileSystem.File.GetCreationTimeUtc(\"bar.txt\");\n        var actualSourceLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualDestinationLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"bar.txt\");\n        var actualSourceLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n        var actualDestinationLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"bar.txt\");\n\n        await That(actualSourceCreationTime).IsEqualTo(creationTime);\n        await That(actualDestinationCreationTime).IsEqualTo(updateTime);\n        await That(actualSourceLastAccessTime).IsEqualTo(creationTime);\n        await That(actualDestinationLastAccessTime).IsEqualTo(updateTime);\n        await That(actualSourceLastWriteTime).IsEqualTo(creationTime);\n        await That(actualDestinationLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterMove_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.Move(\"foo.txt\", \"bar.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"bar.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"bar.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"bar.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [TestCase(FileMode.Open, FileAccess.ReadWrite)]\n    [TestCase(FileMode.OpenOrCreate, FileAccess.Write)]\n    [TestCase(FileMode.Append, FileAccess.Write)]\n    public async Task MockFile_AfterOpen_WithWriteAccess_ShouldUpdateLastAccessAndLastWriteTime(FileMode fileMode, FileAccess fileAccess)\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.Open(\"foo.txt\", fileMode, fileAccess);\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(updateTime);\n    }\n\n    [TestCase(FileMode.Open, FileAccess.Read)]\n    [TestCase(FileMode.OpenOrCreate, FileAccess.Read)]\n    public async Task MockFile_AfterOpen_WithReadOnlyAccess_ShouldUpdateLastAccessTime(FileMode fileMode, FileAccess fileAccess)\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.Open(\"foo.txt\", fileMode, fileAccess);\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterReadAllBytes_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.ReadAllBytes(\"foo.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterReadAllLines_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.ReadAllLines(\"foo.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterReadAllText_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.ReadAllText(\"foo.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterSetAttributes_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.SetAttributes(\"foo.txt\", FileAttributes.Hidden);\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    [SupportedOSPlatform(\"windows\")]\n    [WindowsOnly(WindowsSpecifics.AccessControlLists)]\n    public async Task MockFile_AfterSetAccessControl_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.SetAccessControl(\"foo.txt\", new FileSecurity());\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(creationTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterWriteAllBytes_ShouldUpdateLastAccessAndLastWriteTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.WriteAllBytes(\"foo.txt\", Encoding.UTF8.GetBytes(\"xyz\"));\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(updateTime);\n    }\n\n    [Test]\n    public async Task MockFile_AfterWriteAllText_ShouldUpdateLastAccessAndLastWriteTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(updateTime);\n    }\n\n    [Test]\n    public async Task MockFileStream_OpenRead_ShouldUpdateLastAccessTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        _ = fileSystem.File.OpenRead(\"foo.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFileStream_OpenWrite_ShouldUpdateLastAccessAndLastWriteTime()\n    {\n        var creationTime = DateTime.UtcNow.AddDays(10);\n        var updateTime = creationTime.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => creationTime);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"abc\");\n        fileSystem.MockTime(() => updateTime);\n        _ = fileSystem.File.OpenWrite(\"foo.txt\");\n\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(actualCreationTime).IsEqualTo(creationTime);\n        await That(actualLastAccessTime).IsEqualTo(updateTime);\n        await That(actualLastWriteTime).IsEqualTo(updateTime);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAppendAllLinesTests.cs",
    "content": "using System.Collections.Generic;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\nusing System.Threading.Tasks;\nusing System.Threading;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileAppendAllLinesTests\n{\n    [Test]\n    public async Task MockFile_AppendAllLines_ShouldPersistNewLinesToExistingFile()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        file.AppendAllLines(path, new[] { \"line 1\", \"line 2\", \"line 3\" });\n\n        // Assert\n        await That(file.ReadAllText(path))\n            .IsEqualTo(\"Demo text contentline 1\" + Environment.NewLine + \"line 2\" + Environment.NewLine + \"line 3\" + Environment.NewLine);\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllLines_ShouldPersistNewLinesToNewFile()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\\"), new MockDirectoryData() }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        file.AppendAllLines(path, new[] { \"line 1\", \"line 2\", \"line 3\" });\n\n        // Assert\n        await That(file.ReadAllText(path))\n            .IsEqualTo(\"line 1\" + Environment.NewLine + \"line 2\" + Environment.NewLine + \"line 3\" + Environment.NewLine);\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathIsZeroLength()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.AppendAllLines(string.Empty, new[] { \"does not matter\" });\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.AppendAllLines(path, new[] { \"does not matter\" });\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(\"\\\"\")]\n    [TestCase(\"<\")]\n    [TestCase(\">\")]\n    [TestCase(\"|\")]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_AppendAllLines_ShouldThrowArgumentExceptionIfPathContainsInvalidChar(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.AppendAllLines(path, new[] { \"does not matter\" });\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllLines_ShouldThrowArgumentNullExceptionIfContentIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.AppendAllLines(\"foo\", null);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.ParamName).IsEqualTo(\"contents\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllLines_ShouldThrowArgumentNullExceptionIfEncodingIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.AppendAllLines(\"foo.txt\", new[] { \"bar\" }, null);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.ParamName).IsEqualTo(\"encoding\");\n    }\n\n#if FEATURE_ASYNC_FILE\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldPersistNewLinesToExistingFile()\n        {\n            // Arrange\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { path, new MockFileData(\"Demo text content\") }\n            });\n\n            var file = new MockFile(fileSystem);\n\n            // Act\n            await file.AppendAllLinesAsync(path, new[] { \"line 1\", \"line 2\", \"line 3\" });\n\n            // Assert\n            await That(file.ReadAllText(path))\n                .IsEqualTo(\"Demo text contentline 1\" + Environment.NewLine + \"line 2\" + Environment.NewLine + \"line 3\" + Environment.NewLine);\n        }\n\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldPersistNewLinesToNewFile()\n        {\n            // Arrange\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"c:\\something\\\"), new MockDirectoryData() }\n            });\n            var file = new MockFile(fileSystem);\n\n            // Act\n            await file.AppendAllLinesAsync(path, new[] { \"line 1\", \"line 2\", \"line 3\" });\n\n            // Assert\n            await That(file.ReadAllText(path))\n                .IsEqualTo(\"line 1\" + Environment.NewLine + \"line 2\" + Environment.NewLine + \"line 3\" + Environment.NewLine);\n        }\n\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowOperationCanceledExceptionIfCancelled()\n        {\n            // Arrange\n            const string path = \"test.txt\";\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { path, new MockFileData(\"line 1\") }\n            });\n\n            // Act\n            async Task Act() =>\n                await fileSystem.File.AppendAllLinesAsync(\n                    path,\n                    new[] { \"line 2\" },\n                    new CancellationToken(canceled: true));\n            await That(Act).Throws<OperationCanceledException>();\n\n            // Assert\n            await That(fileSystem.File.ReadAllText(path)).IsEqualTo(\"line 1\");\n        }\n\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathIsZeroLength()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            Func<Task> action = async () => await fileSystem.File.AppendAllLinesAsync(string.Empty, new[] { \"does not matter\" });\n\n            // Assert\n            await That(action).Throws<ArgumentException>();\n        }\n\n        [TestCase(\" \")]\n        [TestCase(\"   \")]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            Func<Task> action = async () => await fileSystem.File.AppendAllLinesAsync(path, new[] { \"does not matter\" });\n\n            // Assert\n            await That(action).Throws<ArgumentException>();\n        }\n\n        [TestCase(\"\\\"\")]\n        [TestCase(\"<\")]\n        [TestCase(\">\")]\n        [TestCase(\"|\")]\n        [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowArgumentExceptionIfPathContainsInvalidChar(string path)\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            Func<Task> action = async () => await fileSystem.File.AppendAllLinesAsync(path, new[] { \"does not matter\" });\n\n            // Assert\n            await That(action).Throws<ArgumentException>();\n        }\n\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowArgumentNullExceptionIfContentIsNull()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            Func<Task> action = async () => await fileSystem.File.AppendAllLinesAsync(\"foo\", null);\n\n            // Assert\n            var exception = await That(action).Throws<ArgumentNullException>();\n            await That(exception.ParamName).IsEqualTo(\"contents\");\n        }\n\n        [Test]\n        public async Task MockFile_AppendAllLinesAsync_ShouldThrowArgumentNullExceptionIfEncodingIsNull()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            Func<Task> action = async () => await fileSystem.File.AppendAllLinesAsync(\"foo.txt\", new[] { \"bar\" }, null);\n\n            // Assert\n            var exception = await That(action).Throws<ArgumentNullException>();\n            await That(exception.ParamName).IsEqualTo(\"encoding\");\n        }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileAppendAllTextTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing Globalization;\n\nusing NUnit.Framework;\nusing Text;\n\nusing XFS = MockUnixSupport;\n\nusing System.Threading.Tasks;\nusing System.Threading;\n\npublic class MockFileAppendAllTextTests\n{\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldPersistNewText()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        file.AppendAllText(path, \"+ some text\");\n\n        // Assert\n        await That(file.ReadAllText(path))\n            .IsEqualTo(\"Demo text content+ some text\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldPersistNewTextWithDifferentEncoding()\n    {\n        // Arrange\n        const string Path = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {Path, new MockFileData(\"AA\", Encoding.UTF32)}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        file.AppendAllText(Path, \"BB\", Encoding.UTF8);\n\n        // Assert\n        await That(fileSystem.GetFile(Path).Contents)\n            .IsEqualTo(new byte[] { 255, 254, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 66, 66 });\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldCreateIfNotExist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        // Act\n        fileSystem.File.AppendAllText(path, \" some text\");\n\n        // Assert\n        await That(fileSystem.File.ReadAllText(path))\n            .IsEqualTo(\"Demo text content some text\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldCreateIfNotExistWithBom()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var path = XFS.Path(@\"c:\\something\\demo3.txt\");\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\\\"));\n\n        // Act\n        fileSystem.File.AppendAllText(path, \"AA\", Encoding.UTF32);\n\n        // Assert\n        await That(fileSystem.GetFile(path).Contents)\n            .IsEqualTo(new byte[] { 255, 254, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0 });\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldFailIfNotExistButDirectoryAlsoNotExist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        // Act\n        path = XFS.Path(@\"c:\\something2\\demo.txt\");\n\n        // Assert\n        Exception ex;\n        ex = await That(() => fileSystem.File.AppendAllText(path, \"some text\")).Throws<DirectoryNotFoundException>();\n        await That(ex.Message)\n            .IsEqualTo(String.Format(CultureInfo.InvariantCulture, \"Could not find a part of the path '{0}'.\", path));\n\n        ex =\n            await That(\n                () => fileSystem.File.AppendAllText(path, \"some text\", Encoding.Unicode)).Throws<DirectoryNotFoundException>();\n        await That(ex.Message)\n            .IsEqualTo(String.Format(CultureInfo.InvariantCulture, \"Could not find a part of the path '{0}'.\", path));\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldPersistNewTextWithCustomEncoding()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        file.AppendAllText(path, \"+ some text\", Encoding.BigEndianUnicode);\n\n        // Assert\n        var expected = new byte[]\n        {\n            68, 101, 109, 111, 32, 116, 101, 120, 116, 32, 99, 111, 110, 116,\n            101, 110, 116, 0, 43, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101,\n            0, 32, 0, 116, 0, 101, 0, 120, 0, 116\n        };\n\n        await That(file.ReadAllBytes(path)).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllText_ShouldWorkWithRelativePath()\n    {\n        var file = \"file.txt\";\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.File.AppendAllText(file, \"Foo\");\n\n        await That(fileSystem.File.Exists(file)).IsTrue();\n    }\n\n#if FEATURE_ASYNC_FILE\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldPersistNewText()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        await file.AppendAllTextAsync(path, \"+ some text\");\n\n        // Assert\n        await That(file.ReadAllText(path))\n            .IsEqualTo(\"Demo text content+ some text\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled()\n    {\n        // Arrange\n        const string path = \"test.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"line 1\") }\n        });\n\n        // Act\n        async Task Act() =>\n            await fileSystem.File.AppendAllTextAsync(\n                path,\n                \"line 2\",\n                new CancellationToken(canceled: true));\n        await That(Act).Throws<OperationCanceledException>();\n\n        // Assert\n        await That(fileSystem.File.ReadAllText(path)).IsEqualTo(\"line 1\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldPersistNewTextWithDifferentEncoding()\n    {\n        // Arrange\n        const string Path = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {Path, new MockFileData(\"AA\", Encoding.UTF32)}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        await file.AppendAllTextAsync(Path, \"BB\", Encoding.UTF8);\n\n        // Assert\n        await That(fileSystem.GetFile(Path).Contents)\n            .IsEqualTo(new byte[] { 255, 254, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 66, 66 });\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldCreateIfNotExist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        // Act\n        await fileSystem.File.AppendAllTextAsync(path, \" some text\");\n\n        // Assert\n        await That(fileSystem.File.ReadAllText(path))\n            .IsEqualTo(\"Demo text content some text\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldCreateIfNotExistWithBom()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var path = XFS.Path(@\"c:\\something\\demo3.txt\");\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\\\"));\n\n        // Act\n        await fileSystem.File.AppendAllTextAsync(path, \"AA\", Encoding.UTF32);\n\n        // Assert\n        await That(fileSystem.GetFile(path).Contents)\n            .IsEqualTo(new byte[] { 255, 254, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0 });\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldFailIfNotExistButDirectoryAlsoNotExist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        // Act\n        path = XFS.Path(@\"c:\\something2\\demo.txt\");\n\n        // Assert\n        Exception ex;\n        Func<Task> action = async () => await fileSystem.File.AppendAllTextAsync(path, \"some text\");\n        ex = await That(action).Throws<DirectoryNotFoundException>();\n        await That(ex.Message)\n            .IsEqualTo(String.Format(CultureInfo.InvariantCulture, \"Could not find a part of the path '{0}'.\", path));\n\n        async Task Act() => await fileSystem.File.AppendAllTextAsync(path, \"some text\", Encoding.Unicode);\n        ex = await That(Act).Throws<DirectoryNotFoundException>();\n        await That(ex.Message)\n            .IsEqualTo(String.Format(CultureInfo.InvariantCulture, \"Could not find a part of the path '{0}'.\", path));\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldPersistNewTextWithCustomEncoding()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, new MockFileData(\"Demo text content\")}\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        await file.AppendAllTextAsync(path, \"+ some text\", Encoding.BigEndianUnicode);\n\n        // Assert\n        var expected = new byte[]\n        {\n            68, 101, 109, 111, 32, 116, 101, 120, 116, 32, 99, 111, 110, 116,\n            101, 110, 116, 0, 43, 0, 32, 0, 115, 0, 111, 0, 109, 0, 101,\n            0, 32, 0, 116, 0, 101, 0, 120, 0, 116\n        };\n\n        await That(file.ReadAllBytes(path)).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFile_AppendAllTextAsync_ShouldWorkWithRelativePath()\n    {\n        var file = \"file.txt\";\n        var fileSystem = new MockFileSystem();\n\n        await fileSystem.File.AppendAllTextAsync(file, \"Foo\");\n\n        await That(fileSystem.File.Exists(file)).IsTrue();\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileArgumentPathTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileArgumentPathTests\n{\n    private static IEnumerable<Action<IFile>> GetFileSystemActionsForArgumentNullException()\n    {\n        yield return fs => fs.AppendAllLines(null, new[] { \"does not matter\" });\n        yield return fs => fs.AppendAllLines(null, new[] { \"does not matter\" }, Encoding.ASCII);\n        yield return fs => fs.AppendAllText(null, \"does not matter\");\n        yield return fs => fs.AppendAllText(null, \"does not matter\", Encoding.ASCII);\n        yield return fs => fs.AppendText(null);\n        yield return fs => fs.WriteAllBytes(null, new byte[] { 0 });\n        yield return fs => fs.WriteAllLines(null, new[] { \"does not matter\" });\n        yield return fs => fs.WriteAllLines(null, new[] { \"does not matter\" }, Encoding.ASCII);\n        yield return fs => fs.WriteAllLines(null, new[] { \"does not matter\" }.ToArray());\n        yield return fs => fs.WriteAllLines(null, new[] { \"does not matter\" }.ToArray(), Encoding.ASCII);\n        yield return fs => fs.Create(null);\n        yield return fs => fs.Delete(null);\n        yield return fs => fs.GetCreationTime((string)null);\n        yield return fs => fs.GetCreationTimeUtc((string)null);\n        yield return fs => fs.GetLastAccessTime((string)null);\n        yield return fs => fs.GetLastAccessTimeUtc((string)null);\n        yield return fs => fs.GetLastWriteTime((string)null);\n        yield return fs => fs.GetLastWriteTimeUtc((string)null);\n        yield return fs => fs.WriteAllText(null, \"does not matter\");\n        yield return fs => fs.WriteAllText(null, \"does not matter\", Encoding.ASCII);\n        yield return fs => fs.Open(null, FileMode.OpenOrCreate);\n        yield return fs => fs.Open(null, FileMode.OpenOrCreate, FileAccess.Read);\n        yield return fs => fs.Open(null, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Inheritable);\n        yield return fs => fs.OpenRead(null);\n        yield return fs => fs.OpenText(null);\n        yield return fs => fs.OpenWrite(null);\n        yield return fs => fs.ReadAllBytes(null);\n        yield return fs => fs.ReadAllLines(null);\n        yield return fs => fs.ReadAllLines(null, Encoding.ASCII);\n        yield return fs => fs.ReadAllText(null);\n        yield return fs => fs.ReadAllText(null, Encoding.ASCII);\n        yield return fs => fs.ReadLines(null);\n        yield return fs => fs.ReadLines(null, Encoding.ASCII);\n        yield return fs => fs.SetAttributes((string)null, FileAttributes.Archive);\n        yield return fs => fs.GetAttributes((string)null);\n        yield return fs => fs.SetCreationTime((string)null, DateTime.Now);\n        yield return fs => fs.SetCreationTimeUtc((string)null, DateTime.Now);\n        yield return fs => fs.SetLastAccessTime((string)null, DateTime.Now);\n        yield return fs => fs.SetLastAccessTimeUtc((string)null, DateTime.Now);\n        yield return fs => fs.SetLastWriteTime((string)null, DateTime.Now);\n        yield return fs => fs.SetLastWriteTimeUtc((string)null, DateTime.Now);\n#pragma warning disable CA1416\n        yield return fs => fs.Decrypt(null);\n        yield return fs => fs.Encrypt(null);\n#pragma warning restore CA1416\n    }\n\n    [TestCaseSource(nameof(GetFileSystemActionsForArgumentNullException))]\n    public async Task Operations_ShouldThrowArgumentNullExceptionIfPathIsNull(Action<IFile> action)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action wrapped = () => action(fileSystem.File);\n\n        // Assert\n        var exception = await That(wrapped).Throws<ArgumentNullException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileCopyTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\nusing Globalization;\nusing Linq;\nusing NUnit.Framework;\nusing XFS = MockUnixSupport;\n\npublic class MockFileCopyTests\n{\n\n    [Test]\n    public async Task MockFile_Copy_ShouldOverwriteFileWhenOverwriteFlagIsTrue()\n    {\n        string sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var sourceContents = new MockFileData(\"Source content\");\n        string destFileName = XFS.Path(@\"c:\\destination\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFileName, sourceContents},\n            {destFileName, new MockFileData(\"Destination content\")}\n        });\n\n        fileSystem.File.Copy(sourceFileName, destFileName, true);\n\n        var copyResult = fileSystem.GetFile(destFileName);\n        await That(sourceContents.Contents).IsEqualTo(copyResult.Contents);\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldAdjustTimestampsOnDestination()\n    {\n        var sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var destFileName = XFS.Path(@\"c:\\source\\demo_copy.txt\");\n\n        var mockFileSystem = new MockFileSystem();\n        mockFileSystem.AddFile(sourceFileName, \"Original\");\n        mockFileSystem.File.Copy(sourceFileName, destFileName);\n\n        var sourceFileInfo = mockFileSystem.FileInfo.New(sourceFileName);\n        var destFileInfo = mockFileSystem.FileInfo.New(destFileName);\n        await That(destFileInfo.LastWriteTime).IsEqualTo(sourceFileInfo.LastWriteTime);\n        await That(DateTime.Now - destFileInfo.CreationTime).IsLessThanOrEqualTo( TimeSpan.FromSeconds(1));\n        await That(destFileInfo.LastAccessTime).IsEqualTo(destFileInfo.CreationTime);\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldCloneContents()\n    {\n        var sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var destFileName = XFS.Path(@\"c:\\source\\demo_copy.txt\");\n\n        var mockFileSystem = new MockFileSystem();\n        mockFileSystem.AddFile(sourceFileName, \"Original\");\n        mockFileSystem.File.Copy(sourceFileName, destFileName);\n\n        using (var stream = mockFileSystem.File.Open(sourceFileName, FileMode.Open, FileAccess.ReadWrite))\n        {\n            var binaryWriter = new System.IO.BinaryWriter(stream);\n\n            binaryWriter.Seek(0, SeekOrigin.Begin);\n            binaryWriter.Write(\"Modified\");\n        }\n\n        await That(mockFileSystem.File.ReadAllText(destFileName)).IsEqualTo(\"Original\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldCloneBinaryContents()\n    {\n        var sourceFileName = XFS.Path(@\"c:\\source\\demo.bin\");\n        var destFileName = XFS.Path(@\"c:\\source\\demo_copy.bin\");\n\n        byte[] original = new byte[] { 0xC0 };\n        var mockFileSystem = new MockFileSystem();\n        mockFileSystem.AddFile(sourceFileName, new MockFileData(original));\n        mockFileSystem.File.Copy(sourceFileName, destFileName);\n\n        using (var stream = mockFileSystem.File.Open(sourceFileName, FileMode.Open, FileAccess.ReadWrite))\n        {\n            var binaryWriter = new System.IO.BinaryWriter(stream);\n\n            binaryWriter.Seek(0, SeekOrigin.Begin);\n            binaryWriter.Write(\"Modified\");\n        }\n\n        await That(mockFileSystem.File.ReadAllBytes(destFileName)).IsEqualTo(original);\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldCreateFileAtNewDestination()\n    {\n        string sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var sourceContents = new MockFileData(\"Source content\");\n        string destFileName = XFS.Path(@\"c:\\source\\demo_copy.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFileName, sourceContents}\n        });\n\n        fileSystem.File.Copy(sourceFileName, destFileName, false);\n\n        var copyResult = fileSystem.GetFile(destFileName);\n        await That(sourceContents.Contents).IsEqualTo(copyResult.Contents);\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowExceptionWhenFileExistsAtDestination()\n    {\n        string sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var sourceContents = new MockFileData(\"Source content\");\n        string destFileName = XFS.Path(@\"c:\\destination\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFileName, sourceContents},\n            {destFileName, new MockFileData(\"Destination content\")}\n        });\n\n        await That(() => fileSystem.File.Copy(sourceFileName, destFileName), XFS.Path(@\"The file c:\\destination\\demo.txt already exists.\")).Throws<IOException>();\n    }\n\n    [TestCase(@\"c:\\source\\demo.txt\", @\"c:\\source\\doesnotexist\\demo.txt\")]\n    [TestCase(@\"c:\\source\\demo.txt\", @\"c:\\doesnotexist\\demo.txt\")]\n    public async Task MockFile_Copy_ShouldThrowExceptionWhenFolderInDestinationDoesNotExist(string sourceFilePath, string destFilePath)\n    {\n        string sourceFileName = XFS.Path(sourceFilePath);\n        string destFileName = XFS.Path(destFilePath);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFileName, string.Empty}\n        });\n\n        await That(() => fileSystem.File.Copy(sourceFileName, destFileName), string.Format(CultureInfo.InvariantCulture, @\"Could not find a part of the path '{0}'.\", destFilePath)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentNullExceptionWhenSourceIsNull_Message()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(null, destFilePath)).Throws<ArgumentNullException>();\n\n        await That(exception.Message).StartsWith(\"File name cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentNullExceptionWhenSourceIsNull_ParamName()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(null, destFilePath)).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"sourceFileName\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceFileNameContainsInvalidChars_Message()\n    {\n        var destFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n        var excludeChars = Shared.SpecialInvalidPathChars(fileSystem);\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidFileNameChars().Except(excludeChars))\n        {\n            var sourceFilePath = @\"c:\\something\\demo.txt\" + invalidChar;\n\n            var exception =\n                await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenSourcePathContainsInvalidChars_Message()\n    {\n        var destFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidPathChars())\n        {\n            var sourceFilePath = @\"c:\\some\" + invalidChar + @\"thing\\demo.txt\";\n\n            var exception =\n                await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetPathContainsInvalidChars_Message()\n    {\n        var sourceFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidPathChars())\n        {\n            var destFilePath = @\"c:\\some\" + invalidChar + @\"thing\\demo.txt\";\n\n            var exception =\n                await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetFileNameContainsInvalidChars_Message()\n    {\n        var sourceFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n        var excludeChars = Shared.SpecialInvalidPathChars(fileSystem);\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidFileNameChars().Except(excludeChars))\n        {\n            var destFilePath = @\"c:\\something\\demo.txt\" + invalidChar;\n\n            var exception =\n                await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Copy_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidUseOfDriveSeparator()\n    {\n        var badSourcePath = @\"C::\\something\\demo.txt\";\n        var destinationPath = @\"C:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(badSourcePath, destinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Copy_ShouldThrowIOExceptionWhenOverwritingWithSameNameDifferentCase()\n    {\n        var fileSystem = new MockFileSystem();\n        string path = @\"C:\\Temp\\file.txt\";\n        string pathUpper = @\"C:\\Temp\\FILE.TXT\";\n\n        fileSystem.File.WriteAllText(path, \"Hello\");\n\n        void Act() => fileSystem.File.Copy(path, pathUpper, true);\n\n        await That(Act).Throws<IOException>()\n            .WithMessage($\"The process cannot access the file '{pathUpper}' because it is being used by another process.\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Copy_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidDriveLetter()\n    {\n        var badSourcePath = @\"0:\\something\\demo.txt\";\n        var destinationPath = @\"C:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(badSourcePath, destinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Copy_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidUseOfDriveSeparator()\n    {\n        var sourcePath = @\"C:\\something\\demo.txt\";\n        var badDestinationPath = @\"C:\\elsewhere:\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(sourcePath, badDestinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Copy_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidDriveLetter()\n    {\n        var sourcePath = @\"C:\\something\\demo.txt\";\n        var badDestinationPath = @\"^:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(sourcePath, badDestinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsEmpty_Message()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(string.Empty, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"Empty file name is not legal.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsEmpty_ParamName()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(string.Empty, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.ParamName).IsEqualTo(\"sourceFileName\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenSourceIsStringOfBlanks()\n    {\n        string sourceFilePath = \"   \";\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentNullExceptionWhenTargetIsNull_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(sourceFilePath, null)).Throws<ArgumentNullException>();\n\n        await That(exception.Message).StartsWith(\"File name cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentNullExceptionWhenTargetIsNull_ParamName()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(sourceFilePath, null)).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"destFileName\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetIsStringOfBlanks()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string destFilePath = \"   \";\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowArgumentExceptionWhenTargetIsEmpty_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Copy(sourceFilePath, string.Empty)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"Empty file name is not legal.\");\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(sourceFilePath, XFS.Path(@\"c:\\something\\demo2.txt\"));\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_EvenWhenCopyingToItself()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Copy(sourceFilePath, XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldWorkWithRelativePaths()\n    {\n        var sourceFile = \"source_file.txt\";\n        var destinationFile = \"destination_file.txt\";\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.File.Create(sourceFile).Close();\n        fileSystem.File.Copy(sourceFile, destinationFile);\n\n        await That(fileSystem.File.Exists(destinationFile)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFile_Copy_ShouldThrowIOExceptionForInvalidFileShare()\n    {\n        string sourceFileName = XFS.Path(@\"c:\\source\\demo.txt\");\n        var sourceContents = new MockFileData(\"Source content\")\n        {\n            AllowedFileShare = FileShare.None\n        };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFileName, sourceContents}\n        });\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        Action action = () => fileSystem.File.Copy(sourceFileName, XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        await That(action).Throws<IOException>();\n    }\n}\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileCreateTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing Globalization;\n\nusing NUnit.Framework;\n\nusing Text;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileCreateTests\n{\n    [Test]\n    public async Task Mockfile_Create_ShouldCreateNewStream()\n    {\n        string fullPath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        var sut = new MockFile(fileSystem);\n\n        await That(fileSystem.FileExists(fullPath)).IsFalse();\n\n        sut.Create(fullPath).Dispose();\n\n        await That(fileSystem.FileExists(fullPath)).IsTrue();\n    }\n\n    [Test]\n    public async Task Mockfile_Create_CanWriteToNewStream()\n    {\n        string fullPath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n        var data = new UTF8Encoding(false).GetBytes(\"Test string\");\n\n        var sut = new MockFile(fileSystem);\n        using (var stream = sut.Create(fullPath))\n        {\n            stream.Write(data, 0, data.Length);\n        }\n\n        var mockFileData = fileSystem.GetFile(fullPath);\n        var fileData = mockFileData.Contents;\n\n        await That(fileData).IsEqualTo(data);\n    }\n\n    [Test]\n    public async Task Mockfile_Create_OverwritesExistingFile()\n    {\n        string path = XFS.Path(@\"c:\\some\\file.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\some\"));\n\n        var mockFile = new MockFile(fileSystem);\n\n        // Create a file\n        using (var stream = mockFile.Create(path))\n        {\n            var contents = new UTF8Encoding(false).GetBytes(\"Test 1\");\n            stream.Write(contents, 0, contents.Length);\n        }\n\n        // Create new file that should overwrite existing file\n        var expectedContents = new UTF8Encoding(false).GetBytes(\"Test 2\");\n        using (var stream = mockFile.Create(path))\n        {\n            stream.Write(expectedContents, 0, expectedContents.Length);\n        }\n\n        var actualContents = fileSystem.GetFile(path).Contents;\n\n        await That(actualContents).IsEqualTo(expectedContents);\n    }\n\n    [Test]\n    public async Task Mockfile_Create_ShouldThrowUnauthorizedAccessExceptionIfPathIsReadOnly()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\read-only.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { path, new MockFileData(\"Content\") } });\n        var mockFile = new MockFile(fileSystem);\n\n        // Act\n        mockFile.SetAttributes(path, FileAttributes.ReadOnly);\n\n        // Assert\n        var exception = await That(() => mockFile.Create(path).Dispose()).Throws<UnauthorizedAccessException>();\n        await That(exception.Message).IsEqualTo(string.Format(CultureInfo.InvariantCulture, \"Access to the path '{0}' is denied.\", path));\n    }\n\n    [Test]\n    public async Task Mockfile_Create_ShouldThrowArgumentExceptionIfPathIsZeroLength()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.Create(\"\");\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(\"\\\"\")]\n    [TestCase(\"<\")]\n    [TestCase(\">\")]\n    [TestCase(\"|\")]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Create_ShouldThrowArgumentNullExceptionIfPathIsNull1(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.Create(path);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_Create_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.Create(path);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_Create_ShouldThrowArgumentNullExceptionIfPathIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.Create(null);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Path cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockFile_Create_ShouldThrowDirectoryNotFoundExceptionIfCreatingAndParentPathDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var file = XFS.Path(\"C:\\\\path\\\\NotFound.ext\");\n\n        // Act\n        Action action = () => fileSystem.File.Create(file);\n\n        // Assert\n        var exception = await That(action).Throws<DirectoryNotFoundException>();\n        await That(exception.Message).StartsWith(\"Could not find a part of the path\");\n    }\n\n    [Test]\n    public async Task MockFile_Create_TruncateShouldWriteNewContents()\n    {\n        // Arrange\n        string testFileName = XFS.Path(@\"c:\\someFile.txt\");\n        var fileSystem = new MockFileSystem();\n\n        using (var stream = fileSystem.FileStream.New(testFileName, FileMode.Create, FileAccess.Write))\n        {\n            using (var writer = new StreamWriter(stream))\n            {\n                writer.Write(\"original_text\");\n            }\n        }\n\n        // Act\n        using (var stream = fileSystem.FileStream.New(testFileName, FileMode.Truncate, FileAccess.Write))\n        {\n            using (var writer = new StreamWriter(stream))\n            {\n                writer.Write(\"new_text\");\n            }\n        }\n\n        // Assert\n        await That(fileSystem.File.ReadAllText(testFileName)).IsEqualTo(\"new_text\");\n    }\n\n    [Test]\n    public async Task MockFile_Create_TruncateShouldClearFileContentsOnOpen()\n    {\n        // Arrange\n        string testFileName = XFS.Path(@\"c:\\someFile.txt\");\n        var fileSystem = new MockFileSystem();\n\n        using (var stream = fileSystem.FileStream.New(testFileName, FileMode.Create, FileAccess.Write))\n        {\n            using (var writer = new StreamWriter(stream))\n            {\n                writer.Write(\"original_text\");\n            }\n        }\n\n        // Act\n        using (var stream = fileSystem.FileStream.New(testFileName, FileMode.Truncate, FileAccess.Write))\n        {\n            // Opening the stream is enough to reset the contents\n        }\n\n        // Assert\n        await That(fileSystem.File.ReadAllText(testFileName)).IsEqualTo(string.Empty);\n    }\n\n    [Test]\n    public async Task MockFile_Create_DeleteOnCloseOption_FileExistsWhileStreamIsOpen()\n    {\n        var root = XFS.Path(@\"C:\\\");\n        var filePath = XFS.Path(@\"C:\\test.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(root);\n\n        using (fileSystem.File.Create(filePath, 4096, FileOptions.DeleteOnClose))\n        {\n            await That(fileSystem.File.Exists(filePath)).IsTrue();\n        }\n    }\n\n    [Test]\n    public async Task MockFile_Create_DeleteOnCloseOption_FileDeletedWhenStreamIsClosed()\n    {\n        var root = XFS.Path(@\"C:\\\");\n        var filePath = XFS.Path(@\"C:\\test.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(root);\n\n        using (fileSystem.File.Create(filePath, 4096, FileOptions.DeleteOnClose))\n        {\n        }\n\n        await That(fileSystem.File.Exists(filePath)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Create_EncryptedOption_FileNotYetEncryptedWhenStreamIsOpen()\n    {\n        var root = XFS.Path(@\"C:\\\");\n        var filePath = XFS.Path(@\"C:\\test.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(root);\n\n        using (var stream = fileSystem.File.Create(filePath, 4096, FileOptions.Encrypted))\n        {\n            var fileInfo = fileSystem.FileInfo.New(filePath);\n            await That(fileInfo.Attributes.HasFlag(FileAttributes.Encrypted)).IsFalse();\n        }\n    }\n\n    [Test]\n    public async Task MockFile_Create_EncryptedOption_EncryptsFileWhenStreamIsClose()\n    {\n        var root = XFS.Path(@\"C:\\\");\n        var filePath = XFS.Path(@\"C:\\test.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(root);\n\n        using (var stream = fileSystem.File.Create(filePath, 4096, FileOptions.Encrypted))\n        {\n        }\n\n        var fileInfo = fileSystem.FileInfo.New(filePath);\n        await That(fileInfo.Attributes.HasFlag(FileAttributes.Encrypted)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFile_Create_ShouldWorkWithRelativePath()\n    {\n        var relativeFile = \"file.txt\";\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.File.Create(relativeFile).Close();\n\n        await That(fileSystem.File.Exists(relativeFile)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFile_Create_CanReadFromNewStream()\n    {\n        string fullPath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        using (var stream = fileSystem.File.Create(fullPath))\n        {\n            await That(stream.CanRead).IsTrue();\n        }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileDeleteTests.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing System.Collections.Generic;\nusing NUnit.Framework;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileDeleteTests\n{\n    [Test]\n    public async Task MockFile_Delete_ShouldDeleteFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\some_folder\\\\test\");\n        var directory = fileSystem.Path.GetDirectoryName(path);\n        fileSystem.AddFile(path, new MockFileData(\"Bla\"));\n\n        var fileCount1 = fileSystem.Directory.GetFiles(directory, \"*\").Length;\n        fileSystem.File.Delete(path);\n        var fileCount2 = fileSystem.Directory.GetFiles(directory, \"*\").Length;\n\n        await That(fileCount1).IsEqualTo(1).Because(\"File should have existed\");\n        await That(fileCount2).IsEqualTo(0).Because(\"File should have been deleted\");\n    }\n\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_Delete_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.Delete(path);\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_Delete_ShouldThrowDirectoryNotFoundExceptionIfParentFolderAbsent()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\\\\somefile.txt\");\n\n        await That(() => fileSystem.File.Delete(path)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Delete_ShouldSilentlyReturnIfNonExistingFileInExistingFolder()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { XFS.Path(\"C:\\\\temp\\\\exist.txt\"), new MockFileData(\"foobar\") },\n        });\n\n        string filePath = XFS.Path(\"C:\\\\temp\\\\somefile.txt\");\n\n        // Delete() returns void, so there is nothing to check here beside absense of an exception\n        await That(() => fileSystem.File.Delete(filePath)).DoesNotThrow();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileExistsTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing NUnit.Framework;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileExistsTests\n{\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnTrueForSamePath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"C:\\something\\other.gif\"), new MockFileData(\"gif content\") }\n        });\n\n        // Act\n        var result = fileSystem.File.Exists(XFS.Path(@\"C:\\something\\other.gif\"));\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.CaseInsensitivity)]\n    public async Task MockFile_Exists_ShouldReturnTrueForPathVaryingByCase()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"C:\\something\\demo.txt\", new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.File.Exists(@\"C:\\SomeThing\\DEMO.txt\");\n\n        // Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.CaseSensitivity)]\n    public async Task MockFile_Exists_ShouldReturnFalseForPathVaryingByCase()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { \"/something/demo.txt\", new MockFileData(\"Demo text content\") }\n        });\n\n        // Act\n        var result = fileSystem.File.Exists(\"/SomeThing/DEMO.txt\");\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnFalseForEntirelyDifferentPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"C:\\something\\demo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"C:\\something\\other.gif\"), new MockFileData(\"gif content\") }\n        });\n\n        // Act\n        var result = fileSystem.File.Exists(XFS.Path(@\"C:\\SomeThing\\DoesNotExist.gif\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnFalseForNullPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var result = fileSystem.File.Exists(null);\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnFalseForEmptyStringPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var result = fileSystem.File.Exists(string.Empty);\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnFalseForInvalidCharactersInPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var result = fileSystem.File.Exists(@\"C:\"\"*/:<>?|abc\");\n\n        // Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Exists_ShouldReturnFalseForDirectories()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"C:\\something\\demo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"C:\\something\\other.gif\"), new MockFileData(\"gif content\") }\n        });\n\n        // Act\n        var result = fileSystem.File.Exists(XFS.Path(@\"C:\\something\\\"));\n\n        // Assert\n        await That(result).IsFalse();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Security.AccessControl;\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\n[SupportedOSPlatform(\"windows\")]\npublic class MockFileGetAccessControlTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetAccessControl(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetAccessControl_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMockData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var expectedFileName = XFS.Path(@\"c:\\a.txt\");\n\n        // Act\n        Action action = () => fileSystem.File.GetAccessControl(expectedFileName);\n\n        // Assert\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_GetAccessControl_ShouldReturnAccessControlOfFileData()\n    {\n        // Arrange\n        var expectedFileSecurity = new FileSecurity();\n        expectedFileSecurity.SetAccessRuleProtection(false, false);\n\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileData = new MockFileData(\"Test content\")\n        {\n            AccessControl = expectedFileSecurity,\n        };\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        // Act\n        var fileSecurity = fileSystem.File.GetAccessControl(filePath);\n\n        // Assert\n        await That(fileSecurity).IsEqualTo(expectedFileSecurity);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetCreationTimeTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileGetCreationTimeTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetCreationTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetCreationTime(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTime_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualCreationTime = fileSystem.File.GetCreationTime(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualCreationTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc).ToLocalTime());\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTime_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetCreationTime(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Local);\n        await That(result).IsEqualTo(now.ToLocalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetCreationTimeUtcTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileGetCreationTimeUtcTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetCreationTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetCreationTimeUtc(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualCreationTime = fileSystem.File.GetCreationTimeUtc(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualCreationTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc));\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTimeUtc_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetCreationTimeUtc(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Utc);\n        await That(result).IsEqualTo(now.ToUniversalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastAccessTimeTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileGetLastAccessTimeTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetLastAccessTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetLastAccessTime(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTime_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTime(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualLastAccessTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc).ToLocalTime());\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTime_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetLastAccessTime(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Local);\n        await That(result).IsEqualTo(now.ToLocalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastAccessTimeUtcTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileGetLastAccessTimeUtcTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetLastAccessTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetLastAccessTimeUtc(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualLastAccessTime = fileSystem.File.GetLastAccessTimeUtc(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualLastAccessTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc));\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTimeUtc_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetLastAccessTimeUtc(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Utc);\n        await That(result).IsEqualTo(now.ToUniversalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastWriteTimeTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileGetLastWriteTimeTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetLastWriteTime_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetLastWriteTime(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTime_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTime(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualLastWriteTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc).ToLocalTime());\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTime_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetLastWriteTime(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Local);\n        await That(result).IsEqualTo(now.ToLocalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetLastWriteTimeUtcTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileGetLastWriteTimeUtcTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_GetLastWriteTimeUtc_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetLastWriteTimeUtc(path);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTimeUtc_ShouldReturnDefaultTimeIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var actualLastWriteTime = fileSystem.File.GetLastWriteTimeUtc(@\"c:\\does\\not\\exist.txt\");\n\n        // Assert\n        await That(actualLastWriteTime).IsEqualTo(new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc));\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTimeUtc_ShouldBeSet()\n    {\n        var now = DateTime.Now.AddDays(10);\n        var fileSystem = new MockFileSystem()\n            .MockTime(() => now);\n        fileSystem.File.WriteAllText(\"foo.txt\", \"xyz\");\n\n        var result = fileSystem.File.GetLastWriteTimeUtc(\"foo.txt\");\n\n        await That(result.Kind).IsEqualTo(DateTimeKind.Utc);\n        await That(result).IsEqualTo(now.ToUniversalTime());\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileGetUnixFileModeTests.cs",
    "content": "#if FEATURE_UNIX_FILE_MODE\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests\n{\n    using Collections.Generic;\n\n    using NUnit.Framework;\n\n    using XFS = MockUnixSupport;\n\n    [UnsupportedOSPlatform(\"windows\")]\n    [UnixOnly(\"This feature is not supported on Windows.\")]\n    public class MockFileGetUnixFileModeTests\n    {\n        [Test]\n        public async Task MockFile_GetUnixFileMode_ShouldReturnDefaultAccessMode()\n        {\n            // Arrange\n            var expected = UnixFileMode.UserRead | \n                           UnixFileMode.GroupRead | \n                           UnixFileMode.OtherRead | \n                           UnixFileMode.UserWrite;\n            \n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"C:\\something\\some.txt\"), new MockFileData(\"Demo text content\") }\n            });\n\n            // Act\n            var result = fileSystem.File.GetUnixFileMode(XFS.Path(@\"C:\\something\\some.txt\"));\n\n            // Assert\n            await That(result).IsEqualTo(expected);\n        }\n        \n        [Test]\n        public async Task MockFile_GetUnixFileMode_ShouldReturnSpecifiedAccessMode([Values] UnixFileMode unixFileMode)\n        {\n            // Arrange\n            var mockFileData = new MockFileData(\"Demo text content\")\n            {\n                UnixMode = unixFileMode\n            };\n            \n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"C:\\something\\some.txt\"), mockFileData }\n            });\n\n            // Act\n            var result = fileSystem.File.GetUnixFileMode(XFS.Path(@\"C:\\something\\some.txt\"));\n\n            // Assert\n            await That(result).IsEqualTo(unixFileMode);\n        }\n    }\n}\n#endif"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\n[SupportedOSPlatform(\"windows\")]\npublic class MockFileInfoAccessControlTests\n{\n    [Test]\n    public async Task MockFileInfo_GetAccessControl_ShouldReturnAccessControlOfFileData()\n    {\n        // Arrange\n        var expectedFileSecurity = new FileSecurity();\n        expectedFileSecurity.SetAccessRuleProtection(false, false);\n\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileData = new MockFileData(\"Test content\")\n        {\n            AccessControl = expectedFileSecurity,\n        };\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        var fileInfo = fileSystem.FileInfo.New(filePath);\n\n        // Act\n        var fileSecurity = fileInfo.GetAccessControl();\n\n        // Assert\n        await That(fileSecurity).IsEqualTo(expectedFileSecurity);\n    }\n\n    [Test]\n    public async Task MockFile_SetAccessControl_ShouldSetAccessControlOfFileData()\n    {\n        // Arrange\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileData = new MockFileData(\"Test content\");\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        var fileInfo = fileSystem.FileInfo.New(filePath);\n\n        // Act\n        var expectedAccessControl = new FileSecurity();\n        expectedAccessControl.SetAccessRuleProtection(false, false);\n        fileInfo.SetAccessControl(expectedAccessControl);\n\n        // Assert\n        var accessControl = fileInfo.GetAccessControl();\n        await That(accessControl).IsEqualTo(expectedAccessControl);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoFactoryTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileInfoFactoryTests\n{\n    [Test]\n    public async Task MockFileInfoFactory_New_ShouldReturnFileInfoForExistingFile()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\a.txt\", new MockFileData(\"Demo text content\") },\n            { @\"c:\\a\\b\\c.txt\", new MockFileData(\"Demo text content\") },\n        });\n        var fileInfoFactory = new MockFileInfoFactory(fileSystem);\n\n        // Act\n        var result = fileInfoFactory.New(@\"c:\\a.txt\");\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    public async Task MockFileInfoFactory_New_ShouldReturnFileInfoForNonExistentFile()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\a.txt\", new MockFileData(\"Demo text content\") },\n            { @\"c:\\a\\b\\c.txt\", new MockFileData(\"Demo text content\") },\n        });\n        var fileInfoFactory = new MockFileInfoFactory(fileSystem);\n\n        // Act\n        var result = fileInfoFactory.New(@\"c:\\foo.txt\");\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    public async Task MockFileInfoFactory_Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new MockFileSystem();\n\n        var result = fileSystem.FileInfo.Wrap(null);\n\n        await That(result).IsNull();\n    }\n\n    [Test]\n    public async Task MockFileInfoFactory_Wrap_ShouldKeepNameAndFullName()\n    {\n        var fs = new MockFileSystem();\n        var fileInfo = new FileInfo(@\"C:\\subfolder\\file\");\n        var wrappedFileInfo = fs.FileInfo.Wrap(fileInfo);\n\n        await That(wrappedFileInfo.FullName).IsEqualTo(fileInfo.FullName);\n        await That(wrappedFileInfo.Name).IsEqualTo(fileInfo.Name);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoSymlinkTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileInfoSymlinkTests\n{\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n\n    [Test]\n    public async Task MockFileInfo_ResolveLinkTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n\n        var result = fileSystem.FileInfo.New(\"foo\").ResolveLinkTarget(false);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.File.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.FileInfo.New(\"foo1\").ResolveLinkTarget(true);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.File.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.FileInfo.New(\"foo1\").ResolveLinkTarget(false);\n\n        await That(result.Name).IsEqualTo(\"foo\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n\n        await That(() =>\n        {\n            fileSystem.FileInfo.New(\"bar\").ResolveLinkTarget(false);\n        }).Throws<IOException>();\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileInfoTests\n{\n    [Test]\n    public async Task MockFileInfo_NullPath_ThrowArgumentNullException()\n    {\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => new MockFileInfo(fileSystem, null);\n\n        await That(action).Throws<ArgumentNullException>();\n\n    }\n\n    [Test]\n    public async Task MockFileInfo_Exists_ShouldReturnTrueIfFileExistsInMemoryFileSystem()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(\"Demo text content\") },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.Exists;\n\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Exists_ShouldReturnFalseIfFileDoesNotExistInMemoryFileSystem()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(\"Demo text content\") },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\foo.txt\"));\n\n        var result = fileInfo.Exists;\n\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Exists_ShouldReturnFalseIfPathLeadsToDirectory()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(\"Demo text content\") },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a\\b\"));\n\n        var result = fileInfo.Exists;\n\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Length_ShouldReturnLengthOfFileInMemoryFileSystem()\n    {\n        const string fileContent = \"Demo text content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), new MockFileData(fileContent) },\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(fileContent) },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.Length;\n\n        await That(result).IsEqualTo(fileContent.Length);\n    }\n\n    [Test]\n    public async Task MockFileInfo_Length_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMemoryFileSystem()\n    {\n        const string fileContent = \"Demo text content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), new MockFileData(fileContent) },\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(fileContent) },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\foo.txt\"));\n\n        var ex = await That(() => fileInfo.Length.ToString(CultureInfo.InvariantCulture)).Throws<FileNotFoundException>();\n\n        await That(ex.FileName).IsEqualTo(XFS.Path(@\"c:\\foo.txt\"));\n    }\n\n    [Test]\n    public async Task MockFileInfo_Length_ShouldThrowFileNotFoundExceptionIfPathLeadsToDirectory()\n    {\n        const string fileContent = \"Demo text content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a\\b\\c.txt\"), new MockFileData(fileContent) },\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a\\b\"));\n\n        var ex = await That(() => fileInfo.Length.ToString(CultureInfo.InvariantCulture)).Throws<FileNotFoundException>();\n\n        await That(ex.FileName).IsEqualTo(XFS.Path(@\"c:\\a\\b\"));\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTimeUtc_ShouldReturnCreationTimeUtcOfFileInMemoryFileSystem()\n    {\n        var creationTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { CreationTime = creationTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.CreationTimeUtc;\n\n        await That(result).IsEqualTo(creationTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        var result = fileInfo.CreationTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTimeUtc_ShouldSetCreationTimeUtcOfFileInMemoryFileSystem()\n    {\n        var creationTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { CreationTime = creationTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var newUtcTime = DateTime.UtcNow;\n        fileInfo.CreationTimeUtc = newUtcTime;\n\n        await That(fileInfo.CreationTimeUtc).IsEqualTo(newUtcTime);\n    }\n\n\n    [Test]\n    public async Task MockFileInfo_CreationTime_ShouldReturnCreationTimeOfFileInMemoryFileSystem()\n    {\n        var creationTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { CreationTime = creationTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.CreationTime;\n\n        await That(result).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTime_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        var result = fileInfo.CreationTime;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTime_ShouldSetCreationTimeOfFileInMemoryFileSystem()\n    {\n        var creationTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { CreationTime = creationTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n        var newTime = DateTime.Now;\n\n        fileInfo.CreationTime = newTime;\n\n        await That(fileInfo.CreationTime).IsEqualTo(newTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_Attributes_ShouldReturnMinusOneForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n        FileAttributes expected = (FileAttributes)(-1);\n\n        await That(fileInfo.Attributes).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFileInfo_Attributes_SetterShouldThrowFileNotFoundExceptionOnNonExistingFileOrDirectory()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        await That(() => fileInfo.Attributes = FileAttributes.Hidden).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_IsReadOnly_ShouldSetReadOnlyAttributeOfFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        fileInfo.IsReadOnly = true;\n\n        await That(fileData.Attributes & FileAttributes.ReadOnly).IsEqualTo(FileAttributes.ReadOnly);\n    }\n\n    [Test]\n    public async Task MockFileInfo_IsReadOnly_ShouldSetNotReadOnlyAttributeOfFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\") { Attributes = FileAttributes.ReadOnly };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        fileInfo.IsReadOnly = false;\n\n        await That(fileData.Attributes & FileAttributes.ReadOnly).IsNotEqualTo(FileAttributes.ReadOnly);\n    }\n\n    [Test]\n    public async Task MockFileInfo_AppendText_ShouldAddTextToFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        using (var file = fileInfo.AppendText())\n            file.WriteLine(\"This should be at the end\");\n\n        string newcontents;\n        using (var newfile = fileInfo.OpenText())\n        {\n            newcontents = newfile.ReadToEnd();\n        }\n\n        await That(newcontents).IsEqualTo($\"Demo text contentThis should be at the end{Environment.NewLine}\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_AppendText_ShouldCreateFileIfMissing()\n    {\n        var fileSystem = new MockFileSystem();\n        var targetFile = XFS.Path(@\"c:\\a.txt\");\n        var fileInfo = new MockFileInfo(fileSystem, targetFile);\n\n        using (var file = fileInfo.AppendText())\n            file.WriteLine(\"This should be the contents\");\n\n        string newcontents;\n        using (var newfile = fileInfo.OpenText())\n        {\n            newcontents = newfile.ReadToEnd();\n        }\n\n        await That(fileSystem.File.Exists(targetFile)).IsTrue();\n        await That(newcontents).IsEqualTo($\"This should be the contents{Environment.NewLine}\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_OpenWrite_ShouldAddDataToFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n        var bytesToAdd = new byte[] { 65, 66, 67, 68, 69 };\n\n\n        using (var file = fileInfo.OpenWrite())\n        {\n            file.Write(bytesToAdd, 0, bytesToAdd.Length);\n        }\n\n        string newcontents;\n        using (var newfile = fileInfo.OpenText())\n        {\n            newcontents = newfile.ReadToEnd();\n        }\n\n        await That(newcontents).IsEqualTo(\"ABCDEtext content\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_Encrypt_ShouldSetEncryptedAttributeOfFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        fileInfo.Encrypt();\n\n        await That(fileData.Attributes & FileAttributes.Encrypted).IsEqualTo(FileAttributes.Encrypted);\n    }\n\n    [Test]\n    public async Task MockFileInfo_Decrypt_ShouldUnsetEncryptedAttributeOfFileInMemoryFileSystem()\n    {\n        var fileData = new MockFileData(\"Demo text content\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n        fileInfo.Encrypt();\n\n        fileInfo.Decrypt();\n\n        await That(fileData.Attributes & FileAttributes.Encrypted).IsNotEqualTo(FileAttributes.Encrypted);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastAccessTimeUtc_ShouldReturnLastAccessTimeUtcOfFileInMemoryFileSystem()\n    {\n        var lastAccessTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { LastAccessTime = lastAccessTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.LastAccessTimeUtc;\n\n        await That(result).IsEqualTo(lastAccessTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastAccessTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        var result = fileInfo.LastAccessTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastAccessTimeUtc_ShouldSetCreationTimeUtcOfFileInMemoryFileSystem()\n    {\n        var lastAccessTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { LastAccessTime = lastAccessTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var newUtcTime = DateTime.UtcNow;\n        fileInfo.LastAccessTimeUtc = newUtcTime;\n\n        await That(fileInfo.LastAccessTimeUtc).IsEqualTo(newUtcTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTime_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        var result = fileInfo.LastWriteTime;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.LocalDateTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTimeUtc_ShouldReturnLastWriteTimeUtcOfFileInMemoryFileSystem()\n    {\n        var lastWriteTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { LastWriteTime = lastWriteTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.LastWriteTimeUtc;\n\n        await That(result).IsEqualTo(lastWriteTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTimeUtc_ShouldReturnDefaultTimeForNonExistingFile()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\non\\existing\\file.txt\"));\n\n        var result = fileInfo.LastWriteTimeUtc;\n\n        await That(result).IsEqualTo(MockFileData.DefaultDateTimeOffset.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTimeUtc_ShouldSetLastWriteTimeUtcOfFileInMemoryFileSystem()\n    {\n        var lastWriteTime = DateTime.Now.AddHours(-4);\n        var fileData = new MockFileData(\"Demo text content\") { LastWriteTime = lastWriteTime };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\a.txt\"), fileData }\n        });\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var newUtcTime = DateTime.UtcNow;\n        fileInfo.LastWriteTimeUtc = newUtcTime;\n\n        await That(fileInfo.LastWriteTimeUtc).IsEqualTo(newUtcTime);\n    }\n\n    [Test]\n    public async Task MockFileInfo_GetExtension_ShouldReturnExtension()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a.txt\"));\n\n        var result = fileInfo.Extension;\n\n        await That(result).IsEqualTo(\".txt\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_GetExtensionWithoutExtension_ShouldReturnEmptyString()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        var fileInfo = new MockFileInfo(fileSystem, XFS.Path(@\"c:\\a\"));\n\n        var result = fileInfo.Extension;\n\n        await That(result).IsEmpty();\n    }\n\n    [Test]\n    public async Task MockFileInfo_GetDirectoryName_ShouldReturnCompleteDirectoryPath()\n    {\n        var fileInfo = new MockFileInfo(new MockFileSystem(), XFS.Path(@\"c:\\temp\\level1\\level2\\file.txt\"));\n\n        var result = fileInfo.DirectoryName;\n\n        await That(result).IsEqualTo(XFS.Path(@\"c:\\temp\\level1\\level2\"));\n    }\n\n    [Test]\n    public async Task MockFileInfo_GetDirectory_ShouldReturnDirectoryInfoWithCorrectPath()\n    {\n        var fileInfo = new MockFileInfo(new MockFileSystem(), XFS.Path(@\"c:\\temp\\level1\\level2\\file.txt\"));\n\n        var result = fileInfo.Directory;\n\n        await That(result.FullName).IsEqualTo(XFS.Path(@\"c:\\temp\\level1\\level2\"));\n    }\n\n    [Test]\n    public async Task MockFileInfo_OpenRead_ShouldReturnByteContentOfFile()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\temp\\file.txt\"), new MockFileData(new byte[] { 1, 2 }));\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n\n        byte[] result = new byte[2];\n        using (var stream = fileInfo.OpenRead())\n        {\n#pragma warning disable CA2022\n            // ReSharper disable once MustUseReturnValue\n            stream.Read(result, 0, 2);\n#pragma warning restore CA2022\n        }\n\n        await That(result).IsEqualTo(new byte[] { 1, 2 });\n    }\n\n    [Test]\n    public async Task MockFileInfo_OpenText_ShouldReturnStringContentOfFile()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\temp\\file.txt\"), new MockFileData(@\"line 1\\r\\nline 2\"));\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n\n        string result;\n        using (var streamReader = fileInfo.OpenText())\n        {\n            result = streamReader.ReadToEnd();\n        }\n\n        await That(result).IsEqualTo(@\"line 1\\r\\nline 2\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_NonExistentDestination_ShouldUpdateFileInfoDirectoryAndFullName()\n    {\n        var fileSystem = new MockFileSystem();\n        var sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        var destinationFolder = XFS.Path(@\"c:\\temp2\");\n        var destinationPath = XFS.Path(destinationFolder + @\"\\file.txt\");\n        fileSystem.AddFile(sourcePath, new MockFileData(\"1\"));\n        var fileInfo = fileSystem.FileInfo.New(sourcePath);\n        fileSystem.AddDirectory(destinationFolder);\n\n        fileInfo.MoveTo(destinationPath);\n\n        await That(fileInfo.DirectoryName).IsEqualTo(destinationFolder);\n        await That(fileInfo.FullName).IsEqualTo(destinationPath);\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_NonExistentDestinationFolder_ShouldThrowDirectoryNotFoundException()\n    {\n        var fileSystem = new MockFileSystem();\n        var sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        var destinationPath = XFS.Path(@\"c:\\temp2\\file.txt\");\n        fileSystem.AddFile(sourcePath, new MockFileData(\"1\"));\n        var fileInfo = fileSystem.FileInfo.New(sourcePath);\n\n        await That(() => fileInfo.MoveTo(destinationPath)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_ExistingDestination_ShouldThrowExceptionAboutFileAlreadyExisting()\n    {\n        var fileSystem = new MockFileSystem();\n        var sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        var destinationPath = XFS.Path(@\"c:\\temp2\\file.txt\");\n        fileSystem.AddFile(sourcePath, new MockFileData(\"1\"));\n        var fileInfo = fileSystem.FileInfo.New(sourcePath);\n        fileSystem.AddFile(destinationPath, new MockFileData(\"2\"));\n\n        await That(() => fileInfo.MoveTo(destinationPath)).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_SameSourceAndTargetIsANoOp()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"c:\\temp\\file.txt\"), new MockFileData(@\"line 1\\r\\nline 2\"));\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n        string destination = XFS.Path(XFS.Path(@\"c:\\temp\\file.txt\"));\n\n        fileInfo.MoveTo(destination);\n\n        await That(fileInfo.FullName).IsEqualTo(destination);\n        await That(fileInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_SameSourceAndTargetThrowsExceptionIfSourceDoesNotExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n        string destination = XFS.Path(XFS.Path(@\"c:\\temp\\file.txt\"));\n\n        Action action = () => fileInfo.MoveTo(destination);\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_ThrowsExceptionIfSourceDoesNotExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n        string destination = XFS.Path(XFS.Path(@\"c:\\temp\\file2.txt\"));\n\n        Action action = () => fileInfo.MoveTo(destination);\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    [Test]\n    public async Task MockFileInfo_MoveToWithOverwrite_ShouldSucceedWhenTargetAlreadyExists()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo1.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent)},\n            {destFilePath, new MockFileData(sourceFileContent)}\n        });\n\n        fileSystem.FileInfo.New(sourceFilePath).MoveTo(destFilePath, overwrite: true);\n\n        await That(fileSystem.File.ReadAllText(destFilePath)).IsEqualTo(sourceFileContent);\n    }\n#endif\n\n    [Test]\n    public async Task MockFileInfo_MoveToOnlyCaseChanging_ShouldSucceed()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        string destFilePath = XFS.Path(@\"c:\\temp\\FILE.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(\"1\")},\n        });\n\n        var fileInfo = fileSystem.FileInfo.New(sourceFilePath);\n        fileInfo.MoveTo(destFilePath);\n\n        await That(fileInfo.FullName).IsEqualTo(destFilePath);\n        await That(fileInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_CopyTo_ThrowsExceptionIfSourceDoesNotExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var fileInfo = fileSystem.FileInfo.New(XFS.Path(@\"c:\\temp\\file.txt\"));\n        string destination = XFS.Path(XFS.Path(@\"c:\\temp\\file2.txt\"));\n\n        Action action = () => fileInfo.CopyTo(destination);\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_CopyTo_ShouldPreserveMockFileDataFileVersionInfo()\n    {\n        string sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        string destinationPath = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var expectedFileVersionInfo = new MockFileVersionInfo(\n            sourcePath,\n            fileVersion: \"1.2.3.4\",\n            productVersion: \"5.6.7-beta\",\n            fileDescription: \"Demo file\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { sourcePath, new MockFileData(\"Demo text content\") { FileVersionInfo = expectedFileVersionInfo } }\n        });\n\n        fileSystem.FileInfo.New(sourcePath).CopyTo(destinationPath);\n\n        var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);\n\n        await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo);\n        await That(fileVersionInfo.FileVersion).IsEqualTo(\"1.2.3.4\");\n        await That(fileVersionInfo.ProductVersion).IsEqualTo(\"5.6.7-beta\");\n        await That(fileVersionInfo.FileDescription).IsEqualTo(\"Demo file\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_MoveTo_ShouldPreserveMockFileDataFileVersionInfo()\n    {\n        string sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        string destinationPath = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var expectedFileVersionInfo = new MockFileVersionInfo(\n            sourcePath,\n            fileVersion: \"1.2.3.4\",\n            productVersion: \"5.6.7-beta\",\n            fileDescription: \"Demo file\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { sourcePath, new MockFileData(\"Demo text content\") { FileVersionInfo = expectedFileVersionInfo } }\n        });\n\n        fileSystem.FileInfo.New(sourcePath).MoveTo(destinationPath);\n\n        var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);\n\n        await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo);\n        await That(fileVersionInfo.FileVersion).IsEqualTo(\"1.2.3.4\");\n        await That(fileVersionInfo.ProductVersion).IsEqualTo(\"5.6.7-beta\");\n        await That(fileVersionInfo.FileDescription).IsEqualTo(\"Demo file\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldPreserveMockFileDataFileVersionInfo()\n    {\n        string sourcePath = XFS.Path(@\"c:\\temp\\file.txt\");\n        string destinationPath = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var expectedFileVersionInfo = new MockFileVersionInfo(\n            sourcePath,\n            fileVersion: \"1.2.3.4\",\n            productVersion: \"5.6.7-beta\",\n            fileDescription: \"Demo file\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { sourcePath, new MockFileData(\"Demo text content\") { FileVersionInfo = expectedFileVersionInfo } },\n            { destinationPath, new MockFileData(\"Demo2 text content\") }\n        });\n\n        fileSystem.FileInfo.New(sourcePath).Replace(destinationPath, null);\n\n        var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);\n\n        await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo);\n        await That(fileVersionInfo.FileVersion).IsEqualTo(\"1.2.3.4\");\n        await That(fileVersionInfo.ProductVersion).IsEqualTo(\"5.6.7-beta\");\n        await That(fileVersionInfo.FileDescription).IsEqualTo(\"Demo file\");\n    }\n\n    [TestCase(@\"..\\..\\..\\c.txt\")]\n    [TestCase(@\"c:\\a\\b\\c.txt\")]\n    [TestCase(@\"c:\\a\\c.txt\")]\n    [TestCase(@\"c:\\c.txt\")]\n    public async Task MockFileInfo_ToString_ShouldReturnOriginalFilePath(string path)\n    {\n        //Arrange\n        var filePath = XFS.Path(path);\n\n        //Act\n        var mockFileInfo = new MockFileInfo(new MockFileSystem(), filePath);\n\n        //Assert\n        await That(mockFileInfo.ToString()).IsEqualTo(filePath);\n    }\n\n\n    /// <summary>\n    /// Normalize, tested with Path.GetFullPath and new FileInfo().FullName;\n    /// </summary>\n    [TestCaseSource(nameof(New_Paths_NormalizePaths_Cases))]\n    public async Task New_Paths_NormalizePaths(string input, string expected)\n    {\n        // Arrange\n        var mockFs = new MockFileSystem();\n\n        // Act\n        var mockFileInfo = mockFs.FileInfo.New(input);\n        var result = mockFileInfo.FullName;\n\n        // Assert\n        await That(result).IsEqualTo(expected);\n    }\n\n    public static IEnumerable<string[]> New_Paths_NormalizePaths_Cases\n    {\n        get\n        {\n            yield return new[] { XFS.Path(@\"c:\\top\\..\\most\\file\"), XFS.Path(@\"c:\\most\\file\") };\n            yield return new[] { XFS.Path(@\"c:\\top\\..\\most\\..\\dir\\file\"), XFS.Path(@\"c:\\dir\\file\") };\n            yield return new[] { XFS.Path(@\"\\file\"), XFS.Path(@\"C:\\file\") };\n            yield return new[] { XFS.Path(@\"c:\\top\\../..\\most\\file\"), XFS.Path(@\"c:\\most\\file\") };\n        }\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldReplaceFileContents()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n        var fileInfo1 = fileSystem.FileInfo.New(path1);\n        var fileInfo2 = fileSystem.FileInfo.New(path2);\n\n        // Act\n        fileInfo1.Replace(path2, null);\n\n        await That(fileInfo2.OpenText().ReadToEnd()).IsEqualTo(\"1\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldCreateBackup()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var path3 = XFS.Path(@\"c:\\temp\\file3.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n        var fileInfo1 = fileSystem.FileInfo.New(path1);\n        var fileInfo3 = fileSystem.FileInfo.New(path3);\n\n        // Act\n        fileInfo1.Replace(path2, path3);\n\n        await That(fileInfo3.OpenText().ReadToEnd()).IsEqualTo(\"2\");\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldThrowIfDirectoryOfBackupPathDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var path3 = XFS.Path(@\"c:\\temp\\subdirectory\\file3.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n        var fileInfo1 = fileSystem.FileInfo.New(path1);\n\n        // Act\n        await That(() => fileInfo1.Replace(path2, path3)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldReturnDestinationFileInfo()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n        var fileInfo1 = fileSystem.FileInfo.New(path1);\n        var fileInfo2 = fileSystem.FileInfo.New(path2);\n\n        // Act\n        var result = fileInfo1.Replace(path2, null);\n\n        await That(result.FullName).IsEqualTo(fileInfo2.FullName);\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldThrowIfSourceFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path2, new MockFileData(\"1\"));\n        var fileInfo = fileSystem.FileInfo.New(path1);\n\n        await That(() => fileInfo.Replace(path2, null)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Replace_ShouldThrowIfDestinationFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        var fileInfo = fileSystem.FileInfo.New(path1);\n\n        await That(() => fileInfo.Replace(path2, null)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Exists_ShouldReturnCachedData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var fileInfo = fileSystem.FileInfo.New(path1);\n\n        // Act\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n\n        // Assert\n        await That(fileInfo.Exists).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var fileInfo = fileSystem.FileInfo.New(path1);\n\n        // Act\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileInfo.Refresh();\n\n        // Assert\n        await That(fileInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists()\n    {\n        IFileSystem fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\temp\\file1.txt\");\n        IFileInfo fileInfo = fileSystem.FileInfo.New(path);\n\n        // Act\n        fileInfo.Create().Dispose();\n\n        // Assert\n        var result = fileInfo.Exists;\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists()\n    {\n        IFileSystem fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\temp\\file1.txt\");\n        IFileInfo fileInfo = fileSystem.FileInfo.New(path);\n\n        // Act\n        fileInfo.CreateText().Dispose();\n\n        // Assert\n        await That(fileInfo.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Delete_ShouldUpdateCachedDataAndReturnFalseForExists()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\temp\\file1.txt\");\n        IFileInfo fileInfo = fileSystem.FileInfo.New(path);\n\n        // Act\n        fileInfo.Delete();\n\n        // Assert\n        await That(fileInfo.Exists).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFileInfo_Delete_ShouldThrowIfFileAccessShareHasNoWriteOrDeleteAccess()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(\n            @\"c:\\bar\\foo.txt\",\n            new MockFileData(\"text contents\") { AllowedFileShare = FileShare.None });\n\n        var fi = fileSystem.FileInfo.New(@\"c:\\bar\\foo.txt\");\n\n        await That(() => fi.Delete()).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastAccessTimeUtcWithUnspecifiedDateTimeKind_ShouldSetLastAccessTimeUtcOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            LastAccessTimeUtc = date\n        };\n\n        await That(fileInfo.LastAccessTimeUtc).IsEqualTo(date);\n        await That(fileInfo.LastAccessTimeUtc.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastAccessTimeWithUnspecifiedDateTimeKind_ShouldSetLastAccessTimeOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            LastAccessTime = date\n        };\n\n        await That(fileInfo.LastAccessTime).IsEqualTo(date);\n        await That(fileInfo.LastAccessTime.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTimeUtcWithUnspecifiedDateTimeKind_ShouldSetCreationTimeUtcOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            CreationTimeUtc = date\n        };\n\n        await That(fileInfo.CreationTimeUtc).IsEqualTo(date);\n        await That(fileInfo.CreationTimeUtc.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n\n    [Test]\n    public async Task MockFileInfo_CreationTimeWithUnspecifiedDateTimeKind_ShouldSetCreationTimeOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            CreationTime = date\n        };\n\n        await That(fileInfo.CreationTime).IsEqualTo(date);\n        await That(fileInfo.CreationTime.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTimeUtcWithUnspecifiedDateTimeKind_ShouldSetLastWriteTimeUtcOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            LastWriteTimeUtc = date\n        };\n\n        await That(fileInfo.LastWriteTimeUtc).IsEqualTo(date);\n        await That(fileInfo.LastWriteTimeUtc.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n\n    [Test]\n    public async Task MockFileInfo_LastWriteTimeWithUnspecifiedDateTimeKind_ShouldSetLastWriteTimeOfFileInFileSystem()\n    {\n        var date = DateTime.SpecifyKind(DateTime.Now.AddHours(-4), DateTimeKind.Unspecified);\n        var fileSystem = new MockFileSystem();\n        fileSystem.Directory.CreateDirectory(@\"c:\\test\");\n        fileSystem.File.WriteAllText(@\"c:\\test\\a.txt\", \"Demo text content\");\n        var fileInfo = new MockFileInfo(fileSystem, @\"c:\\test\\a.txt\")\n        {\n            LastWriteTime = date\n        };\n\n        await That(fileInfo.LastWriteTime).IsEqualTo(date);\n        await That(fileInfo.LastWriteTime.Kind).IsNotEqualTo(DateTimeKind.Unspecified);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileLockTests.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing NUnit.Framework;\nusing NUnit.Framework.Constraints;\nusing XFS = MockUnixSupport;\nclass MockFileLockTests\n{\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrows()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)).Throws<IOException>();\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareReadDoesNotThrowOnRead()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Read }}\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)).DoesNotThrow();\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareReadThrowsOnWrite()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Read }}\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open, FileAccess.Write, FileShare.Read)).Throws<IOException>();\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareWriteThrowsOnRead()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Write }}\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.Read)).Throws<IOException>();\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareWriteDoesNotThrowOnWrite()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Write }}\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open, FileAccess.Write, FileShare.Read)).DoesNotThrow();\n    }\n\n\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnOpenRead()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.OpenRead(filepath)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnWriteAllLines()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.WriteAllLines(filepath, new string[] { \"hello\", \"world\" })).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnReadAllLines()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.ReadAllLines(filepath)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnReadAllText()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.ReadAllText(filepath)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnReadAllBytes()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.ReadAllBytes(filepath)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsOnAppendLines()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.AppendAllLines(filepath, new string[] { \"hello\", \"world\" })).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsFileMove()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        string target = XFS.Path(@\"c:\\something\\does\\notexist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.Move(filepath, target)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo(\"The process cannot access the file because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareDeleteDoesNotThrowFileMove()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        string target = XFS.Path(@\"c:\\something\\does\\notexist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Delete }}\n        });\n\n        await That(() => filesystem.File.Move(filepath, target)).DoesNotThrow();\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareNoneThrowsDelete()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.None }}\n        });\n\n        var exception = await That(() => filesystem.File.Delete(filepath)).Throws<IOException>();\n        await That(exception.Message).IsEqualTo($\"The process cannot access the file '{filepath}' because it is being used by another process.\");\n    }\n    [Test]\n    public async Task MockFile_Lock_FileShareDeleteDoesNotThrowDelete()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") { AllowedFileShare = FileShare.Delete }}\n        });\n\n        await That(() => filesystem.File.Delete(filepath)).DoesNotThrow();\n    }\n\n    private static IResolveConstraint IOException() => Is.TypeOf<IOException>().And.Property(\"HResult\").EqualTo(unchecked((int)0x80070020));\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileMoveTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\nusing Linq;\nusing NUnit.Framework;\nusing XFS = MockUnixSupport;\n\npublic class MockFileMoveTests\n{\n    [Test]\n    public async Task MockFile_Move_ShouldMoveFileWithinMemoryFileSystem()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent)},\n            {XFS.Path(@\"c:\\somethingelse\\dummy.txt\"), new MockFileData(new byte[] {0})}\n        });\n\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo1.txt\");\n\n        fileSystem.File.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.FileExists(destFilePath)).IsTrue();\n        await That(fileSystem.GetFile(destFilePath).TextContents).IsEqualTo(sourceFileContent);\n        await That(fileSystem.FileExists(sourceFilePath)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Move_WithReadOnlyAttribute_ShouldMoveFile()\n    {\n        var sourceFilePath = @\"c:\\foo.txt\";\n        var destFilePath = @\"c:\\bar.txt\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(sourceFilePath, \"this is some content\");\n        fileSystem.File.SetAttributes(sourceFilePath, FileAttributes.ReadOnly);\n\n        fileSystem.File.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.File.Exists(destFilePath)).IsTrue();\n        await That(fileSystem.File.Exists(sourceFilePath)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Move_SameSourceAndTargetIsANoOp()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent)},\n            {XFS.Path(@\"c:\\somethingelse\\dummy.txt\"), new MockFileData(new byte[] {0})}\n        });\n\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo.txt\");\n\n        fileSystem.File.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.FileExists(destFilePath)).IsTrue();\n        await That(fileSystem.GetFile(destFilePath).TextContents).IsEqualTo(sourceFileContent);\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowIOExceptionWhenTargetAlreadyExists()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo1.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent)},\n            {destFilePath, new MockFileData(sourceFileContent)}\n        });\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<IOException>();\n\n        await That(exception.Message).IsEqualTo(\"A file can not be created if it already exists.\");\n    }\n\n#if FEATURE_FILE_MOVE_WITH_OVERWRITE\n    [Test]\n    public async Task MockFile_MoveWithOverwrite_ShouldSucceedWhenTargetAlreadyExists()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo1.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent)},\n            {destFilePath, new MockFileData(sourceFileContent)}\n        });\n\n        fileSystem.File.Move(sourceFilePath, destFilePath, overwrite: true);\n\n        await That(fileSystem.File.ReadAllText(destFilePath)).IsEqualTo(sourceFileContent);\n    }\n#endif\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentNullExceptionWhenSourceIsNull_Message()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(null, destFilePath)).Throws<ArgumentNullException>();\n\n        await That(exception.Message).StartsWith(\"File name cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentNullExceptionWhenSourceIsNull_ParamName()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(null, destFilePath)).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"sourceFileName\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenSourceFileNameContainsInvalidChars_Message()\n    {\n        var destFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n        var excludeChars = Shared.SpecialInvalidPathChars(fileSystem);\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidFileNameChars().Except(excludeChars))\n        {\n            var sourceFilePath = @\"c:\\something\\demo.txt\" + invalidChar;\n\n            var exception =\n                await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenSourcePathContainsInvalidChars_Message()\n    {\n        var destFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidPathChars())\n        {\n            var sourceFilePath = @\"c:\\some\" + invalidChar + @\"thing\\demo.txt\";\n\n            var exception =\n                await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenTargetPathContainsInvalidChars_Message()\n    {\n        var sourceFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidPathChars())\n        {\n            var destFilePath = @\"c:\\some\" + invalidChar + @\"thing\\demo.txt\";\n\n            var exception =\n                await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenTargetFileNameContainsInvalidChars_Message()\n    {\n        var sourceFilePath = @\"c:\\something\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n        var excludeChars = Shared.SpecialInvalidPathChars(fileSystem);\n\n        foreach (var invalidChar in fileSystem.Path.GetInvalidFileNameChars().Except(excludeChars))\n        {\n            var destFilePath = @\"c:\\something\\demo.txt\" + invalidChar;\n\n            var exception =\n                await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n            await That(exception.Message).IsEqualTo(\"Illegal characters in path.\")\n                .Because(string.Format(\"Testing char: [{0:c}] \\\\{1:X4}\", invalidChar, (int)invalidChar));\n        }\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Move_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidUseOfDriveSeparator()\n    {\n        var badSourcePath = @\"C::\\something\\demo.txt\";\n        var destinationPath = @\"C:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(badSourcePath, destinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Move_ShouldThrowNotSupportedExceptionWhenSourcePathContainsInvalidDriveLetter()\n    {\n        var badSourcePath = @\"0:\\something\\demo.txt\";\n        var destinationPath = @\"C:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(badSourcePath, destinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Move_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidUseOfDriveSeparator()\n    {\n        var sourcePath = @\"C:\\something\\demo.txt\";\n        var badDestinationPath = @\"C:\\elsewhere:\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(sourcePath, badDestinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Move_ShouldThrowNotSupportedExceptionWhenDestinationPathContainsInvalidDriveLetter()\n    {\n        var sourcePath = @\"C:\\something\\demo.txt\";\n        var badDestinationPath = @\"^:\\elsewhere\\demo.txt\";\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(sourcePath, badDestinationPath);\n\n        await That(action).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Move_CaseOnlyRename_ShouldChangeCase()\n    {\n        var fileSystem = new MockFileSystem();\n        string sourceFilePath = @\"c:\\temp\\demo.txt\";\n        string destFilePath = @\"c:\\temp\\DEMO.TXT\";\n        string sourceFileContent = \"content\";\n        fileSystem.File.WriteAllText(sourceFilePath, sourceFileContent);\n\n        fileSystem.File.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.File.Exists(destFilePath)).IsTrue();\n        await That(fileSystem.File.ReadAllText(destFilePath)).IsEqualTo(sourceFileContent);\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsEmpty_Message()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(string.Empty, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"Empty file name is not legal.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsEmpty_ParamName()\n    {\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(string.Empty, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.ParamName).IsEqualTo(\"sourceFileName\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenSourceIsStringOfBlanks()\n    {\n        string sourceFilePath = \"   \";\n        string destFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentNullExceptionWhenTargetIsNull_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, null)).Throws<ArgumentNullException>();\n\n        await That(exception.Message).StartsWith(\"File name cannot be null.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentNullExceptionWhenTargetIsNull_ParamName()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, null)).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"destFileName\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsStringOfBlanks()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string destFilePath = \"   \";\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsEmpty_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, string.Empty)).Throws<ArgumentException>();\n\n        await That(exception.Message).StartsWith(\"Empty file name is not legal.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowArgumentExceptionWhenTargetIsEmpty_ParamName()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, string.Empty)).Throws<ArgumentException>();\n\n        await That(exception.ParamName).IsEqualTo(\"destFileName\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string destFilePath = XFS.Path(@\"c:\\something\\demo1.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<FileNotFoundException>();\n\n        await That(exception.Message).IsEqualTo(\"Could not find file '\" + XFS.Path(\"c:\\\\something\\\\demo.txt\") + \"'.\");\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowFileNotFoundExceptionWhenSourceDoesNotExist_FileName()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string destFilePath = XFS.Path(@\"c:\\something\\demo1.txt\");\n        var fileSystem = new MockFileSystem();\n\n        var exception = await That(() => fileSystem.File.Move(sourceFilePath, destFilePath)).Throws<FileNotFoundException>();\n\n        await That(exception.FileName).IsEqualTo(XFS.Path(@\"c:\\something\\demo.txt\"));\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowDirectoryNotFoundExceptionWhenSourcePathDoesNotExist_Message()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(new byte[] {0})}\n        });\n\n        await That(() => fileSystem.File.Move(sourceFilePath, destFilePath))\n            .Throws<DirectoryNotFoundException>()\n            .WithMessage(@\"Could not find a part of the path*\").AsWildcard();\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowExceptionWhenSourceDoesNotExist()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(sourceFilePath, XFS.Path(@\"c:\\something\\demo2.txt\"));\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowExceptionWhenSourceDoesNotExist_EvenWhenCopyingToItself()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.Move(sourceFilePath, XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldRetainMetadata()\n    {\n        string sourceFilePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string sourceFileContent = \"this is some content\";\n        DateTimeOffset creationTime = DateTimeOffset.Now;\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {sourceFilePath, new MockFileData(sourceFileContent){CreationTime = creationTime}},\n            {XFS.Path(@\"c:\\somethingelse\\dummy.txt\"), new MockFileData(new byte[] {0})}\n        });\n\n        string destFilePath = XFS.Path(@\"c:\\somethingelse\\demo1.txt\");\n\n        fileSystem.File.Move(sourceFilePath, destFilePath);\n\n        await That(fileSystem.File.GetCreationTimeUtc(destFilePath)).IsEqualTo(creationTime.UtcDateTime);\n    }\n\n    [Test]\n    public async Task MockFile_Move_ShouldThrowExceptionWhenSourceFileShare_Is_Not_Delete()\n    {\n        string sourceFileReadDelete = XFS.Path(@\"c:\\something\\IHaveReadDelete.txt\");\n        string sourceFileDelete = XFS.Path(@\"c:\\something\\IHaveDelete.txt\");\n        string sourceFileRead = XFS.Path(@\"c:\\something\\IHaveRead.txt\");\n        string sourceFileNone = XFS.Path(@\"c:\\something\\IHaveNone.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { sourceFileDelete, new MockFileData(\"\") { AllowedFileShare = FileShare.Delete } },\n            { sourceFileRead, new MockFileData(\"\") { AllowedFileShare = FileShare.Read } },\n            { sourceFileReadDelete, new MockFileData(\"\") { AllowedFileShare = FileShare.Delete | FileShare.Read } },\n            { sourceFileNone, new MockFileData(\"\") { AllowedFileShare = FileShare.None } },\n        });\n\n        await AssertMoveSuccess(sourceFileReadDelete);\n        await AssertMoveSuccess(sourceFileDelete);\n        await AssertMoveThrowsIOException(sourceFileRead);\n        await AssertMoveThrowsIOException(sourceFileNone);\n\n        async Task AssertMoveThrowsIOException(string sourceFile)\n        {\n            var target = sourceFile + \".moved\";\n            await That(() => fileSystem.File.Move(sourceFile, target)).Throws<IOException>();\n        }\n\n        async Task AssertMoveSuccess(string sourceFile)\n        {\n            var target = sourceFile + \".moved\";\n            fileSystem.File.Move(sourceFile, target);\n            await That(fileSystem.File.Exists(target)).IsTrue();\n        }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileOpenTests.cs",
    "content": "using System.Threading.Tasks;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing NUnit.Framework;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileOpenTests\n{\n    [Test]\n    public async Task MockFile_Open_ThrowsOnCreateNewWithExistingFile()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\already\\exists.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        await That(() => filesystem.File.Open(filepath, FileMode.CreateNew)).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockFile_Open_ThrowsOnOpenWithMissingFile()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Open)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Open_ThrowsOnTruncateWithMissingFile()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n\n        await That(() => filesystem.File.Open(filepath, FileMode.Truncate)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Open_CreatesNewFileFileOnCreate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        filesystem.AddDirectory(XFS.Path(@\"c:\\something\\doesnt\"));\n\n        var stream = filesystem.File.Open(filepath, FileMode.Create);\n\n        await That(filesystem.File.Exists(filepath)).IsTrue();\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_Open_AllowsReadWriteOnCreate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        filesystem.AddDirectory(XFS.Path(@\"c:\\something\\doesnt\"));\n\n        var stream = filesystem.File.Open(filepath, FileMode.Create);\n\n        await That(stream.CanRead).IsTrue();\n        await That(stream.CanWrite).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFile_Open_CreatesNewFileFileOnCreateNew()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        filesystem.AddDirectory(XFS.Path(@\"c:\\something\\doesnt\"));\n\n        var stream = filesystem.File.Open(filepath, FileMode.CreateNew);\n\n        await That(filesystem.File.Exists(filepath)).IsTrue();\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_Open_OpensExistingFileOnAppend()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        var stream = filesystem.File.Open(filepath, FileMode.Append);\n        var file = filesystem.GetFile(filepath);\n\n        await That(stream.Position).IsEqualTo(file.Contents.Length);\n        await That(stream.Length).IsEqualTo(file.Contents.Length);\n    }\n\n    [Test]\n    public async Task MockFile_Open_OpensExistingFileOnTruncate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        var stream = filesystem.File.Open(filepath, FileMode.Truncate);\n        var file = filesystem.GetFile(filepath);\n\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(0);\n        await That(file.Contents.Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_Open_OpensExistingFileOnOpen()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        var stream = filesystem.File.Open(filepath, FileMode.Open);\n        var file = filesystem.GetFile(filepath);\n\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(file.Contents.Length);\n\n        byte[] data;\n        using (var br = new BinaryReader(stream))\n            data = br.ReadBytes((int)stream.Length);\n\n        await That(data).IsEqualTo(file.Contents);\n    }\n\n    [Test]\n    public async Task MockFile_Open_OpensExistingFileOnOpenOrCreate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        var stream = filesystem.File.Open(filepath, FileMode.OpenOrCreate);\n        var file = filesystem.GetFile(filepath);\n\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(file.Contents.Length);\n\n        byte[] data;\n        using (var br = new BinaryReader(stream))\n            data = br.ReadBytes((int)stream.Length);\n\n        await That(data).IsEqualTo(file.Contents);\n    }\n\n    [Test]\n    public async Task MockFile_Open_CreatesNewFileOnOpenOrCreate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        filesystem.AddDirectory(XFS.Path(@\"c:\\something\\doesnt\"));\n\n        var stream = filesystem.File.Open(filepath, FileMode.OpenOrCreate);\n\n        await That(filesystem.File.Exists(filepath)).IsTrue();\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_Open_OverwritesExistingFileOnCreate()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here\") }\n        });\n\n        var stream = filesystem.File.Open(filepath, FileMode.Create);\n        var file = filesystem.GetFile(filepath);\n\n        await That(stream.Position).IsEqualTo(0);\n        await That(stream.Length).IsEqualTo(0);\n        await That(file.Contents.Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_OpenText_ShouldRetainLastWriteTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        string filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(@\"I'm here\");\n        var lastWriteTime = new DateTime(2012, 03, 21);\n        file.LastWriteTime = lastWriteTime;\n        fs.AddFile(filepath, file);\n\n        // Act\n        using (var reader = fs.File.OpenText(filepath))\n        {\n            reader.ReadLine();\n        }\n\n        // Assert\n        await That(fs.FileInfo.New(filepath).LastWriteTime).IsEqualTo(lastWriteTime);\n    }\n\n    [Test]\n    public async Task MockFile_OpenText_ShouldUpdateLastAccessTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        string filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(@\"I'm here\");\n        var lastAccessTime = new DateTime(2012, 03, 21);\n        file.LastAccessTime = lastAccessTime;\n        fs.AddFile(filepath, file);\n\n        // Act\n        using (var reader = fs.File.OpenText(filepath))\n        {\n            reader.ReadLine();\n        }\n\n        // Assert\n        await That(DateTime.Now - fs.FileInfo.New(filepath).LastAccessTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n    }\n\n    [Test]\n    public async Task MockFile_Read_ShouldRetainCreationTimeAndUpdateLastAccessTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        var filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(new byte[] { 1, 2, 3 });\n        var lastAccessTime = new DateTime(2012, 03, 21);\n        file.LastAccessTime = lastAccessTime;\n        var creationTime = new DateTime(2012, 03, 20);\n        file.CreationTime = creationTime;\n        fs.AddFile(filepath, file);\n\n        var fi = fs.FileInfo.New(filepath);\n        var stream = fi.OpenRead();\n        var buffer = new byte[16];\n#pragma warning disable CA2022\n        stream.Read(buffer, 0, buffer.Length);\n#pragma warning restore CA2022\n        fi.Refresh();\n        // Assert\n        await That(fi.CreationTime).IsEqualTo(creationTime);\n        await That(DateTime.Now - fi.LastAccessTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n    }\n\n    [Test]\n    public async Task MockFile_ReadAsync_ShouldRetainCreationTimeAndUpdateLastAccessTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        var filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(new byte[] { 1, 2, 3 });\n        var lastAccessTime = new DateTime(2012, 03, 21);\n        file.LastAccessTime = lastAccessTime;\n        var creationTime = new DateTime(2012, 03, 20);\n        file.CreationTime = creationTime;\n        fs.AddFile(filepath, file);\n\n        var fi = fs.FileInfo.New(filepath);\n        var stream = fi.OpenRead();\n        var buffer = new byte[16];\n#pragma warning disable CA1835\n#pragma warning disable CA2022\n        // ReSharper disable once MustUseReturnValue\n        await stream.ReadAsync(buffer, 0, buffer.Length);\n#pragma warning restore CA2022\n#pragma warning restore CA1835\n        fi.Refresh();\n        // Assert\n        await That(fi.CreationTime).IsEqualTo(creationTime);\n        await That(DateTime.Now - fi.LastAccessTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n    }\n\n    [Test]\n    public async Task MockFile_Write_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        var filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(new byte[] { 1, 2, 3 });\n        var lastAccessTime = new DateTime(2012, 03, 21);\n        file.LastAccessTime = lastAccessTime;\n        var creationTime = new DateTime(2012, 03, 20);\n        file.CreationTime = creationTime;\n        fs.AddFile(filepath, file);\n\n        var fi = fs.FileInfo.New(filepath);\n        var stream = fi.OpenWrite();\n        var buffer = new byte[16];\n        stream.Write(buffer, 0, buffer.Length);\n        fi.Refresh();\n        // Assert\n        await That(fi.CreationTime).IsEqualTo(creationTime);\n        await That(DateTime.Now - fi.LastAccessTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n        await That(DateTime.Now - fi.LastWriteTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n    }\n\n    [Test]\n    public async Task MockFile_WriteAsync_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        var filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(new byte[] { 1, 2, 3 });\n        var lastAccessTime = new DateTime(2012, 03, 21);\n        file.LastAccessTime = lastAccessTime;\n        var creationTime = new DateTime(2012, 03, 20);\n        file.CreationTime = creationTime;\n        fs.AddFile(filepath, file);\n\n        var fi = fs.FileInfo.New(filepath);\n        var stream = fi.OpenWrite();\n        var buffer = new byte[16];\n        await stream.WriteAsync(buffer, 0, buffer.Length);\n        fi.Refresh();\n        // Assert\n        await That(fi.CreationTime).IsEqualTo(creationTime);\n        await That(DateTime.Now - fi.LastAccessTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n        await That(DateTime.Now - fi.LastWriteTime).IsLessThanOrEqualTo(TimeSpan.FromSeconds(1));\n    }\n\n    [Test]\n    public async Task MockFile_OpenText_ShouldRetainCreationTime()\n    {\n        // Arrange\n        var fs = new MockFileSystem();\n        string filepath = XFS.Path(@\"C:\\TestData\\test.txt\");\n        var file = new MockFileData(@\"I'm here\");\n        var creationTime = new DateTime(2012, 03, 21);\n        file.CreationTime = creationTime;\n        fs.AddFile(filepath, file);\n\n        // Act\n        using (var reader = fs.File.OpenText(filepath))\n        {\n            reader.ReadLine();\n        }\n\n        // Assert\n        await That(fs.FileInfo.New(filepath).CreationTime).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_Open_ShouldThrowDirectoryNotFoundExceptionIfFileModeCreateAndParentPathDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var file = XFS.Path(\"C:\\\\path\\\\NotFound.ext\");\n\n        // Act\n        Action action = () => fileSystem.File.Open(file, FileMode.Create);\n\n        // Assert\n        var exception = await That(action).Throws<DirectoryNotFoundException>();\n        await That(exception.Message).StartsWith(\"Could not find a part of the path\");\n    }\n\n    [Test]\n    public async Task MockFile_OpenWrite_ShouldWorkWithRelativePath()\n    {\n        var file = \"file.txt\";\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.File.OpenWrite(file).Close();\n\n        await That(fileSystem.File.Exists(file)).IsTrue();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllBytesTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\nusing System.Threading.Tasks;\nusing System.Threading;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileReadAllBytesTests\n{\n    [Test]\n    public async Task MockFile_ReadAllBytes_ShouldReturnOriginalByteData()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        var result = file.ReadAllBytes(XFS.Path(@\"c:\\something\\other.gif\"));\n\n        await That(result)\n            .IsEqualTo(new byte[] { 0x21, 0x58, 0x3f, 0xa9 });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytes_ShouldReturnDataSavedByWriteAllBytes()\n    {\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        var fileContent = new byte[] { 1, 2, 3, 4 };\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        fileSystem.File.WriteAllBytes(path, fileContent);\n\n        await That(fileSystem.File.ReadAllBytes(path)).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytes_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var file = new MockFile(fileSystem);\n\n        Action action = () => file.ReadAllBytes(@\"C:\\a.txt\");\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytes_ShouldTolerateAltDirectorySeparatorInPath()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\" + fileSystem.Path.DirectorySeparatorChar + \"test.dat\");\n        var altPath = XFS.Path(\"C:\" + fileSystem.Path.AltDirectorySeparatorChar + \"test.dat\");\n        var data = new byte[] { 0x12, 0x34, 0x56, 0x78 };\n\n        fileSystem.AddFile(path, new MockFileData(data));\n\n        await That(fileSystem.File.ReadAllBytes(altPath)).IsEqualTo(data);\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytes_ShouldReturnANewCopyOfTheFileContents()\n    {\n        var path = XFS.Path(@\"c:\\something\\demo.bin\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(new byte[] { 1, 2, 3, 4 }) }\n        });\n\n        var firstRead = fileSystem.File.ReadAllBytes(path);\n\n        var secondRead = fileSystem.File.ReadAllBytes(path);\n\n        for (int i = 0; i < firstRead.Length; i++)\n        {\n            firstRead[i] += 1;\n        }\n\n        await That(firstRead).IsNotEqualTo(secondRead);\n    }\n\n#if FEATURE_ASYNC_FILE\n    [Test]\n    public async Task MockFile_ReadAllBytesAsync_ShouldReturnOriginalByteData()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        var result = await file.ReadAllBytesAsync(XFS.Path(@\"c:\\something\\other.gif\"));\n\n        await That(result)\n            .IsEqualTo(new byte[] { 0x21, 0x58, 0x3f, 0xa9 });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytesAsync_ShouldReturnDataSavedByWriteAllBytes()\n    {\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        var fileContent = new byte[] { 1, 2, 3, 4 };\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        fileSystem.File.WriteAllBytes(path, fileContent);\n\n        await That(await fileSystem.File.ReadAllBytesAsync(path)).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytesAsync_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var file = new MockFile(fileSystem);\n\n        Func<Task> action = async () => await file.ReadAllBytesAsync(@\"C:\\a.txt\");\n\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytesAsync_ShouldThrowOperationCanceledExceptionIfCanceled()\n    {\n        var fileSystem = new MockFileSystem();\n\n        Func<Task> action = async () =>\n            await fileSystem.File.ReadAllBytesAsync(@\"C:\\a.txt\", new CancellationToken(canceled: true));\n\n        await That(action).Throws<OperationCanceledException>();\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllBytesAsync_ShouldTolerateAltDirectorySeparatorInPath()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\" + fileSystem.Path.DirectorySeparatorChar + \"test.dat\");\n        var altPath = XFS.Path(\"C:\" + fileSystem.Path.AltDirectorySeparatorChar + \"test.dat\");\n        var data = new byte[] { 0x12, 0x34, 0x56, 0x78 };\n\n        fileSystem.AddFile(path, new MockFileData(data));\n\n        await That(await fileSystem.File.ReadAllBytesAsync(altPath)).IsEqualTo(data);\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadAllLinesTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\nusing Collections.Specialized;\nusing Threading;\nusing Threading.Tasks;\n\nusing NUnit.Framework;\n\nusing Text;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileReadAllLinesTests\n{\n    [Test]\n    public async Task MockFile_ReadAllLines_ShouldReturnOriginalTextData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadAllLines(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(result)\n            .IsEqualTo(new[] { \"Demo\", \"text\", \"content\", \"value\" });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLines_ShouldReturnOriginalDataWithCustomEncoding()\n    {\n        // Arrange\n        string text = \"Hello\\r\\nthere\\rBob\\nBob!\";\n        var encodedText = Encoding.BigEndianUnicode.GetBytes(text);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(encodedText) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadAllLines(XFS.Path(@\"c:\\something\\demo.txt\"), Encoding.BigEndianUnicode);\n\n        // Assert\n        await That(result)\n            .IsEqualTo(new[] { \"Hello\", \"there\", \"Bob\", \"Bob!\" });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLines_NotExistingFile_ThrowsCorrectFileNotFoundException()\n    {\n        var absentFileNameFullPath = XFS.Path(@\"c:\\you surely don't have such file.hope-so\");\n        var mockFileSystem = new MockFileSystem();\n\n        var act = new Action(() =>\n            mockFileSystem.File.ReadAllLines(absentFileNameFullPath)\n        );\n\n        var exception = await That(act).Throws<FileNotFoundException>();\n        await That(exception.FileName).IsEqualTo(absentFileNameFullPath);\n        await That(exception.Message).IsEqualTo(\"Could not find file '\" + absentFileNameFullPath + \"'.\");\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLines_ShouldNotReturnBom()\n    {\n        // Arrange\n        var testFilePath = XFS.Path(@\"c:\\a test file.txt\");\n        const string testText = \"Hello World\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllLines(testFilePath, new[] { testText }, Encoding.UTF8);\n\n        // Act\n        var result = fileSystem.File.ReadAllLines(testFilePath, Encoding.UTF8);\n\n        // Assert\n        await That(result.Length).IsEqualTo(1);\n        await That(result[0]).IsEqualTo(testText);\n    }\n#if FEATURE_ASYNC_FILE\n    [Test]\n    public async Task MockFile_ReadAllLinesAsync_ShouldReturnOriginalTextData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = await file.ReadAllLinesAsync(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(result).IsEqualTo(new[] { \"Demo\", \"text\", \"content\", \"value\" });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLinesAsync_ShouldReturnOriginalDataWithCustomEncoding()\n    {\n        // Arrange\n        string text = \"Hello\\r\\nthere\\rBob\\nBob!\";\n        var encodedText = Encoding.BigEndianUnicode.GetBytes(text);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(encodedText) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = await file.ReadAllLinesAsync(XFS.Path(@\"c:\\something\\demo.txt\"), Encoding.BigEndianUnicode);\n\n        // Assert\n        await That(result).IsEqualTo(new[] { \"Hello\", \"there\", \"Bob\", \"Bob!\" });\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLinesAsync_ShouldThrowOperationCanceledExceptionIfCanceled()\n    {\n        var fileSystem = new MockFileSystem();\n\n        Func<Task> action = async () =>\n            await fileSystem.File.ReadAllLinesAsync(@\"C:\\a.txt\", new CancellationToken(canceled: true));\n\n        await That(action).Throws<OperationCanceledException>();\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllLinesAsync_NotExistingFile_ThrowsCorrectFileNotFoundException()\n    {\n        var absentFileNameFullPath = XFS.Path(@\"c:\\you surely don't have such file.hope-so\");\n        var mockFileSystem = new MockFileSystem();\n\n        var act = new Func<Task>(async () =>\n            await mockFileSystem.File.ReadAllLinesAsync(absentFileNameFullPath)\n        );\n\n        var exception = await That(act).Throws<FileNotFoundException>();\n        await That(exception.FileName).IsEqualTo(absentFileNameFullPath);\n        await That(exception.Message).IsEqualTo(\"Could not find file '\" + absentFileNameFullPath + \"'.\");\n    }\n\n#if FEATURE_READ_LINES_ASYNC\n        [Test]\n        public async Task MockFile_ReadLinesAsync_ShouldReturnOriginalTextData()\n        {\n            // Arrange\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n                { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n            });\n\n            var file = new MockFile(fileSystem);\n\n            // Act\n            var enumerable = file.ReadLinesAsync(XFS.Path(@\"c:\\something\\demo.txt\"));\n            List<string> result = new();\n            await foreach (var line in enumerable)\n                result.Add(line);\n\n            // Assert\n            await That(result).IsEqualTo(new[] { \"Demo\", \"text\", \"content\", \"value\" });\n        }\n\n        [Test]\n        public async Task MockFile_ReadLinesAsync_ShouldReturnOriginalDataWithCustomEncoding()\n        {\n            // Arrange\n            string text = \"Hello\\r\\nthere\\rBob\\nBob!\";\n            var encodedText = Encoding.BigEndianUnicode.GetBytes(text);\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(encodedText) }\n            });\n\n            var file = new MockFile(fileSystem);\n\n            // Act\n            var enumerable = file.ReadLinesAsync(XFS.Path(@\"c:\\something\\demo.txt\"), Encoding.BigEndianUnicode);\n            List<string> result = new();\n            await foreach (var line in enumerable)\n                result.Add(line);\n\n            // Assert\n            await That(result).IsEqualTo(new[] { \"Hello\", \"there\", \"Bob\", \"Bob!\" });\n        }\n\n        [Test]\n        public async Task MockFile_ReadLinesAsync_ShouldThrowOperationCanceledExceptionIfCanceled()\n        {\n            var fileSystem = new MockFileSystem();\n\n            Func<Task> action = async () =>\n            {\n                var enumerable = fileSystem.File.ReadLinesAsync(@\"C:\\a.txt\", new CancellationToken(canceled: true));\n                await foreach (var line in enumerable);\n            };\n\n            await That(action).Throws<OperationCanceledException>();\n        }\n\n        [Test]\n        public async Task MockFile_ReadLinesAsync_NotExistingFile_ThrowsCorrectFileNotFoundException()\n        {\n            var absentFileNameFullPath = XFS.Path(@\"c:\\you surely don't have such file.hope-so\");\n            var mockFileSystem = new MockFileSystem();\n\n            Func<Task> action = async () =>\n            {\n                var enumerable = mockFileSystem.File.ReadLinesAsync(absentFileNameFullPath);\n                await foreach (var line in enumerable) ;\n            };\n\n            var exception = await That(action).Throws<FileNotFoundException>();\n            await That(exception.FileName).IsEqualTo(absentFileNameFullPath);\n            await That(exception.Message).IsEqualTo(\"Could not find file '\" + absentFileNameFullPath + \"'.\");\n        }\n#endif\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileReadLinesTests.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing NUnit.Framework;\n\nusing Text;\n\nusing XFS = MockUnixSupport;\n\npublic class MockFileReadLinesTests\n{\n    [Test]\n    public async Task MockFile_ReadLines_ShouldReturnOriginalTextData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadLines(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(result).IsEqualTo(new[] { \"Demo\", \"text\", \"content\", \"value\" });\n    }\n\n    [Test]\n    public async Task MockFile_ReadLines_ShouldReturnOriginalDataWithCustomEncoding()\n    {\n        // Arrange\n        string text = \"Hello\\r\\nthere\\rBob\\nBob!\";\n        var encodedText = Encoding.BigEndianUnicode.GetBytes(text);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(encodedText) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadLines(XFS.Path(@\"c:\\something\\demo.txt\"), Encoding.BigEndianUnicode);\n\n        // Assert\n        await That(result).IsEqualTo(new[] { \"Hello\", \"there\", \"Bob\", \"Bob!\" });\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetAccessControlTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\nusing System.Runtime.Versioning;\nusing System.Security.AccessControl;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\n[WindowsOnly(WindowsSpecifics.AccessControlLists)]\n[SupportedOSPlatform(\"windows\")]\npublic class MockFileSetAccessControlTests\n{\n    [TestCase(\" \")]\n    [TestCase(\"   \")]\n    public async Task MockFile_SetAccessControl_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var fileSecurity = new FileSecurity();\n\n        // Act\n        Action action = () => fileSystem.File.SetAccessControl(path, fileSecurity);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_SetAccessControl_ShouldThrowFileNotFoundExceptionIfFileDoesNotExistInMockData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var expectedFileName = XFS.Path(@\"c:\\a.txt\");\n        var fileSecurity = new FileSecurity();\n\n        // Act\n        Action action = () => fileSystem.File.SetAccessControl(expectedFileName, fileSecurity);\n\n        // Assert\n        var exception = await That(action).Throws<FileNotFoundException>();\n        await That(exception.FileName).IsEqualTo(expectedFileName);\n    }\n\n    [Test]\n    public async Task MockFile_SetAccessControl_ShouldSetAccessControlOfFileData()\n    {\n        // Arrange\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileData = new MockFileData(\"Test content\");\n\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { filePath, fileData }\n        });\n\n        // Act\n        var expectedAccessControl = new FileSecurity();\n        expectedAccessControl.SetAccessRuleProtection(false, false);\n        fileSystem.File.SetAccessControl(filePath, expectedAccessControl);\n\n        // Assert\n        var accessControl = fileSystem.File.GetAccessControl(filePath);\n        await That(accessControl).IsEqualTo(expectedAccessControl);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetAttributesTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileSetAttributesTests\n{\n    [Test]\n    public async Task MockFile_SetAttributes_ShouldSetAttributesOnFile()\n    {\n        var path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var filedata = new MockFileData(\"test\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {path, filedata},\n        });\n\n        fileSystem.File.SetAttributes(path, FileAttributes.Hidden);\n\n        var attributes = fileSystem.File.GetAttributes(path);\n        await That(attributes).IsEqualTo(FileAttributes.Hidden);\n    }\n\n    [Test]\n    public async Task MockFile_SetAttributes_ShouldSetAttributesOnDirectory()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"c:\\something\");\n        fileSystem.AddDirectory(path);\n        var directoryInfo = fileSystem.DirectoryInfo.New(path);\n        directoryInfo.Attributes = FileAttributes.Directory | FileAttributes.Normal;\n\n        fileSystem.File.SetAttributes(path, FileAttributes.Directory | FileAttributes.Hidden);\n\n        var attributes = fileSystem.File.GetAttributes(path);\n        await That(attributes).IsEqualTo(FileAttributes.Directory | FileAttributes.Hidden);\n    }\n\n    [Test]\n    [TestCase(\"\", FileAttributes.Normal)]\n    [TestCase(\"   \", FileAttributes.Normal)]\n    public async Task MockFile_SetAttributes_ShouldThrowArgumentExceptionIfPathContainsOnlyWhitespaces(string path, FileAttributes attributes)\n    {\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.SetAttributes(path, attributes);\n\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_SetAttributes_ShouldThrowFileNotFoundExceptionIfMissingDirectory()\n    {\n        var path = XFS.Path(@\"C:\\something\");\n        var attributes = FileAttributes.Normal;\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.SetAttributes(path, attributes);\n\n        var exception = await That(action).Throws<FileNotFoundException>();\n        await That(exception.FileName).IsEqualTo(path);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSetUnixFileModeTests.cs",
    "content": "#if FEATURE_UNIX_FILE_MODE\nusing System.Runtime.Versioning;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests\n{\n    using Collections.Generic;\n\n    using NUnit.Framework;\n\n    using XFS = MockUnixSupport;\n\n    [UnsupportedOSPlatform(\"windows\")]\n    [UnixOnly(\"This feature is not supported on Windows.\")]\n    public class MockFileSetUnixFileModeTests\n    {\n        [Test]\n        public async Task MockFile_SetUnixFileMode_ShouldSetSpecifiedAccessMode([Values] UnixFileMode unixFileMode)\n        {\n            // Arrange\n            var mockFileData = new MockFileData(\"Demo text content\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"C:\\something\\some.txt\"), mockFileData }\n            });\n\n            // Act\n            fileSystem.File.SetUnixFileMode(XFS.Path(@\"C:\\something\\some.txt\"), unixFileMode);\n\n            // Assert\n            await That(mockFileData.UnixMode).IsEqualTo(unixFileMode);\n        }\n        \n        [TestCase(UnixFileMode.UserRead | UnixFileMode.GroupRead | UnixFileMode.OtherRead)]\n        [TestCase(UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute)]\n        [TestCase(UnixFileMode.UserExecute | UnixFileMode.OtherWrite | UnixFileMode.GroupRead)]\n        public async Task MockFile_SetUnixFileMode_ShouldSetSpecifiedAccessModeFlags(UnixFileMode unixFileMode)\n        {\n            // Arrange\n            var mockFileData = new MockFileData(\"Demo text content\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { XFS.Path(@\"C:\\something\\some.txt\"), mockFileData }\n            });\n\n            // Act\n            fileSystem.File.SetUnixFileMode(XFS.Path(@\"C:\\something\\some.txt\"), unixFileMode);\n\n            // Assert\n            await That(mockFileData.UnixMode).IsEqualTo(unixFileMode);\n        }\n    }\n}\n#endif"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamFactoryTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing NUnit.Framework;\nusing System.Text;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileStreamFactoryTests\n{\n    [Test]\n    [TestCase(FileMode.Create)]\n    [TestCase(FileMode.Append)]\n    public async Task MockFileStreamFactory_CreateForExistingFile_ShouldReturnStream(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\existing.txt\", string.Empty }\n        });\n\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n\n        // Act\n        var result = fileStreamFactory.New(@\"c:\\existing.txt\", fileMode, FileAccess.Write);\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    [TestCase(FileMode.Create)]\n    [TestCase(FileMode.Append)]\n    public async Task MockFileStreamFactory_CreateForNonExistingFile_ShouldReturnStream(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n\n        // Act\n        var result = fileStreamFactory.New(XFS.Path(@\"c:\\not_existing.txt\"), fileMode, FileAccess.Write);\n\n        // Assert\n        await That(result).IsNotNull();\n    }\n\n    [Test]\n    [TestCase(FileMode.Create)]\n    public async Task MockFileStreamFactory_CreateForAnExistingFile_ShouldReplaceFileContents(FileMode fileMode)\n    {\n        var fileSystem = new MockFileSystem();\n        string FilePath = XFS.Path(\"C:\\\\File.txt\");\n\n        using (var stream = fileSystem.FileStream.New(FilePath, fileMode, System.IO.FileAccess.Write))\n        {\n            var data = Encoding.UTF8.GetBytes(\"1234567890\");\n            stream.Write(data, 0, data.Length);\n        }\n\n        using (var stream = fileSystem.FileStream.New(FilePath, fileMode, System.IO.FileAccess.Write))\n        {\n            var data = Encoding.UTF8.GetBytes(\"AAAAA\");\n            stream.Write(data, 0, data.Length);\n        }\n\n        var text = fileSystem.File.ReadAllText(FilePath);\n        await That(text).IsEqualTo(\"AAAAA\");\n    }\n\n    [Test]\n    [TestCase(FileMode.Create)]\n    [TestCase(FileMode.Open)]\n    [TestCase(FileMode.CreateNew)]\n    public async Task MockFileStreamFactory_CreateInNonExistingDirectory_ShouldThrowDirectoryNotFoundException(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n\n        // Act\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n\n        // Assert\n        await That(() => fileStreamFactory.New(XFS.Path(@\"C:\\Test\\NonExistingDirectory\\some_random_file.txt\"), fileMode)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFileStreamFactory_AppendAccessWithReadWriteMode_ShouldThrowArgumentException()\n    {\n        var fileSystem = new MockFileSystem();\n            \n        await That(() =>\n        {\n            fileSystem.FileStream.New(XFS.Path(@\"c:\\path.txt\"), FileMode.Append, FileAccess.ReadWrite);\n        }).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [TestCase(FileMode.Append)]\n    [TestCase(FileMode.Truncate)]\n    [TestCase(FileMode.Create)]\n    [TestCase(FileMode.CreateNew)]\n    [TestCase(FileMode.Append)]\n    public async Task MockFileStreamFactory_InvalidModeForReadAccess_ShouldThrowArgumentException(FileMode fileMode)\n    {\n        var fileSystem = new MockFileSystem();\n\n        await That(() =>\n        {\n            fileSystem.FileStream.New(XFS.Path(@\"c:\\path.txt\"), fileMode, FileAccess.Read);\n        }).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [TestCase(FileMode.Open)]\n    [TestCase(FileMode.Truncate)]\n    public async Task MockFileStreamFactory_OpenNonExistingFile_ShouldThrowFileNotFoundException(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n\n        // Act\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n\n        // Assert\n        await That(() => fileStreamFactory.New(XFS.Path(@\"C:\\Test\\some_random_file.txt\"), fileMode)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    [TestCase(FileMode.CreateNew)]\n    public async Task MockFileStreamFactory_CreateExistingFile_Should_Throw_IOException(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"C:\\Test\\some_random_file.txt\");\n        fileSystem.AddFile(path, string.Empty);\n\n        // Act\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n\n        // Assert\n        await That(() => fileStreamFactory.New(path, fileMode)).Throws<IOException>();\n\n    }\n\n    [Test]\n    [TestCase(FileMode.Create)]\n    [TestCase(FileMode.CreateNew)]\n    [TestCase(FileMode.OpenOrCreate)]\n    public async Task MockFileStreamFactory_CreateWithRelativePath_CreatesFileInCurrentDirectory(FileMode fileMode)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var fileStreamFactory = new MockFileStreamFactory(fileSystem);\n        fileStreamFactory.New(\"some_random_file.txt\", fileMode);\n\n        // Assert\n        await That(fileSystem.File.Exists(XFS.Path(\"./some_random_file.txt\"))).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileStream_CanRead_ReturnsFalseForAWriteOnlyStream()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        var fileStream = fileSystem.FileStream.New(\"file.txt\", FileMode.CreateNew, FileAccess.Write);\n\n        // Assert\n        await That(fileStream.CanRead).IsFalse();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nusing NUnit.Framework;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileStreamTests\n{\n    [Test]\n    public async Task MockFileStream_Flush_WritesByteToFile()\n    {\n        // Arrange\n        var filepath = XFS.Path(@\"C:\\something\\foo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\something\"));\n\n        var cut = new MockFileStream(fileSystem, filepath, FileMode.Create);\n\n        // Act\n        cut.WriteByte(255);\n        cut.Flush();\n\n        // Assert\n        await That(fileSystem.GetFile(filepath).Contents)\n            .IsEqualTo(new byte[] { 255 });\n    }\n\n    [Test]\n    public async Task MockFileStream_FlushAsync_WritesByteToFile()\n    {\n        // bug replication test for issue\n        // https://github.com/TestableIO/System.IO.Abstractions/issues/959\n\n        // Arrange\n        var filepath = XFS.Path(@\"C:\\something\\foo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\something\"));\n\n        var cut = new MockFileStream(fileSystem, filepath, FileMode.Create);\n\n        // Act\n        await cut.WriteAsync(new byte[] { 255 }, 0, 1);\n        await cut.FlushAsync();\n\n        // Assert\n        await That(fileSystem.GetFile(filepath).Contents)\n            .IsEqualTo(new byte[] { 255 });\n    }\n\n    [Test]\n    public async Task MockFileStream_Dispose_ShouldNotResurrectFile()\n    {\n        // path in this test case is a subject to Directory.GetParent(path) Linux issue\n        // https://github.com/TestableIO/System.IO.Abstractions/issues/395\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\some_folder\\\\test\");\n        var directory = fileSystem.Path.GetDirectoryName(path);\n        fileSystem.AddFile(path, new MockFileData(\"Bla\"));\n        var stream = fileSystem.File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Delete);\n\n        var fileCount1 = fileSystem.Directory.GetFiles(directory, \"*\").Length;\n        fileSystem.File.Delete(path);\n        var fileCount2 = fileSystem.Directory.GetFiles(directory, \"*\").Length;\n        stream.Dispose();\n        var fileCount3 = fileSystem.Directory.GetFiles(directory, \"*\").Length;\n\n        await That(fileCount1).IsEqualTo(1).Because(\"File should have existed\");\n        await That(fileCount2).IsEqualTo(0).Because(\"File should have been deleted\");\n        await That(fileCount3).IsEqualTo(0).Because(\"Disposing stream should not have resurrected the file\");\n    }\n\n    [Test]\n    public async Task MockFileStream_Constructor_Reading_Nonexistent_File_Throws_Exception()\n    {\n        // Arrange\n        var nonexistentFilePath = XFS.Path(@\"c:\\something\\foo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\something\"));\n\n        // Act\n        await That(() => new MockFileStream(fileSystem, nonexistentFilePath, FileMode.Open)).Throws<FileNotFoundException>();\n\n        // Assert - expect an exception\n    }\n\n    [Test]\n    public async Task MockFileStream_Constructor_ReadTypeNotWritable()\n    {\n        // Arrange\n        var filePath = @\"C:\\test.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"hi\") }\n        });\n\n        // Act\n        var stream = new MockFileStream(fileSystem, filePath, FileMode.Open, FileAccess.Read);\n\n        await That(stream.CanWrite).IsFalse();\n        await That(() => stream.WriteByte(1)).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [TestCase(FileAccess.Write)]\n    [TestCase(FileAccess.ReadWrite)]\n    public async Task MockFileStream_Constructor_WriteAccessOnReadOnlyFile_Throws_Exception(\n        FileAccess fileAccess)\n    {\n        // Arrange\n        var filePath = @\"C:\\test.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"hi\") { Attributes = FileAttributes.ReadOnly } }\n        });\n\n        // Act\n        await That(() => new MockFileStream(fileSystem, filePath, FileMode.Open, fileAccess)).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFileStream_Constructor_ReadAccessOnReadOnlyFile_Does_Not_Throw_Exception()\n    {\n        // Arrange\n        var filePath = @\"C:\\test.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"hi\") { Attributes = FileAttributes.ReadOnly } }\n        });\n\n        // Act\n        await That(() => new MockFileStream(fileSystem, filePath, FileMode.Open, FileAccess.Read)).DoesNotThrow();\n    }\n\n\n    [Test]\n    public async Task MockFileStream_Constructor_WriteAccessOnNonReadOnlyFile_Does_Not_Throw_Exception()\n    {\n        // Arrange\n        var filePath = @\"C:\\test.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"hi\") { Attributes = FileAttributes.Normal } }\n        });\n\n        // Act\n        await That(() => new MockFileStream(fileSystem, filePath, FileMode.Open, FileAccess.Write)).DoesNotThrow();\n    }\n\n    [Test]\n    [TestCase(FileShare.None, FileAccess.Read)]\n    [TestCase(FileShare.None, FileAccess.ReadWrite)]\n    [TestCase(FileShare.None, FileAccess.Write)]\n    [TestCase(FileShare.Read, FileAccess.Write)]\n    [TestCase(FileShare.Read, FileAccess.ReadWrite)]\n    [TestCase(FileShare.Write, FileAccess.Read)]\n    public async Task MockFileStream_Constructor_Insufficient_FileShare_Throws_Exception(\n        FileShare allowedFileShare,\n        FileAccess fileAccess)\n    {\n        var filePath = @\"C:\\locked.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"cannot access\") { AllowedFileShare = allowedFileShare } }\n        });\n\n        await That(() => new MockFileStream(fileSystem, filePath, FileMode.Open, fileAccess)).Throws<IOException>();\n    }\n\n    [Test]\n    [TestCase(FileShare.Read, FileAccess.Read)]\n    [TestCase(FileShare.Read | FileShare.Write, FileAccess.Read)]\n    [TestCase(FileShare.Read | FileShare.Write, FileAccess.ReadWrite)]\n    [TestCase(FileShare.ReadWrite, FileAccess.Read)]\n    [TestCase(FileShare.ReadWrite, FileAccess.ReadWrite)]\n    [TestCase(FileShare.ReadWrite, FileAccess.Write)]\n    public async Task MockFileStream_Constructor_Sufficient_FileShare_Does_Not_Throw_Exception(\n        FileShare allowedFileShare,\n        FileAccess fileAccess)\n    {\n        var filePath = @\"C:\\locked.txt\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(\"cannot access\") { AllowedFileShare = allowedFileShare } }\n        });\n\n        await That(() => new MockFileStream(fileSystem, filePath, FileMode.Open, fileAccess)).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task MockFileStream_Close_MultipleCallsDoNotThrow()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\");\n        fileSystem.AddFile(path, new MockFileData(\"Bla\"));\n        var stream = fileSystem.File.OpenRead(path);\n\n        // Act\n        stream.Close();\n\n        // Assert\n        await That(() => stream.Close()).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task MockFileStream_Dispose_MultipleCallsDoNotThrow()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\");\n        fileSystem.AddFile(path, new MockFileData(\"Bla\"));\n        var stream = fileSystem.File.OpenRead(path);\n\n        // Act\n        stream.Dispose();\n\n        // Assert\n        await That(() => stream.Dispose()).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task MockFileStream_Dispose_OperationsAfterDisposeThrow()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\");\n        fileSystem.AddFile(path, new MockFileData(new byte[0]));\n        var stream = fileSystem.FileInfo.New(path).OpenWrite();\n\n        // Act\n        stream.Dispose();\n\n        // Assert\n        await That(() => stream.WriteByte(0)).Throws<ObjectDisposedException>();\n    }\n\n    [Test]\n    public async Task MockFileStream_Flush_ShouldNotChangePosition()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\");\n        fileSystem.AddFile(path, new MockFileData(new byte[0]));\n\n        using (var stream = fileSystem.FileInfo.New(path).OpenWrite())\n        {\n            // Act\n            stream.Write(new byte[400], 0, 400);\n            stream.Seek(200, SeekOrigin.Begin);\n            stream.Flush();\n\n            // Assert\n            await That(stream.Position).IsEqualTo(200);\n        }\n    }\n\n    [Test]\n    public async Task MockFileStream_FlushBool_ShouldNotChangePosition([Values] bool flushToDisk)\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(\"C:\\\\test\");\n        fileSystem.AddFile(path, new MockFileData(new byte[0]));\n\n        using (var stream = fileSystem.FileInfo.New(path).OpenWrite())\n        {\n            // Act\n            stream.Write(new byte[400], 0, 400);\n            stream.Seek(200, SeekOrigin.Begin);\n            stream.Flush(flushToDisk);\n\n            // Assert\n            await That(stream.Position).IsEqualTo(200);\n        }\n    }\n\n    [Test]\n    public async Task MockFileStream_Null_ShouldReturnSingletonObject()\n    {\n        var result1 = MockFileStream.Null;\n        var result2 = MockFileStream.Null;\n\n        await That(result1).IsSameAs(result2);\n    }\n        \n#if FEATURE_ASYNC_FILE\n    [Test]\n    public async Task MockFileStream_DisposeAsync_ShouldNotThrow()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        {\n            await using var reportStream = fileSystem.File.OpenRead(\"foo.txt\");\n        }\n    }\n#endif\n\n    [Test]\n    public async Task MockFileStream_Null_ShouldHaveExpectedProperties()\n    {\n        var result = MockFileStream.Null;\n\n        await That(result.Name).IsEqualTo(\".\");\n        await That(result.Length).IsEqualTo(0);\n        await That(result.IsAsync).IsTrue();\n    }\n        \n    [Test]\n    [TestCase(0)]\n    [TestCase(-1)]\n    public async Task MockFileStream_WhenBufferSizeIsNotPositive_ShouldThrowArgumentNullException(int bufferSize)\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        fileSystem.File.WriteAllText(\"bar.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenRead();\n        using var destination = fileSystem.FileInfo.New(@\"bar.txt\").OpenWrite();\n\n        async Task Act() =>\n            await source.CopyToAsync(destination, bufferSize);\n        await That(Act).Throws<ArgumentOutOfRangeException>();\n    }\n        \n    [Test]\n    public async Task MockFileStream_WhenDestinationIsClosed_ShouldThrowObjectDisposedException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenRead();\n        using var destination = new MemoryStream();\n        destination.Close();\n\n        async Task Act() =>\n            await source.CopyToAsync(destination);\n        await That(Act).Throws<ObjectDisposedException>();\n    }\n        \n    [Test]\n    public async Task MockFileStream_WhenDestinationIsNull_ShouldThrowArgumentNullException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenRead();\n\n        async Task Act() =>\n            await source.CopyToAsync(null);\n        await That(Act).Throws<ArgumentNullException>();\n    }\n        \n    [Test]\n    public async Task MockFileStream_WhenDestinationIsReadOnly_ShouldThrowNotSupportedException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        fileSystem.File.WriteAllText(\"bar.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenRead();\n        using var destination = fileSystem.FileInfo.New(@\"bar.txt\").OpenRead();\n\n        async Task Act() =>\n            await source.CopyToAsync(destination);\n        await That(Act).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    public async Task MockFileStream_WhenSourceIsClosed_ShouldThrowObjectDisposedException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        fileSystem.File.WriteAllText(\"bar.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenRead();\n        using var destination = fileSystem.FileInfo.New(@\"bar.txt\").OpenWrite();\n        source.Close();\n\n        async Task Act() =>\n            await source.CopyToAsync(destination);\n        await That(Act).Throws<ObjectDisposedException>();\n    }\n\n    [Test]\n    public async Task MockFileStream_WhenSourceIsWriteOnly_ShouldThrowNotSupportedException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        fileSystem.File.WriteAllText(\"bar.txt\", \"\");\n        using var source = fileSystem.FileInfo.New(@\"foo.txt\").OpenWrite();\n        using var destination = fileSystem.FileInfo.New(@\"bar.txt\").OpenWrite();\n\n        async Task Act() =>\n            await source.CopyToAsync(destination);\n        await That(Act).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [TestCase(FileShare.None, FileAccess.Read)]\n    [TestCase(FileShare.None, FileAccess.ReadWrite)]\n    [TestCase(FileShare.None, FileAccess.Write)]\n    [TestCase(FileShare.Read, FileAccess.Write)]\n    [TestCase(FileShare.Read, FileAccess.ReadWrite)]\n    [TestCase(FileShare.Write, FileAccess.Read)]\n    public async Task MockFileStream_ConflictingShareOrAccess_ShouldThrowUntilHandleReleased(\n        FileShare share,\n        FileAccess access)\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        using (new MockFileStream(fileSystem, \"foo.txt\", FileMode.Open, FileAccess.Read, share))\n        {\n            await That(() => new MockFileStream(fileSystem, \"foo.txt\", FileMode.Open, access)).Throws<IOException>();\n        }\n        await That(() => new MockFileStream(fileSystem, \"foo.txt\", FileMode.Open, access)).DoesNotThrow();\n    }\n\n    [Test]\n    [TestCase(FileShare.Read, FileAccess.Read)]\n    [TestCase(FileShare.Read | FileShare.Write, FileAccess.Read)]\n    [TestCase(FileShare.Read | FileShare.Write, FileAccess.ReadWrite)]\n    [TestCase(FileShare.ReadWrite, FileAccess.Read)]\n    [TestCase(FileShare.ReadWrite, FileAccess.ReadWrite)]\n    [TestCase(FileShare.ReadWrite, FileAccess.Write)]\n    public async Task MockFileStream_CompatibleShareOrAccess_ShouldNotThrow(\n        FileShare share,\n        FileAccess access)\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"foo.txt\", \"\");\n        using (new MockFileStream(fileSystem, \"foo.txt\", FileMode.Open, FileAccess.Read, share))\n        {\n            await That(() => new MockFileStream(fileSystem, \"foo.txt\", FileMode.Open, access)).DoesNotThrow();\n        }\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileSymlinkTests\n{\n\n#if FEATURE_CREATE_SYMBOLIC_LINK\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldReturnFileSystemInfo()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var path = XFS.Path(@\"C:\\bar.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        IFileSystemInfo fileSystemInfo = fileSystem.File.CreateSymbolicLink(path, pathToTarget);\n\n        // Assert\n        await That(fileSystemInfo.FullName).IsEqualTo(path);\n        await That(fileSystemInfo.LinkTarget).IsEqualTo(pathToTarget);\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldSucceedFromFileInfo()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var path = XFS.Path(@\"C:\\bar.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        fileSystem.File.CreateSymbolicLink(path, pathToTarget);\n        IFileInfo directoryInfo = fileSystem.FileInfo.New(path);\n\n        // Assert\n        await That(directoryInfo.FullName).IsEqualTo(path);\n        await That(directoryInfo.LinkTarget).IsEqualTo(pathToTarget);\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithNullPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(null, pathToTarget)).Throws<ArgumentNullException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithNullTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(path, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, null)).Throws<ArgumentNullException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithEmptyPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(\"\", pathToTarget)).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithEmptyTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(path, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, \"\")).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithIllegalPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(\" \", pathToTarget)).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithIllegalTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(path, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, \" \")).Throws<ArgumentException>();\n\n        // Assert\n        await That(ex.ParamName).IsEqualTo(\"pathToTarget\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithIllegalCharactersInPath()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        Action ex = () => fileSystem.File.CreateSymbolicLink(@\"C:\\bar.txt_?_\", pathToTarget);\n\n        // Assert\n        await That(ex).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n\n    public async Task MockFile_CreateSymbolicLink_ShouldFailWithIllegalCharactersInTarget()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n\n        // Act\n        Action ex = () => fileSystem.File.CreateSymbolicLink(path, @\"C:\\bar.txt_?_\");\n\n        // Assert\n        await That(ex).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailIfPathExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string pathToTarget = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        string path = XFS.Path(@\"C:\\Folder\\bar.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n        fileSystem.AddFile(path, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, pathToTarget)).Throws<IOException>();\n\n        // Assert\n        await That(ex.Message).Contains(\"path\");\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailIfTargetDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string dir = XFS.Path(@\"C:\\Folder\");\n        string path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        string pathToTarget = XFS.Path(@\"C:\\bar.txt\");\n        fileSystem.AddDirectory(dir);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, pathToTarget)).Throws<FileNotFoundException>();\n\n        // Assert\n        await That(ex.Message).Contains(pathToTarget);\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldFailIfPathDirectoryDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"C:\\Folder\\foo.txt\");\n        string pathToTarget = XFS.Path(@\"C:\\bar.txt\");\n        var data = new MockFileData(\"foobar\");\n        fileSystem.AddFile(pathToTarget, data);\n\n        // Act\n        var ex = await That(() => fileSystem.File.CreateSymbolicLink(path, pathToTarget)).Throws<DirectoryNotFoundException>();\n\n        // Assert\n        await That(ex.Message).Contains(path);\n    }\n\n    [Test]\n    public async Task MockFile_CreateSymbolicLink_ShouldSetReparsePointAttribute()\n    {\n        var path = \"foo.txt\";\n        var pathToTarget = \"bar.txt\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(pathToTarget, \"some content\");\n\n        fileSystem.File.CreateSymbolicLink(path, pathToTarget);\n\n        var attributes = fileSystem.FileInfo.New(path).Attributes;\n        await That(attributes.HasFlag(FileAttributes.ReparsePoint)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFile_ResolveLinkTarget_ShouldReturnPathOfTargetLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n\n        var result = fileSystem.File.ResolveLinkTarget(\"foo\", false);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFile_ResolveLinkTarget_WithFinalTarget_ShouldReturnPathOfTargetLink()\n    {\n        // The maximum number of symbolic links that are followed:\n        // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n        var maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        var previousPath = \"bar\";\n        for (int i = 0; i < maxResolveLinks; i++)\n        {\n            string newPath = $\"foo-{i}\";\n            fileSystem.File.CreateSymbolicLink(newPath, previousPath);\n            previousPath = newPath;\n        }\n\n        var result = fileSystem.File.ResolveLinkTarget(previousPath, true);\n\n        await That(result.Name).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFile_ResolveLinkTarget_WithFinalTargetWithTooManyLinks_ShouldThrowIOException()\n    {\n        // The maximum number of symbolic links that are followed:\n        // https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.resolvelinktarget?view=net-6.0#remarks\n        var maxResolveLinks = XFS.IsWindowsPlatform() ? 63 : 40;\n        maxResolveLinks++;\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        var previousPath = \"bar\";\n        for (int i = 0; i < maxResolveLinks; i++)\n        {\n            string newPath = $\"foo-{i}\";\n            fileSystem.File.CreateSymbolicLink(newPath, previousPath);\n            previousPath = newPath;\n        }\n\n        await That(() => fileSystem.File.ResolveLinkTarget(previousPath, true)).Throws<IOException>();\n    }\n\n    [Test]\n    public async Task MockFile_ResolveLinkTarget_WithoutFinalTarget_ShouldReturnFirstLink()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n        fileSystem.File.CreateSymbolicLink(\"foo1\", \"foo\");\n\n        var result = fileSystem.File.ResolveLinkTarget(\"foo1\", false);\n\n        await That(result.Name).IsEqualTo(\"foo\");\n    }\n\n    [Test]\n    public async Task MockFile_ResolveLinkTarget_WithoutTargetLink_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.File.WriteAllText(\"bar\", \"some content\");\n        fileSystem.File.CreateSymbolicLink(\"foo\", \"bar\");\n\n        await That(() =>\n        {\n            fileSystem.File.ResolveLinkTarget(\"bar\", false);\n        }).Throws<IOException>();\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemOptionTests.cs",
    "content": "using NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileSystemOptionTests\n{\n    [Test]\n    [TestCase(true)]\n    [TestCase(false)]\n    public async Task CreateDefaultTempDir_ShouldBeConsidered(bool createTempDir)\n    {\n        var fileSystem = new MockFileSystem(new MockFileSystemOptions\n        {\n            CreateDefaultTempDir = createTempDir\n        });\n\n        var result = fileSystem.Directory.Exists(fileSystem.Path.GetTempPath());\n\n        await That(result).IsEqualTo(createTempDir);\n    }\n\n    [Test]\n    [TestCase(@\"C:\\path\")]\n    [TestCase(@\"C:\\foo\\bar\")]\n    public async Task CurrentDirectory_ShouldBeConsidered(string currentDirectory)\n    {\n        currentDirectory = XFS.Path(currentDirectory);\n        var fileSystem = new MockFileSystem(new MockFileSystemOptions\n        {\n            CurrentDirectory = currentDirectory\n        });\n\n        var result = fileSystem.Directory.GetCurrentDirectory();\n\n        await That(result).IsEqualTo(currentDirectory);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemSerializationTests.cs",
    "content": "#if !NET9_0_OR_GREATER\nnamespace System.IO.Abstractions.TestingHelpers.Tests\n{\n    using NUnit.Framework;\n    using Text;\n    using XFS = MockUnixSupport;\n    [TestFixture]\n    class MockFileSystemSerializationTests\n    {\n        [Test]\n        public async Task SerializationBytes()\n        {\n            // Arrange\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n            var content = \"Hello there!\" + Environment.NewLine + \"Second line!\" + Environment.NewLine;\n            var expected = Encoding.ASCII.GetBytes(content); //Convert a C# string to a byte array\n\n            var fileSystem = new MockFileSystem();\n            fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n            fileSystem.File.WriteAllBytes(path, expected);\n\n            //Act\n            var memoryStream = new MemoryStream();\n#pragma warning disable SYSLIB0011\n            var serializer = new Runtime.Serialization.Formatters.Binary.BinaryFormatter();\n\n            serializer.Serialize(memoryStream, fileSystem);\n            memoryStream.Flush();\n            memoryStream.Position = 0;\n            fileSystem = (MockFileSystem)serializer.Deserialize(memoryStream);\n#pragma warning restore SYSLIB0011\n            memoryStream.Dispose();\n\n            // Assert\n            await That(fileSystem.GetFile(path).Contents).IsEqualTo(expected);\n            await That(fileSystem.File.ReadAllBytes(path)).IsEqualTo(expected);\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs",
    "content": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileSystemTests\n{\n    [Test]\n    public async Task MockFileSystem_GetFile_ShouldReturnNullWhenFileIsNotRegistered()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\something\\demo.txt\", new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n            { @\"c:\\something\\other.gif\", new MockFileData(\"gif content\") }\n        });\n\n        var result = fileSystem.GetFile(@\"c:\\something\\else.txt\");\n\n        await That(result).IsNull();\n    }\n\n    [Test]\n    public async Task MockFileSystem_GetFile_ShouldReturnFileRegisteredInConstructor()\n    {\n        var file1 = new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\something\\demo.txt\", file1 },\n            { @\"c:\\something\\other.gif\", new MockFileData(\"gif content\") }\n        });\n\n        var result = fileSystem.GetFile(@\"c:\\something\\demo.txt\");\n\n        await That(result).IsEqualTo(file1);\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.CaseInsensitivity)]\n    public async Task MockFileSystem_GetFile_ShouldReturnFileRegisteredInConstructorWhenPathsDifferByCase()\n    {\n        var file1 = new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\something\\demo.txt\", file1 },\n            { @\"c:\\something\\other.gif\", new MockFileData(\"gif content\") }\n        });\n\n        var result = fileSystem.GetFile(@\"c:\\SomeThing\\DEMO.txt\");\n\n        await That(result).IsEqualTo(file1);\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.CaseSensitivity)]\n    public async Task MockFileSystem_GetFile_ShouldNotReturnFileRegisteredInConstructorWhenPathsDifferByCase()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { \"/something/demo.txt\", new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\") },\n            { \"/something/other.gif\", new MockFileData(\"gif content\") }\n        });\n\n        var result = fileSystem.GetFile(\"/SomeThing/DEMO.txt\");\n\n        await That(result).IsNull();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_ShouldHandleUnnormalizedSlashes()\n    {\n        var path = XFS.Path(@\"c:\\d1\\d2\\file.txt\");\n        var alternatePath = XFS.Path(\"c:/d1/d2/file.txt\");\n        var alternateParentPath = XFS.Path(\"c://d1//d2/\");\n        var fs = new MockFileSystem();\n        fs.AddFile(path, new MockFileData(\"Hello\"));\n\n        var fileCount = fs.Directory.GetFiles(alternateParentPath).Length;\n        var fileExists = fs.File.Exists(alternatePath);\n\n        await That(fileCount).IsEqualTo(1);\n        await That(fileExists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_ShouldHandleNullFileDataAsEmpty()\n    {\n        var path = XFS.Path(@\"c:\\something\\nullish.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, null }\n        });\n\n        var result = fileSystem.File.ReadAllText(path);\n\n        await That(result).IsEmpty().Because(\"Null MockFileData should be allowed for and result in an empty file.\");\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_ShouldReplaceExistingFile()\n    {\n        var path = XFS.Path(@\"c:\\some\\file.txt\");\n        const string existingContent = \"Existing content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(existingContent) }\n        });\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(existingContent);\n\n        const string newContent = \"New content\";\n        fileSystem.AddFile(path, new MockFileData(newContent));\n\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(newContent);\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddEmptyFile_ShouldBeEmpty()\n    {\n        var path = XFS.Path(@\"c:\\some\\file.txt\");\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.AddEmptyFile(path);\n\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(\"\");\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddEmptyFile_ShouldExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = fileSystem.FileInfo.New(XFS.Path(@\"c:\\some\\file.txt\"));\n\n        fileSystem.AddEmptyFile(path);\n\n        await That(path.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_ShouldExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = fileSystem.FileInfo.New(XFS.Path(@\"c:\\some\\file.txt\"));\n\n        fileSystem.AddFile(path, new MockFileData(\"stuff\"));\n\n        await That(path.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddDirectory_ShouldExist()\n    {\n        var fileSystem = new MockFileSystem();\n        var path = fileSystem.DirectoryInfo.New(XFS.Path(@\"c:\\thedir\"));\n\n        fileSystem.AddDirectory(path);\n\n        await That(path.Exists).IsTrue();\n    }\n        \n#if !NET9_0_OR_GREATER\n        [Test]\n        public async Task MockFileSystem_ByDefault_IsSerializable()\n        {\n            var file1 = new MockFileData(\"Demo\\r\\ntext\\ncontent\\rvalue\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { @\"c:\\something\\demo.txt\", file1 },\n                { @\"c:\\something\\other.gif\", new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n            });\n            var memoryStream = new MemoryStream();\n\n#pragma warning disable SYSLIB0011\n            var serializer = new Runtime.Serialization.Formatters.Binary.BinaryFormatter();\n\n            serializer.Serialize(memoryStream, fileSystem);\n#pragma warning restore SYSLIB0011\n\n            await That(memoryStream).HasLength().GreaterThan(0).Because(\"Length didn't increase after serialization task.\");\n        }\n#endif\n\n    [Test]\n    public async Task MockFileSystem_AddDirectory_ShouldCreateDirectory()\n    {\n        string baseDirectory = XFS.Path(@\"C:\\Test\");\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.AddDirectory(baseDirectory);\n\n        await That(fileSystem.Directory.Exists(baseDirectory)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddDirectory_ShouldThrowExceptionIfDirectoryIsReadOnly()\n    {\n        string baseDirectory = XFS.Path(@\"C:\\Test\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(baseDirectory, new MockFileData(string.Empty));\n        fileSystem.File.SetAttributes(baseDirectory, FileAttributes.ReadOnly);\n\n        Action action = () => fileSystem.AddDirectory(baseDirectory);\n\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddDrive_ShouldExist()\n    {\n        string name = @\"D:\\\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDrive(name, new MockDriveData());\n\n        var actualResults = fileSystem.DriveInfo.GetDrives().Select(d => d.Name);\n\n        await That(actualResults).Contains(name);\n    }\n\n    [Test]\n    public async Task MockFileSystem_DriveInfo_ShouldNotThrowAnyException()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\Test\"));\n\n        var actualResults = fileSystem.DriveInfo.GetDrives();\n\n        await That(actualResults).IsNotNull();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_ShouldMatchCapitalization_PerfectMatch()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\"));\n\n        fileSystem.AddFile(XFS.Path(@\"C:\\test\\file.txt\"), \"foo\");\n        fileSystem.AddFile(XFS.Path(@\"C:\\LOUD\\file.txt\"), \"foo\");\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\\SUBDirectory\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\\SUBDirectory\"));\n\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\test\\file.txt\"));\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\file.txt\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\test\\SUBDirectory\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\SUBDirectory\"));\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.CaseInsensitivity)]\n    public async Task MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\\subtest\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\\SUBLOUD\"));\n\n        fileSystem.AddFile(XFS.Path(@\"C:\\test\\SUBTEST\\file.txt\"), \"foo\");\n        fileSystem.AddFile(XFS.Path(@\"C:\\LOUD\\subloud\\file.txt\"), \"foo\");\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\\SUBTEST\\SUBDirectory\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\\subloud\\SUBDirectory\"));\n\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\test\\subtest\\file.txt\"));\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\SUBLOUD\\file.txt\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\test\\subtest\\SUBDirectory\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\SUBLOUD\\SUBDirectory\"));\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.CaseInsensitivity)]\n    public async Task MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch_FurtherLeft()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\\subtest\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\\SUBLOUD\"));\n\n        fileSystem.AddFile(XFS.Path(@\"C:\\test\\SUBTEST\\new\\file.txt\"), \"foo\");\n        fileSystem.AddFile(XFS.Path(@\"C:\\LOUD\\subloud\\new\\file.txt\"), \"foo\");\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\test\\SUBTEST\\new\\SUBDirectory\"));\n        fileSystem.AddDirectory(XFS.Path(@\"C:\\LOUD\\subloud\\new\\SUBDirectory\"));\n\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\test\\subtest\\new\\file.txt\"));\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\SUBLOUD\\new\\file.txt\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\test\\subtest\\new\\SUBDirectory\"));\n        await That(fileSystem.AllDirectories.ToList()).Contains(XFS.Path(@\"C:\\LOUD\\SUBLOUD\\new\\SUBDirectory\"));\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFile_InitializesMockFileDataFileVersionInfoIfNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        fileSystem.AddFile(XFS.Path(@\"C:\\file.txt\"), string.Empty);\n\n        // Assert\n        IFileVersionInfo fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(XFS.Path(@\"C:\\file.txt\"));\n        await That(fileVersionInfo).IsNotNull();\n        await That(fileVersionInfo.FileName).IsEqualTo(XFS.Path(@\"C:\\file.txt\"));\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFileFromEmbeddedResource_ShouldAddTheFile()\n    {\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.AddFileFromEmbeddedResource(XFS.Path(@\"C:\\TestFile.txt\"), Assembly.GetExecutingAssembly(), \"System.IO.Abstractions.TestingHelpers.Tests.TestFiles.TestFile.txt\");\n        var result = fileSystem.GetFile(XFS.Path(@\"C:\\TestFile.txt\"));\n\n        await That(result.Contents).IsEqualTo(new UTF8Encoding().GetBytes(\"This is a test file.\"));\n    }\n\n    [Test]\n    public async Task MockFileSystem_AddFilesFromEmbeddedResource_ShouldAddAllTheFiles()\n    {\n        var fileSystem = new MockFileSystem();\n\n        fileSystem.AddFilesFromEmbeddedNamespace(XFS.Path(@\"C:\\\"), Assembly.GetExecutingAssembly(), \"System.IO.Abstractions.TestingHelpers.Tests.TestFiles\");\n\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\TestFile.txt\"));\n        await That(fileSystem.AllFiles.ToList()).Contains(XFS.Path(@\"C:\\SecondTestFile.txt\"));\n    }\n\n    [Test]\n    public async Task MockFileSystem_MoveDirectory_MovesDirectoryWithoutRenamingFiles()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\dir1\\dir1\\dir1.txt\"), string.Empty);\n\n        fileSystem.MoveDirectory(XFS.Path(@\"C:\\dir1\"), XFS.Path(@\"C:\\dir2\"));\n\n        var expected = new[] { XFS.Path(@\"C:\\dir2\\dir1\\dir1.txt\") };\n        await That(fileSystem.AllFiles).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFileSystem_MoveDirectoryAndFile_ShouldMoveCorrectly()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(XFS.Path(@\"C:\\source\\project.txt\"), string.Empty);\n        fileSystem.AddFile(XFS.Path(@\"C:\\source\\subdir\\other.txt\"), string.Empty);\n\n        fileSystem.Directory.Move(XFS.Path(@\"C:\\source\"), XFS.Path(@\"C:\\target\"));\n        fileSystem.File.Move(XFS.Path(@\"C:\\target\\project.txt\"), XFS.Path(@\"C:\\target\\proj.txt\"));\n\n        var expected = new[] { XFS.Path(@\"C:\\target\\proj.txt\"), XFS.Path(@\"C:\\target\\subdir\\other.txt\") };\n        await That(fileSystem.AllFiles).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFileSystem_RemoveFile_RemovesFiles()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(@\"C:\\file.txt\", new MockFileData(\"Content\"));\n\n        fileSystem.RemoveFile(@\"C:\\file.txt\");\n\n        await That(fileSystem.FileExists(@\"C:\\file.txt\")).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFileSystem_RemoveFile_ThrowsUnauthorizedAccessExceptionIfFileIsReadOnly()\n    {\n        var path = XFS.Path(@\"C:\\file.txt\");\n        var readOnlyFile = new MockFileData(\"\")\n        {\n            Attributes = FileAttributes.ReadOnly\n        };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, readOnlyFile },\n        });\n\n        Action action = () => fileSystem.RemoveFile(path);\n\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFileSystem_AllNodes_ShouldReturnAllNodes()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), string.Empty },\n            { XFS.Path(@\"c:\\something\\other.gif\"), string.Empty },\n            { XFS.Path(@\"d:\\foobar\\\"), new MockDirectoryData() },\n            { XFS.Path(@\"d:\\foo\\bar\"), new MockDirectoryData( )}\n        });\n        var expectedNodes = new[]\n        {\n            XFS.Path(@\"c:\\something\\demo.txt\"),\n            XFS.Path(@\"c:\\something\\other.gif\"),\n            XFS.Path(@\"d:\\foobar\"),\n            XFS.Path(@\"d:\\foo\\bar\"),\n            XFS.Path(@\"C:\\temp\")\n        };\n\n        var result = fileSystem.AllNodes;\n\n        await That(result).IsEqualTo(expectedNodes);\n    }\n\n    [Test]\n    [TestCase(@\"C:\\path\")]\n    [TestCase(@\"C:\\path\\\")]\n    public async Task MockFileSystem_AddDirectory_TrailingSlashAllowedButNotRequired(string path)\n    {\n        var fileSystem = new MockFileSystem();\n        var path2 = XFS.Path(path);\n\n        fileSystem.AddDirectory(path2);\n\n        await That(fileSystem.FileExists(path2)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_GetFiles_ThrowsArgumentExceptionForInvalidCharacters()\n    {\n        // Arrange\n        const string path = @\"c:\\\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(path));\n\n        // Act\n        Action getFilesWithInvalidCharacterInPath = () => fileSystem.Directory.GetFiles($\"{path}{'\\0'}.txt\");\n\n        // Assert\n        await That(getFilesWithInvalidCharacterInPath).Throws<ArgumentException>();\n    }\n\n    [Test]\n    [TestCase(null)]\n    [TestCase(@\"C:\\somepath\")]\n    public async Task MockFileSystem_DefaultState_CurrentDirectoryExists(string currentDirectory)\n    {\n        var fs = new MockFileSystem(null, XFS.Path(currentDirectory));\n\n        var actualCurrentDirectory = fs.DirectoryInfo.New(\".\");\n\n        await That(actualCurrentDirectory.Exists).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_Constructor_ThrowsForNonRootedCurrentDirectory()\n    {\n        await That(() =>\n                new MockFileSystem(null, \"non-rooted\")\n            ).Throws<ArgumentException>()\n            .WithParamName(\"currentDirectory\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFileSystem_Constructor_ShouldSupportDifferentRootDrives()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            [@\"c:\\\"] = new MockDirectoryData(),\n            [@\"z:\\\"] = new MockDirectoryData(),\n            [@\"d:\\\"] = new MockDirectoryData(),\n        });\n\n        var cExists = fileSystem.Directory.Exists(@\"c:\\\");\n        var zExists = fileSystem.Directory.Exists(@\"z:\\\");\n        var dExists = fileSystem.Directory.Exists(@\"d:\\\");\n\n        await That(fileSystem).IsNotNull();\n        await That(cExists).IsTrue();\n        await That(zExists).IsTrue();\n        await That(dExists).IsTrue();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFileSystem_Constructor_ShouldAddDifferentDrivesIfNotExist()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            [@\"d:\\foo\\bar\\\"] = new MockDirectoryData(),\n        });\n\n        var drivesInfo = fileSystem.DriveInfo.GetDrives();\n        var fooExists = fileSystem.Directory.Exists(@\"d:\\foo\\\");\n        var barExists = fileSystem.Directory.Exists(@\"d:\\foo\\bar\\\");\n\n        await That(drivesInfo.Any(d => string.Equals(d.Name, @\"D:\\\", StringComparison.InvariantCultureIgnoreCase))).IsTrue();\n        await That(fooExists).IsTrue();\n        await That(barExists).IsTrue();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFileSystem_Constructor_ShouldNotDuplicateDrives()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            [@\"d:\\foo\\bar\\\"] = new MockDirectoryData(),\n            [@\"d:\\\"] = new MockDirectoryData()\n        });\n\n        var drivesInfo = fileSystem.DriveInfo.GetDrives();\n\n        await That(drivesInfo.Where(d => string.Equals(d.Name, @\"D:\\\", StringComparison.InvariantCultureIgnoreCase))).HasCount().EqualTo(1);\n    }\n\n    [Test]\n    public async Task MockFileSystem_DefaultState_DefaultTempDirectoryExists()\n    {\n        var tempDirectory = XFS.Path(@\"C:\\temp\");\n\n        var mockFileSystem = new MockFileSystem();\n        var mockFileSystemOverload = new MockFileSystem(null, string.Empty);\n\n        await That(mockFileSystem.Directory.Exists(tempDirectory)).IsTrue();\n        await That(mockFileSystemOverload.Directory.Exists(tempDirectory)).IsTrue();\n    }\n\n    [Test]\n    public async Task MockFileSystem_FileSystemWatcher_Can_Be_Overridden()\n    {\n        var path = XFS.Path(@\"C:\\root\");\n        var fileSystem = new TestFileSystem(new TestFileSystemWatcherFactory());\n        var watcher = fileSystem.FileSystemWatcher.New(path);\n        await That(watcher.Path).IsEqualTo(path);\n    }\n\n    [Test]\n    public async Task MockFileSystem_DeleteDirectoryRecursive_WithReadOnlyFile_ShouldThrowUnauthorizedException()\n    {\n        string baseDirectory = XFS.Path(@\"C:\\Test\");\n        string textFile = XFS.Path(@\"C:\\Test\\file.txt\");\n\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddFile(baseDirectory, new MockFileData(string.Empty));\n        fileSystem.AddFile(textFile, new MockFileData(\"Content\"));\n        fileSystem.File.SetAttributes(textFile, FileAttributes.ReadOnly);\n\n        Action action = () => fileSystem.Directory.Delete(baseDirectory, true);\n\n        await That(action).Throws<UnauthorizedAccessException>();\n        await That(fileSystem.File.Exists(textFile)).IsTrue();\n        await That(fileSystem.Directory.Exists(baseDirectory)).IsTrue();\n    }\n\n    private class TestFileSystem : MockFileSystem\n    {\n        private readonly IFileSystemWatcherFactory fileSystemWatcherFactory;\n\n        public TestFileSystem(IFileSystemWatcherFactory fileSystemWatcherFactory)\n        {\n            this.fileSystemWatcherFactory = fileSystemWatcherFactory;\n        }\n\n        public override IFileSystemWatcherFactory FileSystemWatcher => fileSystemWatcherFactory;\n    }\n\n    private class TestFileSystemWatcherFactory : IFileSystemWatcherFactory\n    {\n        public IFileSystemWatcher CreateNew() => New();\n        public IFileSystemWatcher CreateNew(string path) => New(path);\n        public IFileSystemWatcher CreateNew(string path, string filter) => New(path, filter);\n        public IFileSystemWatcher New()\n            => new TestFileSystemWatcher(null);\n\n        public IFileSystemWatcher New(string path)\n            => new TestFileSystemWatcher(path);\n\n        public IFileSystemWatcher New(string path, string filter)\n            => new TestFileSystemWatcher(path, filter);\n\n        public IFileSystemWatcher Wrap(FileSystemWatcher fileSystemWatcher)\n            => new TestFileSystemWatcher(fileSystemWatcher.Path, fileSystemWatcher.Filter);\n\n        public IFileSystemWatcher FromPath(string path) => new TestFileSystemWatcher(path);\n        public IFileSystem FileSystem => null!;\n    }\n\n    private class TestFileSystemWatcher : FileSystemWatcherBase\n    {\n        public TestFileSystemWatcher(string path) => Path = path;\n\n        public TestFileSystemWatcher(string path, string filter)\n        {\n            Path = path;\n            Filter = filter;\n        }\n\n        public override string Path { get; set; }\n        public override IFileSystem FileSystem { get; }\n        public override bool IncludeSubdirectories { get; set; }\n        public override IContainer Container { get; }\n        public override bool EnableRaisingEvents { get; set; }\n        public override string Filter { get; set; }\n        public override int InternalBufferSize { get; set; }\n        public override NotifyFilters NotifyFilter { get; set; }\n        public override ISite Site { get; set; }\n        public override ISynchronizeInvoke SynchronizingObject { get; set; }\n#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS\n        public override Collection<string> Filters { get; }\n#endif\n        public override void BeginInit() { }\n        public override void EndInit() { }\n        public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType)\n        {\n            _ = changeType;\n            return default(IWaitForChangedResult);\n        }\n\n        public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, int timeout)\n        {\n            _ = changeType;\n            _ = timeout;\n            return default(IWaitForChangedResult);\n        }\n\n#if FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN\n        public override IWaitForChangedResult WaitForChanged(WatcherChangeTypes changeType, TimeSpan timeout)\n        {\n            _ = changeType;\n            _ = timeout;\n            return default(IWaitForChangedResult);\n        }\n#endif\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemWatcherFactoryTests.cs",
    "content": "﻿using NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileSystemWatcherFactoryTests\n{\n    [Test]\n    public async Task MockFileSystemWatcherFactory_CreateNew_ShouldThrowNotImplementedException()\n    {\n        var factory = new MockFileSystemWatcherFactory(new MockFileSystem());\n        await That(() => factory.New()).Throws<NotImplementedException>();\n    }\n\n    [Test]\n    public async Task MockFileSystemWatcherFactory_CreateNewWithPath_ShouldThrowNotImplementedException()\n    {\n        var path = XFS.Path(@\"y:\\test\");\n        var factory = new MockFileSystemWatcherFactory(new MockFileSystem());\n        await That(() => factory.New(path)).Throws<NotImplementedException>();\n    }\n\n    [Test]\n    public async Task MockFileSystemWatcherFactory_CreateNewWithPathAndFilter_ShouldThrowNotImplementedException()\n    {\n        var path = XFS.Path(@\"y:\\test\");\n        var filter = \"*.txt\";\n        var factory = new MockFileSystemWatcherFactory(new MockFileSystem());\n        await That(() => factory.New(path, filter)).Throws<NotImplementedException>();\n    }\n\n    [Test]\n    public async Task MockFileSystemWatcherFactory_FromPath_ShouldThrowNotImplementedException()\n    {\n        var path = XFS.Path(@\"y:\\test\");\n        var factory = new MockFileSystemWatcherFactory(new MockFileSystem());\n        await That(() => factory.New(path)).Throws<NotImplementedException>();\n    }\n\n    [Test]\n    public async Task MockFileSystemWatcherFactory_Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new MockFileSystem();\n\n        var result = fileSystem.FileSystemWatcher.Wrap(null);\n\n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Runtime.Serialization.Formatters.Binary;\nusing System.Text;\nusing NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockFileTests\n{\n    [Test]\n    public async Task MockFile_Constructor_ShouldThrowArgumentNullExceptionIfMockFileDataAccessorIsNull()\n    {\n        // Arrange\n        // nothing to do\n\n        // Act\n        Action action = () => new MockFile(null);\n\n        // Assert\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockFile_GetSetCreationTime_ShouldPersist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var creationTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetCreationTime(path, creationTime);\n        var result = file.GetCreationTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_SetCreationTimeUtc_ShouldAffectCreationTime()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var creationTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetCreationTimeUtc(path, creationTime.ToUniversalTime());\n        var result = file.GetCreationTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(creationTime);\n    }\n\n    [Test]\n    public async Task MockFile_SetCreationTime_ShouldAffectCreationTimeUtc()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var creationTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetCreationTime(path, creationTime);\n        var result = file.GetCreationTimeUtc(path);\n\n        // Assert\n        await That(result).IsEqualTo(creationTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFile_GetSetLastAccessTime_ShouldPersist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastAccessTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastAccessTime(path, lastAccessTime);\n        var result = file.GetLastAccessTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastAccessTime);\n    }\n\n    [Test]\n    public async Task MockFile_SetLastAccessTimeUtc_ShouldAffectLastAccessTime()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastAccessTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastAccessTimeUtc(path, lastAccessTime.ToUniversalTime());\n        var result = file.GetLastAccessTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastAccessTime);\n    }\n\n    [Test]\n    public async Task MockFile_SetLastAccessTime_ShouldAffectLastAccessTimeUtc()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastAccessTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastAccessTime(path, lastAccessTime);\n        var result = file.GetLastAccessTimeUtc(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastAccessTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFile_GetSetLastWriteTime_ShouldPersist()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastWriteTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastWriteTime(path, lastWriteTime);\n        var result = file.GetLastWriteTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastWriteTime);\n    }\n\n    static async Task ExecuteDefaultValueTest(Func<MockFile, string, DateTime> getDateValue)\n    {\n        var expected = new DateTime(1601, 01, 01, 00, 00, 00, DateTimeKind.Utc);\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        var file = new MockFile(fileSystem);\n\n        var actual = getDateValue(file, path);\n\n        await That(actual.ToUniversalTime()).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTimeOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetLastWriteTime(p));\n    }\n\n    [Test]\n    public async Task MockFile_GetLastWriteTimeUtcOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetLastWriteTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTimeUtcOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetLastAccessTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockFile_GetLastAccessTimeOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetLastAccessTime(p));\n    }\n\n    [Test]\n    public async Task MockFile_GetAttributeOfNonExistentFileButParentDirectoryExists_ShouldThrowOneFileNotFoundException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        Action action = () => fileSystem.File.GetAttributes(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(action).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_GetAttributeOfNonExistentFile_ShouldThrowOneDirectoryNotFoundException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetAttributes(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_GetAttributeOfExistingFile_ShouldReturnCorrectValue()\n    {\n        var filedata = new MockFileData(\"test\")\n        {\n            Attributes = FileAttributes.Hidden\n        };\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"),  filedata }\n        });\n\n        var attributes = fileSystem.File.GetAttributes(XFS.Path(@\"c:\\something\\demo.txt\"));\n        await That(attributes).IsEqualTo(FileAttributes.Hidden);\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.UNCPaths)]\n    public async Task MockFile_GetAttributeOfExistingUncDirectory_ShouldReturnCorrectValue()\n    {\n        var filedata = new MockFileData(\"test\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"\\\\share\\folder\\demo.txt\"), filedata }\n        });\n\n        var attributes = fileSystem.File.GetAttributes(XFS.Path(@\"\\\\share\\folder\"));\n        await That(attributes).IsEqualTo(FileAttributes.Directory);\n    }\n\n    [Test]\n    public async Task MockFile_GetAttributeWithEmptyParameter_ShouldThrowOneArgumentException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetAttributes(string.Empty);\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.Message).StartsWith(\"The path is not of a legal form.\");\n    }\n\n    [Test]\n    public async Task MockFile_GetAttributeWithIllegalParameter_ShouldThrowOneArgumentException()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.GetAttributes(string.Empty);\n\n        // Assert\n        // Note: The actual type of the exception differs from the documentation.\n        //       According to the documentation it should be of type NotSupportedException.\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTimeOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetCreationTime(p));\n    }\n\n    [Test]\n    public async Task MockFile_GetCreationTimeUtcOfNonExistentFile_ShouldReturnDefaultValue()\n    {\n        await ExecuteDefaultValueTest((f, p) => f.GetCreationTimeUtc(p));\n    }\n\n    [Test]\n    public async Task MockFile_SetLastWriteTimeUtc_ShouldAffectLastWriteTime()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastWriteTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastWriteTimeUtc(path, lastWriteTime.ToUniversalTime());\n        var result = file.GetLastWriteTime(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastWriteTime);\n    }\n\n    [Test]\n    public async Task MockFile_SetLastWriteTime_ShouldAffectLastWriteTimeUtc()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"Demo text content\") }\n        });\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var lastWriteTime = new DateTime(2010, 6, 4, 13, 26, 42);\n        file.SetLastWriteTime(path, lastWriteTime);\n        var result = file.GetLastWriteTimeUtc(path);\n\n        // Assert\n        await That(result).IsEqualTo(lastWriteTime.ToUniversalTime());\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllText_ShouldReturnOriginalTextData()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(\"Demo text content\") },\n            { XFS.Path(@\"c:\\something\\other.gif\"), new MockFileData(new byte[] { 0x21, 0x58, 0x3f, 0xa9 }) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadAllText(XFS.Path(@\"c:\\something\\demo.txt\"));\n\n        // Assert\n        await That(result).IsEqualTo(\"Demo text content\");\n    }\n\n    [Test]\n    public async Task MockFile_ReadAllText_ShouldReturnOriginalDataWithCustomEncoding()\n    {\n        // Arrange\n        string text = \"Hello there!\";\n        var encodedText = Encoding.BigEndianUnicode.GetBytes(text);\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\something\\demo.txt\"), new MockFileData(encodedText) }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        // Act\n        var result = file.ReadAllText(XFS.Path(@\"c:\\something\\demo.txt\"), Encoding.BigEndianUnicode);\n\n        // Assert\n        await That(result).IsEqualTo(text);\n    }\n\n    public static IEnumerable<Encoding> GetEncodingsForReadAllText()\n    {\n        // little endian\n        yield return new UTF32Encoding(false, true, true);\n\n        // big endian\n        yield return new UTF32Encoding(true, true, true);\n        yield return new UTF8Encoding(true, true);\n\n        yield return new ASCIIEncoding();\n    }\n\n    [TestCaseSource(typeof(MockFileTests), nameof(GetEncodingsForReadAllText))]\n    public async Task MockFile_ReadAllText_ShouldReturnTheOriginalContentWhenTheFileContainsDifferentEncodings(Encoding encoding)\n    {\n        // Arrange\n        string text = \"Hello there!\";\n        var encodedText = encoding.GetPreamble().Concat(encoding.GetBytes(text)).ToArray();\n        var path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(encodedText) }\n        });\n\n        // Act\n        var actualText = fileSystem.File.ReadAllText(path);\n\n        // Assert\n        await That(actualText).IsEqualTo(text);\n    }\n\n    [Test]\n    public async Task MockFile_OpenWrite_ShouldCreateNewFiles()\n    {\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string fileContent = \"this is some content\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        var bytes = new UTF8Encoding(true).GetBytes(fileContent);\n        var stream = fileSystem.File.OpenWrite(filePath);\n        stream.Write(bytes, 0, bytes.Length);\n        stream.Dispose();\n\n        await That(fileSystem.FileExists(filePath)).IsTrue();\n        await That(fileSystem.GetFile(filePath).TextContents).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_OpenWrite_ShouldNotCreateFolders()\n    {\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\"); // c:\\something does not exist: OpenWrite should fail\n        var fileSystem = new MockFileSystem();\n\n        await That(() => fileSystem.File.OpenWrite(filePath)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_OpenWrite_ShouldOverwriteExistingFiles()\n    {\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string startFileContent = \"this is some content\";\n        string endFileContent = \"this is some other content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {filePath, new MockFileData(startFileContent)}\n        });\n\n        var bytes = new UTF8Encoding(true).GetBytes(endFileContent);\n        var stream = fileSystem.File.OpenWrite(filePath);\n        stream.Write(bytes, 0, bytes.Length);\n        stream.Dispose();\n\n        await That(fileSystem.FileExists(filePath)).IsTrue();\n        await That(fileSystem.GetFile(filePath).TextContents).IsEqualTo(endFileContent);\n    }\n\n    [Test]\n    public async Task MockFile_Delete_ShouldRemoveFileFromFileSystem()\n    {\n        string fullPath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { fullPath, new MockFileData(\"Demo text content\") }\n        });\n\n        var file = new MockFile(fileSystem);\n\n        file.Delete(fullPath);\n\n        await That(fileSystem.FileExists(fullPath)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_Delete_Should_RemoveFiles()\n    {\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string fileContent = \"this is some content\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData> { { filePath, new MockFileData(fileContent) } });\n        await That(fileSystem.AllFiles.Count()).IsEqualTo(1);\n        fileSystem.File.Delete(filePath);\n        await That(fileSystem.AllFiles.Count()).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task MockFile_Delete_No_File_Does_Nothing()\n    {\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>()\n        {\n            { XFS.Path(@\"c:\\something\\exist.txt\"), new MockFileData(\"Demo text content\") },\n        });\n\n        string filePath = XFS.Path(@\"c:\\something\\not_exist.txt\");\n\n        await That(() => fileSystem.File.Delete(filePath)).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task MockFile_Delete_ShouldThrowUnauthorizedAccessException_WhenPathIsADirectory()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { XFS.Path(@\"c:\\bar\"), new MockDirectoryData() },\n        });\n\n        // Act\n        Action action = () => fileSystem.File.Delete(XFS.Path(@\"c:\\bar\"));\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFile_AppendText_AppendTextToAnExistingFile()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\does\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filepath, new MockFileData(\"I'm here. \") }\n        });\n\n        var stream = filesystem.File.AppendText(filepath);\n\n        stream.Write(\"Me too!\");\n        stream.Flush();\n        stream.Dispose();\n\n        var file = filesystem.GetFile(filepath);\n        await That(file.TextContents).IsEqualTo(\"I'm here. Me too!\");\n    }\n\n    [Test]\n    public async Task MockFile_AppendText_CreatesNewFileForAppendToNonExistingFile()\n    {\n        string filepath = XFS.Path(@\"c:\\something\\doesnt\\exist.txt\");\n        var filesystem = new MockFileSystem(new Dictionary<string, MockFileData>());\n        filesystem.AddDirectory(XFS.Path(@\"c:\\something\\doesnt\"));\n\n        var stream = filesystem.File.AppendText(filepath);\n\n        stream.Write(\"New too!\");\n        stream.Flush();\n        stream.Dispose();\n\n        var file = filesystem.GetFile(filepath);\n        await That(file.TextContents).IsEqualTo(\"New too!\");\n        await That(filesystem.FileExists(filepath)).IsTrue();\n    }\n\n#if !NET9_0_OR_GREATER\n    [Test]\n    public void Serializable_works()\n    {\n        //Arrange\n        MockFileData data = new MockFileData(\"Text Contents\");\n\n        //Act\n#pragma warning disable SYSLIB0011\n        IFormatter formatter = new BinaryFormatter();\n        Stream stream = new MemoryStream();\n\n        formatter.Serialize(stream, data);\n#pragma warning restore SYSLIB0011\n\n        //Assert\n        Assert.Pass();\n    }\n#endif\n\n#if !NET9_0_OR_GREATER\n    [Test]\n    public async Task Serializable_can_deserialize()\n    {\n        //Arrange\n        string textContentStr = \"Text Contents\";\n\n        //Act\n        MockFileData data = new MockFileData(textContentStr);\n\n#pragma warning disable SYSLIB0011\n        IFormatter formatter = new BinaryFormatter();\n        Stream stream = new MemoryStream();\n        formatter.Serialize(stream, data);\n\n        stream.Seek(0, SeekOrigin.Begin);\n\n        MockFileData deserialized = (MockFileData)formatter.Deserialize(stream);\n#pragma warning restore SYSLIB0011\n\n        //Assert\n        await That(deserialized.TextContents).IsEqualTo(textContentStr);\n    }\n#endif\n\n    [Test]\n    public async Task MockFile_Encrypt_ShouldSetEncryptedAttribute()\n    {\n        // Arrange\n        var fileData = new MockFileData(\"Demo text content\");\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {filePath, fileData }\n        });\n\n        // Act\n#pragma warning disable CA1416\n        fileSystem.File.Encrypt(filePath);\n#pragma warning restore CA1416\n        var attributes = fileSystem.File.GetAttributes(filePath);\n\n        // Assert\n        await That(attributes & FileAttributes.Encrypted).IsEqualTo(FileAttributes.Encrypted);\n    }\n\n    [Test]\n    public async Task MockFile_Decrypt_ShouldRemoveEncryptedAttribute()\n    {\n        // Arrange\n        const string Content = \"Demo text content\";\n        var fileData = new MockFileData(Content);\n        var filePath = XFS.Path(@\"c:\\a.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            {filePath, fileData }\n        });\n#pragma warning disable CA1416\n        fileSystem.File.Encrypt(filePath);\n#pragma warning restore CA1416\n\n        // Act\n#pragma warning disable CA1416\n        fileSystem.File.Decrypt(filePath);\n#pragma warning restore CA1416\n        var attributes = fileSystem.File.GetAttributes(filePath);\n\n        // Assert\n        await That(attributes & FileAttributes.Encrypted).IsNotEqualTo(FileAttributes.Encrypted);\n    }\n\n    [Test]\n    public async Task MockFile_Replace_ShouldReplaceFileContents()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n\n        // Act\n        fileSystem.File.Replace(path1, path2, null);\n\n        await That(fileSystem.File.ReadAllText(path2)).IsEqualTo(\"1\");\n    }\n\n    [Test]\n    public async Task MockFile_Replace_ShouldCreateBackup()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var path3 = XFS.Path(@\"c:\\temp\\file3.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n\n        // Act\n        fileSystem.File.Replace(path1, path2, path3);\n\n        await That(fileSystem.File.ReadAllText(path3)).IsEqualTo(\"2\");\n    }\n\n    [Test]\n    public async Task MockFile_Replace_ShouldThrowIfDirectoryOfBackupPathDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        var path3 = XFS.Path(@\"c:\\temp\\subdirectory\\file3.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n\n        // Act\n        await That(() => fileSystem.File.Replace(path1, path2, path3)).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Replace_ShouldThrowIfSourceFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path2, new MockFileData(\"2\"));\n\n        await That(() => fileSystem.File.Replace(path1, path2, null)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_Replace_ShouldThrowIfDestinationFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        var path1 = XFS.Path(@\"c:\\temp\\file1.txt\");\n        var path2 = XFS.Path(@\"c:\\temp\\file2.txt\");\n        fileSystem.AddFile(path1, new MockFileData(\"1\"));\n\n        await That(() => fileSystem.File.Replace(path1, path2, null)).Throws<FileNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_OpenRead_ShouldReturnReadOnlyStream()\n    {\n        // Tests issue #230\n        // Arrange\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        string startContent = \"hi there\";\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { filePath, new MockFileData(startContent) }\n        });\n\n        // Act\n        var stream = fileSystem.File.OpenRead(filePath);\n\n        // Assert\n        await That(stream.CanWrite).IsFalse();\n        await That(() => stream.WriteByte(0)).Throws<NotSupportedException>();\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.Drives)]\n    public async Task MockFile_Replace_SourceAndDestinationDifferOnlyInCasing_ShouldThrowIOException()\n    {\n        var fileSystem = new MockFileSystem();\n        string sourceFilePath = @\"c:\\temp\\demo.txt\";\n        string destFilePath = @\"c:\\temp\\DEMO.txt\";\n        string fileContent = \"content\";\n        fileSystem.File.WriteAllText(sourceFilePath, fileContent);\n\n        void Act() => fileSystem.File.Replace(sourceFilePath, destFilePath, null, true);\n\n        await That(Act).Throws<IOException>()\n            .HasMessage(\"The process cannot access the file because it is being used by another process.\");\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileVersionInfoFactoryTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileVersionInfoFactoryTests\n{\n    [Test]\n    public async Task MockFileVersionInfoFactory_GetVersionInfo_ShouldReturnTheFileVersionInfoOfTheMockFileData()\n    {\n        // Arrange\n        var fileVersionInfo = new MockFileVersionInfo(@\"c:\\a.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\a.txt\", new MockFileData(\"Demo text content\") { FileVersionInfo = fileVersionInfo } }\n        });\n\n        // Act\n        var result = fileSystem.FileVersionInfo.GetVersionInfo(@\"c:\\a.txt\");\n\n        // Assert\n        await That(result).IsEqualTo(fileVersionInfo);\n    }\n\n    [Test]\n    public async Task MockFileVersionInfoFactory_GetVersionInfo_ShouldThrowFileNotFoundExceptionIfFileDoesNotExist()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { @\"c:\\a.txt\", new MockFileData(\"Demo text content\") },\n            { @\"c:\\a\\b\\c.txt\", new MockFileData(\"Demo text content\") },\n        });\n\n        // Act\n        Action code = () => fileSystem.FileVersionInfo.GetVersionInfo(@\"c:\\foo.txt\");\n\n        // Assert\n        await That(code).Throws<FileNotFoundException>();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileVersionInfoTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class MockFileVersionInfoTests\n{\n    [Test]\n    public async Task MockFileVersionInfo_ToString_ShouldReturnTheDefaultFormat()\n    {\n        // Arrange\n        var mockFileVersionInfo = new MockFileVersionInfo(\n            fileName: @\"c:\\b.txt\",\n            fileVersion: \"1.0.0.0\",\n            productVersion: \"1.0.0.0\",\n            fileDescription: \"b\",\n            productName: \"b\",\n            companyName: null,\n            comments: null,\n            internalName: \"b.txt\",\n            isDebug: true,\n            isPatched: true,\n            isPrivateBuild: true,\n            isPreRelease: true,\n            isSpecialBuild: true,\n            language: \"English\",\n            legalCopyright: null,\n            legalTrademarks: null,\n            originalFilename: \"b.txt\",\n            privateBuild: null,\n            specialBuild: null);\n\n        string expected = @\"File:             c:\\b.txt\nInternalName:     b.txt\nOriginalFilename: b.txt\nFileVersion:      1.0.0.0\nFileDescription:  b\nProduct:          b\nProductVersion:   1.0.0.0\nDebug:            True\nPatched:          True\nPreRelease:       True\nPrivateBuild:     True\nSpecialBuild:     True\nLanguage:         English\n\";\n\n        // Act & Assert\n        await That(mockFileVersionInfo.ToString()).IsEqualTo(expected);\n    }\n\n    [Test]\n    public async Task MockFileVersionInfo_Constructor_ShouldSetFileAndProductVersionNumbersIfFileAndProductVersionAreNotNull()\n    {\n        // Arrange\n        var mockFileVersionInfo = new MockFileVersionInfo(@\"c:\\file.txt\", fileVersion: \"1.2.3.4\", productVersion: \"5.6.7.8\");\n\n        // Assert\n        await That(mockFileVersionInfo.FileMajorPart).IsEqualTo(1);\n        await That(mockFileVersionInfo.FileMinorPart).IsEqualTo(2);\n        await That(mockFileVersionInfo.FileBuildPart).IsEqualTo(3);\n        await That(mockFileVersionInfo.FilePrivatePart).IsEqualTo(4);\n        await That(mockFileVersionInfo.ProductMajorPart).IsEqualTo(5);\n        await That(mockFileVersionInfo.ProductMinorPart).IsEqualTo(6);\n        await That(mockFileVersionInfo.ProductBuildPart).IsEqualTo(7);\n        await That(mockFileVersionInfo.ProductPrivatePart).IsEqualTo(8);\n    }\n\n    [Test]\n    public async Task MockFileVersionInfo_Constructor_ShouldNotSetFileAndProductVersionNumbersIfFileAndProductVersionAreNull()\n    {\n        // Act\n        var mockFileVersionInfo = new MockFileVersionInfo(@\"c:\\a.txt\");\n\n        // Assert\n        await That(mockFileVersionInfo.FileMajorPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.FileMinorPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.FileBuildPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.FilePrivatePart).IsEqualTo(0);\n        await That(mockFileVersionInfo.ProductMajorPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.ProductMinorPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.ProductBuildPart).IsEqualTo(0);\n        await That(mockFileVersionInfo.ProductPrivatePart).IsEqualTo(0);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllBytesTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\nusing System.Threading.Tasks;\nusing System.Threading;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileWriteAllBytesTests\n{\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()\n    {\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"c:\\something\\file.txt\");\n        var fileContent = new byte[] { 1, 2, 3, 4 };\n\n        Action action = () => fileSystem.File.WriteAllBytes(path, fileContent);\n\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldWriteDataToMemoryFileSystem()\n    {\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        var fileContent = new byte[] { 1, 2, 3, 4 };\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        fileSystem.File.WriteAllBytes(path, fileContent);\n\n        await That(fileSystem.GetFile(path).Contents).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()\n    {\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"this is hidden\") },\n        });\n        fileSystem.File.SetAttributes(path, FileAttributes.Hidden);\n\n        Action action = () => fileSystem.File.WriteAllBytes(path, new byte[] { 123 });\n\n        await That(action).Throws<UnauthorizedAccessException>()\n            .Because($\"Access to the path '{path}' is denied.\");\n    }\n\n    [Test]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_WriteAllBytes_ShouldThrowAnArgumentExceptionIfContainsIllegalCharacters()\n    {\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"C:\"));\n\n        Action action = () => fileSystem.File.WriteAllBytes(XFS.Path(@\"C:\\a<b.txt\"), new byte[] { 123 });\n\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfPathIsNull()\n    {\n        var fileSystem = new MockFileSystem();\n\n        Action action = () => fileSystem.File.WriteAllBytes(null, new byte[] { 123 });\n\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfBytesAreNull()\n    {\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n        Action action = () => fileSystem.File.WriteAllBytes(path, null);\n\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).IsEqualTo(\"bytes\");\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllBytes_ShouldWriteASeparateCopyToTheFileSystem()\n    {\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"c:\\something\\file.bin\");\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n        var fileContent = new byte[] { 1, 2, 3, 4 };\n\n        fileSystem.File.WriteAllBytes(path, fileContent);\n\n        for(int i = 0; i < fileContent.Length; i++)\n        {\n            fileContent[i] += 1;\n        }\n\n        var readAgain = fileSystem.File.ReadAllBytes(path);\n\n        await That(fileContent).IsNotEqualTo(readAgain);\n    }\n\n\n#if FEATURE_ASYNC_FILE\n        [Test]\n        public async Task MockFile_WriteAllBytesAsync_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = XFS.Path(@\"c:\\something\\file.txt\");\n            var fileContent = new byte[] { 1, 2, 3, 4 };\n\n            Func<Task> action = () => fileSystem.File.WriteAllBytesAsync(path, fileContent);\n\n            await That(action).Throws<DirectoryNotFoundException>();\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled()\n        {\n            // Arrange\n            const string path = \"test.txt\";\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            async Task Act() =>\n                await fileSystem.File.WriteAllTextAsync(\n                    path,\n                    \"content\",\n                    new CancellationToken(canceled: true));\n            await That(Act).Throws<OperationCanceledException>();\n\n            // Assert\n            await That(fileSystem.File.Exists(path)).IsFalse();\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllBytesAsync_ShouldWriteDataToMemoryFileSystem()\n        {\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n            var fileSystem = new MockFileSystem();\n            var fileContent = new byte[] { 1, 2, 3, 4 };\n            fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n            await fileSystem.File.WriteAllBytesAsync(path, fileContent);\n\n            await That(fileSystem.GetFile(path).Contents).IsEqualTo(fileContent);\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllBytesAsync_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()\n        {\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n            var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n            {\n                { path, new MockFileData(\"this is hidden\") },\n            });\n            fileSystem.File.SetAttributes(path, FileAttributes.Hidden);\n\n            Func<Task> action = () => fileSystem.File.WriteAllBytesAsync(path, new byte[] { 123 });\n\n            await That(action).Throws<UnauthorizedAccessException>()\n                .Because($\"Access to the path '{path}' is denied.\");\n        }\n\n        [Test]\n        [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n        public async Task MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentExceptionIfContainsIllegalCharacters()\n        {\n            var fileSystem = new MockFileSystem();\n            fileSystem.AddDirectory(XFS.Path(@\"C:\"));\n\n            Func<Task> action = () => fileSystem.File.WriteAllBytesAsync(XFS.Path(@\"C:\\a<b.txt\"), new byte[] { 123 });\n\n            await That(action).Throws<ArgumentException>();\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentNullExceptionIfPathIsNull()\n        {\n            var fileSystem = new MockFileSystem();\n\n            Func<Task> action = () => fileSystem.File.WriteAllBytesAsync(null, new byte[] { 123 });\n\n            await That(action).Throws<ArgumentNullException>();\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentNullExceptionIfBytesAreNull()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n            Func<Task> action = () => fileSystem.File.WriteAllBytesAsync(path, null);\n\n            var exception = await That(action).Throws<ArgumentNullException>();\n            await That(exception.Message).StartsWith(\"Value cannot be null.\");\n            await That(exception.ParamName).IsEqualTo(\"bytes\");\n        }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllLinesTests.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Text;\nusing System.Threading;\nusing NUnit.Framework;\nusing XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\npublic class MockFileWriteAllLinesTests\n{\n    private class TestDataForWriteAllLines\n    {\n        public static readonly string Path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n        public static IEnumerable ForDifferentEncoding\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n                var fileContentEnumerable = new List<string> { \"first line\", \"second line\", \"third line\", \"fourth and last line\" };\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Action writeEnumerable = () => fileSystem.File.WriteAllLines(Path, fileContentEnumerable);\n                Action writeEnumerableUtf32 = () => fileSystem.File.WriteAllLines(Path, fileContentEnumerable, Encoding.UTF32);\n                Action writeArray = () => fileSystem.File.WriteAllLines(Path, fileContentArray);\n                Action writeArrayUtf32 = () => fileSystem.File.WriteAllLines(Path, fileContentArray, Encoding.UTF32);\n                var expectedContent = string.Format(CultureInfo.InvariantCulture,\n                    \"first line{0}second line{0}third line{0}fourth and last line{0}\", Environment.NewLine);\n\n                // IEnumerable\n                yield return new TestCaseData(fileSystem, writeEnumerable, expectedContent)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>)\");\n                yield return new TestCaseData(fileSystem, writeEnumerableUtf32, expectedContent)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(fileSystem, writeArray, expectedContent)\n                    .SetName(\"WriteAllLines(string, string[])\");\n                yield return new TestCaseData(fileSystem, writeArrayUtf32, expectedContent)\n                    .SetName(\"WriteAllLines(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForIllegalPath\n        {\n            get\n            {\n                const string illegalPath = \"<<<\";\n                return GetCasesForArgumentChecking(illegalPath);\n            }\n        }\n\n        public static IEnumerable ForNullPath\n        {\n            get\n            {\n                const string illegalPath = null;\n                return GetCasesForArgumentChecking(illegalPath);\n            }\n        }\n\n        private static IEnumerable GetCasesForArgumentChecking(string path)\n        {\n            var fileSystem = new MockFileSystem();\n            var fileContentEnumerable = new List<string>();\n            var fileContentArray = fileContentEnumerable.ToArray();\n            Action writeEnumerable = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable);\n            Action writeEnumerableUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable, Encoding.UTF32);\n            Action writeArray = () => fileSystem.File.WriteAllLines(path, fileContentArray);\n            Action writeArrayUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentArray, Encoding.UTF32);\n\n            // IEnumerable\n            yield return new TestCaseData(writeEnumerable)\n                .SetName(\"WriteAllLines(string, IEnumerable<string>) input: \" + path);\n            yield return new TestCaseData(writeEnumerableUtf32)\n                .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32) input: \" + path);\n\n            // string[]\n            yield return new TestCaseData(writeArray)\n                .SetName(\"WriteAllLines(string, string[]) input: \" + path);\n            yield return new TestCaseData(writeArrayUtf32)\n                .SetName(\"WriteAllLines(string, string[], Encoding.UTF32) input: \" + path);\n        }\n\n        private static IEnumerable ForNullEncoding\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Action writeEnumerableNull = () => fileSystem.File.WriteAllLines(Path, fileContentEnumerable, null);\n                Action writeArrayNull = () => fileSystem.File.WriteAllLines(Path, fileContentArray, null);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumerableNull)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArrayNull)\n                    .SetName(\"WriteAllLines(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForPathIsDirectory\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\");\n                fileSystem.Directory.CreateDirectory(path);\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Action writeEnumerable = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable);\n                Action writeEnumerableUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable, Encoding.UTF32);\n                Action writeArray = () => fileSystem.File.WriteAllLines(path, fileContentArray);\n                Action writeArrayUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentArray, Encoding.UTF32);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumerable, path)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumerableUtf32, path)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray, path)\n                    .SetName(\"WriteAllLines(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32, path)\n                    .SetName(\"WriteAllLines(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForFileIsReadOnly\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\\file.txt\");\n                var mockFileData = new MockFileData(string.Empty);\n                mockFileData.Attributes = FileAttributes.ReadOnly;\n                fileSystem.AddFile(path, mockFileData);\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Action writeEnumerable = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable);\n                Action writeEnumerableUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable, Encoding.UTF32);\n                Action writeArray = () => fileSystem.File.WriteAllLines(path, fileContentArray);\n                Action writeArrayUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentArray, Encoding.UTF32);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumerable, path)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumerableUtf32, path)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray, path)\n                    .SetName(\"WriteAllLines(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32, path)\n                    .SetName(\"WriteAllLines(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForContentsIsNull\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\\file.txt\");\n                var mockFileData = new MockFileData(string.Empty);\n                mockFileData.Attributes = FileAttributes.ReadOnly;\n                fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n                fileSystem.AddFile(path, mockFileData);\n                List<string> fileContentEnumerable = null;\n                string[] fileContentArray = null;\n\n                // ReSharper disable ExpressionIsAlwaysNull\n                Action writeEnumerable = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable);\n                Action writeEnumerableUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentEnumerable, Encoding.UTF32);\n                Action writeArray = () => fileSystem.File.WriteAllLines(path, fileContentArray);\n                Action writeArrayUtf32 = () => fileSystem.File.WriteAllLines(path, fileContentArray, Encoding.UTF32);\n                // ReSharper restore ExpressionIsAlwaysNull\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumerable)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumerableUtf32)\n                    .SetName(\"WriteAllLines(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray)\n                    .SetName(\"WriteAllLines(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32)\n                    .SetName(\"WriteAllLines(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n#if FEATURE_ASYNC_FILE\n        public static IEnumerable ForDifferentEncodingAsync\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n                var fileContentEnumerable = new List<string> { \"first line\", \"second line\", \"third line\", \"fourth and last line\" };\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Action writeEnumberable = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentEnumerable);\n                Action writeEnumberableUtf32 = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentEnumerable, Encoding.UTF32);\n                Action writeArray = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentArray);\n                Action writeArrayUtf32 = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentArray, Encoding.UTF32);\n                var expectedContent = string.Format(CultureInfo.InvariantCulture,\n                    \"first line{0}second line{0}third line{0}fourth and last line{0}\", Environment.NewLine);\n\n                // IEnumerable\n                yield return new TestCaseData(fileSystem, writeEnumberable, expectedContent)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>)\");\n                yield return new TestCaseData(fileSystem, writeEnumberableUtf32, expectedContent)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(fileSystem, writeArray, expectedContent)\n                    .SetName(\"WriteAllLinesAsync(string, string[])\");\n                yield return new TestCaseData(fileSystem, writeArrayUtf32, expectedContent)\n                    .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForIllegalPathAsync\n        {\n            get\n            {\n                const string illegalPath = \"<<<\";\n                return GetCasesForArgumentCheckingAsync(illegalPath);\n            }\n        }\n\n        public static IEnumerable ForNullPathAsync\n        {\n            get\n            {\n                const string illegalPath = null;\n                return GetCasesForArgumentCheckingAsync(illegalPath);\n            }\n        }\n\n        private static IEnumerable GetCasesForArgumentCheckingAsync(string path)\n        {\n            var fileSystem = new MockFileSystem();\n            var fileContentEnumerable = new List<string>();\n            var fileContentArray = fileContentEnumerable.ToArray();\n            Func<Task> writeEnumberable = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable);\n            Func<Task> writeEnumberableUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable, Encoding.UTF32);\n            Func<Task> writeArray = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray);\n            Func<Task> writeArrayUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray, Encoding.UTF32);\n\n            // IEnumerable\n            yield return new TestCaseData(writeEnumberable)\n                .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>) input: \" + path);\n            yield return new TestCaseData(writeEnumberableUtf32)\n                .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32) input: \" + path);\n\n            // string[]\n            yield return new TestCaseData(writeArray)\n                .SetName(\"WriteAllLinesAsync(string, string[]) input: \" + path);\n            yield return new TestCaseData(writeArrayUtf32)\n                .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32) input: \" + path);\n        }\n\n        private static IEnumerable ForNullEncodingAsync\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Func<Task> writeEnumberableNull = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentEnumerable, null);\n                Func<Task> writeArrayNull = () => fileSystem.File.WriteAllLinesAsync(Path, fileContentArray, null);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumberableNull)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArrayNull)\n                    .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForPathIsDirectoryAsync\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\");\n                fileSystem.Directory.CreateDirectory(path);\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Func<Task> writeEnumberable = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable);\n                Func<Task> writeEnumberableUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable, Encoding.UTF32);\n                Func<Task> writeArray = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray);\n                Func<Task> writeArrayUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray, Encoding.UTF32);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumberable, path)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumberableUtf32, path)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray, path)\n                    .SetName(\"WriteAllLinesAsync(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32, path)\n                    .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForFileIsReadOnlyAsync\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\\file.txt\");\n                var mockFileData = new MockFileData(string.Empty);\n                mockFileData.Attributes = FileAttributes.ReadOnly;\n                fileSystem.AddFile(path, mockFileData);\n                var fileContentEnumerable = new List<string>();\n                var fileContentArray = fileContentEnumerable.ToArray();\n                Func<Task> writeEnumberable = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable);\n                Func<Task> writeEnumberableUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable, Encoding.UTF32);\n                Func<Task> writeArray = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray);\n                Func<Task> writeArrayUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray, Encoding.UTF32);\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumberable, path)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumberableUtf32, path)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray, path)\n                    .SetName(\"WriteAllLinesAsync(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32, path)\n                    .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        public static IEnumerable ForContentsIsNullAsync\n        {\n            get\n            {\n                var fileSystem = new MockFileSystem();\n                var path = XFS.Path(@\"c:\\something\\file.txt\");\n                var mockFileData = new MockFileData(string.Empty);\n                mockFileData.Attributes = FileAttributes.ReadOnly;\n                fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n                fileSystem.AddFile(path, mockFileData);\n                List<string> fileContentEnumerable = null;\n                string[] fileContentArray = null;\n\n                // ReSharper disable ExpressionIsAlwaysNull\n                Func<Task> writeEnumberable = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable);\n                Func<Task> writeEnumberableUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentEnumerable, Encoding.UTF32);\n                Func<Task> writeArray = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray);\n                Func<Task> writeArrayUtf32 = () => fileSystem.File.WriteAllLinesAsync(path, fileContentArray, Encoding.UTF32);\n                // ReSharper restore ExpressionIsAlwaysNull\n\n                // IEnumerable\n                yield return new TestCaseData(writeEnumberable)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>)\");\n                yield return new TestCaseData(writeEnumberableUtf32)\n                    .SetName(\"WriteAllLinesAsync(string, IEnumerable<string>, Encoding.UTF32)\");\n\n                // string[]\n                yield return new TestCaseData(writeArray)\n                    .SetName(\"WriteAllLinesAsync(string, string[])\");\n                yield return new TestCaseData(writeArrayUtf32)\n                    .SetName(\"WriteAllLinesAsync(string, string[], Encoding.UTF32)\");\n            }\n        }\n\n        [Test]\n        public async Task MockFile_WriteAllLinesAsync_ShouldThrowOperationCanceledExceptionIfCancelled()\n        {\n            // Arrange\n            const string path = \"test.txt\";\n            var fileSystem = new MockFileSystem();\n\n            // Act\n            async Task Act() =>\n                await fileSystem.File.WriteAllLinesAsync(\n                    path,\n                    new[] { \"line 1\", \"line 2\" },\n                    new CancellationToken(canceled: true));\n            await That(Act).Throws<OperationCanceledException>();\n\n            // Assert\n            await That(fileSystem.File.Exists(path)).IsFalse();\n        }\n#endif\n\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForDifferentEncoding))]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldWriteTheCorrectContent(IMockFileDataAccessor fileSystem, Action action, string expectedContent)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        action();\n\n        // Assert\n        var actualContent = fileSystem.GetFile(TestDataForWriteAllLines.Path).TextContents;\n        await That(actualContent).IsEqualTo(expectedContent);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForNullPath))]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowAnArgumentNullExceptionIfPathIsNull(Action action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).StartsWith(\"path\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), \"ForNullEncoding\")]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowAnArgumentNullExceptionIfEncodingIsNull(Action action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).StartsWith(\"encoding\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForIllegalPath))]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowAnArgumentExceptionIfPathContainsIllegalCharacters(Action action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.Message).IsEqualTo(\"Illegal characters in path.\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForPathIsDirectory))]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowAnUnauthorizedAccessExceptionIfPathIsOneDirectory(Action action, string path)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<UnauthorizedAccessException>();\n        var expectedMessage = string.Format(CultureInfo.InvariantCulture, \"Access to the path '{0}' is denied.\", path);\n        await That(exception.Message).IsEqualTo(expectedMessage);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForFileIsReadOnly))]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowOneUnauthorizedAccessExceptionIfFileIsReadOnly(Action action, string path)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<UnauthorizedAccessException>();\n        var expectedMessage = string.Format(CultureInfo.InvariantCulture, \"Access to the path '{0}' is denied.\", path);\n        await That(exception.Message).IsEqualTo(expectedMessage);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForContentsIsNull))]\n    public async Task MockFile_WriteAllLinesGeneric_ShouldThrowAnArgumentNullExceptionIfContentsIsNull(Action action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case sourceForContentsIsNull\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).IsEqualTo(\"contents\");\n    }\n\n#if FEATURE_ASYNC_FILE\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForDifferentEncodingAsync))]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldWriteTheCorrectContent(IMockFileDataAccessor fileSystem, Action action, string expectedContent)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        action();\n\n        // Assert\n        var actualContent = fileSystem.GetFile(TestDataForWriteAllLines.Path).TextContents;\n        await That(actualContent).IsEqualTo(expectedContent);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForNullPathAsync))]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowAnArgumentNullExceptionIfPathIsNull(Func<Task> action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).StartsWith(\"path\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), \"ForNullEncodingAsync\")]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowAnArgumentNullExceptionIfEncodingIsNull(Func<Task> action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).StartsWith(\"encoding\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForIllegalPathAsync))]\n    [WindowsOnly(WindowsSpecifics.StrictPathRules)]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowAnArgumentExceptionIfPathContainsIllegalCharacters(Func<Task> action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentException>();\n        await That(exception.Message).IsEqualTo(\"Illegal characters in path.\");\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForPathIsDirectoryAsync))]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowAnUnauthorizedAccessExceptionIfPathIsOneDirectory(Func<Task> action, string path)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<UnauthorizedAccessException>();\n        var expectedMessage = string.Format(CultureInfo.InvariantCulture, \"Access to the path '{0}' is denied.\", path);\n        await That(exception.Message).IsEqualTo(expectedMessage);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForFileIsReadOnlyAsync))]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowOneUnauthorizedAccessExceptionIfFileIsReadOnly(Func<Task> action, string path)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case source\n\n        // Assert\n        var exception = await That(action).Throws<UnauthorizedAccessException>();\n        var expectedMessage = string.Format(CultureInfo.InvariantCulture, \"Access to the path '{0}' is denied.\", path);\n        await That(exception.Message).IsEqualTo(expectedMessage);\n    }\n\n    [TestCaseSource(typeof(TestDataForWriteAllLines), nameof(TestDataForWriteAllLines.ForContentsIsNullAsync))]\n    public async Task MockFile_WriteAllLinesAsyncGeneric_ShouldThrowAnArgumentNullExceptionIfContentsIsNull(Func<Task> action)\n    {\n        // Arrange\n        // is done in the test case source\n\n        // Act\n        // is done in the test case sourceForContentsIsNull\n\n        // Assert\n        var exception = await That(action).Throws<ArgumentNullException>();\n        await That(exception.Message).StartsWith(\"Value cannot be null.\");\n        await That(exception.ParamName).IsEqualTo(\"contents\");\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileWriteAllTextTests.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing Collections.Generic;\n\nusing NUnit.Framework;\n\nusing Text;\n\nusing XFS = MockUnixSupport;\n\nusing System.Threading.Tasks;\nusing System.Threading;\n\npublic class MockFileWriteAllTextTests\n{\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldWriteTextFileToMemoryFileSystem()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        string fileContent = \"Hello there!\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        fileSystem.File.WriteAllText(path, fileContent);\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldOverwriteAnExistingFile()\n    {\n        // http://msdn.microsoft.com/en-us/library/ms143375.aspx\n\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        fileSystem.File.WriteAllText(path, \"foo\");\n        fileSystem.File.WriteAllText(path, \"bar\");\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"this is hidden\") },\n        });\n        fileSystem.File.SetAttributes(path, FileAttributes.Hidden);\n\n        // Act\n        Action action = () => fileSystem.File.WriteAllText(path, \"hello world\");\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>()\n            .Because($\"Access to the path '{path}' is denied.\");\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldThrowAnArgumentExceptionIfThePathIsEmpty()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Action action = () => fileSystem.File.WriteAllText(string.Empty, \"hello world\");\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldNotThrowAnArgumentNullExceptionIfTheContentIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string directoryPath = XFS.Path(@\"c:\\something\");\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        fileSystem.File.WriteAllText(filePath, null);\n\n        // Assert\n        // no exception should be thrown, also the documentation says so\n        var data = fileSystem.GetFile(filePath);\n        await That(data.Contents).IsEmpty();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldThrowAnUnauthorizedAccessExceptionIfTheFileIsReadOnly()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var mockFileData = new MockFileData(new byte[0]);\n        mockFileData.Attributes = FileAttributes.ReadOnly;\n        fileSystem.AddFile(filePath, mockFileData);\n\n        // Act\n        Action action = () => fileSystem.File.WriteAllText(filePath, null);\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldThrowAnUnauthorizedAccessExceptionIfThePathIsOneDirectory()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string directoryPath = XFS.Path(@\"c:\\something\");\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Action action = () => fileSystem.File.WriteAllText(directoryPath, null);\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllText_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"c:\\something\\file.txt\");\n\n        // Act\n        Action action = () => fileSystem.File.WriteAllText(path, string.Empty);\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    public static IEnumerable<KeyValuePair<Encoding, byte[]>> GetEncodingsWithExpectedBytes()\n    {\n        Encoding utf8WithoutBom = new UTF8Encoding(false, true);\n        return new Dictionary<Encoding, byte[]>\n        {\n            // ASCII does not need a BOM\n            { Encoding.ASCII, new byte[] { 72, 101, 108, 108, 111, 32, 116,\n                104, 101, 114, 101, 33, 32, 68, 122, 105, 63, 107, 105, 46 } },\n\n            // BigEndianUnicode needs a BOM, the BOM is the first two bytes\n            { Encoding.BigEndianUnicode, new byte [] { 254, 255, 0, 72, 0, 101,\n                0, 108, 0, 108, 0, 111, 0, 32, 0, 116, 0, 104, 0, 101, 0, 114,\n                0, 101, 0, 33, 0, 32, 0, 68, 0, 122, 0, 105, 1, 25, 0, 107, 0, 105, 0, 46 } },\n\n            // UTF-32 needs a BOM, the BOM is the first four bytes\n            { Encoding.UTF32, new byte [] {255, 254, 0, 0, 72, 0, 0, 0, 101,\n                0, 0, 0, 108, 0, 0, 0, 108, 0, 0, 0, 111, 0, 0, 0, 32, 0, 0,\n                0, 116, 0, 0, 0, 104, 0, 0, 0, 101, 0, 0, 0, 114, 0, 0, 0,\n                101, 0, 0, 0, 33, 0, 0, 0, 32, 0, 0, 0, 68, 0, 0, 0, 122, 0,\n                0, 0, 105, 0, 0, 0, 25, 1, 0, 0, 107, 0, 0, 0, 105, 0, 0, 0, 46, 0, 0, 0 } },\n\n#pragma warning disable SYSLIB0001\n            // UTF-7 does not need a BOM\n            { Encoding.UTF7, new byte [] {72, 101, 108, 108, 111, 32, 116,\n                104, 101, 114, 101, 43, 65, 67, 69, 45, 32, 68, 122, 105,\n                43, 65, 82, 107, 45, 107, 105, 46 } },\n#pragma warning restore SYSLIB0001\n\n            // The default encoding does not need a BOM\n            { utf8WithoutBom, new byte [] { 72, 101, 108, 108, 111, 32, 116,\n                104, 101, 114, 101, 33, 32, 68, 122, 105, 196, 153, 107, 105, 46 } },\n\n            // Unicode needs a BOM, the BOM is the first two bytes\n            { Encoding.Unicode, new byte [] { 255, 254, 72, 0, 101, 0, 108,\n                0, 108, 0, 111, 0, 32, 0, 116, 0, 104, 0, 101, 0, 114, 0,\n                101, 0, 33, 0, 32, 0, 68, 0, 122, 0, 105, 0, 25, 1, 107, 0,\n                105, 0, 46, 0 } }\n        };\n    }\n\n    [TestCaseSource(typeof(MockFileWriteAllTextTests), nameof(GetEncodingsWithExpectedBytes))]\n    public async Task MockFile_WriteAllText_Encoding_ShouldWriteTextFileToMemoryFileSystem(KeyValuePair<Encoding, byte[]> encodingsWithContents)\n    {\n        // Arrange\n        const string FileContent = \"Hello there! Dzięki.\";\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        byte[] expectedBytes = encodingsWithContents.Value;\n        Encoding encoding = encodingsWithContents.Key;\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        fileSystem.File.WriteAllText(path, FileContent, encoding);\n\n        // Assert\n        var actualBytes = fileSystem.GetFile(path).Contents;\n        await That(actualBytes).IsEqualTo(expectedBytes);\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextMultipleLines_ShouldWriteTextFileToMemoryFileSystem()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n        var fileContent = new List<string> { \"Hello there!\", \"Second line!\" };\n        var expected = \"Hello there!\" + Environment.NewLine + \"Second line!\" + Environment.NewLine;\n\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        fileSystem.File.WriteAllLines(path, fileContent);\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(expected);\n    }\n\n#if FEATURE_ASYNC_FILE\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldWriteTextFileToMemoryFileSystem()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        string fileContent = \"Hello there!\";\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        await fileSystem.File.WriteAllTextAsync(path, fileContent);\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(fileContent);\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled()\n    {\n        // Arrange\n        const string path = \"test.txt\";\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        async Task Act() =>\n            await fileSystem.File.WriteAllTextAsync(\n                path,\n                \"line\",\n                new CancellationToken(canceled: true));\n        await That(Act).Throws<OperationCanceledException>();\n\n        // Assert\n        await That(fileSystem.File.Exists(path)).IsFalse();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldOverriteAnExistingFile()\n    {\n        // http://msdn.microsoft.com/en-us/library/ms143375.aspx\n\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        await fileSystem.File.WriteAllTextAsync(path, \"foo\");\n        await fileSystem.File.WriteAllTextAsync(path, \"bar\");\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(\"bar\");\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>\n        {\n            { path, new MockFileData(\"this is hidden\") },\n        });\n        fileSystem.File.SetAttributes(path, FileAttributes.Hidden);\n\n        // Act\n        Func<Task> action = () => fileSystem.File.WriteAllTextAsync(path, \"hello world\");\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>()\n            .Because($\"Access to the path '{path}' is denied.\");\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowAnArgumentExceptionIfThePathIsEmpty()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n\n        // Act\n        Func<Task> action = () => fileSystem.File.WriteAllTextAsync(string.Empty, \"hello world\");\n\n        // Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldNotThrowAnArgumentNullExceptionIfTheContentIsNull()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string directoryPath = XFS.Path(@\"c:\\something\");\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        await fileSystem.File.WriteAllTextAsync(filePath, \"\");\n\n        // Assert\n        // no exception should be thrown, also the documentation says so\n        var data = fileSystem.GetFile(filePath);\n        await That(data.Contents).IsEmpty();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowAnUnauthorizedAccessExceptionIfTheFileIsReadOnly()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string filePath = XFS.Path(@\"c:\\something\\demo.txt\");\n        var mockFileData = new MockFileData(new byte[0]);\n        mockFileData.Attributes = FileAttributes.ReadOnly;\n        fileSystem.AddFile(filePath, mockFileData);\n\n        // Act\n        Func<Task> action = () => fileSystem.File.WriteAllTextAsync(filePath, \"\");\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowAnUnauthorizedAccessExceptionIfThePathIsOneDirectory()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string directoryPath = XFS.Path(@\"c:\\something\");\n        fileSystem.AddDirectory(directoryPath);\n\n        // Act\n        Func<Task> action = () => fileSystem.File.WriteAllTextAsync(directoryPath, \"\");\n\n        // Assert\n        await That(action).Throws<UnauthorizedAccessException>();\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsync_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()\n    {\n        // Arrange\n        var fileSystem = new MockFileSystem();\n        string path = XFS.Path(@\"c:\\something\\file.txt\");\n\n        // Act\n        Func<Task> action = () => fileSystem.File.WriteAllTextAsync(path, string.Empty);\n\n        // Assert\n        await That(action).Throws<DirectoryNotFoundException>();\n    }\n\n    [TestCaseSource(typeof(MockFileWriteAllTextTests), nameof(GetEncodingsWithExpectedBytes))]\n    public async Task MockFile_WriteAllTextAsync_Encoding_ShouldWriteTextFileToMemoryFileSystem(KeyValuePair<Encoding, byte[]> encodingsWithContents)\n    {\n        // Arrange\n        const string FileContent = \"Hello there! Dzięki.\";\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n        byte[] expectedBytes = encodingsWithContents.Value;\n        Encoding encoding = encodingsWithContents.Key;\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        await fileSystem.File.WriteAllTextAsync(path, FileContent, encoding);\n\n        // Assert\n        var actualBytes = fileSystem.GetFile(path).Contents;\n        await That(actualBytes).IsEqualTo(expectedBytes);\n    }\n\n    [Test]\n    public async Task MockFile_WriteAllTextAsyncMultipleLines_ShouldWriteTextFileToMemoryFileSystem()\n    {\n        // Arrange\n        string path = XFS.Path(@\"c:\\something\\demo.txt\");\n\n        var fileContent = new List<string> { \"Hello there!\", \"Second line!\" };\n        var expected = \"Hello there!\" + Environment.NewLine + \"Second line!\" + Environment.NewLine;\n\n        var fileSystem = new MockFileSystem();\n        fileSystem.AddDirectory(XFS.Path(@\"c:\\something\"));\n\n        // Act\n        await fileSystem.File.WriteAllLinesAsync(path, fileContent);\n\n        // Assert\n        await That(fileSystem.GetFile(path).TextContents).IsEqualTo(expected);\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockPathTests.cs",
    "content": "﻿using NUnit.Framework;\nusing System.Collections.Generic;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\npublic class MockPathTests\n{\n    static readonly string TestPath = XFS.Path(\"C:\\\\test\\\\test.bmp\");\n\n    [Test]\n    public async Task ChangeExtension_ExtensionNoPeriod_PeriodAdded()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.ChangeExtension(TestPath, \"doc\");\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\\\\test.doc\"));\n    }\n\n    [Test]\n    public async Task Combine_SentTwoPaths_Combines()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.Combine(XFS.Path(\"C:\\\\test\"), \"test.bmp\");\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\\\\test.bmp\"));\n    }\n\n    [Test]\n    public async Task Combine_SentThreePaths_Combines()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.Combine(XFS.Path(\"C:\\\\test\"), \"subdir1\", \"test.bmp\");\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\\\\subdir1\\\\test.bmp\"));\n    }\n\n    [Test]\n    public async Task Combine_SentFourPaths_Combines()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.Combine(XFS.Path(\"C:\\\\test\"), \"subdir1\", \"subdir2\", \"test.bmp\");\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\\\\subdir1\\\\subdir2\\\\test.bmp\"));\n    }\n\n    [Test]\n    public async Task Combine_SentFivePaths_Combines()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.Combine(XFS.Path(\"C:\\\\test\"), \"subdir1\", \"subdir2\", \"subdir3\", \"test.bmp\");\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\\\\subdir1\\\\subdir2\\\\subdir3\\\\test.bmp\"));\n    }\n\n    [Test]\n    public async Task GetDirectoryName_SentPath_ReturnsDirectory()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetDirectoryName(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\test\"));\n    }\n\n    [Test]\n    public async Task GetExtension_SendInPath_ReturnsExtension()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetExtension(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(\".bmp\");\n    }\n\n    [Test]\n    public async Task GetFileName_SendInPath_ReturnsFilename()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetFileName(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(\"test.bmp\");\n    }\n\n    [Test]\n    public async Task GetFileNameWithoutExtension_SendInPath_ReturnsFileNameNoExt()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetFileNameWithoutExtension(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(\"test\");\n    }\n\n    [Test]\n    public async Task GetFullPath_SendInPath_ReturnsFullPath()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetFullPath(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(TestPath);\n    }\n\n    public static IEnumerable<string[]> GetFullPath_RelativePaths_Cases\n    {\n        get\n        {\n            yield return new[] { XFS.Path(@\"c:\\a\"), \"b\", XFS.Path(@\"c:\\a\\b\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\"), \"c\", XFS.Path(@\"c:\\a\\b\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\"), XFS.Path(@\"c\\\"), XFS.Path(@\"c:\\a\\b\\c\\\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\"), XFS.Path(@\"..\\c\"), XFS.Path(@\"c:\\a\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\c\"), XFS.Path(@\"..\\c\\..\\\"), XFS.Path(@\"c:\\a\\b\\\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\c\"), XFS.Path(@\"..\\..\\..\\..\\..\\d\"), XFS.Path(@\"c:\\d\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\c\"), XFS.Path(@\"..\\..\\..\\..\\..\\d\\\"), XFS.Path(@\"c:\\d\\\") };\n        }\n    }\n\n    [TestCaseSource(nameof(GetFullPath_RelativePaths_Cases))]\n    public async Task GetFullPath_RelativePaths_ShouldReturnTheAbsolutePathWithCurrentDirectory(string currentDir, string relativePath, string expectedResult)\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        mockFileSystem.Directory.SetCurrentDirectory(currentDir);\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        var actualResult = mockPath.GetFullPath(relativePath);\n\n        //Assert\n        await That(actualResult).IsEqualTo(expectedResult);\n    }\n\n    public static IEnumerable<string[]> GetFullPath_RootedPathWithRelativeSegments_Cases\n    {\n        get\n        {\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\..\\c\"), XFS.Path(@\"c:\\a\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\.\\.\\..\\.\\c\"), XFS.Path(@\"c:\\a\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\.\\c\"), XFS.Path(@\"c:\\a\\b\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\b\\.\\.\\.\\.\\c\"), XFS.Path(@\"c:\\a\\b\\c\") };\n            yield return new[] { XFS.Path(@\"c:\\a\\..\\..\\c\"), XFS.Path(@\"c:\\c\") };\n        }\n    }\n\n    [TestCaseSource(nameof(GetFullPath_RootedPathWithRelativeSegments_Cases))]\n    public async Task GetFullPath_RootedPathWithRelativeSegments_ShouldReturnAnRootedAbsolutePath(string rootedPath, string expectedResult)\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        var actualResult = mockPath.GetFullPath(rootedPath);\n\n        //Assert\n        await That(actualResult).IsEqualTo(expectedResult);\n    }\n\n    public static IEnumerable<string[]> GetFullPath_AbsolutePaths_Cases\n    {\n        get\n        {\n            yield return new[] { XFS.Path(@\"c:\\a\"), XFS.Path(@\"/b\"), XFS.Path(@\"c:\\b\") };\n            yield return new[] { XFS.Path(@\"c:\\a\"), XFS.Path(@\"/b\\\"), XFS.Path(@\"c:\\b\\\") };\n            yield return new[] { XFS.Path(@\"c:\\a\"), XFS.Path(@\"\\b\"), XFS.Path(@\"c:\\b\") };\n            yield return new[] { XFS.Path(@\"c:\\a\"), XFS.Path(@\"\\b\\..\\c\"), XFS.Path(@\"c:\\c\") };\n            yield return new[] { XFS.Path(@\"z:\\a\"), XFS.Path(@\"\\b\\..\\c\"), XFS.Path(@\"z:\\c\") };\n            yield return new[] { XFS.Path(@\"z:\\a\"), XFS.Path(@\"\\\\computer\\share\\c\"), XFS.Path(@\"\\\\computer\\share\\c\") };\n            yield return new[] { XFS.Path(@\"z:\\a\"), XFS.Path(@\"\\\\computer\\share\\c\\..\\d\"), XFS.Path(@\"\\\\computer\\share\\d\") };\n            yield return new[] { XFS.Path(@\"z:\\a\"), XFS.Path(@\"\\\\computer\\share\\c\\..\\..\\d\"), XFS.Path(@\"\\\\computer\\share\\d\") };\n        }\n    }\n\n    [TestCaseSource(nameof(GetFullPath_AbsolutePaths_Cases))]\n    public async Task GetFullPath_AbsolutePaths_ShouldReturnThePathWithTheRoot_Or_Unc(string currentDir, string absolutePath, string expectedResult)\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        mockFileSystem.Directory.SetCurrentDirectory(currentDir);\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        var actualResult = mockPath.GetFullPath(absolutePath);\n\n        //Assert\n        await That(actualResult).IsEqualTo(expectedResult);\n    }\n\n    [Test]\n    public async Task GetFullPath_InvalidUNCPaths_ShouldThrowArgumentException()\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        Action action = () => mockPath.GetFullPath(XFS.Path(@\"\\\\shareZ\"));\n\n        //Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task GetFullPath_NullValue_ShouldThrowArgumentNullException()\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        Action action = () => mockPath.GetFullPath(null);\n\n        //Assert\n        await That(action).Throws<ArgumentNullException>();\n    }\n\n    [Test]\n    public async Task GetFullPath_EmptyValue_ShouldThrowArgumentException()\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        Action action = () => mockPath.GetFullPath(string.Empty);\n\n        //Assert\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task GetFullPath_WithWhiteSpace_ShouldThrowArgumentException()\n    {\n        var mockFileSystem = new MockFileSystem();\n\n        Action action = () => mockFileSystem.Path.GetFullPath(\"  \");\n\n        await That(action).Throws<ArgumentException>();\n    }\n\n    [Test]\n    public async Task GetFullPath_WithMultipleDirectorySeparators_ShouldReturnTheNormalizedForm()\n    {\n        //Arrange\n        var mockFileSystem = new MockFileSystem();\n        var mockPath = new MockPath(mockFileSystem);\n\n        //Act\n        var actualFullPath = mockPath.GetFullPath(XFS.Path(@\"c:\\foo\\\\//bar\\file.dat\"));\n\n        //Assert\n        await That(actualFullPath).IsEqualTo(XFS.Path(@\"c:\\foo\\bar\\file.dat\"));\n    }\n\n    [Test]\n    public async Task GetInvalidFileNameChars_Called_ReturnsChars()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetInvalidFileNameChars();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetInvalidPathChars_Called_ReturnsChars()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetInvalidPathChars();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetPathRoot_SendInPath_ReturnsRoot()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetPathRoot(TestPath);\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"C:\\\\\"));\n    }\n\n    [Test]\n    public async Task GetRandomFileName_Called_ReturnsStringLengthGreaterThanZero()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetRandomFileName();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetTempFileName_Called_ReturnsStringLengthGreaterThanZero()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetTempFileName();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetTempFileName_Called_CreatesEmptyFileInTempDirectory()\n    {\n        //Arrange\n        var fileSystem = new MockFileSystem();\n        var mockPath = new MockPath(fileSystem);\n\n        //Act\n        var result = mockPath.GetTempFileName();\n\n        await That(fileSystem.FileExists(result)).IsTrue();\n        await That(fileSystem.FileInfo.New(result).Length).IsEqualTo(0);\n    }\n\n    [Test]\n    public async Task GetTempPath_Called_ReturnsStringLengthGreaterThanZero()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetTempPath();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetTempPath_ShouldEndWithDirectorySeparator()\n    {\n        //Arrange\n        var mockPath = new MockFileSystem().Path;\n        var directorySeparator = mockPath.DirectorySeparatorChar.ToString();\n\n        //Act\n        var result = mockPath.GetTempPath();\n\n        //Assert\n        await That(result).EndsWith(directorySeparator);\n    }\n\n    [Test]\n    [TestCase(null)]\n    [TestCase(\"\")]\n    [TestCase(@\"C:\\temp\")]\n    public async Task GetTempPath_Called_ReturnsStringLengthGreaterThanZero(string tempDirectory)\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem(), string.IsNullOrEmpty(tempDirectory) ? tempDirectory : XFS.Path(tempDirectory));\n\n        //Act\n        var result = mockPath.GetTempPath();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task GetTempPath_Called_WithNonNullVirtualTempDirectory_ReturnsVirtualTempDirectory()\n    {\n        //Arrange\n        var tempDirectory = XFS.Path(@\"C:\\temp\");\n\n        var mockPath = new MockPath(new MockFileSystem(), tempDirectory);\n\n        //Act\n        var result = mockPath.GetTempPath();\n\n        //Assert\n        await That(result).IsEqualTo(tempDirectory);\n    }\n\n    [Test]\n    [TestCase(null)]\n    [TestCase(\"\")]\n    public async Task GetTempPath_Called_WithNullOrEmptyVirtualTempDirectory_ReturnsFallbackTempDirectory(string tempDirectory)\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem(), tempDirectory);\n\n        //Act\n        var result = mockPath.GetTempPath();\n\n        //Assert\n        await That(result.Length > 0).IsTrue();\n    }\n\n    [Test]\n    public async Task HasExtension_PathSentIn_DeterminesExtension()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.HasExtension(TestPath);\n\n        //Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task IsPathRooted_PathSentIn_DeterminesPathExists()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.IsPathRooted(TestPath);\n\n        //Assert\n        await That(result).IsTrue();\n    }\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    [Test]\n    public async Task IsPathFullyQualified_WithAbsolutePath_ReturnsTrue()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.IsPathFullyQualified(XFS.Path(\"C:\\\\directory\\\\file.txt\"));\n\n        //Assert\n        await That(result).IsTrue();\n    }\n\n    [Test]\n    public async Task IsPathFullyQualified_WithRelativePath_ReturnsFalse()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.IsPathRooted(XFS.Path(\"directory\\\\file.txt\"));\n\n        //Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task IsPathFullyQualified_WithRelativePathParts_ReturnsFalse()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.IsPathRooted(XFS.Path(\"directory\\\\..\\\\file.txt\"));\n\n        //Assert\n        await That(result).IsFalse();\n    }\n\n    [Test]\n    public async Task GetRelativePath_Works()\n    {\n        //Arrange\n        var mockPath = new MockPath(new MockFileSystem());\n\n        //Act\n        var result = mockPath.GetRelativePath(XFS.Path(\"c:\\\\d\"), XFS.Path(\"c:\\\\d\\\\e\\\\f.txt\"));\n\n        //Assert\n        await That(result).IsEqualTo(XFS.Path(\"e\\\\f.txt\"));\n    }\n\n    [Test]\n    public async Task GetRelativePath_WhenPathIsNull_ShouldThrowArgumentNullException()\n    {\n        var mockPath = new MockFileSystem().Path;\n\n        var exception = await That(() =>\n        {\n            mockPath.GetRelativePath(\"foo\", null);\n        }).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task GetRelativePath_WhenPathIsWhitespace_ShouldThrowArgumentException()\n    {\n        var mockPath = new MockFileSystem().Path;\n\n        var exception = await That(() =>\n        {\n            mockPath.GetRelativePath(\"foo\", \" \");\n        }).Throws<ArgumentException>();\n\n        await That(exception.ParamName).IsEqualTo(\"path\");\n    }\n\n    [Test]\n    public async Task GetRelativePath_WhenRelativeToNull_ShouldThrowArgumentNullException()\n    {\n        var mockPath = new MockFileSystem().Path;\n\n        var exception = await That(() =>\n        {\n            mockPath.GetRelativePath(null, \"foo\");\n        }).Throws<ArgumentNullException>();\n\n        await That(exception.ParamName).IsEqualTo(\"relativeTo\");\n    }\n\n    [Test]\n    public async Task GetRelativePath_WhenRelativeToIsWhitespace_ShouldThrowArgumentException()\n    {\n        var mockPath = new MockFileSystem().Path;\n\n        var exception = await That(() =>\n        {\n            mockPath.GetRelativePath(\" \", \"foo\");\n        }).Throws<ArgumentException>();\n\n        await That(exception.ParamName).IsEqualTo(\"relativeTo\");\n    }\n#endif\n\n#if FEATURE_PATH_EXISTS\n        [Test]\n        public async Task Exists_Null_ShouldReturnFalse()\n        {\n            var fileSystem = new MockFileSystem();\n            bool result = fileSystem.Path.Exists(null);\n\n            await That(result).IsFalse();\n        }\n\n        [Test]\n        public async Task Exists_ShouldWorkWithAbsolutePaths()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = \"some-path\";\n            string absolutePath = fileSystem.Path.GetFullPath(path);\n            fileSystem.Directory.CreateDirectory(path);\n\n            bool result = fileSystem.Path.Exists(absolutePath);\n\n            await That(result).IsTrue();\n        }\n\n        [Test]\n        public async Task Exists_ExistingFile_ShouldReturnTrue()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = \"some-path\";\n            fileSystem.File.WriteAllText(path, \"some content\");\n\n            bool result = fileSystem.Path.Exists(path);\n\n            await That(result).IsTrue();\n        }\n\n        [Test]\n        public async Task Exists_ExistingDirectory_ShouldReturnTrue()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = \"some-path\";\n            fileSystem.Directory.CreateDirectory(path);\n\n            bool result = fileSystem.Path.Exists(path);\n\n            await That(result).IsTrue();\n        }\n\n        [Test]\n        public async Task Exists_ExistingFileOrDirectory_ShouldReturnTrue()\n        {\n            var fileSystem = new MockFileSystem();\n            string path = \"some-path\";\n            bool result = fileSystem.Path.Exists(path);\n\n            await That(result).IsFalse();\n        }\n#endif\n\n#if FEATURE_ADVANCED_PATH_OPERATIONS\n    [Test]\n    public async Task GetRelativePath_ShouldUseCurrentDirectoryFromMockFileSystem()\n    {\n        var fs = new MockFileSystem();\n\n        fs.AddDirectory(\"input\");\n        fs.AddDirectory(\"output\");\n        fs.Directory.SetCurrentDirectory(\"input\");\n\n        fs.AddFile(\"input/a.txt\", \"foo\");\n\n        var result = fs.Path.GetRelativePath(\"/input\", \"a.txt\");\n\n        await That(result).IsEqualTo(\"a.txt\");\n    }\n#endif\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockUnixSupportTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\nusing XFS = MockUnixSupport;\n\n[TestFixture]\npublic class MockUnixSupportTests\n{\n    [Test]\n    [UnixOnly(UnixSpecifics.SlashRoot)]\n    public async Task Should_Convert_Backslashes_To_Slashes_On_Unix()\n    {\n        await That(XFS.Path(@\"\\test\\\")).IsEqualTo(\"/test/\");\n    }\n\n    [Test]\n    [UnixOnly(UnixSpecifics.SlashRoot)]\n    public async Task Should_Remove_Drive_Letter_On_Unix()\n    {\n        await That(XFS.Path(@\"c:\\test\\\")).IsEqualTo(\"/test/\");\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/Polyfills/SupportedOSPlatformAttribute.cs",
    "content": "#if !FEATURE_SUPPORTED_OS_ATTRIBUTE\nnamespace System.Runtime.Versioning\n{\n    [AttributeUsage(AttributeTargets.All)]\n    internal class SupportedOSPlatformAttribute : Attribute\n    {\n        public SupportedOSPlatformAttribute(string _)\n        {\n        }\n    }\n}\n#endif\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/ProductVersionParserTests.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\n[TestFixture]\npublic class ProductVersionParserTests\n{\n    [Test]\n    public async Task ProductVersionParser_Parse_ShouldIgnoreTheSegmentsWhenThereAreMoreThanFiveOfThem()\n    {\n        // Arrange\n        string productVersion = \"1.2.3.4.5\";\n\n        // Act\n        var versionInfo = new MockFileVersionInfo(\"foo\", productVersion: productVersion);\n\n        // Assert\n        await ThatAll(\n            That(versionInfo.ProductMajorPart).IsEqualTo(0),\n            That(versionInfo.ProductMinorPart).IsEqualTo(0),\n            That(versionInfo.ProductBuildPart).IsEqualTo(0),\n            That(versionInfo.ProductPrivatePart).IsEqualTo(0)\n        );\n    }\n\n    [Test]\n    [TestCase(\"test.2.3.4\", 0, 0, 0, 0)]\n    [TestCase(\"1.test.3.4\", 1, 0, 0, 0)]\n    [TestCase(\"1.2.test.4\", 1, 2, 0, 0)]\n    [TestCase(\"1.2.3.test\", 1, 2, 3, 0)]\n    public async Task ProductVersionParser_Parse_ShouldSkipTheRestOfTheSegmentsWhenOneIsNotValidNumber(\n        string productVersion,\n        int expectedMajor,\n        int expectedMinor,\n        int expectedBuild,\n        int expectedRevision)\n    {\n        // Act\n        var versionInfo = new MockFileVersionInfo(\"foo\", productVersion: productVersion);\n\n        // Assert\n        await ThatAll(\n            That(versionInfo.ProductMajorPart).IsEqualTo(expectedMajor),\n            That(versionInfo.ProductMinorPart).IsEqualTo(expectedMinor),\n            That(versionInfo.ProductBuildPart).IsEqualTo(expectedBuild),\n            That(versionInfo.ProductPrivatePart).IsEqualTo(expectedRevision)\n        );\n    }\n\n    [Test]\n    [TestCase(\"1-test.2.3.4\", 1, 0, 0, 0)]\n    [TestCase(\"1-test5.2.3.4\", 1, 0, 0, 0)]\n    [TestCase(\"1.2-test.3.4\", 1, 2, 0, 0)]\n    [TestCase(\"1.2-test5.3.4\", 1, 2, 0, 0)]\n    [TestCase(\"1.2.3-test.4\", 1, 2, 3, 0)]\n    [TestCase(\"1.2.3-test5.4\", 1, 2, 3, 0)]\n    [TestCase(\"1.2.3.4-test\", 1, 2, 3, 4)]\n    [TestCase(\"1.2.3.4-test5\", 1, 2, 3, 4)]\n    public async Task ProductVersionParser_Parse_ShouldSkipTheRestOfTheSegmentsWhenOneContainsMoreThanJustOneNumber(\n        string productVersion,\n        int expectedMajor,\n        int expectedMinor,\n        int expectedBuild,\n        int expectedRevision)\n    {\n        // Act\n        var versionInfo = new MockFileVersionInfo(\"foo\", productVersion: productVersion);\n\n        // Assert\n            \n        await ThatAll(\n            That(versionInfo.ProductMajorPart).IsEqualTo(expectedMajor),\n            That(versionInfo.ProductMinorPart).IsEqualTo(expectedMinor),\n            That(versionInfo.ProductBuildPart).IsEqualTo(expectedBuild),\n            That(versionInfo.ProductPrivatePart).IsEqualTo(expectedRevision)\n        );\n    }\n\n    [Test]\n    [TestCase(\"\", 0, 0, 0, 0)]\n    [TestCase(\"1\", 1, 0, 0, 0)]\n    [TestCase(\"1.2\", 1, 2, 0, 0)]\n    [TestCase(\"1.2.3\", 1, 2, 3, 0)]\n    [TestCase(\"1.2.3.4\", 1, 2, 3, 4)]\n    public async Task ProductVersionParser_Parse_ShouldParseEachProvidedSegment(\n        string productVersion,\n        int expectedMajor,\n        int expectedMinor,\n        int expectedBuild,\n        int expectedRevision)\n    {\n        // Act\n        var versionInfo = new MockFileVersionInfo(\"foo\", productVersion: productVersion);\n\n        // Assert\n        await ThatAll(\n            That(versionInfo.ProductMajorPart).IsEqualTo(expectedMajor),\n            That(versionInfo.ProductMinorPart).IsEqualTo(expectedMinor),\n            That(versionInfo.ProductBuildPart).IsEqualTo(expectedBuild),\n            That(versionInfo.ProductPrivatePart).IsEqualTo(expectedRevision)\n        );\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/Shared.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\ninternal static class Shared\n{\n    /// <summary>\n    /// These chars are not valid path chars but do not cause the same\n    /// errors that other <code>Path.GetInvalidFileNameChars()</code> will.\n    /// </summary>\n    public static char[] SpecialInvalidPathChars(IFileSystem fileSystem) => new[]\n    {\n        // These are not allowed in a file name, but\n        // inserting them a path does not make it invalid\n        fileSystem.Path.DirectorySeparatorChar,\n        fileSystem.Path.AltDirectorySeparatorChar,\n\n        // Raises a different type of exception from other\n        // invalid chars and is covered by other tests\n        fileSystem.Path.VolumeSeparatorChar\n    };\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/TestFiles/SecondTestFile.txt",
    "content": "This is a the second test file."
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/TestFiles/TestFile.txt",
    "content": "This is a test file."
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <PropertyGroup>\n    <Description>The unit tests for our pre-built mocks</Description>\n    <AssemblyName>System.IO.Abstractions.TestingHelpers.Tests</AssemblyName>\n    <RootNamespace>System.IO.Abstractions.TestingHelpers.Tests</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"../../src/TestableIO.System.IO.Abstractions.TestingHelpers/TestableIO.System.IO.Abstractions.TestingHelpers.csproj\" />\n  </ItemGroup>\n  \n  <PropertyGroup>\n    <!--  \n      Ensure that test logger is copied to output directory, see \n      https://github.com/Tyrrrz/GitHubActionsTestLogger/issues/5 \n    -->\n    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>\n  </PropertyGroup>\n  \n  <ItemGroup>\n    <None Remove=\"TestFiles\\SecondTestFile.txt\" />\n    <None Remove=\"TestFiles\\TestFile.txt\" />\n    <EmbeddedResource Include=\"TestFiles\\SecondTestFile.txt\" />\n    <EmbeddedResource Include=\"TestFiles\\TestFile.txt\" />\n  </ItemGroup>\n  \n</Project>\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/UnixOnlyAttribute.cs",
    "content": "﻿using NUnit.Framework;\nusing NUnit.Framework.Interfaces;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\ninternal sealed class UnixOnlyAttribute : Attribute, ITestAction\n{\n    private readonly string reason;\n\n    public UnixOnlyAttribute(string reason)\n    {\n        this.reason = reason;\n    }\n\n    public ActionTargets Targets => ActionTargets.Test;\n\n    public void BeforeTest(ITest test)\n    {\n        if (!MockUnixSupport.IsUnixPlatform())\n        {\n            Assert.Inconclusive(reason);\n        }\n    }\n\n    public void AfterTest(ITest test) { }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/UnixSpecifics.cs",
    "content": "﻿namespace System.IO.Abstractions.TestingHelpers.Tests;\n\ninternal static class UnixSpecifics\n{\n    public const string SlashRoot = \"Filesystem root is just '/' on Unix\";\n\n    public const string CaseSensitivity = \"Paths are case-sensitive on Unix\";\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/Usings.cs",
    "content": "﻿global using System.Threading.Tasks;\nglobal using NUnit.Framework;\nglobal using aweXpect;\nglobal using static aweXpect.Expect;\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/WindowsOnlyAttribute.cs",
    "content": "using NUnit.Framework;\nusing NUnit.Framework.Interfaces;\n\nnamespace System.IO.Abstractions.TestingHelpers.Tests;\n\ninternal sealed class WindowsOnlyAttribute : Attribute, ITestAction\n{\n    private readonly string reason;\n\n    public WindowsOnlyAttribute(string reason)\n    {\n        this.reason = reason;\n    }\n\n    public ActionTargets Targets => ActionTargets.Test;\n\n    public void BeforeTest(ITest test)\n    {\n        if (!MockUnixSupport.IsWindowsPlatform())\n        {\n            Assert.Inconclusive(reason);\n        }\n    }\n\n    public void AfterTest(ITest test) { }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/WindowsSpecifics.cs",
    "content": "namespace System.IO.Abstractions.TestingHelpers.Tests;\n\ninternal static class WindowsSpecifics\n{\n    public const string Drives = \"Drives are a Windows-only concept\";\n\n    public const string AccessControlLists = \"ACLs are a Windows-only concept\";\n\n    public const string UNCPaths = \"UNC paths are a Windows-only concept\";\n\n    public const string StrictPathRules = \"Windows has stricter path rules than other platforms\";\n\n    public const string CaseInsensitivity = \"Paths are case-insensitive on Windows\";\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoFactoryTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class DirectoryInfoFactoryTests\n{\n    [Test]\n    public async Task Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new FileSystem();\n\n        var result = fileSystem.DirectoryInfo.Wrap(null);\n\n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryInfoTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class DirectoryInfoTests\n{\n    [Test]\n    public async Task Parent_ForRootDirectory_ShouldReturnNull()\n    {\n        var wrapperFilesystem = new FileSystem();\n\n        var current = wrapperFilesystem.Directory.GetCurrentDirectory();\n        var root = wrapperFilesystem.DirectoryInfo.New(current).Root;\n        var rootsParent = root.Parent;\n\n        await That(rootsParent).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DirectoryWrapperTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class DirectoryWrapperTests\n{\n    [Test]\n    public async Task GetParent_ForRootDirectory_ShouldReturnNull()\n    {\n        // Arrange\n        var wrapperFilesystem = new FileSystem();\n        var root = wrapperFilesystem.Directory.GetDirectoryRoot(\".\");\n\n        // Act\n        var result = wrapperFilesystem.Directory.GetParent(root);\n\n        // Assert\n        await That(result).IsNull();\n    }\n\n    [Test]\n    public async Task GetParent_ForSimpleSubfolderPath_ShouldReturnRoot()\n    {\n        // Arrange\n        var wrapperFilesystem = new FileSystem();\n        var root = wrapperFilesystem.Directory.GetDirectoryRoot(\".\");\n        var subfolder = wrapperFilesystem.Path.Combine(root, \"some-folder\");\n\n        // Act\n        var result = wrapperFilesystem.Directory.GetParent(subfolder);\n\n        // Assert\n        await That(result.FullName).IsEqualTo(root);\n    }\n\n    [Test]\n    public async Task GetParent_ForSimpleFilePath_ShouldReturnSubfolder()\n    {\n        // Arrange\n        var wrapperFilesystem = new FileSystem();\n        var root = wrapperFilesystem.Directory.GetDirectoryRoot(\".\");\n        var subfolder = wrapperFilesystem.Path.Combine(root, \"some-folder\");\n        var file = wrapperFilesystem.Path.Combine(subfolder, \"some-file.txt\");\n\n        // Act\n        var result = wrapperFilesystem.Directory.GetParent(file);\n\n        // Assert\n        await That(result.FullName).IsEqualTo(subfolder);\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/DriveInfoFactoryTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class DriveInfoFactoryTests\n{\n    [Test]\n    public async Task Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new FileSystem();\n\n        var result = fileSystem.DriveInfo.Wrap(null);\n\n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoBaseConversionTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n/// <summary>\n/// Unit tests for the conversion operators of the <see cref=\"FileInfoBase\"/> class.\n/// </summary>\npublic class FileInfoBaseConversionTests\n{\n    /// <summary>\n    /// Tests that a <c>null</c> <see cref=\"FileInfo\"/> is correctly converted to a <c>null</c> <see cref=\"FileInfoBase\"/> without exception.\n    /// </summary>\n    [Test]\n    public async Task FileInfoBase_FromFileInfo_ShouldReturnNullIfFileInfoIsNull()\n    {\n        // Arrange\n        FileInfo fileInfo = null;\n\n        // Act\n        FileInfoBase actual = fileInfo;\n\n        // Assert\n        await That(actual).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileInfoFactoryTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class FileInfoFactoryTests\n{\n    [Test]\n    public async Task Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new FileSystem();\n\n        var result = fileSystem.FileInfo.Wrap(null);\n            \n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileSystemTests.cs",
    "content": "﻿using Mockolate;\n\nnamespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class FileSystemTests\n{\n#if !NET9_0_OR_GREATER\n    [Test]\n    public async Task Is_Serializable()\n    {\n        var fileSystem = new FileSystem();\n        var memoryStream = new MemoryStream();\n\n#pragma warning disable SYSLIB0011\n        var serializer = new Runtime.Serialization.Formatters.Binary.BinaryFormatter();\n\n        serializer.Serialize(memoryStream, fileSystem);\n#pragma warning restore SYSLIB0011\n\n        await That(memoryStream).HasLength().GreaterThan(0)\n            .Because(\"Length didn't increase after serialization task.\");\n    }\n#endif\n\n    [Test]\n    public async Task Mock_File_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.File.InitializeWith(IFile.CreateMock()));\n        fileSystem.File.Mock.Setup.ReadAllText(It.IsAny<string>()).Returns(\"foo\");\n\n        var result = fileSystem.File.ReadAllText(\"any path\");\n        \n        await That(result).IsEqualTo(\"foo\");\n        await That(fileSystem.File.Mock.Verify.ReadAllText(It.Is(\"any path\"))).Once();\n    }\n\n    [Test]\n    public async Task Mock_Directory_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.Directory.InitializeWith(IDirectory.CreateMock()));\n\n        await That(() =>\n            fileSystem.Directory.Mock.Setup.CreateDirectory(It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_FileInfo_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.FileInfo.InitializeWith(IFileInfoFactory.CreateMock()));\n\n        await That(() =>\n            fileSystem.FileInfo.Mock.Setup.New(It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_FileStream_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.FileStream.InitializeWith(IFileStreamFactory.CreateMock()));\n\n        await That(() =>\n            fileSystem.FileStream.Mock.Setup.New(It.IsAny<string>(), It.IsAny<FileMode>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_Path_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.Path.InitializeWith(IPath.CreateMock()));\n\n        await That(() =>\n            fileSystem.Path.Mock.Setup.Combine(It.IsAny<string>(), It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_DirectoryInfo_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.DirectoryInfo.InitializeWith(IDirectoryInfoFactory.CreateMock()));\n\n        await That(() =>\n            fileSystem.DirectoryInfo.Mock.Setup.New(It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_DriveInfo_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.DriveInfo.InitializeWith(IDriveInfoFactory.CreateMock()));\n\n        await That(() =>\n            fileSystem.DriveInfo.Mock.Setup.New(It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n\n    [Test]\n    public async Task Mock_FileSystemWatcher_Succeeds()\n    {\n        var fileSystem = IFileSystem.CreateMock(fs =>\n            fs.FileSystemWatcher.InitializeWith(IFileSystemWatcherFactory.CreateMock()));\n\n        await That(() =>\n            fileSystem.FileSystemWatcher.Mock.Setup.New(It.IsAny<string>())\n        ).DoesNotThrow();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileSystemWatcherFactoryTests.cs",
    "content": "﻿namespace System.IO.Abstractions.Tests;\n\n[TestFixture]\npublic class FileSystemWatcherFactoryTests\n{\n    [Test]\n    public async Task Wrap_WithNull_ShouldReturnNull()\n    {\n        var fileSystem = new FileSystem();\n\n        var result = fileSystem.FileSystemWatcher.Wrap(null);\n            \n        await That(result).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/FileVersionInfoBaseConversionTests.cs",
    "content": "﻿using System.Diagnostics;\n\nnamespace System.IO.Abstractions.Tests;\n\n/// <summary>\n/// Unit tests for the conversion operators of the <see cref=\"FileVersionInfoBase\"/> class.\n/// </summary>\npublic class FileVersionInfoBaseConversionTests\n{\n    /// <summary>\n    /// Tests that a <c>null</c> <see cref=\"FileVersionInfo\"/> is correctly converted to a <c>null</c> <see cref=\"FileVersionInfoBase\"/> without exception.\n    /// </summary>\n    [Test]\n    public async Task FileVersionInfoBase_FromFileVersionInfo_ShouldReturnNullIfFileVersionInfoIsNull()\n    {\n        // Arrange\n        FileVersionInfo fileVersionInfo = null;\n\n        // Act\n        FileVersionInfoBase actual = fileVersionInfo;\n\n        // Assert\n        await That(actual).IsNull();\n    }\n}"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/TestableIO.System.IO.Abstractions.Wrappers.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <PropertyGroup>\n    <Description>The unit tests for our the core abstractions</Description>\n    <AssemblyName>System.IO.Abstractions.Tests</AssemblyName>\n    <RootNamespace>System.IO.Abstractions.Tests</RootNamespace>\n  </PropertyGroup>\n  \n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\TestableIO.System.IO.Abstractions.Wrappers\\TestableIO.System.IO.Abstractions.Wrappers.csproj\" />\n  </ItemGroup>\n  \n</Project>\n"
  },
  {
    "path": "tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/Usings.cs",
    "content": "﻿global using System.Threading.Tasks;\nglobal using NUnit.Framework;\nglobal using aweXpect;\nglobal using static aweXpect.Expect;\n"
  }
]