private void LoadScripts(HostedScriptEngine engine, UserAddedScript[] scripts) { var binaryIndexer = new CompiledCodeIndexer(); var module = scripts[0].Image; module.ModuleInfo.CodeIndexer = binaryIndexer; scripts .Skip(1) .Where(x => x.Type == UserAddedScriptType.Module) .OrderBy(x => x.InjectOrder) .ForEach(x => { x.Image.ModuleInfo.CodeIndexer = binaryIndexer; engine.EngineInstance.Environment.InjectGlobalProperty(null, x.Symbol, true); }); foreach (var userAddedScript in scripts.Skip(1).Where(x => x.Type == UserAddedScriptType.Class)) { userAddedScript.Image.ModuleInfo.CodeIndexer = binaryIndexer; engine.LoadUserScript(userAddedScript); } scripts .Skip(1) .Where(x => x.Type == UserAddedScriptType.Module) .ForEach(x => { var loaded = engine.EngineInstance.LoadModuleImage(x.Image); var instance = engine.EngineInstance.CreateUninitializedSDO(loaded); engine.EngineInstance.Environment.SetGlobalProperty(x.Symbol, instance); engine.EngineInstance.InitializeSDO(instance); }); }
public HostedScriptEngine StartEngine() { engine = new HostedScriptEngine(); engine.Initialize(); // Тут можно указать любой класс из компоненты engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptFtp.FtpConnection))); // Подключаем тестовую оболочку engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(EngineHelpWrapper))); var testrunnerSource = LoadFromAssemblyResource("NUnitTests.Tests.testrunner.os"); var testrunnerModule = engine.GetCompilerService().CreateModule(testrunnerSource); engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Module = testrunnerModule, Symbol = "TestRunner" }); var testRunner = AttachedScriptsFactory.ScriptFactory("TestRunner", new IValue[] { }); TestRunner = ValueFactory.Create(testRunner); return(engine); }
public HostedScriptEngine StartEngine() { engine = new HostedScriptEngine(); engine.Initialize(); // Тут можно указать любой класс из компоненты engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(Bracker.BrackerWriterImpl))); // Если проектов компонент несколько, то надо взять по классу из каждой из них // engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptcomponent_2.MyClass_2))); // engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptcomponent_3.MyClass_3))); // Подключаем тестовую оболочку engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(EngineHelpWrapper))); var testrunnerSource = LoadFromAssemblyResource("NUnitTests.Tests.testrunner.os"); var testrunnerModule = engine.GetCompilerService().CreateModule(testrunnerSource); engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Module = testrunnerModule, Symbol = "TestRunner" }); var testRunner = AttachedScriptsFactory.ScriptFactory("TestRunner", new IValue[] { }); TestRunner = ValueFactory.Create(testRunner); return(engine); }
public HostedScriptEngine StartEngine() { engine = new HostedScriptEngine(); engine.Initialize(); engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(OMyGodEco))); // Подключаем тестовую оболочку engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(EngineHelpWrapper))); var testrunnerSource = LoadFromAssemblyResource("NUnitTests.Tests.testrunner.os"); var testrunnerModule = engine.GetCompilerService() .Compile(testrunnerSource); { var mi = engine.GetType().GetMethod("SetGlobalEnvironment", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance); mi.Invoke(engine, new object[] { this, testrunnerSource }); } engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Image = testrunnerModule, Symbol = "TestRunner" }); var testRunner = AttachedScriptsFactory.ScriptFactory("TestRunner", new IValue[] { }); TestRunner = ValueFactory.Create(testRunner); return(engine); }
private int RunTestScript(ICodeSource source, string resourceName) { var module = engine.GetCompilerService().CreateModule(source); engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Module = module, Symbol = resourceName }); var process = engine.CreateProcess(this, source); return(process.Start()); }
public int Run() { try { ScriptModuleHandle module; var engine = new HostedScriptEngine(); engine.Initialize(); using (Stream codeStream = LocateCode()) using (var binReader = new BinaryReader(codeStream)) { int modulesCount; modulesCount = binReader.ReadInt32(); var formatter = new BinaryFormatter(); var reader = new ScriptEngine.Compiler.ModulePersistor(formatter); var entry = reader.Read(codeStream); --modulesCount; while (modulesCount-- > 0) { var userScript = reader.Read(codeStream); engine.LoadUserScript(userScript); } module = entry.Module; } var src = new BinaryCodeSource(module); var process = engine.CreateProcess(this, module, src); return(process.Start()); } catch (ScriptInterruptionException e) { return(e.ExitCode); } catch (Exception e) { this.ShowExceptionInfo(e); return(1); } }
public void RunTestScript(string resourceName) { var source = LoadFromAssemblyResource(resourceName); var bytecodeImage = engine.GetCompilerService().Compile(source); engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Image = bytecodeImage, Symbol = resourceName }); var test = AttachedScriptsFactory.ScriptFactory(resourceName, new IValue[] { }); ArrayImpl testArray; { int methodIndex = test.FindMethod("ПолучитьСписокТестов"); { IValue ivTests; test.CallAsFunction(methodIndex, new IValue[] { TestRunner }, out ivTests); testArray = ivTests as ArrayImpl; } } foreach (var ivTestName in testArray) { string testName = ivTestName.AsString(); int methodIndex = test.FindMethod(testName); if (methodIndex == -1) { // Тест указан, но процедуры нет или она не экспортирована continue; } test.CallAsProcedure(methodIndex, new IValue[] { }); } }
public HostedScriptEngine StartEngine() { engine = new HostedScriptEngine(); engine.Initialize(); // Тут можно указать любой класс из компоненты engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptcomponent.MyClass))); // Если проектов компонент несколько, то надо взять по классу из каждой из них // engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptcomponent_2.MyClass_2))); // engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(oscriptcomponent_3.MyClass_3))); // Подключаем тестовую оболочку engine.AttachAssembly(System.Reflection.Assembly.GetAssembly(typeof(EngineHelpWrapper))); var testrunnerSource = LoadFromAssemblyResource("NUnitTests.Tests.testrunner.os"); var testrunnerModule = engine.GetCompilerService().Compile(testrunnerSource); { var mi = engine.GetType().GetMethod("SetGlobalEnvironment", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance); mi.Invoke(engine, new object[] { this, testrunnerSource }); } engine.LoadUserScript(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Class, Image = testrunnerModule, Symbol = "TestRunner" }); var testRunner = AttachedScriptsFactory.ScriptFactory("TestRunner", new IValue[] { }); TestRunner = ValueFactory.Create(testRunner); return(engine); }
public int Run() { if (_sourceStream == null && CommandLineArguments != null && CommandLineArguments.Length > 1) { var firstArg = CommandLineArguments[0]; if (firstArg == "-loadDump") { var path = CommandLineArguments[1]; CommandLineArguments = CommandLineArguments.Skip(2).ToArray(); using (var dumpStream = new FileStream(path, FileMode.Open)) { _sourceStream = GetCodeStream(dumpStream); } return(Run()); //ну да, говнокод и лапша, время жмет } } if (_sourceStream == null) { _sourceStream = LocateCode(); } var engine = new HostedScriptEngine(); var src = new BinaryCodeSource(); engine.SetGlobalEnvironment(this, src); try { var templateStorage = new TemplateStorage(new StandaloneTemplateFactory()); engine.InitializationCallback = (e, env) => { e.Environment.InjectObject(templateStorage); GlobalsManager.RegisterInstance(templateStorage); }; engine.Initialize(); var serializer = new BinaryFormatter(); var appDump = (ApplicationDump)serializer.Deserialize(_sourceStream); foreach (var resource in appDump.Resources) { templateStorage.RegisterTemplate(resource.ResourceName, DeserializeTemplate(resource.Data)); } var module = appDump.Scripts[0].Image; for (int i = 1; i < appDump.Scripts.Length; i++) { engine.LoadUserScript(appDump.Scripts[i]); } var process = engine.CreateProcess(this, module, src); return(process.Start()); } catch (ScriptInterruptionException e) { return(e.ExitCode); } catch (Exception e) { ShowExceptionInfo(e); return(1); } }
public int Run() { if (_sourceStream == null && CommandLineArguments != null && CommandLineArguments.Length > 1) { var firstArg = CommandLineArguments[0]; if (firstArg == "-loadDump") { var path = CommandLineArguments[1]; CommandLineArguments = CommandLineArguments.Skip(2).ToArray(); using (var dumpStream = new FileStream(path, FileMode.Open)) { _sourceStream = GetCodeStream(dumpStream); } Run(); //ну да, говнокод и лапша, время жмет } } if (_sourceStream == null) { _sourceStream = LocateCode(); } var engine = new HostedScriptEngine(); var src = new BinaryCodeSource(); engine.SetGlobalEnvironment(this, src); try { ModuleImage module; engine.Initialize(); using (var binReader = new BinaryReader(_sourceStream)) { var modulesCount = binReader.ReadInt32(); var reader = new ModulePersistor(); var entry = reader.Read(_sourceStream); --modulesCount; while (modulesCount-- > 0) { var userScript = reader.Read(_sourceStream); engine.LoadUserScript(userScript); } module = entry.Image; } var process = engine.CreateProcess(this, module, src); return(process.Start()); } catch (ScriptInterruptionException e) { return(e.ExitCode); } catch (Exception e) { ShowExceptionInfo(e); return(1); } }