aboutsummaryrefslogtreecommitdiff
path: root/libs/usvfs/test/fixtures
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /libs/usvfs/test/fixtures
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/usvfs/test/fixtures')
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/data/file.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/empty/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/readme.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/data/file.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/empty/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/info.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/readme.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/data/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/subdocs/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/data/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/subdocs/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/example.cpp139
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/data/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json11
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/overwrite/r6/storages/HUDPainter/TEST.json1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/data/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json11
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/docs/doc.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/file.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/empty/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/overwrite/readme.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/docs/doc.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/file.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/empty/.gitkeep0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.skip1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.txt0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rcopyme4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfile0.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rcopyme4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfile0.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledelete.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfileoldname.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfilew.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder3/mdeep3/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder2/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilemoveover.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfileoverwrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mod2.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder3/mdeep3/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mod3.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletemove.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilemoveover.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfileoverwrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/.empty0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfile1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfolder1/newfile1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder2/newfile2.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3e.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletemove2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletewrite2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4e.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4enr.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4r.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4p/rcopyme4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/rcopyme4.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/rfolder/rfilenewname.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfilew.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder3/mdeep3/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder2/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilemoveover.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfileoverwrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mod2.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder3/mdeep3/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mod3.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfile.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite2p.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilemoveover.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfileoverwrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilerewrite.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/overwrite/.empty0
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/root1.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/root1w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/root2.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/source/root2w.txt1
-rw-r--r--libs/usvfs/test/fixtures/usvfs_test/basic/vfs_mappings.txt26
130 files changed, 286 insertions, 0 deletions
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/data/file.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/data/file.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/data/file.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/empty/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/empty/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/empty/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/readme.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/readme.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/expected/mods/mod1/readme.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/data/file.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/data/file.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/data/file.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/empty/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/empty/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/empty/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/info.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/info.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/info.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/readme.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/readme.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BasicTest/source/mods/mod1/readme.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/data/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/data/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/data/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/subdocs/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/subdocs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/expected/mods/mod1/docs/subdocs/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/data/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/data/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/data/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/subdocs/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/subdocs/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/BoostFilesystemTest/source/mods/mod1/docs/subdocs/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/example.cpp b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/example.cpp
new file mode 100644
index 0000000..9a79d16
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/example.cpp
@@ -0,0 +1,139 @@
+#include <filesystem>
+#include <fstream>
+
+std::filesystem::path storages_path;
+std::filesystem::path hudpainter_path;
+bool has_mo2;
+
+// See below main() for implementation.
+void request_directory(std::filesystem::path);
+std::filesystem::path restrict_path(std::filesystem::path);
+std::vector<std::filesystem::path> get_files();
+std::string read_file(std::filesystem::path);
+void write_file(std::filesystem::path);
+
+// Expected path when not using MO2
+int main()
+{
+ // RedFileSystem plugin (DLL) is loaded.
+ has_mo2 = GetModuleHandle(TEXT("usvfs_x64.dll")) != nullptr;
+
+ // Setup paths
+ auto path = std::filesystem::absolute("."); // <GAME>\bin\x64
+ auto game_path = path.parent_path().parent_path(); // <GAME>
+
+ storages_path = game_path / "r6" / "storages"; // <GAME>\r6\storages
+
+ // Create storages directory if it is no present.
+ request_directory(storages_path); // <GAME>\r6\storages
+
+ // Game is running...
+
+ // HUD Painter request its storage endpoint.
+ hudpainter_path = storages_path / "HUDPainter";
+ request_directory(hudpainter_path); // <GAME>\r6\storages\HUDPainter
+
+ // HUD Painter request a file (present in archive).
+ auto default_path =
+ restrict_path("DEFAULT.json"); // <GAME>\r6\storages\HUDPainter\DEFAULT.json
+
+ // HUD Painter read file in `default_path` with success.
+ auto data = read_file(default_path); // <GAME>\r6\storages\HUDPainter\DEFAULT.json
+
+ // HUD Painter request another file.
+ auto test_path =
+ restrict_path("TEST.json"); // <GAME>\r6\storages\HUDPainter\TEST.json
+
+ // (Bug A) HUD Painter write file in `test_path`.
+ write_file(test_path); // <GAME>\r6\storages\HUDPainter\TEST.json
+ // file is created with workaround, not created otherwise.
+
+ // (Bug B) HUD Painter request list of files.
+ // TEST.json is successfully created when using workaround.
+ auto files = get_files(); // [0] <GAME>\r6\storages\HUDPainter\DEFAULT.json
+
+ // files.size() == 1
+
+ // Expect:
+ // files.size() == 2
+ //
+ // [0] <GAME>\r6\storages\HUDPainter\DEFAULT.json
+ // [1] <GAME>\r6\storages\HUDPainter\TEST.json
+}
+
+// Create directory if it is no present
+void request_directory(std::filesystem::path path)
+{
+ bool is_present = std::filesystem::exists(path);
+
+ if (is_present) {
+ return;
+ }
+ std::filesystem::create_directory(path);
+}
+
+// Resolve path for HUDPainter (security layer)
+std::filesystem::path restrict_path(std::filesystem::path path)
+{
+ auto real_path = std::filesystem::weakly_canonical(hudpainter_path / path);
+
+ // Workaround when using MO2
+ if (has_mo2) {
+ return real_path;
+ }
+ // Expected implementation without MO2
+ if (real_path.string().find(hudpainter_path.string() + "\\") != 0) {
+ // "throw" error
+ }
+ return real_path;
+}
+
+// List files in storage of HUDPainter.
+std::vector<std::filesystem::path> get_files()
+{
+ std::vector<std::filesystem::path> files;
+ auto entries = std::filesystem::directory_iterator(hudpainter_path);
+
+ for (const auto& entry : entries) {
+ if (entry.is_regular_file()) {
+ auto file_name = entry.path().filename();
+ auto file_path =
+ hudpainter_path /
+ file_name; // Culprit of bug B. When using entry.path() directly, it works.
+
+ files.emplace_back(file_path);
+ }
+ }
+ return files;
+}
+
+std::string read_file(std::filesystem::path path)
+{
+ std::ifstream stream;
+
+ // With workaround:
+ // std::filesystem::create_directories(path.parent_path());
+ stream.open(path);
+ if (!stream.is_open()) {
+ return "";
+ }
+ std::stringstream data;
+
+ data << stream.rdbuf();
+ stream.close();
+ return data.str();
+}
+
+void write_file(std::filesystem::path path)
+{
+ std::ofstream stream;
+
+ // With workaround:
+ // std::filesystem::create_directories(path.parent_path());
+ stream.open(path, std::ios_base::trunc);
+ if (!stream.is_open()) {
+ return;
+ }
+ stream << "<DATA>";
+ stream.close();
+}
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/data/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/data/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/data/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json
new file mode 100644
index 0000000..dd85d0a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json
@@ -0,0 +1,11 @@
+{
+ "propertiesDefault": [
+ {
+ "name": "MainColors.Red",
+ "red": 1.1761,
+ "green": 0.3809,
+ "blue": 0.3476,
+ "alpha": 1
+ }
+ ]
+}
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/overwrite/r6/storages/HUDPainter/TEST.json b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/overwrite/r6/storages/HUDPainter/TEST.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/expected/overwrite/r6/storages/HUDPainter/TEST.json
@@ -0,0 +1 @@
+{}
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/data/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/data/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/data/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json
new file mode 100644
index 0000000..dd85d0a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/RedFileSystemTest/source/mods/HUD Painter/r6/storages/HUDPainter/DEFAULT.json
@@ -0,0 +1,11 @@
+{
+ "propertiesDefault": [
+ {
+ "name": "MainColors.Red",
+ "red": 1.1761,
+ "green": 0.3809,
+ "blue": 0.3476,
+ "alpha": 1
+ }
+ ]
+}
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/docs/doc.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/docs/doc.skip
new file mode 100644
index 0000000..09a24fd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/docs/doc.skip
@@ -0,0 +1 @@
+doc.skip in data/docs
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/file.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/file.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/data/file.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.skip
new file mode 100644
index 0000000..4b8bde6
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.skip
@@ -0,0 +1 @@
+doc.skip in mod1/docs
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/empty/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/empty/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/empty/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.skip
new file mode 100644
index 0000000..1d1857a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.skip
@@ -0,0 +1 @@
+readme.skip in mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/mods/mod1/readme.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/overwrite/readme.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/overwrite/readme.skip
new file mode 100644
index 0000000..0062dba
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/expected/overwrite/readme.skip
@@ -0,0 +1 @@
+readme.skip in overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/docs/doc.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/docs/doc.skip
new file mode 100644
index 0000000..09a24fd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/docs/doc.skip
@@ -0,0 +1 @@
+doc.skip in data/docs
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/file.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/file.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/data/file.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.skip
new file mode 100644
index 0000000..4b8bde6
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.skip
@@ -0,0 +1 @@
+doc.skip in mod1/docs
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/docs/doc.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/empty/.gitkeep b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/empty/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/empty/.gitkeep
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.skip b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.skip
new file mode 100644
index 0000000..1d1857a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.skip
@@ -0,0 +1 @@
+readme.skip in mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.txt b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_global_test/SkipFilesTest/source/mods/mod1/readme.txt
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rcopyme4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rcopyme4.txt
new file mode 100644
index 0000000..d1e44e9
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rcopyme4.txt
@@ -0,0 +1 @@
+rfolder\rcopyme4.txt original contents
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfile0.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfile0.txt
new file mode 100644
index 0000000..9830306
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfile0.txt
@@ -0,0 +1 @@
+rfolder\rfile0.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfiledeletewrite.txt
new file mode 100644
index 0000000..2743678
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfiledeletewrite.txt
@@ -0,0 +1 @@
+rfolder\rfiledeletewrite.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfilerewrite.txt
new file mode 100644
index 0000000..bdff476
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/rfolder/rfilerewrite.txt
@@ -0,0 +1 @@
+rfolder\rfilerewrite.txt rewrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0.txt
new file mode 100644
index 0000000..a52b6be
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0.txt
@@ -0,0 +1 @@
+root0 original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0w.txt
new file mode 100644
index 0000000..c177584
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root0w.txt
@@ -0,0 +1 @@
+root0w original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1.txt
new file mode 100644
index 0000000..06dc692
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1.txt
@@ -0,0 +1 @@
+root1 original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1w.txt
new file mode 100644
index 0000000..45172aa
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount.postmortem/root1w.txt
@@ -0,0 +1 @@
+root1w original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rcopyme4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rcopyme4.txt
new file mode 100644
index 0000000..d1e44e9
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rcopyme4.txt
@@ -0,0 +1 @@
+rfolder\rcopyme4.txt original contents
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfile0.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfile0.txt
new file mode 100644
index 0000000..9830306
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfile0.txt
@@ -0,0 +1 @@
+rfolder\rfile0.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledelete.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledelete.txt
new file mode 100644
index 0000000..c19828f
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledelete.txt
@@ -0,0 +1 @@
+rfolder\rfiledelete.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledeletewrite.txt
new file mode 100644
index 0000000..93861cc
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfiledeletewrite.txt
@@ -0,0 +1 @@
+rfolder\rfiledeletewrite.txt orignal file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfileoldname.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfileoldname.txt
new file mode 100644
index 0000000..9376ea1
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfileoldname.txt
@@ -0,0 +1 @@
+rfolder\rfileoldname.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfilerewrite.txt
new file mode 100644
index 0000000..499775d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/rfolder/rfilerewrite.txt
@@ -0,0 +1 @@
+rfolder\rfilerewrite.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0.txt
new file mode 100644
index 0000000..a52b6be
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0.txt
@@ -0,0 +1 @@
+root0 original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0w.txt
new file mode 100644
index 0000000..c177584
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root0w.txt
@@ -0,0 +1 @@
+root0w original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1.txt
new file mode 100644
index 0000000..06dc692
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1.txt
@@ -0,0 +1 @@
+root1 original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1w.txt
new file mode 100644
index 0000000..45172aa
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/mount/root1w.txt
@@ -0,0 +1 @@
+root1w original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfile.txt
new file mode 100644
index 0000000..227256a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfile.txt
@@ -0,0 +1 @@
+mfolder1\mfile.txt by mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfilew.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfilew.txt
new file mode 100644
index 0000000..420589d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder1/mfilew.txt
@@ -0,0 +1 @@
+mfolder1\mfilew.txt by mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder3/mdeep3/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder3/mdeep3/mfile.txt
new file mode 100644
index 0000000..6a7a0c2
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mfolder3/mdeep3/mfile.txt
@@ -0,0 +1 @@
+mfolder3\mdeep3\mfile.txt by mod1 (to be hidden by mod3)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1.txt
new file mode 100644
index 0000000..7d5dc0e
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1.txt
@@ -0,0 +1 @@
+hello mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1w.txt
new file mode 100644
index 0000000..1838cdf
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod1/mod1w.txt
@@ -0,0 +1 @@
+hello mod1w
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder2/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder2/mfile.txt
new file mode 100644
index 0000000..8ff096e
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder2/mfile.txt
@@ -0,0 +1 @@
+mfolder2\mfile.txt by mod2
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfile.txt
new file mode 100644
index 0000000..c0f0f2c
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove.txt
new file mode 100644
index 0000000..e35f1f3
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove2p.txt
new file mode 100644
index 0000000..cc572dc
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletemove2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove2p.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite.txt
new file mode 100644
index 0000000..f699360
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite2p.txt
new file mode 100644
index 0000000..9eae9c5
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfiledeletewrite2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite2p.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilemoveover.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilemoveover.txt
new file mode 100644
index 0000000..88a6d08
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilemoveover.txt
@@ -0,0 +1 @@
+mfolder4/mfilemoveover.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfileoverwrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfileoverwrite.txt
new file mode 100644
index 0000000..61b92a6
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfileoverwrite.txt
@@ -0,0 +1 @@
+mfolder4\mfileoverwrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilerewrite.txt
new file mode 100644
index 0000000..727a48f
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mfolder4/mfilerewrite.txt
@@ -0,0 +1 @@
+mfolder4\mfilerewrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mod2.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mod2.txt
new file mode 100644
index 0000000..49bbbf1
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod2/mod2.txt
@@ -0,0 +1 @@
+hello mod2
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder3/mdeep3/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder3/mdeep3/mfile.txt
new file mode 100644
index 0000000..fac8213
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder3/mdeep3/mfile.txt
@@ -0,0 +1 @@
+mfolder3\mdeep3\mfile.txt by mod3
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder4/mfile.txt
new file mode 100644
index 0000000..5e6ca00
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod3 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mod3.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mod3.txt
new file mode 100644
index 0000000..47fbacd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod3/mod3.txt
@@ -0,0 +1 @@
+hello mod3
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfile.txt
new file mode 100644
index 0000000..c67ecfe
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletemove.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletemove.txt
new file mode 100644
index 0000000..00cc0cd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletemove.txt
@@ -0,0 +1 @@
+mfolder4\mfiledeletemove.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletewrite.txt
new file mode 100644
index 0000000..083a6b8
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfiledeletewrite.txt
@@ -0,0 +1 @@
+mfolder4\mfiledeletewrite.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilemoveover.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilemoveover.txt
new file mode 100644
index 0000000..a8a93c2
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilemoveover.txt
@@ -0,0 +1 @@
+mfolder4\mfilemoveover.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfileoverwrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfileoverwrite.txt
new file mode 100644
index 0000000..fc6d42f
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfileoverwrite.txt
@@ -0,0 +1 @@
+mfolder4\mfileoverwrite.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilerewrite.txt
new file mode 100644
index 0000000..a3b8ced
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/mod4/mfolder4/mfilerewrite.txt
@@ -0,0 +1 @@
+mfolder4\mfilerewrite.txt rewrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/.empty b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/.empty
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfile1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfile1.txt
new file mode 100644
index 0000000..bf76f1d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfile1.txt
@@ -0,0 +1 @@
+newfile1.txt nonrecursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfolder1/newfile1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfolder1/newfile1.txt
new file mode 100644
index 0000000..4802577
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder1/newfolder1/newfile1.txt
@@ -0,0 +1 @@
+newfile1.txt nonrecursive overwrite subfolder
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder2/newfile2.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder2/newfile2.txt
new file mode 100644
index 0000000..a4fa7fc
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder2/newfile2.txt
@@ -0,0 +1 @@
+newfile2.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3.txt
new file mode 100644
index 0000000..933eb0c
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3.txt
@@ -0,0 +1 @@
+newfile3.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3e.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3e.txt
new file mode 100644
index 0000000..5e5286a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder3/newfolder3/newfile3e.txt
@@ -0,0 +1 @@
+newfile3e.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletemove2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletemove2p.txt
new file mode 100644
index 0000000..6b85a92
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletemove2p.txt
@@ -0,0 +1 @@
+mfolder4\mfiledeletemove2p.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletewrite2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletewrite2p.txt
new file mode 100644
index 0000000..64cac84
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/mfiledeletewrite2p.txt
@@ -0,0 +1 @@
+mfolder4\mfiledeletewrite2p.txt overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4.txt
new file mode 100644
index 0000000..cba5361
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4.txt
@@ -0,0 +1 @@
+newfile4.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4e.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4e.txt
new file mode 100644
index 0000000..eb90089
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4e.txt
@@ -0,0 +1 @@
+newfile4e.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4enr.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4enr.txt
new file mode 100644
index 0000000..f8b5f9f
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/e/p/newfile4enr.txt
@@ -0,0 +1 @@
+newfile4enr.txt nonrecursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4.txt
new file mode 100644
index 0000000..06edab8
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4.txt
@@ -0,0 +1 @@
+epnewfile4.txt nonrecursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4r.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4r.txt
new file mode 100644
index 0000000..8fd183d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4/d/e/epnewfile4r.txt
@@ -0,0 +1 @@
+epnewfile4r.txt recursive overwrite
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4p/rcopyme4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4p/rcopyme4.txt
new file mode 100644
index 0000000..d1e44e9
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/newfolder4p/rcopyme4.txt
@@ -0,0 +1 @@
+rfolder\rcopyme4.txt original contents
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/rcopyme4.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/rcopyme4.txt
new file mode 100644
index 0000000..d1e44e9
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/mfolder4/rcopyme4.txt
@@ -0,0 +1 @@
+rfolder\rcopyme4.txt original contents
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/rfolder/rfilenewname.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/rfolder/rfilenewname.txt
new file mode 100644
index 0000000..9376ea1
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/overwrite/rfolder/rfilenewname.txt
@@ -0,0 +1 @@
+rfolder\rfileoldname.txt original file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1.txt
new file mode 100644
index 0000000..5aa129b
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1.txt
@@ -0,0 +1 @@
+root1 source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1w.txt
new file mode 100644
index 0000000..0c04aa5
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root1w.txt
@@ -0,0 +1 @@
+root1w source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2.txt
new file mode 100644
index 0000000..4ac40bb
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2.txt
@@ -0,0 +1 @@
+root2 source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2w.txt
new file mode 100644
index 0000000..83ddb42
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source.postmortem/root2w.txt
@@ -0,0 +1 @@
+root2w source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfile.txt
new file mode 100644
index 0000000..227256a
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfile.txt
@@ -0,0 +1 @@
+mfolder1\mfile.txt by mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfilew.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfilew.txt
new file mode 100644
index 0000000..420589d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder1/mfilew.txt
@@ -0,0 +1 @@
+mfolder1\mfilew.txt by mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder3/mdeep3/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder3/mdeep3/mfile.txt
new file mode 100644
index 0000000..6a7a0c2
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mfolder3/mdeep3/mfile.txt
@@ -0,0 +1 @@
+mfolder3\mdeep3\mfile.txt by mod1 (to be hidden by mod3)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1.txt
new file mode 100644
index 0000000..7d5dc0e
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1.txt
@@ -0,0 +1 @@
+hello mod1
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1w.txt
new file mode 100644
index 0000000..1838cdf
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod1/mod1w.txt
@@ -0,0 +1 @@
+hello mod1w
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder2/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder2/mfile.txt
new file mode 100644
index 0000000..8ff096e
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder2/mfile.txt
@@ -0,0 +1 @@
+mfolder2\mfile.txt by mod2
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfile.txt
new file mode 100644
index 0000000..c0f0f2c
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove.txt
new file mode 100644
index 0000000..e35f1f3
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove2p.txt
new file mode 100644
index 0000000..cc572dc
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletemove2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove2p.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite.txt
new file mode 100644
index 0000000..f699360
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite2p.txt
new file mode 100644
index 0000000..9eae9c5
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfiledeletewrite2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite2p.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilemoveover.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilemoveover.txt
new file mode 100644
index 0000000..88a6d08
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilemoveover.txt
@@ -0,0 +1 @@
+mfolder4/mfilemoveover.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfileoverwrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfileoverwrite.txt
new file mode 100644
index 0000000..61b92a6
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfileoverwrite.txt
@@ -0,0 +1 @@
+mfolder4\mfileoverwrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilerewrite.txt
new file mode 100644
index 0000000..727a48f
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mfolder4/mfilerewrite.txt
@@ -0,0 +1 @@
+mfolder4\mfilerewrite.txt by mod2 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mod2.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mod2.txt
new file mode 100644
index 0000000..49bbbf1
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod2/mod2.txt
@@ -0,0 +1 @@
+hello mod2
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder3/mdeep3/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder3/mdeep3/mfile.txt
new file mode 100644
index 0000000..fac8213
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder3/mdeep3/mfile.txt
@@ -0,0 +1 @@
+mfolder3\mdeep3\mfile.txt by mod3
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder4/mfile.txt
new file mode 100644
index 0000000..5e6ca00
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod3 (to be hidden by mod4)
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mod3.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mod3.txt
new file mode 100644
index 0000000..47fbacd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod3/mod3.txt
@@ -0,0 +1 @@
+hello mod3
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfile.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfile.txt
new file mode 100644
index 0000000..c67ecfe
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfile.txt
@@ -0,0 +1 @@
+mfolder4\mfile.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove.txt
new file mode 100644
index 0000000..657f07d
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove2p.txt
new file mode 100644
index 0000000..cfd08dd
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletemove2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletemove2p.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite.txt
new file mode 100644
index 0000000..a17d129
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite2p.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite2p.txt
new file mode 100644
index 0000000..b198d1c
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfiledeletewrite2p.txt
@@ -0,0 +1 @@
+mfolder4/mfiledeletewrite2p.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilemoveover.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilemoveover.txt
new file mode 100644
index 0000000..b395908
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilemoveover.txt
@@ -0,0 +1 @@
+mfolder4/mfilemoveover.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfileoverwrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfileoverwrite.txt
new file mode 100644
index 0000000..405c0c1
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfileoverwrite.txt
@@ -0,0 +1 @@
+mfolder4\mfileoverwrite.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilerewrite.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilerewrite.txt
new file mode 100644
index 0000000..def973c
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/mod4/mfolder4/mfilerewrite.txt
@@ -0,0 +1 @@
+mfolder4\mfilerewrite.txt by mod4
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/overwrite/.empty b/libs/usvfs/test/fixtures/usvfs_test/basic/source/overwrite/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/overwrite/.empty
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1.txt
new file mode 100644
index 0000000..5aa129b
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1.txt
@@ -0,0 +1 @@
+root1 source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1w.txt
new file mode 100644
index 0000000..0c04aa5
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root1w.txt
@@ -0,0 +1 @@
+root1w source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2.txt
new file mode 100644
index 0000000..4ac40bb
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2.txt
@@ -0,0 +1 @@
+root2 source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2w.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2w.txt
new file mode 100644
index 0000000..83ddb42
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/source/root2w.txt
@@ -0,0 +1 @@
+root2w source file
diff --git a/libs/usvfs/test/fixtures/usvfs_test/basic/vfs_mappings.txt b/libs/usvfs/test/fixtures/usvfs_test/basic/vfs_mappings.txt
new file mode 100644
index 0000000..cc755b4
--- /dev/null
+++ b/libs/usvfs/test/fixtures/usvfs_test/basic/vfs_mappings.txt
@@ -0,0 +1,26 @@
+# mapdir <optional relative path under mount>
+# <relative path under source to mount>
+# ...
+mapdir
+ mod1
+ mod2
+ mod3
+ mod4
+
+# mapdircreate <optional relative path under mount>
+# <relative path under source to mount>
+# ...
+mapdircreate
+ overwrite
+
+# mapfile <optional relative path under mount>
+# <relative path under source to mount>
+# ...
+mapfile root1.txt
+ root1.txt
+mapfile root1w.txt
+ root1w.txt
+mapfile root2.txt
+ root2.txt
+mapfile root2w.txt
+ root2w.txt