public Func <int> RunConsoleModeCommand(string[] lines, bool inputIsFromUser, ConsoleCommand command, TextWriter outputWriter = null)
        {
            var injectedInputStream = new MemoryStream();

            var fakeConsoleWriter = outputWriter ?? new StringWriter();
            var fakeConsoleReader = new StreamReader(injectedInputStream);

            var consoleModeCommand = new ConsoleModeCommand(
                () => new ConsoleCommand[] { command },
                fakeConsoleWriter,
                fakeConsoleReader);

            arrange(delegate
            {
                var injectedInput = new StreamWriter(injectedInputStream);

                foreach (var line in lines)
                {
                    injectedInput.WriteLine(line);
                }
                injectedInput.Flush();

                injectedInputStream.Seek(0, SeekOrigin.Begin);
            });

            IConsoleRedirectionDetection redirectionDetection = A.Fake <IConsoleRedirectionDetection>();

            arrange(() => consoleModeCommand.SetConsoleRedirectionDetection(redirectionDetection));
            arrange(() => A.CallTo(() => redirectionDetection.IsInputRedirected()).Returns(!inputIsFromUser));

            return(() =>
                   ConsoleCommandDispatcher.DispatchCommand(new ConsoleCommand[] { consoleModeCommand }, new string[0],
                                                            fakeConsoleWriter));
        }
Exemple #2
0
        public override int Run(string[] remainingArguments)
        {
            string[] args;

            bool isInputRedirected = _redirectionDetector.IsInputRedirected();

            if (!isInputRedirected)
            {
                WritePromptForCommands();
            }

            bool   haveError = false;
            string input     = _inputStream.ReadLine();

            while (!input.Trim().Equals("x"))
            {
                if (input.Trim().Equals("?"))
                {
                    ConsoleHelp.ShowSummaryOfCommands(GetNextCommands(), _outputStream);
                }
                else
                {
                    args = CommandLineParser.Parse(input);

                    var result = ConsoleCommandDispatcher.DispatchCommand(GetNextCommands(), args, _outputStream, true);
                    if (result != 0)
                    {
                        haveError = true;

                        if (isInputRedirected)
                        {
                            return(result);
                        }
                    }
                }

                if (!isInputRedirected)
                {
                    _outputStream.WriteLine();

                    if (!isInputRedirected)
                    {
                        WritePromptForCommands();
                    }
                }

                input = _inputStream.ReadLine();
            }

            return(haveError ? -1 : 0);
        }
        public override int Run(string[] remainingArguments)
        {
            string[] args;

            bool isInputRedirected = _redirectionDetector.IsInputRedirected();

            if (!isInputRedirected)
            {
                _outputStream.WriteLine(continuePrompt);
            }

            bool   haveError = false;
            string input     = _inputStream.ReadLine();

            while (!input.Trim().Equals("x"))
            {
                if (input.Trim().Equals("?"))
                {
                    ConsoleCommandDispatcher.DispatchCommand(_commandSource(), new string[] { }, _outputStream);
                }
                else
                {
                    args = input.ToCommandLineArgs();
                    var result = ConsoleCommandDispatcher.DispatchCommand(_commandSource(), args, _outputStream);
                    if (result != 0)
                    {
                        haveError = true;

                        if (isInputRedirected)
                        {
                            return(result);
                        }
                    }
                }

                if (!isInputRedirected)
                {
                    _outputStream.WriteLine();
                    _outputStream.WriteLine(continuePrompt);
                }

                input = _inputStream.ReadLine();
            }

            return(haveError ? -1 : 0);
        }