示例#1
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreReleaseFlag = false,
                    Install = "",
                    ScriptName = null
                };

                var fs = new Mock<IFileSystem>();
                fs.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(@"C:\");

                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, scriptpackResolver.Object, packageInstaller.Object);

                resolver.Setup(i => i.GetPackages(It.IsAny<string>())).Returns(new List<IPackageReference>
                    {
                        new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                        new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                    });

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                packageInstaller.Verify(i => i.InstallPackages(It.Is<IEnumerable<IPackageReference>>(x => x.Count() == 2), It.IsAny<bool>(), It.IsAny<Action<string>>()), Times.Once());
            }
示例#2
0
        private static ScriptCsArgs ReconcileArguments(ScriptCsArgs configArgs, ScriptCsArgs commandArgs, SplitResult splitResult)
        {
            if (configArgs == null)
                return commandArgs;

            if (commandArgs == null)
                return configArgs;

            foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                var configValue = property.GetValue(configArgs);
                var commandValue = property.GetValue(commandArgs);
                var defaultValue = GetPropertyDefaultValue(property);

                if (!object.Equals(configValue, commandValue))
                {
                    if (!object.Equals(commandValue, defaultValue))
                    {
                        property.SetValue(configArgs, commandValue);
                    }
                    else
                    {
                        if (IsCommandLinePresent(splitResult.CommandArguments, property))
                            property.SetValue(configArgs, commandValue);
                    }
                }
            }

            return configArgs;
        }
示例#3
0
            public void VersionCommandShouldOutputVersion(
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IFileSystem> fileSystem)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    Version = true
                };

                var assembly       = typeof(ScriptCsArgs).Assembly;
                var currentVersion = FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;

                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                console.Verify(x => x.Write(It.Is <string>(y => y.Contains(currentVersion.ToString()))));
            }
            public void ShouldReturnErrorIfThereIsCompileException(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <ILog> logger,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install         = "",
                    ScriptName      = "test.csx"
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                executor.Setup(i => i.Execute(It.IsAny <string>(), It.IsAny <string[]>()))
                .Returns(new ScriptResult(compilationException: new Exception("test")));

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = fixture.Create <CommandFactory>();

                // Act
                var result = factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                result.ShouldEqual(CommandResult.Error);
                logger.Verify(i => i.Error(It.IsAny <object>()), Times.Once());
            }
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs()
            {
                var args = new ScriptCsArgs
                    {
                        AllowPreRelease = false,
                        Install = "",
                        ScriptName = "test.csx"
                    };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                executor.Verify(i => i.Execute(It.Is<string>(x => x == "test.csx"), It.IsAny<IEnumerable<string>>(), It.IsAny<IEnumerable<IScriptPack>>()), Times.Once());
            }
示例#6
0
            public void ShouldCreateBinFolderIfItDoesNotExist()
            {
                var args = new ScriptCsArgs {
                    Restore = true, ScriptName = ""
                };

                var fs                 = new Mock <IFileSystem>();
                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root               = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                const string CurrentDirectory = @"C:\";
                const string BinFolder        = @"C:\bin";

                fs.Setup(x => x.GetWorkingDirectory(It.IsAny <string>())).Returns(CurrentDirectory);

                var binFolderCreated = false;

                fs.Setup(x => x.DirectoryExists(BinFolder)).Returns(() => binFolderCreated).Verifiable();
                fs.Setup(x => x.CreateDirectory(BinFolder)).Callback(() => binFolderCreated = true).Verifiable();

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(x => x.DirectoryExists(BinFolder), Times.AtLeastOnce());
                fs.Verify(x => x.CreateDirectory(BinFolder), Times.Once());
            }
示例#7
0
        public WatchScriptCommand(
            ScriptCsArgs commandArgs,
            string[] scriptArgs,
            IConsole console,
            IFileSystem fileSystem,
            ILog logger,
            IFileSystemMigrator fileSystemMigrator)
        {
            Guard.AgainstNullArgument("commandArgs", commandArgs);
            Guard.AgainstNullArgument("scriptArgs", scriptArgs);
            Guard.AgainstNullArgument("console", console);
            Guard.AgainstNullArgument("fileSystem", fileSystem);
            Guard.AgainstNullArgument("logger", logger);
            Guard.AgainstNullArgument("fileSystemMigrator", fileSystemMigrator);

            _commandArgs        = commandArgs;
            _scriptArgs         = scriptArgs;
            _console            = console;
            _fileSystem         = fileSystem;
            _logger             = logger;
            _fileSystemMigrator = fileSystemMigrator;

            _executeScriptCommand = new CrossAppDomainExecuteScriptCommand
            {
                CommandArgs = _commandArgs,
                ScriptArgs  = _scriptArgs,
            };
        }
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IScriptExecutor> executor,
                [Frozen] Mock<IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = "test.csx" };
                var fixture = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze<Mock<IScriptServicesBuilder>>();

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = fixture.Create<CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.IsAny<IEnumerable<string>>(), It.IsAny<IEnumerable<IScriptPack>>()), Times.Once());
                executor.Verify(i => i.Execute(It.Is<string>(x => x == "test.csx"), It.IsAny<string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#9
0
            public void ShouldCreateMissingBinFolder()
            {
                const string WorkingDirectory = @"C:\";

                var binFolder = Path.Combine(WorkingDirectory, "bin");

                var args = new ScriptCsArgs {
                    ScriptName = "test.csx"
                };

                var fs = new Mock <IFileSystem>();

                fs.Setup(x => x.GetWorkingDirectory(It.IsAny <string>())).Returns(WorkingDirectory);
                fs.Setup(x => x.DirectoryExists(binFolder)).Returns(false);

                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(x => x.CreateDirectory(binFolder), Times.Once());
            }
示例#10
0
        public WatchScriptCommand(
            ScriptCsArgs commandArgs,
            string[] scriptArgs,
            IConsole console,
            IFileSystem fileSystem,
            ILog logger,
            IFileSystemMigrator fileSystemMigrator)
        {
            Guard.AgainstNullArgument("commandArgs", commandArgs);
            Guard.AgainstNullArgument("scriptArgs", scriptArgs);
            Guard.AgainstNullArgument("console", console);
            Guard.AgainstNullArgument("fileSystem", fileSystem);
            Guard.AgainstNullArgument("logger", logger);
            Guard.AgainstNullArgument("fileSystemMigrator", fileSystemMigrator);

            _commandArgs = commandArgs;
            _scriptArgs = scriptArgs;
            _console = console;
            _fileSystem = fileSystem;
            _logger = logger;
            _fileSystemMigrator = fileSystemMigrator;

            _executeScriptCommand = new CrossAppDomainExecuteScriptCommand
            {
                CommandArgs = _commandArgs,
                ScriptArgs = _scriptArgs,
            };
        }
示例#11
0
            public void ShouldPromptForInput(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var readLines = 0;
                var builder   = new StringBuilder();
                var args      = new ScriptCsArgs {
                    Repl = true
                };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");
                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);

                console.Setup(x => x.ReadLine()).Callback(() => readLines++).Throws(new Exception());
                console.Setup(x => x.Write(It.IsAny <string>())).Callback <string>(value => builder.Append(value));

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                builder.ToString().EndsWith("> ").ShouldBeTrue();
                readLines.ShouldEqual(1);
            }
示例#12
0
            public void InstallCommandShouldInstallSinglePackageIfNamePassed(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IPackageInstaller> packageInstaller,
                [Frozen] Mock <IPackageAssemblyResolver> resolver,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "mypackage",
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initializationServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initializationServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);

                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                var factory = fixture.Create <CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                packageInstaller.Verify(
                    i => i.InstallPackages(
                        It.Is <IEnumerable <IPackageReference> >(x => x.Count() == 1 && x.First().PackageId == "mypackage"),
                        It.IsAny <bool>()),
                    Times.Once());
            }
示例#13
0
            public void WhenPassedAScript_ShouldPressedReplWithScript(
                [Frozen] Mock <IScriptEngine> scriptEngine,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new ScriptCsArgs {
                    Repl = true, ScriptName = "test.csx",
                };

                scriptEngine.Setup(x => x.Execute(
                                       "#load test.csx",
                                       It.IsAny <string[]>(),
                                       It.IsAny <AssemblyReferences>(),
                                       It.IsAny <IEnumerable <string> >(),
                                       It.IsAny <ScriptPackSession>()));

                console.Setup(x => x.ReadLine()).Throws(new Exception());
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                sut.Execute();

                // assert
                scriptEngine.Verify();
            }
示例#14
0
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IAssemblyUtility> assemblyUtility,
                [Frozen] Mock <IScriptExecutor> executor,
                CommandFactory factory)
            {
                // Arrange
                const string NonManaged = "non-managed.dll";

                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = "test.csx"
                };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);
                fileSystem.Setup(x => x.EnumerateFiles(It.IsAny <string>(), It.IsAny <string>(), SearchOption.AllDirectories))
                .Returns(new[] { "managed.dll", NonManaged });

                assemblyUtility.Setup(x => x.IsManagedAssembly(It.Is <string>(y => y == NonManaged))).Returns(false);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.Is <IEnumerable <string> >(x => !x.Contains(NonManaged)), It.IsAny <IEnumerable <IScriptPack> >()), Times.Once());
                executor.Verify(i => i.Execute(It.Is <string>(x => x == "test.csx"), It.IsAny <string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
            public void ShouldReturnErrorIfThereIsCompileException(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <ILog> logger,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install         = "",
                    ScriptName      = "test.csx",
                };

                executor.Setup(i => i.Execute(It.IsAny <string>(), It.IsAny <string[]>()))
                .Returns(new ScriptResult(compilationException: new Exception("test")));

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                var result = sut.Execute();

                // assert
                result.ShouldEqual(CommandResult.Error);
                logger.Verify(
                    i => i.ErrorFormat(It.IsAny <string>(), It.IsAny <Exception>(), It.IsAny <string>()), Times.Once());
            }
示例#16
0
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IAssemblyUtility> assemblyUtility,
                [Frozen] Mock<IScriptExecutor> executor,
                CommandFactory factory)
            {
                // Arrange
                const string NonManaged = "non-managed.dll";

                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = "test.csx" };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);
                fileSystem.Setup(x => x.EnumerateFiles(It.IsAny<string>(), It.IsAny<string>(), SearchOption.AllDirectories))
                          .Returns(new[] { "managed.dll", NonManaged });

                assemblyUtility.Setup(x => x.IsManagedAssembly(It.Is<string>(y => y == NonManaged))).Returns(false);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.Is<IEnumerable<string>>(x => !x.Contains(NonManaged)), It.IsAny<IEnumerable<IScriptPack>>()), Times.Once());
                executor.Verify(i => i.Execute(It.Is<string>(x => x == "test.csx"), It.IsAny<string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#17
0
            public void InstallCommandShouldInstallSinglePackageIfNamePassed(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IPackageInstaller> packageInstaller,
                [Frozen] Mock<IPackageAssemblyResolver> resolver,
                [Frozen] Mock<IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "mypackage", };
                var fixture = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze<Mock<IScriptServicesBuilder>>();

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initializationServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initializationServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);

                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                var factory = fixture.Create<CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                packageInstaller.Verify(
                    i => i.InstallPackages(
                        It.Is<IEnumerable<IPackageReference>>(x => x.Count() == 1 && x.First().PackageId == "mypackage"),
                        It.IsAny<bool>()),
                    Times.Once());
            }
示例#18
0
            public void ShouldPromptForInput(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IConsole> console,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                [Frozen] Mock<IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var readLines = 0;
                var builder = new StringBuilder();
                var args = new ScriptCsArgs { Repl = true };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");
                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);

                console.Setup(x => x.ReadLine()).Callback(() => readLines++).Throws(new Exception());
                console.Setup(x => x.Write(It.IsAny<string>())).Callback<string>(value => builder.Append(value));

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                builder.ToString().EndsWith("> ").ShouldBeTrue();
                readLines.ShouldEqual(1);
            }
示例#19
0
            public void ShouldCopyFilesInPathIfLastWriteTimeDiffersFromLastWriteTimeOfFileInBin()
            {
                var args = new ScriptCsArgs { Restore = true, ScriptName = "" };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, scriptpackResolver.Object, packageInstaller.Object);

                const string CurrentDirectory = @"C:\";

                var sourceFilePath = Path.Combine(CurrentDirectory, "fileName.cs");
                var sourceWriteTime = new DateTime(2013, 3, 7);

                var destFilePath = Path.Combine(CurrentDirectory, "bin", "fileName.cs");
                var destWriteTime = new DateTime(2013, 2, 7);

                fs.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(CurrentDirectory);

                fs.Setup(x => x.GetLastWriteTime(sourceFilePath)).Returns(sourceWriteTime).Verifiable();
                fs.Setup(x => x.GetLastWriteTime(destFilePath)).Returns(destWriteTime).Verifiable();

                resolver.Setup(i => i.GetAssemblyNames(CurrentDirectory, It.IsAny<Action<string>>())).Returns(new[] { sourceFilePath });

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(x => x.Copy(sourceFilePath, destFilePath, true), Times.Once());
                fs.Verify(x => x.GetLastWriteTime(sourceFilePath), Times.Once());
                fs.Verify(x => x.GetLastWriteTime(destFilePath), Times.Once());
            }
示例#20
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed(
                [Frozen] Mock<IPackageInstaller> packageInstaller,
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IPackageAssemblyResolver> resolver,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs { AllowPreRelease = false, Install = string.Empty, };

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initializationServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initializationServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);

                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);

                resolver.Setup(i => i.GetPackages(It.IsAny<string>())).Returns(new List<IPackageReference>
                    {
                        new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                        new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                    });

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut = factory.CreateCommand(args, new string[0]);

                // act
                sut.Execute();

                // Assert
                packageInstaller.Verify(i => i.InstallPackages(It.Is<IEnumerable<IPackageReference>>(x => x.Count() == 2), It.IsAny<bool>()), Times.Once());
            }
示例#21
0
            public void WhenNotPassedAScript_ShouldNotCallTheEngineAutomatically(
                [Frozen] Mock <IScriptEngine> scriptEngine,
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    Repl = true
                };

                console.Setup(x => x.ReadLine()).Returns(() =>
                {
                    console.Setup(x => x.ReadLine()).Throws(new Exception());
                    return(string.Empty);
                });
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");
                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                scriptEngine.Verify(
                    x => x.Execute(It.IsAny <string>(), It.IsAny <string[]>(), It.IsAny <AssemblyReferences>(), It.IsAny <IEnumerable <string> >(), It.IsAny <ScriptPackSession>()), Times.Never());
            }
示例#22
0
            public void ShouldDeletePackagesFolder(string folder,
                                                   Mock <IFileSystem> fileSystem,
                                                   Mock <IInitializationServices> initializationServices)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    Clean = true
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                fileSystem.Setup(i => i.DirectoryExists(It.Is <string>(x => x.Contains(folder)))).Returns(true);
                fileSystem.Setup(i => i.GetWorkingDirectory(It.IsAny <string>())).Returns("c:\\");

                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                var factory = fixture.Create <CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                fileSystem.Verify(i => i.DirectoryExists(It.Is <string>(x => x.Contains(folder))), Times.Once());
                fileSystem.Verify(i => i.DeleteDirectory(It.Is <string>(x => x.Contains(folder))), Times.Once());
            }
示例#23
0
            public void ShouldCreateBinFolderIfItDoesNotExist()
            {
                var args = new ScriptCsArgs { Restore = true, ScriptName = "" };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, scriptpackResolver.Object, packageInstaller.Object);

                const string CurrentDirectory = @"C:\";
                const string BinFolder = @"C:\bin";

                fs.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(CurrentDirectory);

                var binFolderCreated = false;

                fs.Setup(x => x.DirectoryExists(BinFolder)).Returns(() => binFolderCreated).Verifiable();
                fs.Setup(x => x.CreateDirectory(BinFolder)).Callback(() => binFolderCreated = true).Verifiable();

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(x => x.DirectoryExists(BinFolder), Times.AtLeastOnce());
                fs.Verify(x => x.CreateDirectory(BinFolder), Times.Once());
            }
示例#24
0
            public void VersionCommandShouldOutputVersion()
            {
                var args = new ScriptCsArgs
                    {
                        Version = true
                    };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                // clear the fake console output
                _outputText.Clear();

                result.Execute();

                Assert.Contains("scriptcs version " + _currentVersion.ToString(), _outputText.ToString());
            }
示例#25
0
            public void WhenPassedAScript_ShouldPressedReplWithScript(
                [Frozen] Mock<IScriptEngine> scriptEngine, 
                [Frozen] Mock<IFileSystem> fileSystem, 
                [Frozen] Mock<IConsole> console,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                [Frozen] Mock<IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs { Repl = true, ScriptName = "test.csx" };

                console.Setup(x => x.ReadLine()).Returns(() =>
                {
                    console.Setup(x => x.ReadLine()).Throws(new Exception());
                    return string.Empty;
                });
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");
                servicesBuilder.Setup(b => b.Build()).Returns(services);
                //initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                scriptEngine.Setup(
                    x => x.Execute("#load test.csx", It.IsAny<string[]>(), It.IsAny<AssemblyReferences>(), It.IsAny<IEnumerable<string>>(), It.IsAny<ScriptPackSession>()));

                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                scriptEngine.Verify();
            }
            public void ShouldReturnErrorIfTheScriptIsIncomplete(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <ILog> logger,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new ScriptCsArgs {
                    ScriptName = "test.csx"
                };

                executor.Setup(i => i.Execute(It.IsAny <string>(), It.IsAny <string[]>()))
                .Returns(ScriptResult.Incomplete);

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                var result = sut.Execute();

                // assert
                result.ShouldEqual(CommandResult.Error);
                logger.Verify(i => i.Error(It.IsAny <object>()), Times.Once());
            }
示例#27
0
            public void ShouldDeletePackagesFolder(string folder,
                                                   [Frozen] Mock <IFileSystem> fileSystem,
                                                   [Frozen] Mock <IInitializationServices> initializationServices,
                                                   [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                                                   ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    Clean = true
                };

                fileSystem.Setup(i => i.DirectoryExists(It.Is <string>(x => x.Contains(folder)))).Returns(true);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = new CommandFactory(servicesBuilder.Object);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                fileSystem.Verify(i => i.DirectoryExists(It.Is <string>(x => x.Contains(folder))), Times.Once());
                fileSystem.Verify(i => i.DeleteDirectory(It.Is <string>(x => x.Contains(folder))), Times.Once());
            }
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IAssemblyUtility> assemblyUtility,
                [Frozen] Mock<IScriptExecutor> executor,
                [Frozen] Mock<IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                const string NonManaged = "non-managed.dll";

                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = "test.csx" };
                var fixture = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze<Mock<IScriptServicesBuilder>>();

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);
                fileSystem.Setup(x => x.EnumerateFiles(It.IsAny<string>(), It.IsAny<string>(), SearchOption.AllDirectories))
                          .Returns(new[] { "managed.dll", NonManaged });

                assemblyUtility.Setup(x => x.IsManagedAssembly(It.Is<string>(y => y == NonManaged))).Returns(false);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = fixture.Create<CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.Is<IEnumerable<string>>(x => !x.Contains(NonManaged)), It.IsAny<IEnumerable<IScriptPack>>()), Times.Once());
                executor.Verify(i => i.Execute(It.Is<string>(x => x == "test.csx"), It.IsAny<string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#29
0
            public void ShouldNotDeleteBinFolderIfDllsAreLeft()
            {
                var args = new ScriptCsArgs {
                    Clean = true
                };

                var fs                 = new Mock <IFileSystem>();
                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root               = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                fs.Setup(i => i.DirectoryExists(It.Is <string>(x => x.Contains(Constants.BinFolder)))).Returns(true);
                fs.Setup(i => i.GetWorkingDirectory(It.IsAny <string>())).Returns("c:/");
                fs.Setup(i => i.EnumerateFiles(It.IsAny <string>(), It.IsAny <string>())).Returns(new[] { "c:/file.dll", "c:/file2.dll" });

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(i => i.DeleteDirectory(It.Is <string>(x => x.Contains(Constants.BinFolder))), Times.Never());
            }
示例#30
0
            public void ShouldDeletePackagesFolder()
            {
                var args = new ScriptCsArgs { Clean = true };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var assemblyName = new Mock<IAssemblyName>();

                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object, assemblyName.Object);
                fs.Setup(i => i.DirectoryExists(It.Is<string>(x => x.Contains(Constants.PackagesFolder)))).Returns(true);
                fs.Setup(i => i.GetWorkingDirectory(It.IsAny<string>())).Returns("c:\\");

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args, new string[0]);

                result.Execute();

                fs.Verify(i => i.DirectoryExists(It.Is<string>(x => x.Contains(Constants.PackagesFolder))), Times.Once());
                fs.Verify(i => i.DeleteDirectory(It.Is<string>(x => x.Contains(Constants.PackagesFolder))), Times.Once());
            }
示例#31
0
            public void InstallCommandShouldInstallSinglePackageIfNamePassed()
            {
                var args = new ScriptCsArgs
                    {
                        AllowPreRelease = false,
                        Install = "mypackage",
                        ScriptName = null
                    };

                const string CurrentDirectory = @"C:\";

                var fs = new Mock<IFileSystem>();
                fs.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(CurrentDirectory);
                fs.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                packageInstaller.Verify(i => i.InstallPackages(It.Is<IEnumerable<IPackageReference>>(x => x.Count() == 1 && x.First().PackageId == "mypackage"), It.IsAny<bool>(), It.IsAny<Action<string>>()), Times.Once());
            }
示例#32
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed(
                [Frozen] Mock <IPackageInstaller> packageInstaller,
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IPackageAssemblyResolver> resolver,
                [Frozen] Mock <IInitializationServices> initServices)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = null
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                fileSystem.Setup(x => x.GetWorkingDirectory(It.IsAny <string>())).Returns(CurrentDirectory);
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                initServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);

                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initServices.Object);

                resolver.Setup(i => i.GetPackages(It.IsAny <string>())).Returns(new List <IPackageReference>
                {
                    new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                    new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                });
                var factory = fixture.Create <CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                packageInstaller.Verify(i => i.InstallPackages(It.Is <IEnumerable <IPackageReference> >(x => x.Count() == 2), It.IsAny <bool>()), Times.Once());
            }
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = "test.csx"
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = fixture.Create <CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.IsAny <IEnumerable <string> >(), It.IsAny <IEnumerable <IScriptPack> >()), Times.Once());
                executor.Verify(i => i.Execute(It.Is <string>(x => x == "test.csx"), It.IsAny <string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#34
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IPackageAssemblyResolver> resolver,
                [Frozen] Mock <IPackageInstaller> packageInstaller,
                CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = null
                };

                fileSystem.Setup(x => x.GetWorkingDirectory(It.IsAny <string>())).Returns(CurrentDirectory);
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                resolver.Setup(i => i.GetPackages(It.IsAny <string>())).Returns(new List <IPackageReference>
                {
                    new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                    new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                });

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                packageInstaller.Verify(i => i.InstallPackages(It.Is <IEnumerable <IPackageReference> >(x => x.Count() == 2), It.IsAny <bool>(), It.IsAny <Action <string> >()), Times.Once());
            }
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IAssemblyUtility> assemblyUtility,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <IInitializationServices> initializationServices,
                ScriptServices services)
            {
                // Arrange
                const string NonManaged = "non-managed.dll";

                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = "test.csx"
                };
                var fixture         = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze <Mock <IScriptServicesBuilder> >();

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);
                fileSystem.Setup(x => x.EnumerateFiles(It.IsAny <string>(), It.IsAny <string>(), SearchOption.AllDirectories))
                .Returns(new[] { "managed.dll", NonManaged });

                assemblyUtility.Setup(x => x.IsManagedAssembly(It.Is <string>(y => y == NonManaged))).Returns(false);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = fixture.Create <CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.Is <IEnumerable <string> >(x => !x.Contains(NonManaged)), It.IsAny <IEnumerable <IScriptPack> >()), Times.Once());
                executor.Verify(i => i.Execute(It.Is <string>(x => x == "test.csx"), It.IsAny <string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#36
0
            public void InstallCommandShouldInstallSinglePackageIfNamePassed()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install         = "mypackage",
                    ScriptName      = null
                };

                const string CurrentDirectory = @"C:\";

                var fs = new Mock <IFileSystem>();

                fs.Setup(x => x.GetWorkingDirectory(It.IsAny <string>())).Returns(CurrentDirectory);
                fs.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                result.Execute();

                packageInstaller.Verify(i => i.InstallPackages(It.Is <IEnumerable <IPackageReference> >(x => x.Count() == 1 && x.First().PackageId == "mypackage"), It.IsAny <bool>(), It.IsAny <Action <string> >()), Times.Once());
            }
示例#37
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed(
                [Frozen] Mock<IPackageInstaller> packageInstaller,
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IPackageAssemblyResolver> resolver,
                [Frozen] Mock<IInitializationServices> initServices)
            {
                // Arrange
                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = null };
                var fixture = new Fixture().Customize(new AutoMoqCustomization());
                var servicesBuilder = fixture.Freeze<Mock<IScriptServicesBuilder>>();
                
                fileSystem.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(CurrentDirectory);
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                initServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);
                
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initServices.Object);
      
                resolver.Setup(i => i.GetPackages(It.IsAny<string>())).Returns(new List<IPackageReference>
                    {
                        new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                        new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                    });
                var factory = fixture.Create<CommandFactory>();

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                packageInstaller.Verify(i => i.InstallPackages(It.Is<IEnumerable<IPackageReference>>(x => x.Count() == 2), It.IsAny<bool>()), Times.Once());
            }
示例#38
0
            public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed(
                [Frozen] Mock <IPackageInstaller> packageInstaller,
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IPackageAssemblyResolver> resolver,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // Arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = string.Empty,
                };

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                initializationServices.Setup(i => i.GetPackageInstaller()).Returns(packageInstaller.Object);
                initializationServices.Setup(i => i.GetPackageAssemblyResolver()).Returns(resolver.Object);

                servicesBuilder.Setup(b => b.Build()).Returns(services);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);

                resolver.Setup(i => i.GetPackages(It.IsAny <string>())).Returns(new List <IPackageReference>
                {
                    new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()),
                    new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version())
                });

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                sut.Execute();

                // Assert
                packageInstaller.Verify(i => i.InstallPackages(It.Is <IEnumerable <IPackageReference> >(x => x.Count() == 2), It.IsAny <bool>()), Times.Once());
            }
示例#39
0
            public void ShouldReturnErrorIfThereIsCompileException(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <ILog> logger,
                CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install         = "",
                    ScriptName      = "test.csx"
                };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                executor.Setup(i => i.Execute(It.IsAny <string>(), It.IsAny <string[]>()))
                .Returns(new ScriptResult {
                    CompileExceptionInfo = ExceptionDispatchInfo.Capture(new Exception("test"))
                });

                // Act
                var result = factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                result.ShouldEqual(CommandResult.Error);
                logger.Verify(i => i.Error(It.IsAny <object>()), Times.Once());
            }
示例#40
0
            public void ShouldDeleteAllFilesResolvedFromPackages()
            {
                var args = new ScriptCsArgs { Clean = true };

                var fs = new Mock<IFileSystem>();
                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                fs.Setup(i => i.DirectoryExists(It.Is<string>(x => x.Contains(Constants.BinFolder)))).Returns(true);
                fs.Setup(i => i.GetWorkingDirectory(It.IsAny<string>())).Returns("c:\\");
                fs.Setup(i => i.FileExists(It.IsAny<string>())).Returns(true);
                resolver.Setup(i => i.GetAssemblyNames(It.IsAny<string>(), It.IsAny<Action<string>>())).Returns(new[] { "c:\\file.dll", "c:\\file2.dll" });

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(i => i.FileDelete(It.IsAny<string>()), Times.Exactly(2));
            }
示例#41
0
        private static ScriptCsArgs ReconcileArguments(ScriptCsArgs globalConfigArgs, ScriptCsArgs localConfigArgs, ScriptCsArgs commandArgs, SplitResult splitResult)
        {
            if (globalConfigArgs == null && localConfigArgs == null)
            {
                return(commandArgs);
            }

            if (globalConfigArgs == null && commandArgs == null)
            {
                return(localConfigArgs);
            }

            if (localConfigArgs == null && commandArgs == null)
            {
                return(globalConfigArgs);
            }

            var reconciledArgs = new ScriptCsArgs();

            foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                var defaultValue = GetPropertyDefaultValue(property);

                if (commandArgs != null)
                {
                    var commandValue = property.GetValue(commandArgs);
                    if (!Equals(commandValue, defaultValue))
                    {
                        property.SetValue(reconciledArgs, commandValue);
                        continue;
                    }
                    if (IsCommandLinePresent(splitResult.CommandArguments, property))
                    {
                        property.SetValue(reconciledArgs, commandValue);
                        continue;
                    }
                }

                if (localConfigArgs != null)
                {
                    var localConfigValue = property.GetValue(localConfigArgs);
                    if (!Equals(localConfigValue, defaultValue))
                    {
                        property.SetValue(reconciledArgs, localConfigValue);
                        continue;
                    }
                }

                if (globalConfigArgs != null)
                {
                    var globalConfigValue = property.GetValue(globalConfigArgs);
                    if (!Equals(globalConfigValue, defaultValue))
                    {
                        property.SetValue(reconciledArgs, globalConfigValue);
                    }
                }
            }

            return(reconciledArgs);
        }
            public void ShouldCreateMissingBinFolder()
            {
                const string WorkingDirectory = @"C:\";

                var binFolder = Path.Combine(WorkingDirectory, "bin");

                var args = new ScriptCsArgs { ScriptName = "test.csx" };

                var fs = new Mock<IFileSystem>();
                fs.Setup(x => x.GetWorkingDirectory(It.IsAny<string>())).Returns(WorkingDirectory);
                fs.Setup(x => x.DirectoryExists(binFolder)).Returns(false);

                var resolver = new Mock<IPackageAssemblyResolver>();
                var executor = new Mock<IScriptExecutor>();
                var engine = new Mock<IScriptEngine>();
                var scriptpackResolver = new Mock<IScriptPackResolver>();
                var packageInstaller = new Mock<IPackageInstaller>();
                var logger = new Mock<ILog>();
                var filePreProcessor = new Mock<IFilePreProcessor>();
                var root = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result = factory.CreateCommand(args);

                result.Execute();

                fs.Verify(x => x.CreateDirectory(binFolder), Times.Once());
            }
示例#43
0
            public void VersionCommandShouldOutputVersion()
            {
                var args = new ScriptCsArgs
                {
                    Version = true
                };

                var fs                 = new Mock <IFileSystem>();
                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root               = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                // clear the fake console output
                _outputText.Clear();

                result.Execute();

                Assert.Contains("scriptcs version " + _currentVersion.ToString(), _outputText.ToString());
            }
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new ScriptCsArgs {
                    AllowPreRelease = false, Install = "", ScriptName = "test.csx",
                };

                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

                var factory = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                sut.Execute();

                // assert
                executor.Verify(
                    i => i.Initialize(
                        It.IsAny <IEnumerable <string> >(), It.IsAny <IEnumerable <IScriptPack> >()), Times.Once());

                executor.Verify(
                    i => i.Execute(It.Is <string>(x => x == "test.csx"), It.IsAny <string[]>()), Times.Once());

                executor.Verify(
                    i => i.Terminate(), Times.Once());
            }
示例#45
0
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install         = "",
                    ScriptName      = "test.csx"
                };

                var fs                 = new Mock <IFileSystem>();
                var resolver           = new Mock <IPackageAssemblyResolver>();
                var executor           = new Mock <IScriptExecutor>();
                var engine             = new Mock <IScriptEngine>();
                var scriptpackResolver = new Mock <IScriptPackResolver>();
                var packageInstaller   = new Mock <IPackageInstaller>();
                var logger             = new Mock <ILog>();
                var filePreProcessor   = new Mock <IFilePreProcessor>();
                var root               = new ScriptServiceRoot(fs.Object, resolver.Object, executor.Object, engine.Object, filePreProcessor.Object, scriptpackResolver.Object, packageInstaller.Object, logger.Object);

                var factory = new CommandFactory(root);
                var result  = factory.CreateCommand(args);

                result.Execute();

                executor.Verify(i => i.Execute(It.Is <string>(x => x == "test.csx"), It.IsAny <IEnumerable <string> >(), It.IsAny <IEnumerable <IScriptPack> >()), Times.Once());
            }
示例#46
0
        public ScriptCsArgs Parse(string content)
        {
            if (!string.IsNullOrWhiteSpace(content))
            {
                var fromJson = ParseJson(content);

                if (fromJson != null)
                {
                    var arguments        = new ScriptCsArgs();
                    var configFileValues = new Dictionary <string, string>(fromJson, StringComparer.InvariantCultureIgnoreCase);

                    foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                    {
                        string key = "";
                        if (configFileValues.ContainsKey(property.Name))
                        {
                            key = property.Name;
                        }
                        else
                        {
                            var attributes = property.GetCustomAttributes(false)
                                             .ToDictionary(a => a.GetType().Name, a => a);

                            if (attributes.ContainsKey(typeof(ArgIgnoreAttribute).Name))
                            {
                                continue;
                            }

                            if (attributes.ContainsKey(typeof(ArgShortcut).Name))
                            {
                                var attribute = (attributes[typeof(ArgShortcut).Name] as ArgShortcut);

                                if (attribute != null)
                                {
                                    if (string.IsNullOrEmpty(key) && configFileValues.ContainsKey(attribute.Shortcut))
                                    {
                                        key = attribute.Shortcut;
                                    }
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(key))
                        {
                            string value     = configFileValues[key];
                            var    converter = TypeDescriptor.GetConverter(property.PropertyType);
                            var    result    = converter.ConvertFrom(value);

                            property.SetValue(arguments, result);
                        }
                    }

                    return(arguments);
                }
            }

            return(null);
        }
示例#47
0
        public ScriptCsArgs Parse(string[] args)
        {
            //no args initialized REPL
            if (args == null || args.Length <= 0)
            {
                return new ScriptCsArgs {
                           Repl = true
                }
            }
            ;

            ScriptCsArgs commandArgs = null;
            const string unexpectedArgumentMessage = "unexpected named argument: ";

            try
            {
                var installArgPosition = Array.FindIndex(args, x => x.ToLowerInvariant() == "-install");

                string packageVersion = null;
                if (installArgPosition == 0 && args.Length > 2 && !args[installArgPosition + 2].StartsWith("-"))
                {
                    packageVersion = args[installArgPosition + 2];
                    var argsList = args.ToList();
                    argsList.RemoveAt(installArgPosition + 2);
                    args = argsList.ToArray();
                }

                commandArgs = Args.Parse <ScriptCsArgs>(args);

                //if there is only 1 arg and it is a loglevel, it's also REPL
                if (args.Length == 2 && args.Any(x => x.ToLowerInvariant() == "-loglevel" || x.ToLowerInvariant() == "-log"))
                {
                    commandArgs.Repl = true;
                }

                if (!string.IsNullOrWhiteSpace(packageVersion))
                {
                    commandArgs.PackageVersion = packageVersion;
                }
            }
            catch (ArgException ex)
            {
                if (ex.Message.ToLower().StartsWith(unexpectedArgumentMessage))
                {
                    var token = ex.Message.Substring(unexpectedArgumentMessage.Length);
                    _console.WriteLine(string.Format("Parameter \"{0}\" is not supported!", token));
                }
                else
                {
                    _console.WriteLine(ex.Message);
                }
            }

            return(commandArgs);
        }
    }
示例#48
0
            public void ShouldCleanWhenCleanFlagIsPassed()
            {
                var args = new ScriptCsArgs { Clean = true, ScriptName = null };

                var factory = new CommandFactory(CreateRoot());
                var result = factory.CreateCommand(args);

                result.ShouldNotBeNull();
                result.ShouldImplement<ICleanCommand>();
            }
示例#49
0
            public void ShouldSetVersionIfPackageVersionNumberSpecifiedExplicitly()
            {
                string[] args = { "-install", "glimpse.scriptcs", "-packageversion", "1.0.1", "-pre" };

                var result = ScriptCsArgs.Parse(args);

                result.Install.ShouldEqual("glimpse.scriptcs");
                result.PackageVersion.ShouldEqual("1.0.1");
                result.AllowPreRelease.ShouldBeTrue();
            }
示例#50
0
        public ScriptCsArgs Parse(string content)
        {
            if (!string.IsNullOrWhiteSpace(content))
            {
                var fromJson = ParseJson(content);

                if (fromJson != null)
                {
                    var arguments = new ScriptCsArgs();
                    var configFileValues = new Dictionary<string, string>(fromJson, StringComparer.InvariantCultureIgnoreCase);

                    foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                    {
                        string key = "";

                        var attributes = property.GetCustomAttributes(false)
                                                 .ToDictionary(a => a.GetType().Name, a => a);

                        if (attributes.ContainsKey(typeof(ArgIgnoreAttribute).Name))
                            continue;

                        if (attributes.ContainsKey(typeof(ArgShortcut).Name))
                        {
                            var attribute = (attributes[typeof(ArgShortcut).Name] as ArgShortcut);

                            if (attribute != null)
                            {
                                if (configFileValues.ContainsKey(property.Name))
                                {
                                    key = property.Name;
                                }

                                if (string.IsNullOrEmpty(key) && configFileValues.ContainsKey(attribute.Shortcut))
                                {
                                    key = attribute.Shortcut;
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(key))
                        {
                            string value = configFileValues[key];
                            var converter = TypeDescriptor.GetConverter(property.PropertyType);
                            var result = converter.ConvertFrom(value);

                            property.SetValue(arguments, result);
                        }
                    }

                    return arguments;
                }
            }

            return null;
        }
示例#51
0
            public void ShouldReturnHelpCommandWhenHelpIsPassed()
            {
                var args = new ScriptCsArgs
                {
                    Help = true
                };

                var factory = new CommandFactory(CreateRoot());
                var result  = factory.CreateCommand(args);

                result.ShouldImplement <IHelpCommand>();
            }
示例#52
0
            public void ShouldExecuteWhenScriptNameIsPassed()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreReleaseFlag = false,
                    Install = null,
                    ScriptName = "test.csx"
                };

                var factory = new CommandFactory(CreateRoot());
                var result = factory.CreateCommand(args);

                result.ShouldImplement<IScriptCommand>();
            }
示例#53
0
            public void VersionCommandShouldOutputVersion([Frozen] Mock<IConsole> console, CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs { Version = true };

                var assembly = typeof(ScriptCsArgs).Assembly;
                var currentVersion = FileVersionInfo.GetVersionInfo(assembly.Location).ProductVersion;

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                console.Verify(x => x.WriteLine(It.Is<string>(y => y.Contains(currentVersion.ToString()))));
            }
示例#54
0
            public void ShouldExecuteWhenBothNameAndInstallArePassed()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install = "",
                    ScriptName = "test.csx"
                };

                var factory = new CommandFactory(CreateRoot());
                var result = factory.CreateCommand(args, new string[0]);

                result.ShouldImplement<IScriptCommand>();
            }
示例#55
0
            public void ShouldDeletePackagesFolder([Frozen] Mock<IFileSystem> fileSystem, CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs { Clean = true };

                fileSystem.Setup(i => i.DirectoryExists(It.Is<string>(x => x.Contains(Constants.PackagesFolder)))).Returns(true);
                fileSystem.Setup(i => i.GetWorkingDirectory(It.IsAny<string>())).Returns("c:\\");

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                fileSystem.Verify(i => i.DirectoryExists(It.Is<string>(x => x.Contains(Constants.PackagesFolder))), Times.Once());
                fileSystem.Verify(i => i.DeleteDirectory(It.Is<string>(x => x.Contains(Constants.PackagesFolder))), Times.Once());
            }
示例#56
0
            public void ShouldExecuteWhenScriptNameIsPassed()
            {
                // Arrange
                var args = new ScriptCsArgs
                {
                    AllowPreRelease = false,
                    Install = null,
                    ScriptName = "test.csx"
                };

                // Act
                var factory = new CommandFactory(CreateBuilder());
                var result = factory.CreateCommand(args, new string[0]);

                // Assert
                result.ShouldImplement<IScriptCommand>();
            }
示例#57
0
            public void WhenNotPassedAScript_ShouldNotCallTheEngineAutomatically(
                [Frozen] Mock<IScriptEngine> scriptEngine, [Frozen] Mock<IFileSystem> fileSystem, [Frozen] Mock<IConsole> console,
                 CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs { Repl = true };

                console.Setup(x => x.ReadLine()).Returns(() => string.Empty);
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                scriptEngine.Verify(
                    x => x.Execute(It.IsAny<string>(), It.IsAny<string[]>(), It.IsAny<IEnumerable<string>>(), It.IsAny<IEnumerable<string>>(), It.IsAny<ScriptPackSession>()), Times.Never());
            }
示例#58
0
            public void ScriptExecCommandShouldInvokeWithScriptPassedFromArgs(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IScriptExecutor> executor,
                CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = "test.csx" };

                fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory);

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                executor.Verify(i => i.Initialize(It.IsAny<IEnumerable<string>>(), It.IsAny<IEnumerable<IScriptPack>>()), Times.Once());
                executor.Verify(i => i.Execute(It.Is<string>(x => x == "test.csx"), It.IsAny<string[]>()), Times.Once());
                executor.Verify(i => i.Terminate(), Times.Once());
            }
示例#59
0
            public void ShouldInstallWhenInstallFlagIsOn()
            {
                var args = new ScriptCsArgs
                {
                    AllowPreReleaseFlag = false,
                    Install = "",
                    ScriptName = null
                };

                var factory = new CommandFactory(CreateRoot());
                var result = factory.CreateCommand(args);

                var compositeCommand = result as ICompositeCommand;
                compositeCommand.ShouldNotBeNull();

                (compositeCommand.Commands[0] is IInstallCommand).ShouldBeTrue();
                (compositeCommand.Commands[1] is IRestoreCommand).ShouldBeTrue();
            }
示例#60
0
            public void WhenPassedAScript_ShouldPressedReplWithScript(
                [Frozen] Mock<IScriptEngine> scriptEngine, [Frozen] Mock<IFileSystem> fileSystem,[Frozen] Mock<IConsole> console,
                CommandFactory factory)
            {
                // Arrange
                var args = new ScriptCsArgs { Repl = true, ScriptName = "test.csx"};

                console.Setup(x => x.ReadLine()).Returns(() => string.Empty);
                fileSystem.SetupGet(x => x.CurrentDirectory).Returns("C:\\");
                scriptEngine.Setup(
                    x => x.Execute("#load test.csx", It.IsAny<string[]>(), It.IsAny<IEnumerable<string>>(), It.IsAny<IEnumerable<string>>(), It.IsAny<ScriptPackSession>()));

                // Act
                factory.CreateCommand(args, new string[0]).Execute();

                // Assert
                scriptEngine.Verify();
            }