Пример #1
0
        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));
        }