fix: apply direct runtime paths and respect taskbar

This commit is contained in:
2026-07-28 00:35:47 +09:00
parent e3b174eec7
commit 347900701b
16 changed files with 522 additions and 401 deletions

View File

@@ -22,11 +22,10 @@ public sealed class LegacyOperatorSettingsTests
}
[Fact]
public void SceneValidation_RequiresEveryActiveSceneAndBuiltInAssetAndAllowsMissingExternalVideo()
public void SceneValidation_AcceptsAnEmptyCutsDirectoryAsADirectRuntimePath()
{
using var directory = new TemporaryDirectory();
var sceneDirectory = directory.CreateDirectory("Cuts");
WriteValidSceneFiles(sceneDirectory);
var result = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
@@ -34,91 +33,33 @@ public sealed class LegacyOperatorSettingsTests
Assert.True(result.IsValid);
Assert.Equal(Path.GetFullPath(sceneDirectory), result.Folder!.CanonicalPath);
Assert.Equal("fixture-scene", File.ReadAllText(
Path.Combine(result.Folder.CanonicalPath, "5001.t2s")));
Assert.Contains("Cuts", result.Folder.AbbreviatedPath);
Assert.InRange(
result.Folder.AbbreviatedPath.Length,
1,
LegacyOperatorFolderValidator.DefaultDisplayCharacters);
Assert.False(result.Folder.DatabaseIniDetected);
Assert.Equal(
LegacyOperatorFolderValidator.OptionalExternalAssetRelativePaths.Count,
result.Folder.MissingOptionalExternalAssetCount);
Assert.Equal(0, result.Folder.MissingOptionalExternalAssetCount);
Assert.Null(result.WarningMessage);
}
[Fact]
public void SceneValidation_BaselineOnlyIsRejectedInsteadOfBreakingOtherScenesAfterRestart()
public void SceneValidation_DoesNotInspectPartialScenesOrVideoFiles()
{
using var directory = new TemporaryDirectory();
var sceneDirectory = directory.CreateDirectory("partial-Cuts");
File.WriteAllText(Path.Combine(sceneDirectory, "5001.t2s"), "baseline");
var videoDirectory = Directory.CreateDirectory(
Path.Combine(sceneDirectory, "Video")).FullName;
File.WriteAllBytes(Path.Combine(videoDirectory, "partial.vrv"), []);
var result = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
sceneDirectory);
Assert.False(result.IsValid);
Assert.Equal(
LegacyOperatorFolderValidationFailure.RequiredFileMissing,
result.Failure);
Assert.Null(result.Folder);
AssertPathFree(result.WarningMessage, sceneDirectory);
}
[Fact]
public void SceneValidation_MissingOneActiveSceneOrBuiltInAssetIsRejected()
{
using var directory = new TemporaryDirectory();
var missingSceneDirectory = directory.CreateDirectory("missing-scene");
WriteValidSceneFiles(missingSceneDirectory);
File.Delete(Path.Combine(missingSceneDirectory, "5079.t2s"));
var missingScene = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
missingSceneDirectory);
var missingAssetDirectory = directory.CreateDirectory("missing-asset");
WriteValidSceneFiles(missingAssetDirectory);
File.Delete(Path.Combine(missingAssetDirectory, "Images", "KRX.png"));
var missingAsset = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
missingAssetDirectory);
Assert.False(missingScene.IsValid);
Assert.Equal(LegacyOperatorFolderValidationFailure.RequiredFileMissing,
missingScene.Failure);
Assert.False(missingAsset.IsValid);
Assert.Equal(LegacyOperatorFolderValidationFailure.RequiredFileMissing,
missingAsset.Failure);
}
[Fact]
public void SceneValidation_RejectsEmptyRequiredOrPresentOptionalFiles()
{
using var directory = new TemporaryDirectory();
var emptyRequiredDirectory = directory.CreateDirectory("empty-required");
WriteValidSceneFiles(emptyRequiredDirectory);
File.WriteAllBytes(Path.Combine(emptyRequiredDirectory, "5076.t2s"), []);
var emptyRequired = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
emptyRequiredDirectory);
var emptyOptionalDirectory = directory.CreateDirectory("empty-optional");
WriteValidSceneFiles(emptyOptionalDirectory);
var optionalPath = Path.Combine(emptyOptionalDirectory, "Video", "큐브배경.vrv");
Directory.CreateDirectory(Path.GetDirectoryName(optionalPath)!);
File.WriteAllBytes(optionalPath, []);
var emptyOptional = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
emptyOptionalDirectory);
Assert.False(emptyRequired.IsValid);
Assert.Equal(LegacyOperatorFolderValidationFailure.RequiredFileUnsafe,
emptyRequired.Failure);
Assert.False(emptyOptional.IsValid);
Assert.Equal(LegacyOperatorFolderValidationFailure.RequiredFileUnsafe,
emptyOptional.Failure);
Assert.True(result.IsValid);
Assert.Equal(Path.GetFullPath(sceneDirectory), result.Folder!.CanonicalPath);
Assert.Null(result.WarningMessage);
}
[Fact]
@@ -162,10 +103,12 @@ public sealed class LegacyOperatorSettingsTests
}
[Fact]
public void SceneValidation_MissingBaselineFailsWithoutLeakingThePath()
public void SceneValidation_MissingDirectoryFailsWithoutLeakingThePath()
{
using var directory = new TemporaryDirectory();
var sceneDirectory = directory.CreateDirectory("sensitive-design-folder");
var sceneDirectory = Path.Combine(
directory.Path,
"sensitive-design-folder");
var result = LegacyOperatorFolderValidator.Validate(
LegacyOperatorSettingsFolderKind.Scene,
@@ -173,7 +116,7 @@ public sealed class LegacyOperatorSettingsTests
Assert.False(result.IsValid);
Assert.Equal(
LegacyOperatorFolderValidationFailure.RequiredFileMissing,
LegacyOperatorFolderValidationFailure.DirectoryNotFound,
result.Failure);
Assert.Null(result.Folder);
AssertPathFree(result.WarningMessage, sceneDirectory);