public static void Feedback() { MyPredictor slow = MyPredictor.SlowPredictor; MyPredictor fast = MyPredictor.FastPredictor; try { // Register 2 predictor implementations SubsystemManager.RegisterSubsystem <ICommandPredictor, MyPredictor>(slow); SubsystemManager.RegisterSubsystem(SubsystemKind.CommandPredictor, fast); var history = new[] { "hello", "world" }; var ids = new HashSet <Guid> { slow.Id, fast.Id }; CommandPrediction.OnCommandLineAccepted(Client, history); CommandPrediction.OnSuggestionDisplayed(Client, slow.Id, Session, 2); CommandPrediction.OnSuggestionDisplayed(Client, fast.Id, Session, -1); CommandPrediction.OnSuggestionAccepted(Client, slow.Id, Session, "Yeah"); // The calls to 'StartEarlyProcessing' and 'OnSuggestionAccepted' are queued in thread pool, // so we wait a bit to make sure the calls are done. while (slow.History.Count == 0 || slow.AcceptedSuggestions.Count == 0) { Thread.Sleep(10); } Assert.Equal(2, slow.History.Count); Assert.Equal($"{Client}-{history[0]}", slow.History[0]); Assert.Equal($"{Client}-{history[1]}", slow.History[1]); Assert.Equal(2, fast.History.Count); Assert.Equal($"{Client}-{history[0]}", fast.History[0]); Assert.Equal($"{Client}-{history[1]}", fast.History[1]); Assert.Single(slow.DisplayedSuggestions); Assert.Equal($"{Client}-{Session}-2", slow.DisplayedSuggestions[0]); Assert.Single(fast.DisplayedSuggestions); Assert.Equal($"{Client}-{Session}--1", fast.DisplayedSuggestions[0]); Assert.Single(slow.AcceptedSuggestions); Assert.Equal($"{Client}-{Session}-Yeah", slow.AcceptedSuggestions[0]); Assert.Empty(fast.AcceptedSuggestions); } finally { SubsystemManager.UnregisterSubsystem <ICommandPredictor>(slow.Id); SubsystemManager.UnregisterSubsystem(SubsystemKind.CommandPredictor, fast.Id); } }
void IPSConsoleReadLineMockableMethods.OnSuggestionAccepted(Guid predictorId, uint session, string suggestionText) { CommandPrediction.OnSuggestionAccepted(PSReadLine, predictorId, session, suggestionText); }