public void No_args_displays_help()
        {
            var processExecMock = new Mock<IProcessExecuter>();
            var formDisplayer = new Mock<IFormDisplayer>();
            var parser = new CommandLineParser(processExecMock.Object, formDisplayer.Object, Mock.Of<IFileExtensionLocator>());
            parser.Parse(new string[] {});

            processExecMock.Verify(x => x.Start(It.IsAny<string>(), It.IsAny<string>()), Times.Never());
            formDisplayer.Verify(x => x.Display(It.IsAny<Form>()), Times.Exactly(1));
        }
        public static void Main(string[] args)
        {
            var logger = LogManager.GetCurrentClassLogger();
            logger.Trace("Main():");
            for (var i = 0; i < args.Length; i++)
                logger.Trace(string.Format("  {0}: {1}", i, args[i]));

            var processExecuter = new ProcessExecuter();
            var messageDisplayer = new FormDisplayer();
            var fileProvider = new FileProvider();
            var fileExtPersister = new FileExtensionPersister(fileProvider);
            var fileExtLocator = new FileExtensionLocator(fileExtPersister, new BuiltInFileExtensions());
            var clp = new CommandLineParser(processExecuter, messageDisplayer, fileExtLocator);
            clp.Parse(args);
        }
        public void Merge()
        {
            var args = new[] { "MERGE", "path", "path2", "left label", "right label" };

            var fileExt = new Mock<FileExtension>();
            fileExt.Setup(x => x.IsForExtension(It.IsAny<IEnumerable<string>>())).Returns(true);
            fileExt.Setup(x => x.GetEffectiveMergeArguments(It.IsAny<IList<string>>())).Returns("effective arguments");
            fileExt.Setup(x => x.Command).Returns("command");

            var fileExtLocator = new Mock<IFileExtensionLocator>();
            fileExtLocator.Setup(x => x.GetFileExtension(It.IsAny<IList<string>>())).Returns(fileExt.Object);

            var processExecMock = new Mock<IProcessExecuter>();
            var parser = new CommandLineParser(processExecMock.Object, Mock.Of<IFormDisplayer>(), fileExtLocator.Object);
            parser.Parse(args);

            processExecMock.Verify(x => x.Start("command", "effective arguments"), Times.Once());
            fileExt.Verify(x => x.GetEffectiveMergeArguments(args), Times.Once());
            fileExt.Verify(x => x.GetEffectiveDiffArguments(args), Times.Never());
        }
        public void Unrecognized_command_gives_help()
        {
            var processExecMock = new Mock<IProcessExecuter>();
            var formDisplayer = new Mock<IFormDisplayer>();
            var parser = new CommandLineParser(processExecMock.Object, formDisplayer.Object, Mock.Of<IFileExtensionLocator>());
            parser.Parse(new[] {"nothing"});

            processExecMock.Verify(x => x.Start(It.IsAny<string>(), It.IsAny<string>()), Times.Never());
            formDisplayer.Verify(x => x.Display(It.IsAny<Form>()), Times.Once());
        }