public void Execute_SwitchesAndReleasesScriptContextIfScriptExecutionThrows()
        {
            Assert.That(ScriptContext.Current, Is.Null);

            const string scriptText = @"
import clr
clr.AddReferenceByPartialName('Remotion.Scripting')
from Remotion.Scripting import *
def Test() :
  raise Exception('IntentionallyRaisedIronPythonException') 
";

            ScriptContext scriptContextForScript = ScriptContextObjectMother.CreateTestScriptContext("Execute_SwitchesAndReleasesScriptContextIfScriptExecutionThrows");
            var           scriptEnvironment      = ScriptEnvironment.Create();
            var           script = new ScriptFunction <Object> (scriptContextForScript, ScriptLanguageType.Python, scriptText, scriptEnvironment, "Test");

            try
            {
                script.Execute();
            }
            catch (Exception e)
            {
                Assert.That(e.Message, Is.EqualTo("IntentionallyRaisedIronPythonException"));
            }

            Assert.That(ScriptContext.Current, Is.Null);
        }
        public void Ctor_NumberTemplateArguments_9()
        {
            const string scriptText =
                @"def Test(s1,s2,s3,s4,s5,s6,s7,s8,s9) :
  return 'Test: '+s1+s2+s3+s4+s5+s6+s7+s8+s9";

            var scriptEnvironment = ScriptEnvironment.Create();
            var script            = new ScriptFunction <string, string, string, string, string, string, string, string, string, string> (
                ScriptContextObjectMother.CreateTestScriptContext(), ScriptLanguageType.Python, scriptText, scriptEnvironment, "Test");

            Assert.That(script.Execute("1", "2", "3", "4", "5", "6", "7", "8", "9"), Is.EqualTo("Test: 123456789"));
        }
        public void Ctor_NumberTemplateArguments_2()
        {
            const string scriptText =
                @"def Test(s0,s1) :
  return 'Test: ' + s0 + ' ' + s1";

            var scriptEnvironment = ScriptEnvironment.Create();
            var script            = new ScriptFunction <string, string, string> (ScriptContextObjectMother.CreateTestScriptContext(),
                                                                                 ScriptLanguageType.Python, scriptText, scriptEnvironment, "Test");

            Assert.That(script.Execute("really", "works"), Is.EqualTo("Test: really works"));
        }
        public void Ctor_NumberTemplateArguments_1()
        {
            const string scriptText =
                @"def Test(s) :
  return 'Test: ' + s";

            //ScriptScope scriptScope = ScriptingHelper.CreateScriptScope (ScriptLanguageType.Python);
            var scriptScope = ScriptEnvironment.Create();
            var script      = new ScriptFunction <string, string> (ScriptContextObjectMother.CreateTestScriptContext(), ScriptLanguageType.Python, scriptText, scriptScope, "Test");

            Assert.That(script.Execute("works"), Is.EqualTo("Test: works"));
        }
        public void NotImportClr()
        {
            var          scriptEnvironment = ScriptEnvironment.Create();
            const string scriptText        = "'ABcd'.Substring(1,2)";
            var          expressionScript  =
                new ExpressionScript <string> (
                    ScriptContextObjectMother.CreateTestScriptContext("NotImportClr"),
                    ScriptLanguageType.Python,
                    scriptText,
                    scriptEnvironment);

            expressionScript.Execute();
        }
        public void ImportIifHelperFunctions_LazyIIf()
        {
            var scriptEnvironment = ScriptEnvironment.Create();

            scriptEnvironment.ImportIifHelperFunctions();
            scriptEnvironment.SetVariable("x", 100000);
            const string scriptText       = "LazyIIf(x > 1000,lambda:'big',lambda:NonExistingSymbol)";
            var          expressionScript =
                new ExpressionScript <string> (ScriptContextObjectMother.CreateTestScriptContext("ImportIifHelperFunctions"), ScriptLanguageType.Python,
                                               scriptText, scriptEnvironment);

            Assert.That(expressionScript.Execute(), Is.EqualTo("big"));
        }
        public void Execute()
        {
            const string scriptText = "'Document Name: ' + rmDoc.Name";

            var scriptEnvironment = ScriptEnvironment.Create();
            var document          = new Document("Test Doc");

            scriptEnvironment.SetVariable("rmDoc", document);

            var script = new ExpressionScript <string> (ScriptContextObjectMother.CreateTestScriptContext(),
                                                        ScriptLanguageType.Python, scriptText, scriptEnvironment);

            Assert.That(script.Execute(), Is.EqualTo("Document Name: Test Doc"));
        }
        public void ImportClr()
        {
            var scriptEnvironment = ScriptEnvironment.Create();

            scriptEnvironment.ImportClr();

            const string scriptText       = "'ABcd'.Substring(1,2)";
            var          expressionScript = new ExpressionScript <string> (
                ScriptContextObjectMother.CreateTestScriptContext("ImportClr"),
                ScriptLanguageType.Python,
                scriptText,
                scriptEnvironment);

            Assert.That(expressionScript.Execute(), Is.EqualTo("Bc"));
        }
        public void Ctor()
        {
            ScriptContext            scriptContext      = ScriptContextObjectMother.CreateTestScriptContext();
            const ScriptLanguageType scriptLanguageType = ScriptLanguageType.Python;

            const string scriptText = "'ExpressionScriptCtorTest'";

            var scriptEnvironment = ScriptEnvironment.Create();
            var script            = new ExpressionScript <string> (scriptContext, scriptLanguageType, scriptText, scriptEnvironment);

            Assert.That(script.ScriptContext, Is.EqualTo(scriptContext));
            Assert.That(script.ScriptLanguageType, Is.EqualTo(scriptLanguageType));
            Assert.That(script.ScriptText, Is.EqualTo(scriptText));
            Assert.That(script.Execute(), Is.EqualTo("ExpressionScriptCtorTest"));
        }
        public void Execute_ImportedTypeIntoScriptScope()
        {
            const string scriptText = "Document('New ' + rmDoc.Name)";

            var scriptEnvironment = ScriptEnvironment.Create();

            scriptEnvironment.Import("Remotion.Scripting.UnitTests", "Remotion.Scripting.UnitTests.TestDomain", "Document");
            var document = new Document("Test Doc");

            scriptEnvironment.SetVariable("rmDoc", document);

            var script = new ExpressionScript <Document> (ScriptContextObjectMother.CreateTestScriptContext(),
                                                          ScriptLanguageType.Python, scriptText, scriptEnvironment);
            var result = script.Execute();

            Assert.That(result.Name, Is.EqualTo("New Test Doc"));
        }
        public void ScriptExecute_ImportMultipleIntoScriptScope()
        {
            const string scriptText = @"
import clr
clr.AddReferenceByPartialName('Remotion.Scripting.UnitTests')
from Remotion.Scripting.UnitTests import *
def Test() :
  return TestDomain.Document('Knows Document')
";

            ScriptContext scriptContextForScript = ScriptContextObjectMother.CreateTestScriptContext("Execute_ImportIntoScriptScope");
            var           scriptEnvironment      = ScriptEnvironment.Create();
            var           script         = new ScriptFunction <Document> (scriptContextForScript, ScriptLanguageType.Python, scriptText, scriptEnvironment, "Test");
            Document      resultDocument = script.Execute();

            Assert.That(resultDocument.Name, Is.EqualTo("Knows Document"));
        }
        public void Execute_SwitchesAndReleasesScriptContext()
        {
            Assert.That(ScriptContext.Current, Is.Null);

            const string scriptText =
                "ScriptContext.Current";

            ScriptContext scriptContextForScript = ScriptContextObjectMother.CreateTestScriptContext("Execute_SwitchesScriptContext_Script");
            var           scriptEnvironment      = ScriptEnvironment.Create();

            scriptEnvironment.Import("Remotion.Scripting", "Remotion.Scripting", "ScriptContext");
            var script = new ExpressionScript <ScriptContext> (scriptContextForScript, ScriptLanguageType.Python,
                                                               scriptText, scriptEnvironment);

            Assert.That(script.Execute(), Is.SameAs(scriptContextForScript));

            Assert.That(ScriptContext.Current, Is.Null);
        }
        public void Ctor()
        {
            ScriptContext            scriptContext      = ScriptContextObjectMother.CreateTestScriptContext();
            const ScriptLanguageType scriptLanguageType = ScriptLanguageType.Python;
            const string             scriptFunctionName = "Test";

            const string scriptText =
                @"def Test() :
  return 'CtorTest'";

            var scriptEnvironment = ScriptEnvironment.Create();

            var script = new ScriptFunction <string> (scriptContext, scriptLanguageType, scriptText, scriptEnvironment, scriptFunctionName);

            Assert.That(script.ScriptContext, Is.EqualTo(scriptContext));
            Assert.That(script.ScriptLanguageType, Is.EqualTo(scriptLanguageType));
            Assert.That(script.ScriptText, Is.EqualTo(scriptText));
            Assert.That(script.Execute(), Is.EqualTo("CtorTest"));
        }
        public void Execute_SwitchesAndReleasesScriptContext()
        {
            Assert.That(ScriptContext.Current, Is.Null);

            const string scriptText = @"
import clr
clr.AddReferenceByPartialName('Remotion.Scripting')
from Remotion.Scripting import *
def Test() :
  return ScriptContext.Current
";

            ScriptContext scriptContextForScript = ScriptContextObjectMother.CreateTestScriptContext("Execute_SwitchesScriptContext_Script");
            var           scriptEnvironment      = ScriptEnvironment.Create();
            var           script = new ScriptFunction <ScriptContext> (scriptContextForScript, ScriptLanguageType.Python, scriptText, scriptEnvironment, "Test");

            Assert.That(script.Execute(), Is.SameAs(scriptContextForScript));

            Assert.That(ScriptContext.Current, Is.Null);
        }
        public void Execute_SwitchesAndReleasesScriptContextIfScriptExecutionThrows()
        {
            Assert.That(ScriptContext.Current, Is.Null);

            const string scriptText =
                "RaiseCommandNotSupportedInIronPythonExpressioSoUsingUnkownSymbol";

            ScriptContext scriptContextForScript = ScriptContextObjectMother.CreateTestScriptContext("Execute_SwitchesAndReleasesScriptContextIfScriptExecutionThrows");
            var           scriptEnvironment      = ScriptEnvironment.Create();
            var           script = new ExpressionScript <ScriptContext> (scriptContextForScript, ScriptLanguageType.Python,
                                                                         scriptText, scriptEnvironment);

            try
            {
                script.Execute();
            }
            catch (Exception e)
            {
                Assert.That(e.Message, Is.EqualTo("name 'RaiseCommandNotSupportedInIronPythonExpressioSoUsingUnkownSymbol' is not defined"));
            }

            Assert.That(ScriptContext.Current, Is.Null);
        }