fix: initialize selected runtime for live playout

This commit is contained in:
2026-07-28 20:44:20 +09:00
parent 18d40e892f
commit 818acad646
24 changed files with 906 additions and 391 deletions

View File

@@ -70,7 +70,7 @@ public sealed class LegacyFirstRunSetupNativeContractTests
}
[Fact]
public void BothFolderSelectionsValidateOnlyCanonicalPaths()
public void BothFolderSelectionsValidateCanonicalPathsAndTheSelectedDatabaseIni()
{
var setup = File.ReadAllText(Path.Combine(
AppRoot,
@@ -84,8 +84,11 @@ public sealed class LegacyFirstRunSetupNativeContractTests
"LegacyOperatorSettingsFolderKind.Resource",
setup,
StringComparison.Ordinal);
Assert.DoesNotContain("MmoneyCoder.ini", setup, StringComparison.Ordinal);
Assert.DoesNotContain("LegacyIniDatabaseOptionsLoader", setup,
Assert.Contains(
"Path.Combine(resource, \"MmoneyCoder.ini\")",
setup,
StringComparison.Ordinal);
Assert.Contains("LegacyIniDatabaseOptionsLoader", setup,
StringComparison.Ordinal);
var clearCuts = setup.IndexOf(
"_cutsDirectory = null;",
@@ -116,29 +119,78 @@ public sealed class LegacyFirstRunSetupNativeContractTests
}
[Fact]
public void SetupPersistsOnlyTheSelectedPathsWithoutStartingAChildProcess()
public void SetupRunsTheVerifiedInitializerAndVerifiesEveryDurableOutput()
{
var setup = File.ReadAllText(Path.Combine(
AppRoot,
"FirstRunSetupWindow.xaml.cs"));
var saveSettings = RequiredIndex(
setup,
"var saved = store.Save(current with");
var saveBinding = RequiredIndex(
setup,
"SaveRuntimeBinding(repositoryRoot, runtimeRoot);");
Assert.True(saveSettings < saveBinding);
Assert.Contains(
"var store = new LegacyOperatorSettingsStore();",
"await RunVerifiedSetupAsync(",
setup,
StringComparison.Ordinal);
Assert.Contains(
"SceneDirectory = cutsDirectory",
"new ProcessStartInfo",
setup,
StringComparison.Ordinal);
Assert.Contains(
"ResourceDirectory = resourceDirectory",
"UseShellExecute = false",
setup,
StringComparison.Ordinal);
Assert.Contains(
"CreateNoWindow = true",
setup,
StringComparison.Ordinal);
Assert.Contains(
"RedirectStandardOutput = true",
setup,
StringComparison.Ordinal);
Assert.Contains(
"RedirectStandardError = true",
setup,
StringComparison.Ordinal);
Assert.Contains(
"startInfo.ArgumentList.Add(value)",
setup,
StringComparison.Ordinal);
Assert.Contains(
"Initialize-ExistingDevelopmentPc.ps1",
setup,
StringComparison.Ordinal);
Assert.Contains(
"AddArgument(\"-SkipDatabaseProfile\")",
setup,
StringComparison.Ordinal);
Assert.Contains(
"AddArgument(\"-ConfigureDevelopmentLive\")",
setup,
StringComparison.Ordinal);
Assert.Contains(
"AddArgument(\"127.0.0.1\")",
setup,
StringComparison.Ordinal);
Assert.Contains(
"AddArgument(\"30001\")",
setup,
StringComparison.Ordinal);
Assert.Contains(
"AddArgument(\"-PinRegisteredK3D\")",
setup,
StringComparison.Ordinal);
Assert.Contains(
"DrainOutputAsync(process.StandardOutput)",
setup,
StringComparison.Ordinal);
Assert.Contains(
"DrainOutputAsync(process.StandardError)",
setup,
StringComparison.Ordinal);
Assert.Contains(
"loaded.Settings.SceneDirectory",
setup,
StringComparison.Ordinal);
Assert.Contains(
"loaded.Settings.ResourceDirectory",
setup,
StringComparison.Ordinal);
Assert.Contains(
@@ -146,18 +198,21 @@ public sealed class LegacyFirstRunSetupNativeContractTests
setup,
StringComparison.Ordinal);
Assert.Contains(
"File.Move(temporary, destination, overwrite: true);",
"\"k3d-pins.local.json\"",
setup,
StringComparison.Ordinal);
Assert.DoesNotContain("ProcessStartInfo", setup, StringComparison.Ordinal);
Assert.DoesNotContain("Process.Start", setup, StringComparison.Ordinal);
Assert.DoesNotContain("RunSetupAsync", setup, StringComparison.Ordinal);
Assert.DoesNotContain("powershell.exe", setup, StringComparison.OrdinalIgnoreCase);
Assert.DoesNotContain("dotnet", setup, StringComparison.OrdinalIgnoreCase);
Assert.DoesNotContain("ConfigureDevelopmentLive", setup,
Assert.Contains(
"\"playout.local.json\"",
setup,
StringComparison.Ordinal);
Assert.Contains(
"\"playout.development-live.local.json\"",
setup,
StringComparison.Ordinal);
Assert.DoesNotContain(
"Environment.SetEnvironmentVariable",
setup,
StringComparison.Ordinal);
Assert.DoesNotContain("PinRegisteredK3D", setup, StringComparison.Ordinal);
Assert.DoesNotContain("DatabaseIniPath", setup, StringComparison.Ordinal);
}
[Fact]
@@ -180,6 +235,19 @@ public sealed class LegacyFirstRunSetupNativeContractTests
StringComparison.Ordinal);
}
[Fact]
public void SolutionDeclaresTheVisualStudioWinUiWorkload()
{
var configuration = File.ReadAllText(Path.Combine(
RepositoryRoot,
".vsconfig"));
Assert.Contains(
"\"Microsoft.VisualStudio.Workload.Universal\"",
configuration,
StringComparison.Ordinal);
}
[Fact]
public void AutomaticK3dPinningIsPersistentAndCannotApproveAChangedDll()
{
@@ -277,11 +345,4 @@ public sealed class LegacyFirstRunSetupNativeContractTests
throw new DirectoryNotFoundException("Repository root was not found.");
}
private static int RequiredIndex(string value, string marker)
{
var index = value.IndexOf(marker, StringComparison.Ordinal);
Assert.True(index >= 0, $"Required marker was not found: {marker}");
return index;
}
}