public void Rollback_WriteExtraDataThenRollback_ExtraDataIsRolledBack()
        {
            var baseFs = new InMemoryFileSystem();

            DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem saveFs, baseFs, true, true, true)
            .ThrowIfFailure();

            var originalExtraData = new SaveDataExtraData();

            originalExtraData.DataSize = 0x12345;

            saveFs.WriteExtraData(in originalExtraData).ThrowIfFailure();
            saveFs.CommitExtraData(false).ThrowIfFailure();

            saveFs.Dispose();
            DirectorySaveDataFileSystem.CreateNew(out saveFs, baseFs, true, true, true).ThrowIfFailure();

            var newExtraData = new SaveDataExtraData();

            newExtraData.DataSize = 0x67890;

            saveFs.WriteExtraData(in newExtraData).ThrowIfFailure();

            Assert.Success(saveFs.Rollback());
            Assert.Success(saveFs.ReadExtraData(out SaveDataExtraData extraData));

            Assert.Equal(originalExtraData, extraData);
        }
        public void Rollback_WriteExtraDataThenCloseFs_ExtraDataIsRolledBack()
        {
            var baseFs = new InMemoryFileSystem();

            DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem saveFs, baseFs, true, true, true)
            .ThrowIfFailure();

            // Write extra data and close with committing
            var originalExtraData = new SaveDataExtraData();

            originalExtraData.DataSize = 0x12345;

            saveFs.WriteExtraData(in originalExtraData).ThrowIfFailure();
            saveFs.CommitExtraData(false).ThrowIfFailure();

            saveFs.Dispose();
            DirectorySaveDataFileSystem.CreateNew(out saveFs, baseFs, true, true, true).ThrowIfFailure();

            // Write a new extra data and close without committing
            var newExtraData = new SaveDataExtraData();

            newExtraData.DataSize = 0x67890;

            saveFs.WriteExtraData(in newExtraData).ThrowIfFailure();
            saveFs.Dispose();

            // Read extra data should match the first one
            DirectorySaveDataFileSystem.CreateNew(out saveFs, baseFs, true, true, true).ThrowIfFailure();
            Assert.Success(saveFs.ReadExtraData(out SaveDataExtraData extraData));

            Assert.Equal(originalExtraData, extraData);
        }
        public void Commit_AfterSuccessfulCommit_CanReadCommittedExtraData()
        {
            var baseFs = new InMemoryFileSystem();

            DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem saveFs, baseFs, true, true, true)
            .ThrowIfFailure();

            var originalExtraData = new SaveDataExtraData();

            originalExtraData.DataSize = 0x12345;

            saveFs.WriteExtraData(in originalExtraData).ThrowIfFailure();
            Assert.Success(saveFs.CommitExtraData(false));

            saveFs.Dispose();
            DirectorySaveDataFileSystem.CreateNew(out saveFs, baseFs, true, true, true).ThrowIfFailure();

            Assert.Success(saveFs.ReadExtraData(out SaveDataExtraData extraData));
            Assert.Equal(originalExtraData, extraData);
        }