public void CompilationServiceFactory_TestNullScriptOptions() { Assert.Throws <ArgumentNullException>(() => { var instance = CompilationServiceFactory.CreateService(ScriptTestDataHelper.GetRandomMetadata(), null); }); }
public void CompilationServiceFactory_TestForUnsupportedEntityType() { Assert.Throws <NotSupportedException>(() => { var instance = CompilationServiceFactory.CreateService(new EntityMetadata(), ScriptOptions.Default); }); }
public void CompilationServiceFactory_TestNullEntityMetadata() { Assert.Throws <ArgumentNullException>(() => { var instance = CompilationServiceFactory.CreateService(null, ScriptOptions.Default); }); }
public void CompilationServiceFactory_GetServiceBasedOnType(EntityType type, object value) { EntityMetadata metaData = ScriptTestDataHelper.GetRandomMetadata(type); var compilationServiceInstance = CompilationServiceFactory.CreateService(metaData, ScriptOptions.Default); Assert.Equal(compilationServiceInstance.GetType(), value); }
public async void CompilationService_TestScriptCompilation() { var serviceInstance = CompilationServiceFactory.CreateService(ScriptTestDataHelper.GetRandomMetadata(), ScriptOptions.Default); ICompilation compilation = await serviceInstance.GetCompilationAsync(); ImmutableArray <Diagnostic> diagnostics = await compilation.GetDiagnosticsAsync(); Assert.Empty(diagnostics.Select(d => d.Severity == DiagnosticSeverity.Error)); }
public async void CompilationService_TestVaildEntryPointResolution() { var serviceInstance = CompilationServiceFactory.CreateService(ScriptTestDataHelper.GetRandomMetadata(), ScriptOptions.Default); ICompilation compilation = await serviceInstance.GetCompilationAsync(); Exception ex = Record.Exception(() => { EntityMethodSignature methodSignature = compilation.GetEntryPointSignature(); }); Assert.Null(ex); }
public async void CompilationService_TestGistCompilation() { var gist = ScriptTestDataHelper.GetGist(); var metadata = new EntityMetadata(gist, EntityType.Gist); var scriptOptions = ScriptTestDataHelper.GetScriptOption(ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports()); var serviceInstance = CompilationServiceFactory.CreateService(metadata, scriptOptions); var compilation = await serviceInstance.GetCompilationAsync(); var diagnostics = await compilation.GetDiagnosticsAsync(); Assert.Empty(diagnostics.Select(d => d.Severity == DiagnosticSeverity.Error)); }
public async void CompilationService_TestScriptCompilationFailure() { EntityMetadata metaData = ScriptTestDataHelper.GetRandomMetadata(EntityType.Detector); metaData.ScriptText = ScriptTestDataHelper.GetInvalidCsxScript(ScriptErrorType.CompilationError); var serviceInstance = CompilationServiceFactory.CreateService(metaData, ScriptOptions.Default); ICompilation compilation = await serviceInstance.GetCompilationAsync(); ImmutableArray <Diagnostic> diagnostics = await compilation.GetDiagnosticsAsync(); Assert.NotEmpty(diagnostics.Select(d => d.Severity == DiagnosticSeverity.Error)); }
public async void CompilationService_TestDuplicateEntryPoints(ScriptErrorType errorType) { EntityMetadata metadata = ScriptTestDataHelper.GetRandomMetadata(); metadata.ScriptText = ScriptTestDataHelper.GetInvalidCsxScript(errorType); var serviceInstance = CompilationServiceFactory.CreateService(metadata, ScriptOptions.Default); ICompilation compilation = await serviceInstance.GetCompilationAsync(); ScriptCompilationException ex = Assert.Throws <ScriptCompilationException>(() => { EntityMethodSignature methodSignature = compilation.GetEntryPointSignature(); }); Assert.NotEmpty(ex.CompilationOutput); }
public async void CompilationService_TestGistEntryPointCheckFailure() { var gist = ScriptTestDataHelper.GetErrorGist(); var metadata = new EntityMetadata(gist, EntityType.Gist); var serviceInstance = CompilationServiceFactory.CreateService(metadata, ScriptOptions.Default); var compilation = await serviceInstance.GetCompilationAsync(); var diagnostics = await compilation.GetDiagnosticsAsync(); Assert.Empty(diagnostics.Select(d => d.Severity == DiagnosticSeverity.Error)); Exception ex = await Record.ExceptionAsync(async() => { var entry = await compilation.GetEntryPoint(); }); Assert.NotNull(ex); }
public async Task <Tuple <string, string> > GetAssemblyBytesAsync() { ICompilationService compilationService = CompilationServiceFactory.CreateService(_entityMetaData, GetScriptOptions(_frameworkReferences)); _compilation = await compilationService.GetCompilationAsync(); _diagnostics = await _compilation.GetDiagnosticsAsync(); IsCompilationSuccessful = !_diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error); CompilationOutput = _diagnostics.Select(m => m.ToString()); if (!IsCompilationSuccessful) { throw new ScriptCompilationException(CompilationOutput); } return(await _compilation.GetAssemblyBytesAsync()); }
/// <summary> /// Initializes the entry point by compiling the script and loading/saving the assembly /// </summary> /// <returns>Taks for initializing entry point.</returns> public async Task InitializeEntryPointAsync() { var referenceResolver = new MemoryReferenceResolver(_frameworkLoads); ICompilationService compilationService = CompilationServiceFactory.CreateService(_entityMetaData, GetScriptOptions(referenceResolver)); _compilation = await compilationService.GetCompilationAsync(); _diagnostics = await _compilation.GetDiagnosticsAsync(); References = referenceResolver.Used.ToImmutableArray(); IsCompilationSuccessful = !_diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error); CompilationOutput = _diagnostics.Select(m => m.ToString()); if (IsCompilationSuccessful) { try { memberInfo = await _compilation.GetEntryPoint(); InitializeAttributes(); Validate(); } catch (Exception ex) { if (ex is ScriptCompilationException scriptEx) { IsCompilationSuccessful = false; if (scriptEx.CompilationOutput.Any()) { CompilationOutput = CompilationOutput.Concat(scriptEx.CompilationOutput); } return; } throw; } } }
/// <summary> /// Initializes the entry point by compiling the script and loading/saving the assembly /// </summary> /// <param name="assemblyInitType"></param> /// <returns></returns> public async Task InitializeEntryPointAsync() { ICompilationService compilationService = CompilationServiceFactory.CreateService(_entityMetaData, GetScriptOptions(_frameworkReferences)); _compilation = await compilationService.GetCompilationAsync(); _diagnostics = await _compilation.GetDiagnosticsAsync(); IsCompilationSuccessful = !_diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error); CompilationOutput = _diagnostics.Select(m => m.ToString()); if (IsCompilationSuccessful) { try { EntityMethodSignature methodSignature = _compilation.GetEntryPointSignature(); Assembly assembly = await _compilation.EmitAssemblyAsync(); _entryPointMethodInfo = methodSignature.GetMethod(assembly); InitializeAttributes(); Validate(); } catch (Exception ex) { if (ex is ScriptCompilationException scriptEx) { IsCompilationSuccessful = false; if (scriptEx.CompilationOutput.Any()) { CompilationOutput = CompilationOutput.Concat(scriptEx.CompilationOutput); } return; } throw ex; } } }
public async Task <string> SaveAssemblyToDiskAsync(string assemblyPath) { var referenceResolver = new MemoryReferenceResolver(_frameworkLoads); ICompilationService compilationService = CompilationServiceFactory.CreateService(_entityMetaData, GetScriptOptions(referenceResolver)); _compilation = await compilationService.GetCompilationAsync(); _diagnostics = await _compilation.GetDiagnosticsAsync(); References = referenceResolver.Used.ToImmutableArray(); IsCompilationSuccessful = !_diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error); CompilationOutput = _diagnostics.Select(m => m.ToString()); if (!IsCompilationSuccessful) { throw new ScriptCompilationException(CompilationOutput); } return(await _compilation.SaveAssemblyAsync(assemblyPath)); }