fix: recover fixture activation raised during document open

This commit is contained in:
codex
2026-08-04 07:25:53 +03:00
parent 523d063ceb
commit 13578b7c9b
2 changed files with 19 additions and 0 deletions
@@ -195,6 +195,16 @@ internal sealed class FirstLimitedApplyAutomationCoordinator
document.CommandCancelled += OnCommandCancelled; document.CommandCancelled += OnCommandCancelled;
documentHandlersSubscribed = true; documentHandlersSubscribed = true;
Transition(CoordinatorState.Running, "AutomationRunning"); Transition(CoordinatorState.Running, "AutomationRunning");
// DocumentActivated can be raised synchronously by Open before the
// coordinator receives the returned Document. Confirm the current
// active document after assignment so that one missed event cannot
// strand the workflow waiting for another startup Idle.
if (ReferenceEquals(AcadApplication.DocumentManager.MdiActiveDocument, document))
{
fixtureDocumentActivated = true;
transitions.Add("FixtureDocumentActiveAfterOpen");
TryActivateProjectAndVerifyContext();
}
} }
catch (System.Exception ex) { FailFromCallback("Start", ex, "AUTOMATION_START_FAILED"); } catch (System.Exception ex) { FailFromCallback("Start", ex, "AUTOMATION_START_FAILED"); }
} }
@@ -98,6 +98,15 @@ public sealed class FoundationTests
Assert.Contains("FixtureDocumentActivated", source); Assert.Contains("FixtureDocumentActivated", source);
} }
[Fact] public void AutomationDocumentActivation_RecoversSynchronousOpenEvent()
{
var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "FirstLimitedApplyAutomation.cs"));
var start = source[source.IndexOf("public void Start()", StringComparison.Ordinal)..source.IndexOf("private void CompleteLifecycleProbe", StringComparison.Ordinal)];
Assert.Contains("FixtureDocumentActiveAfterOpen", start);
Assert.Contains("ReferenceEquals(AcadApplication.DocumentManager.MdiActiveDocument, document)", start);
Assert.Contains("TryActivateProjectAndVerifyContext();", start);
}
[Fact] public void AutomationControlledExit_QueuesNativeQuitAfterPublicCommand() [Fact] public void AutomationControlledExit_QueuesNativeQuitAfterPublicCommand()
{ {
var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "FirstLimitedApplyAutomation.cs")); var source = File.ReadAllText(Path.Combine(ProjectRoot, "src", "PRecAnnot.Plant3D2026", "FirstLimitedApplyAutomation.cs"));