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); }
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"); }
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")); }
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>())); }
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; } ); }
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); }
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"); }
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."); }
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"); }
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")); }
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 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"); }
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); }
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"); }
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; }
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)); }
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>())); }
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."); }
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)); }