fix: apply direct runtime paths and respect taskbar
This commit is contained in:
@@ -12,13 +12,29 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
"MBN_STOCK_WEBVIEW.LegacyParityApp.csproj");
|
||||
|
||||
[Fact]
|
||||
public void LegacyParityProjectLinksCutsAndResIntoOutputPublishAndMsix()
|
||||
public void LegacyParityProjectUsesCutsInPlaceAndLinksOnlyAllowlistedRes()
|
||||
{
|
||||
var project = XDocument.Load(ProjectPath);
|
||||
var contents = project.Descendants("Content").ToArray();
|
||||
|
||||
AssertLinkedRuntimeTree(contents, "$(LegacyCutsSourceRoot)\\**\\*", "Cuts\\");
|
||||
Assert.DoesNotContain(
|
||||
contents,
|
||||
element => string.Equals(
|
||||
element.Attribute("Include")?.Value,
|
||||
"$(LegacyCutsSourceRoot)\\**\\*",
|
||||
StringComparison.Ordinal));
|
||||
AssertLinkedRuntimeTree(contents, "@(LegacyPackagedResAsset)", "Res\\");
|
||||
var cutsScrub = Assert.Single(
|
||||
project.Descendants("Target"),
|
||||
target => string.Equals(
|
||||
target.Attribute("Name")?.Value,
|
||||
"ScrubCopiedCutsFromBuildOutput",
|
||||
StringComparison.Ordinal));
|
||||
Assert.Contains(
|
||||
"$(TargetDir)Cuts",
|
||||
Assert.Single(cutsScrub.Elements("RemoveDir"))
|
||||
.Attribute("Directories")?.Value,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
var packagedResNames = project.Descendants("LegacyPackagedResAsset")
|
||||
.Select(element => Path.GetFileName(element.Attribute("Include")?.Value))
|
||||
@@ -354,10 +370,10 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
validationTarget.Elements("Message"),
|
||||
message => (message.Attribute("Text")?.Value ?? string.Empty)
|
||||
.Contains(
|
||||
"Verified full legacy runtime assets are enabled",
|
||||
"External legacy runtime paths are enabled",
|
||||
StringComparison.Ordinal));
|
||||
Assert.Contains(
|
||||
"Verified full legacy runtime assets are enabled",
|
||||
"Cuts files remain in the selected folder",
|
||||
fullRuntimeMessage.Attribute("Text")?.Value,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
@@ -379,7 +395,6 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
|
||||
string[] externalContentIncludes =
|
||||
[
|
||||
@"$(LegacyCutsSourceRoot)\**\*",
|
||||
"@(LegacyPackagedResAsset)",
|
||||
"@(LegacyFinancialPreviewAsset)",
|
||||
"@(LegacyBrandAsset)"
|
||||
@@ -397,6 +412,12 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
content.Attribute("Condition")?.Value,
|
||||
StringComparison.Ordinal);
|
||||
});
|
||||
Assert.DoesNotContain(
|
||||
project.Descendants("Content"),
|
||||
element => string.Equals(
|
||||
element.Attribute("Include")?.Value,
|
||||
@"$(LegacyCutsSourceRoot)\**\*",
|
||||
StringComparison.Ordinal));
|
||||
|
||||
Assert.DoesNotContain(
|
||||
project.Descendants("Target"),
|
||||
@@ -454,8 +475,6 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
"$(LegacyRuntimeSourceRoot)",
|
||||
"$(LegacyCutsSourceRoot)",
|
||||
"$(LegacyResSourceRoot)",
|
||||
"$(LegacyCutsSourceRoot)\\%(LegacyRequiredScene.Identity).t2s",
|
||||
"$(LegacyCutsSourceRoot)\\%(LegacyRequiredBuiltInAsset.Identity)",
|
||||
"$(LegacyResSourceRoot)\\logo.png",
|
||||
"$(LegacyResSourceRoot)\\종목.ini",
|
||||
"$(LegacyResSourceRoot)\\업종_코스피.ini",
|
||||
@@ -673,42 +692,52 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
"must be outside and must not overlap this repository",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("Assert-NoReparsePointInTree", initializer,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
Assert.Contains("'New-LegacyRuntimeBundle.ps1'", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("'Initialize-LegacyRuntimeBundle.ps1'", initializer,
|
||||
Assert.Contains("Assert-NoReparsePointInExistingAncestry", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"$existingRuntime.ManifestSha256.Equals(",
|
||||
"Legacy runtime source root contains characters reserved by MSBuild.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("$bundleCreatorPath =", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("$bundleInitializerPath =", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("& $bundleCreatorPath", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("& $bundleInitializerPath", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"function New-DirectRuntimeBindingFile",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Assert-InstalledRuntimeMatchesManifest",
|
||||
"function Get-RuntimeFoldersPreflight",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Installed runtime bundle contains an unexpected file",
|
||||
"runtime-folders.local.json",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("[switch] $ReplaceRuntimeBinding", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"The selected Cuts/Res path differs from the existing runtime binding.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("Set-RuntimeBindingAtomically", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"[IO.File]::Replace($temporary, $destination, $backup)",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
var shadowInstall = initializer.IndexOf(
|
||||
"-RepositoryRoot $shadowRepositoryRoot",
|
||||
var directBinding = initializer.LastIndexOf(
|
||||
"New-DirectRuntimeBindingFile",
|
||||
StringComparison.Ordinal);
|
||||
var bindingReplace = initializer.IndexOf(
|
||||
var bindingReplace = initializer.LastIndexOf(
|
||||
"Set-RuntimeBindingAtomically",
|
||||
shadowInstall,
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(shadowInstall >= 0);
|
||||
Assert.True(bindingReplace > shadowInstall);
|
||||
Assert.True(directBinding >= 0);
|
||||
Assert.True(bindingReplace > directBinding);
|
||||
|
||||
Assert.Contains("[string] $DatabaseIniPath", initializer,
|
||||
StringComparison.Ordinal);
|
||||
@@ -790,6 +819,7 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
Assert.Contains("& $DotNetPath build $ProjectPath",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("'--no-restore'", initializer, StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"'-p:LegacyRuntimeAssetsMode=Required'",
|
||||
initializer,
|
||||
@@ -810,7 +840,9 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
"unexpectedly resolved as SourceOnly",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("Debug x64 payload count mismatch", initializer,
|
||||
Assert.Contains(
|
||||
"Debug x64 copied Cuts instead of using the selected external path.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Credential-bearing MmoneyCoder.ini entered the Debug build output.",
|
||||
@@ -820,12 +852,15 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
var runtimeWrite = initializer.LastIndexOf(
|
||||
"Set-RuntimeBindingAtomically",
|
||||
StringComparison.Ordinal);
|
||||
var pinWrite = initializer.LastIndexOf(
|
||||
"Write-ProtectedUtf8TextAtomically",
|
||||
var pinWrite = initializer.IndexOf(
|
||||
"-Description 'K3D persistent pin'",
|
||||
StringComparison.Ordinal);
|
||||
var databaseWrite = initializer.LastIndexOf(
|
||||
"Copy-DatabaseProfileAtomically",
|
||||
StringComparison.Ordinal);
|
||||
var runtimeFoldersWrite = initializer.LastIndexOf(
|
||||
"-Description 'runtime folder configuration'",
|
||||
StringComparison.Ordinal);
|
||||
var build = initializer.LastIndexOf(
|
||||
"Invoke-DebugBuildAndVerify",
|
||||
StringComparison.Ordinal);
|
||||
@@ -841,7 +876,8 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
Assert.True(pinWrite >= 0);
|
||||
Assert.True(build > pinWrite);
|
||||
Assert.True(databaseWrite > build);
|
||||
Assert.True(finalK3dVerification > databaseWrite);
|
||||
Assert.True(runtimeFoldersWrite > databaseWrite);
|
||||
Assert.True(finalK3dVerification > runtimeFoldersWrite);
|
||||
Assert.True(liveWrite > finalK3dVerification);
|
||||
Assert.True(runtimeWrite > liveWrite);
|
||||
Assert.True(cleanup > runtimeWrite);
|
||||
@@ -910,6 +946,12 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
var databaseRollback = initializer.LastIndexOf(
|
||||
"-Snapshot $databaseSnapshot",
|
||||
StringComparison.Ordinal);
|
||||
var runtimeFoldersMutation = initializer.LastIndexOf(
|
||||
"$runtimeFoldersMutationStarted = $true",
|
||||
StringComparison.Ordinal);
|
||||
var runtimeFoldersRollback = initializer.LastIndexOf(
|
||||
"-Snapshot $runtimeFoldersSnapshot",
|
||||
StringComparison.Ordinal);
|
||||
var runtimeMutation = initializer.LastIndexOf(
|
||||
"$runtimeBindingMutationStarted = $true",
|
||||
StringComparison.Ordinal);
|
||||
@@ -920,8 +962,10 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
"-Snapshot $propsSnapshot",
|
||||
StringComparison.Ordinal);
|
||||
Assert.True(databaseMutation >= 0 && databaseMutation < databaseWrite);
|
||||
Assert.True(runtimeFoldersMutation >= 0);
|
||||
Assert.True(runtimeMutation >= 0 && runtimeMutation < runtimeWrite);
|
||||
Assert.True(databaseRollback > databaseWrite);
|
||||
Assert.True(runtimeFoldersRollback > runtimeFoldersMutation);
|
||||
Assert.True(runtimeRollback > runtimeWrite);
|
||||
Assert.Contains("Original failure:", initializer, StringComparison.Ordinal);
|
||||
Assert.Contains("Secondary recovery failure(s):", initializer,
|
||||
@@ -929,51 +973,16 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
|
||||
Assert.Contains("function Assert-ExactObjectProperties", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"-Description 'Runtime bundle creation result'",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"-Description 'Runtime bundle initialization result'",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"-Description 'K3D registration inspection result'",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Runtime bundle creation result paths escaped or changed the exact output contract.",
|
||||
"function New-DirectRuntimeBindingFile",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Runtime bundle initialization result paths or hashes violate containment.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
Assert.Contains("function Get-VerifiedRuntimeManifest", initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"duplicate/extra/case/type/format changes are rejected.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"function Assert-DebugRuntimePayloadMatchesManifest",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Debug x64 runtime payload differs from the manifest:",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Debug x64 runtime output contains an unexpected file:",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"Debug x64 runtime output does not match the exact manifest file set.",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"-Root $targetRoot",
|
||||
"Runtime folder configuration rollback failed:",
|
||||
initializer,
|
||||
StringComparison.Ordinal);
|
||||
|
||||
@@ -1008,8 +1017,8 @@ public sealed class LegacyRuntimeAssetDeploymentContractTests
|
||||
var buildVerification = initializer.LastIndexOf(
|
||||
"Invoke-DebugBuildAndVerify",
|
||||
StringComparison.Ordinal);
|
||||
var pinIssue = initializer.LastIndexOf(
|
||||
"Write-ProtectedUtf8TextAtomically",
|
||||
var pinIssue = initializer.IndexOf(
|
||||
"-Description 'K3D persistent pin'",
|
||||
StringComparison.Ordinal);
|
||||
var finalK3dVerification = initializer.LastIndexOf(
|
||||
"$finalNativeHash = (",
|
||||
|
||||
Reference in New Issue
Block a user