public static IScriptServicesBuilder Create(Config config, string[] scriptArgs)
        {
            Guard.AgainstNullArgument("commandArgs", config);
            Guard.AgainstNullArgument("scriptArgs", scriptArgs);

            IConsole console = new ScriptConsole();
            if (!string.IsNullOrWhiteSpace(config.OutputFile))
            {
                console = new FileConsole(config.OutputFile, console);
            }

            var logProvider = new ColoredConsoleLogProvider(config.LogLevel, console);
            var initializationServices = new InitializationServices(logProvider);
            initializationServices.GetAppDomainAssemblyResolver().Initialize();

            // NOTE (adamralph): this is a hideous assumption about what happens inside the CommandFactory.
            // It is a result of the ScriptServicesBuilderFactory also having to know what is going to happen inside the
            // Command Factory so that it builds the builder(:-p) correctly in advance.
            // This demonstrates the technical debt that exists with the ScriptServicesBuilderFactory and CommandFactory
            // in their current form. We have a separate refactoring task raised to address this.
            var repl = config.Repl ||
                (!config.Clean && config.PackageName == null && !config.Save && config.ScriptName == null);

            var scriptServicesBuilder = new ScriptServicesBuilder(console, logProvider, null, null, initializationServices)
                .Cache(config.Cache)
                .Debug(config.Debug)
                .LogLevel(config.LogLevel)
                .ScriptName(config.ScriptName)
                .Repl(repl);

            return scriptServicesBuilder.LoadModules(Path.GetExtension(config.ScriptName) ?? ".csx", config.Modules);
        }
Example #2
0
            public TheContainerProperty()
            {
                _overrides[typeof(ILineProcessor)] = new List <Type>();
                var mockScriptExecutorType = new Mock <IScriptExecutor>();

                _scriptExecutorType = mockScriptExecutorType.Object.GetType();

                var mockReplType = new Mock <IRepl>();

                _replType = mockReplType.Object.GetType();

                var mockScriptEngineType = new Mock <IScriptEngine>();

                _scriptEngineType = mockScriptEngineType.Object.GetType();

                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);

                _runtimeServices = new RuntimeServices(
                    _mockLogger.Object,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    false,
                    initializationServices,
                    "script.csx");
            }
Example #3
0
            public void ShouldLogAGeneralWarningOnAnAssemblyLoadFailureWhenRunningInRepl()
            {
                // arrange
                var mock = new Mock <IAssemblyResolver>();

                mock.Setup(a => a.GetAssemblyPaths(It.IsAny <string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mock.Object;
                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
                var runtimeServices        = new RuntimeServices(
                    _mockLogger.Object,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType, true,
                    initializationServices,
                    "");

                // act
                var container = runtimeServices.Container;

                // assert
                _mockLogger.Verify(l => l.Warn(
                                       "Some assemblies failed to load. Launch with '-repl -loglevel debug' to see the details"));
            }
Example #4
0
            public void ShouldLogOnDebugAnAssemblyLoadFailure()
            {
                // arrange
                var mock = new Mock <IAssemblyResolver>();

                mock.Setup(a => a.GetAssemblyPaths(It.IsAny <string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mock.Object;
                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
                var runtimeServices        = new RuntimeServices(
                    _mockLogger.Object,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                _mockLogger.Verify(l => l.DebugFormat(
                                       "Failure loading assembly: {0}. Exception: {1}", "/foo.dll", It.IsAny <string>()));
            }
Example #5
0
            public void ShouldResolveAssembliesBasedOnScriptWorkingDirectory()
            {
                // arrange
                var fsmock = new Mock <IFileSystem>();

                fsmock.Setup(a => a.GetWorkingDirectory(It.IsAny <string>())).Returns("c:/scripts");

                var resolvermock = new Mock <IAssemblyResolver>();

                resolvermock.Setup(a => a.GetAssemblyPaths("c:/scripts", false)).Returns(new[] { "foo.dll" });

                _overrides[typeof(IFileSystem)]       = fsmock.Object;
                _overrides[typeof(IAssemblyResolver)] = resolvermock.Object;

                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
                var runtimeServices        = new RuntimeServices(
                    _mockLogger.Object,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "c:/scriptcs/script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                resolvermock.Verify(x => x.GetAssemblyPaths("c:/scripts", false), Times.Exactly(1));
            }
        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;
            }
                                                                 );
        }
Example #7
0
        private ScriptServices CreateScriptServices()
        {
            var console     = new ScriptConsole();
            var logProvider = new ColoredConsoleLogProvider(LogLevel.Info, console);

            var initializationServices = new InitializationServices(logProvider);

            initializationServices.GetAppDomainAssemblyResolver().Initialize();

            var scriptServicesBuilder = new ScriptServicesBuilder(console, logProvider, null, null, initializationServices);

            scriptServicesBuilder.Overrides[typeof(IFileSystem)] = _options.FileSystem;
            scriptServicesBuilder.LoadScriptPacks();
            scriptServicesBuilder.LoadModules(".csx", _options.Modules);

            var scriptServices = scriptServicesBuilder.Build();

            var assemblies = scriptServices.AssemblyResolver.GetAssemblyPaths(_options.FileSystem.CurrentDirectory, true);
            var packs      = scriptServices.ScriptPackResolver.GetPacks();

            scriptServices.Executor.Initialize(assemblies, packs, _options.ScriptArgs);
            scriptServices.Executor.AddReferences(typeof(Attribute), typeof(ExportAttribute));
            scriptServices.Executor.ImportNamespaces("System.ComponentModel.Composition");

            if (_options.References != null)
            {
                scriptServices.Executor.AddReferenceAndImportNamespaces(_options.References);
            }

            return(scriptServices);
        }
Example #8
0
            public void ShouldLogAGeneralWarningOnAnAssemblyLoadFailureWhenRunningScript()
            {
                // arrange
                var mockResolver = new Mock <IAssemblyResolver>();

                mockResolver.Setup(a => a.GetAssemblyPaths(It.IsAny <string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mockResolver.Object;

                var mockAssemblyUtility = new Mock <IAssemblyUtility>();

                mockAssemblyUtility.Setup(a => a.IsManagedAssembly(It.IsAny <string>())).Returns(true);
                _overrides[typeof(IAssemblyUtility)] = mockAssemblyUtility.Object;

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                var runtimeServices        = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                _logProvider.Output.ShouldContain(
                    "WARN: Some assemblies failed to load. Launch with '-loglevel debug' to see the details");
            }
Example #9
0
            public void ShouldLogOnDebugAnAssemblyLoadFailure()
            {
                // arrange
                var mockResolver = new Mock <IAssemblyResolver>();

                mockResolver.Setup(a => a.GetAssemblyPaths(It.IsAny <string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mockResolver.Object;

                var mockAssemblyUtility = new Mock <IAssemblyUtility>();

                mockAssemblyUtility.Setup(a => a.IsManagedAssembly(It.IsAny <string>())).Returns(true);
                _overrides[typeof(IAssemblyUtility)] = mockAssemblyUtility.Object;

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                var runtimeServices        = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                _logProvider.Output.ShouldContain(
                    "DEBUG: Failure loading assembly: /foo.dll. Exception: Could not load file or assembly 'foo.dll' or one of its dependencies. The system cannot find the file specified.");
            }
Example #10
0
            public void ShouldLogAGeneralWarningOnAnAssemblyLoadFailureWhenRunningInRepl()
            {
                // arrange
                var mockResolver = new Mock<IAssemblyResolver>();
                mockResolver.Setup(a => a.GetAssemblyPaths(It.IsAny<string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mockResolver.Object;

                var mockAssemblyUtility = new Mock<IAssemblyUtility>();
                mockAssemblyUtility.Setup(a => a.IsManagedAssembly(It.IsAny<string>())).Returns(true);
                _overrides[typeof (IAssemblyUtility)] = mockAssemblyUtility.Object;

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                var runtimeServices = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType, true,
                    initializationServices,
                    "");

                // act
                var container = runtimeServices.Container;

                // assert
                _logProvider.Output.ShouldContain(
                    "WARN: Some assemblies failed to load. Launch with '-repl -loglevel debug' to see the details");
            }
Example #11
0
 public void ShouldLogAGeneralWarningOnAnAssemblyLoadFailureWhenRunningScript()
 {
     var mock = new Mock<IAssemblyResolver>();
     mock.Setup(a => a.GetAssemblyPaths(It.IsAny<string>())).Returns(new[] { "foo.dll" });
     _overrides[typeof(IAssemblyResolver)] = mock.Object;
     var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
     var runtimeServices = new RuntimeServices(_mockLogger.Object, _overrides, new List<Type>(), _mockConsole.Object, _scriptEngineType, _scriptExecutorType, true, initializationServices, "script.csx");
     var container = runtimeServices.Container;
     _mockLogger.Verify(l => l.Warn("Some assemblies failed to load. Launch with '-loglevel debug' to see the details"));
 }
Example #12
0
 public void ShouldLogOnDebugAnAssemblyLoadFailure()
 {
     var mock = new Mock<IAssemblyResolver>();
     mock.Setup(a => a.GetAssemblyPaths(It.IsAny<string>())).Returns(new[] {"foo.dll"});
     _overrides[typeof (IAssemblyResolver)] = mock.Object;
     var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
     var runtimeServices = new RuntimeServices(_mockLogger.Object, _overrides, new List<Type>(), _mockConsole.Object, _scriptEngineType, _scriptExecutorType, true, initializationServices, "script.csx");
     var container = runtimeServices.Container;
     _mockLogger.Verify(l=>l.DebugFormat("Failure loading assembly: {0}. Exception: {1}", "foo.dll", "Could not load file or assembly 'foo.dll' or one of its dependencies. The system cannot find the file specified."));
 }
Example #13
0
            public TheCreateContainerMethod()
            {
                var mockScriptExecutorType = new Mock<IScriptExecutor>();
                _scriptExecutorType = mockScriptExecutorType.Object.GetType();

                var mockScriptEngineType = new Mock<IScriptEngine>();
                _scriptEngineType = mockScriptEngineType.Object.GetType();

                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
                _runtimeServices = new RuntimeServices(_mockLogger.Object, _overrides, new List<Type>(),  _mockConsole.Object, _scriptEngineType, _scriptExecutorType, false, initializationServices, "script.csx");
            }
Example #14
0
            public void ShouldLogOnDebugAnAssemblyLoadFailure()
            {
                var mock = new Mock <IAssemblyResolver>();

                mock.Setup(a => a.GetAssemblyPaths(It.IsAny <string>())).Returns(new[] { "foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mock.Object;
                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
                var runtimeServices        = new RuntimeServices(_mockLogger.Object, _overrides, new List <Type>(), _mockConsole.Object, _scriptEngineType, _scriptExecutorType, true, initializationServices, "script.csx");
                var container = runtimeServices.Container;

                _mockLogger.Verify(l => l.DebugFormat("Failure loading assembly: {0}. Exception: {1}", "foo.dll", "Could not load file or assembly 'foo.dll' or one of its dependencies. The system cannot find the file specified."));
            }
        public static IScriptServicesBuilder Create(ScriptCsArgs commandArgs, string[] scriptArgs)
        {
            Guard.AgainstNullArgument("commandArgs", commandArgs);
            Guard.AgainstNullArgument("scriptArgs", scriptArgs);

            IConsole console = new ScriptConsole();
            if (!string.IsNullOrWhiteSpace(commandArgs.Output))
            {
                console = new FileConsole(commandArgs.Output, console);
            }

            var configurator = new LoggerConfigurator(commandArgs.LogLevel);
            configurator.Configure(console);
            var logger = configurator.GetLogger();
            var initializationServices = new InitializationServices(logger);
            initializationServices.GetAppDomainAssemblyResolver().Initialize();

            var scriptServicesBuilder = new ScriptServicesBuilder(console, logger, null, null, initializationServices)
                .Cache(commandArgs.Cache)
                .Debug(commandArgs.Debug)
                .LogLevel(commandArgs.LogLevel)
                .ScriptName(commandArgs.ScriptName)
                .Repl(commandArgs.Repl);

            var modules = commandArgs.Modules == null
                ? new string[0]
                : commandArgs.Modules.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            var extension = Path.GetExtension(commandArgs.ScriptName);

            if (string.IsNullOrWhiteSpace(extension) && !commandArgs.Repl)
            {
                // No extension was given, i.e we might have something like
                // "scriptcs foo" to deal with. We activate the default extension,
                // to make sure it's given to the LoadModules below.
                extension = ".csx";

                if (!string.IsNullOrWhiteSpace(commandArgs.ScriptName))
                {
                    // If the was in fact a script specified, we'll extend it
                    // with the default extension, assuming the user giving
                    // "scriptcs foo" actually meant "scriptcs foo.csx". We
                    // perform no validation here thought; let it be done by
                    // the activated command. If the file don't exist, it's
                    // up to the command to detect and report.

                    commandArgs.ScriptName += extension;
                }
            }

            return scriptServicesBuilder.LoadModules(extension, modules);
        }
Example #16
0
            public TheCreateContainerMethod()
            {
                var mockScriptExecutorType = new Mock <IScriptExecutor>();

                _scriptExecutorType = mockScriptExecutorType.Object.GetType();

                var mockScriptEngineType = new Mock <IScriptEngine>();

                _scriptEngineType = mockScriptEngineType.Object.GetType();

                var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);

                _runtimeServices = new RuntimeServices(_mockLogger.Object, _overrides, new List <Type>(), _mockConsole.Object, _scriptEngineType, _scriptExecutorType, false, initializationServices, "script.csx");
            }
Example #17
0
        private static ScriptServices BuildScriptServices(InOutConsole console)
        {
            var logConfiguration = new LoggerConfigurator(LogLevel.Info);
            logConfiguration.Configure(console);
            var logger = logConfiguration.GetLogger();

            var initializationServices = new InitializationServices(logger);

            initializationServices.GetAppDomainAssemblyResolver().Initialize();

            var scriptServicesBuilder = new ScriptServicesBuilder(console, logger, null, null, initializationServices)
                .Repl(true);

            scriptServicesBuilder.LoadModules("");

            var scriptServices = scriptServicesBuilder.Build();

            initializationServices.GetInstallationProvider().Initialize();

            scriptServices.Repl.Initialize(Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>());
            return scriptServices;
        }
Example #18
0
        public static IScriptServicesBuilder Create(Config config, string[] scriptArgs)
        {
            if (scriptArgs == null)
            {
                throw new ArgumentNullException(nameof(scriptArgs));
            }

            IConsole console = new ScriptConsole();

            if (!string.IsNullOrWhiteSpace(config.OutputFile))
            {
                console = new FileConsole(config.OutputFile, console);
            }

            var logProvider            = new ColoredConsoleLogProvider(config.LogLevel, console);
            var initializationServices = new InitializationServices(logProvider);

            //todo: maybe not needed at all?
            //initializationServices.GetAppDomainAssemblyResolver().Initialize();

            // NOTE (adamralph): this is a hideous assumption about what happens inside the CommandFactory.
            // It is a result of the ScriptServicesBuilderFactory also having to know what is going to happen inside the
            // Command Factory so that it builds the builder(:-p) correctly in advance.
            // This demonstrates the technical debt that exists with the ScriptServicesBuilderFactory and CommandFactory
            // in their current form. We have a separate refactoring task raised to address this.
            var repl = config.Repl ||
                       (!config.Clean && config.PackageName == null && !config.Save && config.ScriptName == null);

            var scriptServicesBuilder = new ScriptServicesBuilder(console, logProvider, null, null, initializationServices)
                                        .Cache(config.Cache)
                                        .Debug(config.Debug)
                                        .LogLevel(config.LogLevel)
                                        .ScriptName(config.ScriptName)
                                        .Repl(repl);

            return(scriptServicesBuilder.LoadModules(Path.GetExtension(config.ScriptName) ?? ".csx", config.Modules));
        }
Example #19
0
            public TheContainerProperty()
            {
                _overrides[typeof(ILineProcessor)] = new List<Type>();
                var mockScriptExecutorType = new Mock<IScriptExecutor>();
                _scriptExecutorType = mockScriptExecutorType.Object.GetType();

                var mockReplType = new Mock<IRepl>();
                _replType = mockReplType.Object.GetType();

                var mockScriptEngineType = new Mock<IScriptEngine>();
                _scriptEngineType = mockScriptEngineType.Object.GetType();

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                _runtimeServices = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    false,
                    initializationServices,
                    "script.csx");
            }
 public void ShouldLogOnDebugAnAssemblyLoadFailure()
 {
     var mock = new Mock<IAssemblyResolver>();
     mock.Setup(a => a.GetAssemblyPaths(It.IsAny<string>(), false)).Returns(new[] { "/foo.dll" });
     _overrides[typeof(IAssemblyResolver)] = mock.Object;
     var initializationServices = new InitializationServices(_mockLogger.Object, _overrides);
     var runtimeServices = new RuntimeServices(_mockLogger.Object, _overrides, _mockConsole.Object, _scriptEngineType, _scriptExecutorType, _replType, true, initializationServices, "script.csx");
     var container = runtimeServices.Container;
     _mockLogger.Verify(l => l.DebugFormat("Failure loading assembly: {0}. Exception: {1}", "/foo.dll", It.IsAny<string>()));
 }
Example #21
0
            public void ShouldLogOnDebugAnAssemblyLoadFailure()
            {
                // arrange
                var mockResolver = new Mock<IAssemblyResolver>();
                mockResolver.Setup(a => a.GetAssemblyPaths(It.IsAny<string>(), false)).Returns(new[] { "/foo.dll" });
                _overrides[typeof(IAssemblyResolver)] = mockResolver.Object;

                var mockAssemblyUtility = new Mock<IAssemblyUtility>();
                mockAssemblyUtility.Setup(a => a.IsManagedAssembly(It.IsAny<string>())).Returns(true);
                _overrides[typeof(IAssemblyUtility)] = mockAssemblyUtility.Object;

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                var runtimeServices = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                _logProvider.Output.ShouldContain(
                    "DEBUG: Failure loading assembly: /foo.dll. Exception: Could not load file or assembly 'foo.dll' or one of its dependencies. The system cannot find the file specified.");
            }
Example #22
0
            public void ShouldResolveAssembliesBasedOnScriptWorkingDirectory()
            {
                // arrange
                var fsmock = new Mock<IFileSystem>();
                fsmock.Setup(a => a.GetWorkingDirectory(It.IsAny<string>())).Returns("c:/scripts");

                var resolvermock = new Mock<IAssemblyResolver>();
                resolvermock.Setup(a => a.GetAssemblyPaths("c:/scripts", false)).Returns(new[] { "foo.dll" });

                _overrides[typeof(IFileSystem)] = fsmock.Object;
                _overrides[typeof(IAssemblyResolver)] = resolvermock.Object;

                var initializationServices = new InitializationServices(_logProvider, _overrides);
                var runtimeServices = new RuntimeServices(
                    _logProvider,
                    _overrides,
                    _mockConsole.Object,
                    _scriptEngineType,
                    _scriptExecutorType,
                    _replType,
                    true,
                    initializationServices,
                    "c:/scriptcs/script.csx");

                // act
                var container = runtimeServices.Container;

                // assert
                resolvermock.Verify(x => x.GetAssemblyPaths("c:/scripts", false), Times.Exactly(1));
            }