fix: open folder pickers at current paths

This commit is contained in:
2026-07-27 01:25:09 +09:00
parent ee82f0be42
commit 8cad072cf0
3 changed files with 273 additions and 24 deletions

View File

@@ -11,26 +11,85 @@ public sealed class LegacyOperatorSettingsNativeContractTests
Path.Combine(AppRoot, "MainWindow.xaml.cs"));
private static readonly string Settings = File.ReadAllText(
Path.Combine(AppRoot, "MainWindow.Settings.cs"));
private static readonly string FolderPicker = File.ReadAllText(
Path.Combine(AppRoot, "MainWindow.BackgroundPicker.cs"));
private static readonly string Playout = File.ReadAllText(
Path.Combine(AppRoot, "MainWindow.Playout.cs"));
[Fact]
public void FolderPathsComeOnlyFromTheWindowOwnedNativePicker()
{
Assert.Contains("var picker = new FolderPicker", Settings, StringComparison.Ordinal);
Assert.Contains("picker.FileTypeFilter.Add(\"*\")", Settings,
Assert.Contains(
"var initialDirectory = ResolveOperatorFolderPickerStartDirectory(kind)",
Settings,
StringComparison.Ordinal);
Assert.Contains("InitializeWithWindow.Initialize(picker, owner);", Settings,
Assert.Contains("await PickOperatorFolderAsync(", Settings,
StringComparison.Ordinal);
Assert.Contains("await picker.PickSingleFolderAsync()", Settings,
Assert.Contains("LegacyFileDialog.ShowFolder(", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("selected.Path", Settings, StringComparison.Ordinal);
Assert.Contains("WindowNative.GetWindowHandle(this)", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("FileOpenOptions.PickFolders", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("FileOpenOptions.ForceFileSystem", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("FileOpenOptions.PathMustExist", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("FileOpenOptions.NoDereferenceLinks", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("dialog.SetFolder(initialFolder);", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("dialog.SetDefaultFolder(initialFolder);", FolderPicker,
StringComparison.Ordinal);
Assert.Contains("selectedPath", Settings, StringComparison.Ordinal);
Assert.Contains("LegacyOperatorFolderValidator.TryValidate(", Settings,
StringComparison.Ordinal);
Assert.DoesNotContain("PickerLocationId.ComputerFolder", Settings,
StringComparison.Ordinal);
Assert.DoesNotContain("intent.Path", Settings, StringComparison.Ordinal);
Assert.DoesNotContain("choose.Path", Settings, StringComparison.Ordinal);
}
[Fact]
public void FolderPickerStartsAtTheLatestSavedPathOrItsNearestExistingParent()
{
var resolver = Slice(
Settings,
"private string? ResolveOperatorFolderPickerStartDirectory(",
"private static string ResolveOperatorFolderPickerTitle(");
Assert.Contains("_operatorSettings.SceneDirectory", resolver,
StringComparison.Ordinal);
Assert.Contains("_operatorSettings.ResourceDirectory", resolver,
StringComparison.Ordinal);
Assert.Contains("_operatorSettings.BackgroundDirectory", resolver,
StringComparison.Ordinal);
Assert.DoesNotContain("_appliedOperatorSettings", resolver,
StringComparison.Ordinal);
Assert.Contains("Path.Combine(AppContext.BaseDirectory, \"Cuts\")", resolver,
StringComparison.Ordinal);
Assert.Contains("Path.Combine(AppContext.BaseDirectory, \"Res\")", resolver,
StringComparison.Ordinal);
Assert.Contains("ResolveAutomaticBackgroundDirectory()", resolver,
StringComparison.Ordinal);
Assert.Contains("FindNearestExistingDirectory(preferredPath)", resolver,
StringComparison.Ordinal);
Assert.Contains("candidate = candidate.Parent", resolver,
StringComparison.Ordinal);
Assert.Contains("FindNearestExistingDirectory(AppContext.BaseDirectory)", resolver,
StringComparison.Ordinal);
}
[Fact]
public void FolderPickerTitleAndButtonRemainCompatibleWithTheLocalStateSmoke()
{
Assert.Contains("\"폴더 선택 - 디자인\"", Settings, StringComparison.Ordinal);
Assert.Contains("\"폴더 선택 - 설정\"", Settings, StringComparison.Ordinal);
Assert.Contains("\"폴더 선택 - 배경\"", Settings, StringComparison.Ordinal);
Assert.Contains("dialog.SetOkButtonLabel(\"폴더 선택\")", FolderPicker,
StringComparison.Ordinal);
}
[Fact]
public void SelectedFoldersAreLoadedAtStartupAndAppliedOnlyAtCompositionBoundaries()
{
@@ -162,7 +221,7 @@ public sealed class LegacyOperatorSettingsNativeContractTests
{
var cancelledPicker = Slice(
Settings,
"if (selected is null)",
"if (selectedPath is null)",
"cancellationToken.ThrowIfCancellationRequested();");
Assert.DoesNotContain(