Пример #1
0
        public void ExpressionScript_CreateAndUse()
        {
            const string expressionScriptSourceCode = "doc.Name.Contains('Rec') or doc.Number == 123456";

            var doc = new Document("Receipt");

            // Create a separate script environment for the script expression
            var privateScriptEnvironment = ScriptEnvironment.Create();

            // Import the CLR (e.g. string etc)
            privateScriptEnvironment.ImportClr();
            // Set variable doc to a Document instance
            privateScriptEnvironment.SetVariable("doc", doc);

            // Create a script expression which checks the Document object stored in the variable "doc".
            var checkDocumentExpressionScript =
                new ExpressionScript <bool> (_scriptContext, ScriptLanguageType.Python, expressionScriptSourceCode, privateScriptEnvironment);

            Assert.That(checkDocumentExpressionScript.Execute(), Is.True);
            doc.Name = "Record";
            Assert.That(checkDocumentExpressionScript.Execute(), Is.True);
            doc.Number = 123456;
            Assert.That(checkDocumentExpressionScript.Execute(), Is.True);
            doc.Name = "Report";
            Assert.That(checkDocumentExpressionScript.Execute(), Is.True);
            doc.Number = 21;
            Assert.That(checkDocumentExpressionScript.Execute(), Is.False);
        }
Пример #2
0
        public void ExpressionScript_HelperFunctions()
        {
            const string expressionScriptSourceCode =
                "IIf (doc.Name.Contains('Rec'), doc.Number, LazyIIf (doc.Number == 0, lambda:-1, lambda:1.0/doc.Number))";
            // TODO: Equivalent to "doc.Number if doc.Name.Contains('Rec') else -1 if doc.Number == 0 else 1.0/doc.Number"?;

            var privateScriptEnvironment = ScriptEnvironment.Create();

            privateScriptEnvironment.ImportClr();
            // Import script helper functions (IIf and LazyIIf)
            privateScriptEnvironment.ImportIifHelperFunctions();

            var checkDocumentExpressionScript =
                new ExpressionScript <float> (_scriptContext, ScriptLanguageType.Python, expressionScriptSourceCode, privateScriptEnvironment);

            var doc = new Document("Receipt", 4);

            privateScriptEnvironment.SetVariable("doc", doc);

            Assert.That(checkDocumentExpressionScript.Execute(), Is.EqualTo(4.0));
            doc.Name = "Document";
            Assert.That(checkDocumentExpressionScript.Execute(), Is.EqualTo(0.25));
            doc.Number = 0;
            Assert.That(checkDocumentExpressionScript.Execute(), Is.EqualTo(-1.0));
        }
        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 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 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);
        }
        public void CompiledVsUncompiled()
        {
            var          nrLoopsArray = new[] { 1, 1, 1000 };
            const string scriptExpressionSourceCode = "GLOBAL_cascade.Child.Child.Child.Child.Child.Child.Child.Child.Child.Name";

            const int numberChildren = 10;
            var       cascade        = new Cascade(numberChildren);

            var privateScriptEnvironment = ScriptEnvironment.Create();

            privateScriptEnvironment.Import(typeof(TestDomain.Cascade).Assembly.GetName().Name, typeof(TestDomain.Cascade).Namespace, typeof(TestDomain.Cascade).Name);
            privateScriptEnvironment.SetVariable("GLOBAL_cascade", cascade);

            ExpressionScript <string> expressionScript = new ExpressionScript <string> (
                _scriptContext, ScriptLanguageType.Python,
                scriptExpressionSourceCode, privateScriptEnvironment
                );

            // Warm up the DLR
            expressionScript.ExecuteUncompiled();
            ScriptingHelper.ExecuteAndTime("CompiledVsUncompiled (compiled)", nrLoopsArray, () => expressionScript.Execute());
            ScriptingHelper.ExecuteAndTime("CompiledVsUncompiled (uncompiled)", nrLoopsArray, () => expressionScript.ExecuteUncompiled());
        }