Пример #1
0
 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);
                         }
 }
Пример #2
0
        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();
                }
            }
        }
Пример #3
0
        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();
                }
            }
        }
Пример #4
0
        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?");
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
            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");
            }