Esempio n. 1
0
        protected internal virtual void InjectScriptLibraries(
            string workingDirectory,
            FilePreProcessorResult result,
            IDictionary <string, object> state
            )
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (state == null)
            {
                throw new ArgumentNullException(nameof(state));
            }
            if (state.ContainsKey(ScriptLibrariesInjected))
            {
                return;
            }

            var scriptLibrariesPreProcessorResult = LoadScriptLibraries(workingDirectory);

            if (scriptLibrariesPreProcessorResult != null)
            {
                result.Code = scriptLibrariesPreProcessorResult.Code + Environment.NewLine + result.Code;
                result.References.AddRange(scriptLibrariesPreProcessorResult.References);
                result.Namespaces.AddRange(scriptLibrariesPreProcessorResult.Namespaces);
            }
            state.Add(ScriptLibrariesInjected, null);
        }
Esempio n. 2
0
            public void ShouldAddReferencesFromScriptLibrary(
                [Frozen] Mock <IScriptEngine> scriptEngine,
                Mock <ScriptExecutor> scriptExecutor
                )
            {
                scriptExecutor.Protected();
                var result = new FilePreProcessorResult();

                scriptExecutor.Setup(e => e.InjectScriptLibraries(It.IsAny <string>(), result, It.IsAny <IDictionary <string, object> >()))
                .Callback((string p, FilePreProcessorResult r, IDictionary <string, object> s) =>
                {
                    r.References.Add("Foo.Bar");
                });

                scriptEngine.Setup(e => e.Execute(
                                       It.IsAny <string>(),
                                       It.IsAny <string[]>(),
                                       It.IsAny <AssemblyReferences>(),
                                       It.IsAny <IEnumerable <string> >(),
                                       It.IsAny <ScriptPackSession>()));


                scriptExecutor.Object.Initialize(Enumerable.Empty <string>(), Enumerable.Empty <IScriptPack>());
                scriptExecutor.Object.EngineExecute("", new string[] {}, result);

                scriptEngine.Verify(
                    e => e.Execute(
                        It.IsAny <string>(),
                        It.IsAny <string[]>(),
                        It.Is <AssemblyReferences>(x => x.Paths.Contains("Foo.Bar")),
                        It.IsAny <IEnumerable <string> >(),
                        It.IsAny <ScriptPackSession>()),
                    Times.Once());
            }
Esempio n. 3
0
        protected internal virtual ScriptResult EngineExecute(
            string workingDirectory,
            string[] scriptArgs,
            FilePreProcessorResult result
            )
        {
            InjectScriptLibraries(workingDirectory, result, ScriptPackSession.State);
            var namespaces = Namespaces.Union(result.Namespaces);
            var references = References.Union(result.References);

            _log.Debug("Starting execution in engine");
            return(ScriptEngine.Execute(result.Code, scriptArgs, references, namespaces, ScriptPackSession));
        }
Esempio n. 4
0
            public void ShouldInvokeInjectScriptLibraries(Mock <ScriptExecutor> executor)
            {
                executor.Protected();
                executor.Object.Initialize(Enumerable.Empty <string>(), Enumerable.Empty <IScriptPack>(), "");
                executor.Setup(e => e.InjectScriptLibraries(
                                   It.IsAny <string>(), It.IsAny <FilePreProcessorResult>(), It.IsAny <IDictionary <string, object> >()));

                var result = new FilePreProcessorResult();

                executor.Object.EngineExecute("", new string[] { }, result);

                executor.Verify(e => e.InjectScriptLibraries(
                                    It.IsAny <string>(), result, It.IsAny <IDictionary <string, object> >()));
            }
            public void ShouldSetScriptInfo_ScriptPath(
                [Frozen] Mock <IScriptEngine> scriptEngine,
                ScriptExecutor scriptExecutor)
            {
                scriptEngine.Setup(e => e.Execute(
                                       It.IsAny <string>(),
                                       It.IsAny <string[]>(),
                                       It.IsAny <AssemblyReferences>(),
                                       It.IsAny <IEnumerable <string> >(),
                                       It.IsAny <ScriptPackSession>()));

                scriptExecutor.Initialize(Enumerable.Empty <string>(), Enumerable.Empty <IScriptPack>());

                var result = new FilePreProcessorResult();

                result.ScriptPath = "Main.csx";
                scriptExecutor.EngineExecute("", new string[] {}, result);
                scriptExecutor.ScriptInfo.ScriptPath.ShouldEqual("Main.csx");
            }
Esempio n. 6
0
            public void ShouldInvokeEngineExecute(
                [Frozen] Mock <IFilePreProcessor> preProcessor,
                Mock <ScriptExecutor> executor,
                FilePreProcessorResult result
                )
            {
                executor.Protected();
                preProcessor.Setup(p => p.ProcessScript(It.IsAny <string>())).Returns(result);
                executor.Setup(
                    e => e.EngineExecute(
                        It.IsAny <string>(),
                        It.IsAny <string[]>(),
                        It.IsAny <FilePreProcessorResult>()));

                var args = new string[] { };

                executor.Object.ExecuteScript("", args);

                executor.Verify(
                    e => e.EngineExecute(
                        "workingdirectory",
                        args,
                        result));
            }
Esempio n. 7
0
        protected internal virtual void InjectScriptLibraries(
            string workingDirectory,
            FilePreProcessorResult result,
            IDictionary<string, object> state
        )
        {
            Guard.AgainstNullArgument("result", result);
            Guard.AgainstNullArgument("state", state);

            if (state.ContainsKey(ScriptLibrariesInjected))
            {
                return;
            }

            var scriptLibrariesPreProcessorResult = LoadScriptLibraries(workingDirectory);

            if (scriptLibrariesPreProcessorResult != null)
            {
                result.Code = scriptLibrariesPreProcessorResult.Code + Environment.NewLine + result.Code;
                result.References.AddRange(scriptLibrariesPreProcessorResult.References);
                result.Namespaces.AddRange(scriptLibrariesPreProcessorResult.Namespaces);
            }
            state.Add(ScriptLibrariesInjected, null);
        }
Esempio n. 8
0
 protected internal virtual ScriptResult EngineExecute(
     string workingDirectory, 
     string[] scriptArgs, 
     FilePreProcessorResult result
 )
 {
     InjectScriptLibraries(workingDirectory, result, ScriptPackSession.State);
     var namespaces = Namespaces.Union(result.Namespaces);
     var references = References.Union(result.References);
     _log.Debug("Starting execution in engine");
     return ScriptEngine.Execute(result.Code, scriptArgs, references, namespaces, ScriptPackSession);
 }