Example #1
0
 public void CompilationServiceFactory_TestNullScriptOptions()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var instance = CompilationServiceFactory.CreateService(ScriptTestDataHelper.GetRandomMetadata(), null);
     });
 }
Example #2
0
 public void CompilationServiceFactory_TestForUnsupportedEntityType()
 {
     Assert.Throws <NotSupportedException>(() =>
     {
         var instance = CompilationServiceFactory.CreateService(new EntityMetadata(), ScriptOptions.Default);
     });
 }
Example #3
0
 public void CompilationServiceFactory_TestNullEntityMetadata()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var instance = CompilationServiceFactory.CreateService(null, ScriptOptions.Default);
     });
 }
Example #4
0
        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);
        }
Example #5
0
        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));
        }
Example #6
0
        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);
        }
Example #7
0
        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));
        }
Example #8
0
        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));
        }
Example #9
0
        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);
        }
Example #10
0
        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));
        }