public void Run(TextReader reader, TextWriter writer) { using (new TextConsole(this.bus, reader, writer)) using (new SentenceParser(this.bus, this.words)) using (EndOfGame endOfGame = new EndOfGame(this.bus)) using (InputLoop loop = new InputLoop(this.bus, ">")) using (new Inventory(this.bus)) using (this.InitializeMap()) { loop.Run(endOfGame.Token); } }
public void RunCancelBeforeEnd() { MessageBus bus = new MessageBus(); using (CancellationTokenSource cts = new CancellationTokenSource()) { bus.Subscribe <InputRequestedMessage>(_ => cts.Cancel()); using (InputLoop loop = new InputLoop(bus)) { Action act = () => loop.Run(cts.Token); act.Should().NotThrow(); } } }
public void RunCancelImmediately() { MessageBus bus = new MessageBus(); bus.Subscribe <InputRequestedMessage>(_ => throw new InvalidOperationException("Should not have requested input.")); using (CancellationTokenSource cts = new CancellationTokenSource()) { cts.Cancel(); using (InputLoop loop = new InputLoop(bus)) { Action act = () => loop.Run(cts.Token); act.Should().NotThrow(); } } }
public void RunInputEnded() { MessageBus bus = new MessageBus(); string prompt = null; bus.Subscribe <InputRequestedMessage>(m => { prompt = m.Prompt; bus.Send(new InputEndedMessage()); }); using (InputLoop loop = new InputLoop(bus, "Yes?")) { loop.Run(CancellationToken.None); prompt.Should().Be("Yes?"); } }
public void RunReadTwoLines() { MessageBus bus = new MessageBus(); int linesRead = 0; bus.Subscribe <InputRequestedMessage>(_ => { if (++linesRead == 2) { bus.Send(new InputEndedMessage()); } }); using (InputLoop loop = new InputLoop(bus)) { loop.Run(CancellationToken.None); linesRead.Should().Be(2); } }
internal static void RunNewInputLoop(ConsoleHost parent, bool isNested) { // creates an instance and adds it to the stack and starts it running. int stackCount = s_instanceStack.Count; if (stackCount == PSHost.MaximumNestedPromptLevel) { throw PSTraceSource.NewInvalidOperationException(ConsoleHostStrings.TooManyNestedPromptsError); } InputLoop il = new InputLoop(parent, isNested); s_instanceStack.Push(il); il.Run(s_instanceStack.Count > 1); // Once the loop has finished running, remove it from the instance stack. InputLoop il2 = s_instanceStack.Pop(); Dbg.Assert(il == il2, "top of instance stack does not correspond to the instance pushed"); }