public void ScriptFunction_CreateAndUseScripts_InSameScriptEnvironment() { // Import CLR (for CLR string functionality) _scriptEnvironment.ImportClr(); // Import the Document class into the shared script environment (otherwise we would not be able to call the Document ctors within // the script). _scriptEnvironment.Import("Remotion.Scripting.UnitTests", "Remotion.Scripting.UnitTests.TestDomain", "Document"); const string scriptFunctionSourceCode0 = @" def CreateScriptDocSuccessor() : return Document(scriptDoc.Name,scriptDoc.Number+1) "; const string scriptFunctionSourceCode1 = @" def ModifyDocument(newNamePostfix, addToNumber) : scriptDoc.Name += newNamePostfix scriptDoc.Number += addToNumber return scriptDoc "; // Create a script function which creates a new Document. var createScriptDocSuccessorScript = new ScriptFunction <Document> ( _scriptContext, ScriptLanguageType.Python, scriptFunctionSourceCode0, _scriptEnvironment, "CreateScriptDocSuccessor"); // Create a script function which modifies the passed Document. var modifyDocumentScript = new ScriptFunction <string, int, Document> ( _scriptContext, ScriptLanguageType.Python, scriptFunctionSourceCode1, _scriptEnvironment, "ModifyDocument"); var doc = new Document("invoice", 1); Assert.That(doc.Name, Is.EqualTo("invoice")); Assert.That(doc.Number, Is.EqualTo(1)); _scriptEnvironment.SetVariable("scriptDoc", doc); Document successorDoc = createScriptDocSuccessorScript.Execute(); Document scriptDoc = modifyDocumentScript.Execute(" - processed", 1000); Assert.That(successorDoc.Name, Is.EqualTo("invoice")); Assert.That(successorDoc.Number, Is.EqualTo(2)); Assert.That(scriptDoc.Name, Is.EqualTo("invoice - processed")); Assert.That(scriptDoc.Number, Is.EqualTo(1001)); }