Beispiel #1
0
        private Repl GetRepl(string[] args, out MemoryBufferConsole memoryBufferConsole)
        {
            SetProfile();
            var arguments             = ParseArguments(args);
            var scriptServicesBuilder = ScriptServicesBuilderFactory.Create(arguments.CommandArguments, arguments.ScriptArguments);
            IInitializationServices _initializationServices = scriptServicesBuilder.InitializationServices;
            IFileSystem             _fileSystem             = _initializationServices.GetFileSystem();

            if (_fileSystem.PackagesFile == null)
            {
                throw new ArgumentException("The file system provided by the initialization services provided by the script services builder has a null packages file.");
            }

            if (_fileSystem.PackagesFolder == null)
            {
                throw new ArgumentException("The file system provided by the initialization services provided by the script services builder has a null package folder.");
            }

            ScriptServices scriptServices = scriptServicesBuilder.Build();

            memoryBufferConsole = new MemoryBufferConsole();
            Repl repl = new Repl(arguments.ScriptArguments, _fileSystem, scriptServices.Engine,
                                 scriptServices.ObjectSerializer, scriptServices.Logger, memoryBufferConsole,
                                 scriptServices.FilePreProcessor, scriptServices.ReplCommands);

            var workingDirectory = _fileSystem.CurrentDirectory;
            var assemblies       = scriptServices.AssemblyResolver.GetAssemblyPaths(workingDirectory);
            var scriptPacks      = scriptServices.ScriptPackResolver.GetPacks();

            repl.Initialize(assemblies, scriptPacks, null);

            return(repl);
        }
            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());
            }
            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());
            }
            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());
            }
            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());
            }
        private void ProcessScripts(ScriptServices services)
        {
            IList <Type> controllers = new List <Type>();
            var          packs       = services.ScriptPackResolver.GetPacks().Union(new List <IScriptPack>()
            {
                new WebApiScriptHack()
            });

            services.Executor.Initialize(services.AssemblyResolver.GetAssemblyPaths(_scriptsPath, _scriptsPath), packs);
            var scripts = services.FileSystem.EnumerateFiles(_scriptsPath, "*.csx", SearchOption.TopDirectoryOnly);

            foreach (var script in scripts)
            {
                var result     = services.Executor.Execute(script);
                var resultType = result.ReturnValue as Type;
                if (resultType != null)
                {
                    if (resultType.IsSubclassOf(typeof(ApiController)))
                    {
                        controllers.Add(resultType);
                    }
                }
            }

            var controllerResolver = new AssemblyControllerTypeResolver(controllers);

            _configuration.Services.Replace(typeof(IHttpControllerTypeResolver), controllerResolver);
        }
            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());
            }
            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 ShouldPromptForInput(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var config = new Config {
                    Repl = true
                };

                console.Setup(x => x.ReadLine(It.IsAny <string>())).Returns((string)null);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

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

                // act
                sut.Execute();

                // assert
                console.Verify(x => x.ReadLine("> "));
            }
            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 Config {
                    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();
            }
            public void WhenNotPassedAScript_ShouldNotCallTheEngineAutomatically(
                [Frozen] Mock <IScriptEngine> scriptEngine,
                [Frozen] Mock <IConsole> console,
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var config = new Config {
                    Repl = true
                };

                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(config, new string[0]);

                // act
                sut.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());
            }
Beispiel #12
0
            public void ShouldReturnErrorIfTheScriptIsIncomplete(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] TestLogProvider logProvider,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new Config {
                    Eval = "foo"
                };

                executor.Setup(i => i.ExecuteScript(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);
                logProvider.Output.ShouldContain("ERROR:");
            }
            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());
            }
            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());
            }
            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 Config {
                    AllowPreRelease = false, PackageName = 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());
            }
            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 Config { AllowPreRelease = false, PackageName = 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());
            }
            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());
            }
            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 Config {
                    AllowPreRelease = false, PackageName = "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());
            }
Beispiel #19
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);
            }
Beispiel #20
0
            public void ShouldReturnErrorIfThereIsExecutionException(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] TestLogProvider logProvider,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new Config
                {
                    AllowPreRelease = false,
                    PackageName     = "",
                    ScriptName      = "test.csx"
                };

                executor.Setup(i => i.Execute(It.IsAny <string>(), It.IsAny <string[]>()))
                .Returns(new ScriptResult(executionException: 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);
                logProvider.Output.ShouldContain("ERROR:");
            }
            public void ShouldPromptForInput(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IConsole> console,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var config = new Config { Repl = true };

                console.Setup(x => x.ReadLine(It.IsAny<string>())).Returns((string)null);
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

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

                // act
                sut.Execute();

                // assert
                console.Verify(x=>x.ReadLine("> "));
            }
        private void StartScriptCs()
        {
            var name    = "WPFScript.csx";
            var console = new WPFConsoleRelay();

            var configurator = new LoggerConfigurator(LogLevel.Info);

            configurator.Configure(console);
            var logger = configurator.GetLogger();

            var init = new InitializationServices(logger);

            init.GetAppDomainAssemblyResolver().Initialize();

            var builder = new ScriptServicesBuilder(console, logger, null, null, init)
                          .Cache()
                          .Debug(false)
                          .LogLevel(LogLevel.Info)
                          .ScriptName(name)
                          .Repl();

            var modules   = new string[0];
            var extension = Path.GetExtension(name);

            //OVERRIDES
            builder.ScriptHostFactory <WPFScriptHostFactory>();
            builder.ScriptEngine <RoslynScriptEngine>();
            builder.LoadModules(extension, modules);

            //BUILD SERVICE
            _service = builder.Build();
            _service.Executor.Initialize(Enumerable.Empty <string>(), _service.ScriptPackResolver.GetPacks(), new string[0]);
            var types = new Type[] {
                typeof(IConsole),
                typeof(ScriptContext),
                typeof(Newtonsoft.Json.Converters.BinaryConverter)
            };


            _service.Executor.AddReferenceAndImportNamespaces(types);



            EventAggr.Instance.GetEvent <WriteLineEvent>().Subscribe((text) =>
            {
                string[] lines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
                foreach (var line in lines.Where(l => !string.IsNullOrEmpty(l)))
                {
                    _area.Document.Text += line;
                    NewLine();
                    _area.Document.Text += ">";
                }
            });

            EventAggr.Instance.GetEvent <WriteEvent>().Subscribe((text) =>
            {
                _area.Document.Text += text;
            }
                                                                 );
        }
Beispiel #23
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());
            }
            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 Config { AllowPreRelease = false, PackageName = "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());
            }
            public void ShouldDeletePackagesFolder(string folder,
                                                   [Frozen] Mock <IFileSystem> fileSystem,
                                                   [Frozen] Mock <IInitializationServices> initializationServices,
                                                   [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                                                   ScriptServices services)
            {
                // Arrange
                var args = new Config {
                    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 ShouldPromptForInput(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IConsole> console,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var config = new Config { Repl = true };
                var readLines = 0;
                var builder = new StringBuilder();

                console.Setup(x => x.ReadLine()).Callback(() => readLines++).Throws(new Exception());
                console.Setup(x => x.Write(It.IsAny<string>())).Callback<string>(value => builder.Append(value));
                initializationServices.Setup(i => i.GetFileSystem()).Returns(fileSystem.Object);
                servicesBuilder.SetupGet(b => b.InitializationServices).Returns(initializationServices.Object);
                servicesBuilder.SetupGet(b => b.ConsoleInstance).Returns(console.Object);
                servicesBuilder.Setup(b => b.Build()).Returns(services);

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

                // act
                sut.Execute();

                // assert
                builder.ToString().EndsWith("> ").ShouldBeTrue();
                readLines.ShouldEqual(1);
            }
Beispiel #27
0
        public ScriptCsHost()
        {
            var logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            var scriptServicesBuilder =
                new ScriptServicesBuilder(new ScriptConsole(), logger).LogLevel(LogLevel.Info)
                .Cache(false)
                .Repl(false)
                .ScriptEngine <RoslynScriptEngine>();

            Root = scriptServicesBuilder.Build();
        }
Beispiel #28
0
 public HtmlExecuteReplCommand(string scriptName, string[] scriptArgs, ScriptServices scriptServices)
     : this(scriptName,
            scriptArgs,
            scriptServices.FileSystem,
            scriptServices.ScriptPackResolver,
            scriptServices.Repl,
            scriptServices.LogProvider,
            scriptServices.Console,
            scriptServices.AssemblyResolver,
            scriptServices.FileSystemMigrator,
            scriptServices.ScriptLibraryComposer)
 {
 }
        private ScriptResult ExecuteScript(ScriptServices services, string loader)
        {
            var result = services.Executor.ExecuteScript(loader);

            if (result.CompileExceptionInfo != null)
            {
                result.CompileExceptionInfo.Throw();
            }

            if (result.ExecuteExceptionInfo != null)
            {
                result.ExecuteExceptionInfo.Throw();
            }

            return(result);
        }
Beispiel #30
0
        private void InitRepl()
        {
            var servicesBuilder = new ReplScriptServicesBuilder(new ScriptConsole(), new Common.Logging.Simple.NoOpLogger()).Repl(true);

            servicesBuilder.ScriptName("F14N.REPL");

            this.scriptServices = servicesBuilder.Build();
            this.scriptServices.Executor.Initialize(new string[] { }, this.scriptServices.ScriptPackResolver.GetPacks());
            this.scriptServices.Executor.AddReferenceAndImportNamespaces(new[] { typeof(FluentAutomation.FluentTest), typeof(FluentAutomation.SeleniumWebDriver) });

            this.repl            = this.scriptServices.Executor as Repl;
            this.settingsManager = new SettingsManager((scriptString) =>
            {
                return(this.repl.Execute(scriptString));
            });
        }
        private async void AddButton_OnClick(object sender, RoutedEventArgs e)
        {
            var window = new ScriptServiceWindow(_dialogService);
            var result = window.ShowDialog();

            if (result.HasValue && result.Value)
            {
                var scriptService = new ScriptService();
                scriptService.Name = window.ScriptName;
                scriptService.Code = window.Code;

                await _engine.InsertEntity(scriptService);

                ScriptServices.Add(scriptService);
                IsModified = true;
            }
        }
Beispiel #32
0
 private static IScriptCommand CreateScriptCommand(
     ScriptCsArgs args, string[] scriptArgs, ScriptServices scriptServices)
 {
     return(args.Watch
         ? (IScriptCommand) new WatchScriptCommand(
                args,
                scriptArgs,
                scriptServices.Console,
                scriptServices.FileSystem,
                scriptServices.Logger)
         : new ExecuteScriptCommand(
                args.ScriptName,
                scriptArgs,
                scriptServices.FileSystem,
                scriptServices.Executor,
                scriptServices.ScriptPackResolver,
                scriptServices.Logger,
                scriptServices.AssemblyResolver));
 }
Beispiel #33
0
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock <IFileSystem> fileSystem,
                [Frozen] Mock <IAssemblyUtility> assemblyUtility,
                [Frozen] Mock <IScriptExecutor> executor,
                [Frozen] Mock <IInitializationServices> initializationServices,
                [Frozen] Mock <IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                const string NonManaged = "non-managed.dll";

                var args = new Config {
                    AllowPreRelease = false, PackageName = "", ScriptName = "test.csx",
                };

                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 = new CommandFactory(servicesBuilder.Object);
                var sut     = factory.CreateCommand(args, new string[0]);

                // act
                sut.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());
            }
Beispiel #34
0
 private static IScriptCommand CreateScriptCommand(
     Config config, string[] scriptArgs, ScriptServices scriptServices)
 {
     return(config.Watch
         ? (IScriptCommand) new WatchScriptCommand(
                config,
                scriptArgs,
                scriptServices.Console,
                scriptServices.FileSystem,
                scriptServices.LogProvider)
         : new ExecuteScriptCommand(
                config.ScriptName,
                scriptArgs,
                scriptServices.FileSystem,
                scriptServices.Executor,
                scriptServices.ScriptPackResolver,
                scriptServices.LogProvider,
                scriptServices.AssemblyResolver,
                scriptServices.ScriptLibraryComposer));
 }
Beispiel #35
0
        internal static IEnumerable <MetadataReference> MakeMetadataReferences(this ScriptServices scriptServices, IEnumerable <string> referencesPaths)
        {
            var listOfReferences = new List <MetadataReference>();

            foreach (var importedReference in referencesPaths.Where(x => !x.ToLowerInvariant().Contains("scriptcs.contracts")))
            {
                if (scriptServices.FileSystem.IsPathRooted(importedReference))
                {
                    if (scriptServices.FileSystem.FileExists(importedReference))
                    {
                        listOfReferences.Add(MetadataReference.CreateFromFile(importedReference));
                    }
                }
                else
                {
                    listOfReferences.Add(MetadataReference.CreateFromFile(Path.Combine(BaseAssemblyPath, importedReference.ToLower().EndsWith(".dll") ? importedReference : importedReference + ".dll")));
                }
            }

            return(listOfReferences);
        }
            public void NonManagedAssembliesAreExcluded(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IAssemblyUtility> assemblyUtility,
                [Frozen] Mock<IScriptExecutor> executor,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                const string NonManaged = "non-managed.dll";

                var args = new Config { AllowPreRelease = false, PackageName = "", ScriptName = "test.csx", };

                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 = new CommandFactory(servicesBuilder.Object);
                var sut = factory.CreateCommand(args, new string[0]);

                // act
                sut.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 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 ScriptCsExtension(ScriptCsOptions options)
        {
            this.options = options;

            var console     = (IConsole) new ScriptConsole();
            var logProvider = new ColoredConsoleLogProvider(LogLevel.Info, console);

            var builder = new ScriptServicesBuilder(console, logProvider);

            //var useMono = Type.GetType("Mono.Runtime") != null;
            //if (useMono)
            //{
            //    builder.ScriptEngine<MonoScriptEngine>();
            //}
            //else {
            builder.ScriptEngine <CSharpScriptEngine>();
            //}

            scriptServices = builder.Build();

            scriptExecutor = (ScriptExecutor)scriptServices.Executor;
            scriptExecutor.Initialize(Enumerable.Empty <string>(), Enumerable.Empty <IScriptPack>());
        }
            public void ShouldReturnErrorIfThereIsExecutionException(
                [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(executionException: 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());
            }
Beispiel #40
0
 public CommandFactory(ScriptServices scriptServices)
 {
     _scriptServices = scriptServices;
 }
Beispiel #41
0
 private static IScriptCommand CreateScriptCommand(
     Config config, string[] scriptArgs, ScriptServices scriptServices)
 {
     return config.Watch
         ? (IScriptCommand)new WatchScriptCommand(
             config,
             scriptArgs,
             scriptServices.Console,
             scriptServices.FileSystem,
             scriptServices.LogProvider,
             scriptServices.FileSystemMigrator)
         : new ExecuteScriptCommand(
             config.ScriptName,
             scriptArgs,
             scriptServices.FileSystem,
             scriptServices.Executor,
             scriptServices.ScriptPackResolver,
             scriptServices.LogProvider,
             scriptServices.AssemblyResolver,
             scriptServices.FileSystemMigrator,
             scriptServices.ScriptLibraryComposer);
 }
 public void ShouldResolveScriptServices(ScriptServices scriptServices, [Frozen] Mock<IRuntimeServices> runtimeServicesMock, ScriptServicesBuilder builder)
 {
     runtimeServicesMock.Setup(r => r.GetScriptServices()).Returns(scriptServices);
     builder.Overrides[typeof(IScriptEngine)] = null;
     builder.Build().ShouldEqual(scriptServices);
 }
 public CommandFactory(ScriptServices scriptServices)
 {
     _scriptServices = scriptServices;
 }
            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 WhenNotPassedAScript_ShouldNotCallTheEngineAutomatically(
                [Frozen] Mock<IScriptEngine> scriptEngine,
                [Frozen] Mock<IConsole> console,
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var config = new Config { Repl = true };

                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(config, new string[0]);

                // act
                sut.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());
            }
            public void ShouldReturnErrorIfTheScriptIsIncomplete(
                [Frozen] Mock<IFileSystem> fileSystem,
                [Frozen] Mock<IScriptExecutor> executor,
                [Frozen] TestLogProvider logProvider,
                [Frozen] Mock<IInitializationServices> initializationServices,
                [Frozen] Mock<IScriptServicesBuilder> servicesBuilder,
                ScriptServices services)
            {
                // arrange
                var args = new Config { 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);
                logProvider.Output.ShouldContain("ERROR:");
            }
            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 Config { AllowPreRelease = false, PackageName = "", 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());
            }
Beispiel #48
0
 private static IScriptCommand CreateScriptCommand(
     ScriptCsArgs args, string[] scriptArgs, ScriptServices scriptServices)
 {
     return args.Watch
         ? (IScriptCommand)new WatchScriptCommand(
             args,
             scriptArgs,
             scriptServices.Console,
             scriptServices.FileSystem,
             scriptServices.Logger)
         : (IScriptCommand)new ExecuteScriptCommand(
             args.ScriptName,
             scriptArgs,
             scriptServices.FileSystem,
             scriptServices.Executor,
             scriptServices.ScriptPackResolver,
             scriptServices.Logger,
             scriptServices.AssemblyResolver);
 }