public void WriteFormatStringWithThreeArguments()
        {
            var value = "{0} - {1} + {2}";
            var arg1  = 10;
            var arg2  = 5;
            var arg3  = 7;

            bool eventWasRaised = false;

            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                {
                    eventWasRaised = true;
                    Assert.AreEqual(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            value,
                            arg1,
                            arg2,
                            arg3),
                        e.Text);
                };
                pipe.Write(value, arg1, arg2, arg3);
            }

            Assert.IsTrue(eventWasRaised);
        }
Example #2
0
        public void Execute()
        {
            var filePaths = new List<string>();
            var directoryPaths = new List<string>
                {
                    Assembly.GetExecutingAssembly().LocalDirectoryPath()
                };

            var resolutionPaths = AppDomainResolutionPaths.WithFilesAndDirectories(
                Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath),
                filePaths,
                directoryPaths);
            Func<string, AppDomainPaths, AppDomain> builder = (name, paths) => AppDomainBuilder.Assemble(name, resolutionPaths);

            var projects = new Mock<ILinkToProjects>();
            using (var host = new ScriptHost(projects.Object, builder))
            {
                var output = string.Empty;
                using (var writer = new ScriptOutputPipe())
                {
                    writer.OnScriptOutput += (s, e) => output += e.Text;
                    var tuple = host.Execute(ScriptLanguage.IronPython, "print \"hello\"", writer);

                    Assert.IsTrue(host.IsExecutingScript);

                    tuple.Item1.Wait();
                    Assert.IsFalse(host.IsExecutingScript);
                    Assert.AreEqual("hello" + Environment.NewLine, output);
                }
            }
        }
Example #3
0
        public void Execute()
        {
            var filePaths      = new List <string>();
            var directoryPaths = new List <string>
            {
                Assembly.GetExecutingAssembly().LocalDirectoryPath()
            };

            var resolutionPaths = AppDomainResolutionPaths.WithFilesAndDirectories(
                Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath),
                filePaths,
                directoryPaths);
            Func <string, AppDomainPaths, AppDomain> builder = (name, paths) => AppDomainBuilder.Assemble(name, resolutionPaths);

            var projects = new Mock <ILinkToProjects>();

            using (var host = new ScriptHost(projects.Object, builder))
            {
                var output = string.Empty;
                using (var writer = new ScriptOutputPipe())
                {
                    writer.OnScriptOutput += (s, e) => output += e.Text;
                    var tuple = host.Execute(ScriptLanguage.IronPython, "print \"hello\"", writer);

                    Assert.IsTrue(host.IsExecutingScript);

                    tuple.Item1.Wait();
                    Assert.IsFalse(host.IsExecutingScript);
                    Assert.AreEqual("hello" + Environment.NewLine, output);
                }
            }
        }
        public void WriteFormatStringWithArgumentArray()
        {
            var value = "{0}{1}{2}{3}";
            var arg1  = 10;
            var arg2  = 20;
            var arg3  = 30;
            var arg4  = 40;

            bool eventWasRaised = false;

            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                {
                    eventWasRaised = true;
                    Assert.AreEqual(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            value,
                            arg1,
                            arg2,
                            arg3,
                            arg4),
                        e.Text);
                };
                pipe.Write(value, arg1, arg2, arg3, arg4);
            }

            Assert.IsTrue(eventWasRaised);
        }
Example #5
0
        public void VerifySyntaxWithMultipleSyntaxErrors()
        {
            var projects = new Mock <ILinkScriptsToProjects>();

            using (var writer = new ScriptOutputPipe())
            {
                writer.OnScriptOutput += (s, e) => { };

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "prin 10" + Environment.NewLine + "prin 20";
                var errors = runner.VerifySyntax(script);
                Assert.AreEqual(2, errors.Count());

                var error = errors.First();
                Assert.AreEqual(1, error.Line);
                Assert.AreEqual(6, error.Column);
                Assert.AreEqual(SyntaxVerificationSeverity.Error, error.Severity);

                error = errors.Last();
                Assert.AreEqual(2, error.Line);
                Assert.AreEqual(6, error.Column);
                Assert.AreEqual(SyntaxVerificationSeverity.Error, error.Severity);
            }
        }
        public void ExecuteWithExecutionFailure()
        {
            var projects = new Mock<ILinkScriptsToProjects>();
            using (var writer = new ScriptOutputPipe())
            {
                bool hasOutput = false;
                writer.OnScriptOutput += (s, e) => hasOutput = true;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "foobar()";
                Assert.Throws<ScriptExecutionFailureException>(() => runner.Execute(script, new CancelScriptToken()));
                Assert.IsFalse(hasOutput);
            }
        }
Example #7
0
        public void VerifySyntaxWithoutSyntaxErrors()
        {
            var projects = new Mock <ILinkScriptsToProjects>();

            using (var writer = new ScriptOutputPipe())
            {
                writer.OnScriptOutput += (s, e) => { };

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "print \"Hello\"";
                var errors = runner.VerifySyntax(script);
                Assert.AreEqual(0, errors.Count());
            }
        }
        public void WriteCharacter()
        {
            var value = 'c';
            bool eventWasRaised = false;
            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                    {
                        eventWasRaised = true;
                        Assert.AreEqual(value.ToString(CultureInfo.InvariantCulture), e.Text);
                    };
                pipe.Write(value);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void ExecuteWithOutput()
        {
            var projects = new Mock<ILinkScriptsToProjects>();
            using (var writer = new ScriptOutputPipe())
            {
                var output = string.Empty;
                writer.OnScriptOutput += (s, e) => output += e.Text;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "print \"Hello\"";
                runner.Execute(script, new CancelScriptToken());

                Assert.AreEqual("Hello" + Environment.NewLine, output);
            }
        }
Example #10
0
        public void ExecuteWithExecutionFailure()
        {
            var projects = new Mock <ILinkScriptsToProjects>();

            using (var writer = new ScriptOutputPipe())
            {
                bool hasOutput = false;
                writer.OnScriptOutput += (s, e) => hasOutput = true;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "foobar()";
                Assert.Throws <ScriptExecutionFailureException>(() => runner.Execute(script, new CancelScriptToken()));
                Assert.IsFalse(hasOutput);
            }
        }
Example #11
0
        public void ExecuteWithOutput()
        {
            var projects = new Mock <ILinkScriptsToProjects>();

            using (var writer = new ScriptOutputPipe())
            {
                var output = string.Empty;
                writer.OnScriptOutput += (s, e) => output += e.Text;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "print \"Hello\"";
                runner.Execute(script, new CancelScriptToken());

                Assert.AreEqual("Hello" + Environment.NewLine, output);
            }
        }
        public void WriteUnsignedLong()
        {
            var  value          = 10UL;
            bool eventWasRaised = false;

            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                {
                    eventWasRaised = true;
                    Assert.AreEqual(value.ToString(CultureInfo.InvariantCulture), e.Text);
                };
                pipe.Write(value);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void WriteCharacterArray()
        {
            var value = new[] { 'a', 'b', 'c' };

            bool eventWasRaised = false;
            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                    {
                        eventWasRaised = true;
                        Assert.AreEqual("abc", e.Text);
                    };
                pipe.Write(value);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void WriteObject()
        {
            var  value          = new object();
            bool eventWasRaised = false;

            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                {
                    eventWasRaised = true;
                    Assert.AreEqual(value.ToString(), e.Text);
                };
                pipe.Write(value);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void WritePartOfCharacterArray()
        {
            var value = new[] { 'a', 'b', 'c' };

            bool eventWasRaised = false;

            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                {
                    eventWasRaised = true;
                    Assert.AreEqual("b", e.Text);
                };
                pipe.Write(value, 1, 1);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void ExecuteWithoutOutput()
        {
            var projects = new Mock<ILinkScriptsToProjects>();
            {
                projects.Setup(p => p.NewProject())
                    .Verifiable();
            }

            using (var writer = new ScriptOutputPipe())
            {
                bool hasOutput = false;
                writer.OnScriptOutput += (s, e) => hasOutput = true;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "projects.NewProject()";
                runner.Execute(script, new CancelScriptToken());

                Assert.IsFalse(hasOutput);
                projects.Verify(p => p.NewProject(), Times.Once());
            }
        }
Example #17
0
        public void ExecuteWithoutOutput()
        {
            var projects = new Mock <ILinkScriptsToProjects>();

            {
                projects.Setup(p => p.NewProject())
                .Verifiable();
            }

            using (var writer = new ScriptOutputPipe())
            {
                bool hasOutput = false;
                writer.OnScriptOutput += (s, e) => hasOutput = true;

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "projects.NewProject()";
                runner.Execute(script, new CancelScriptToken());

                Assert.IsFalse(hasOutput);
                projects.Verify(p => p.NewProject(), Times.Once());
            }
        }
        public void WriteObject()
        {
            var value = new object();
            bool eventWasRaised = false;
            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                    {
                        eventWasRaised = true;
                        Assert.AreEqual(value.ToString(), e.Text);
                    };
                pipe.Write(value);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void VerifySyntaxWithoutSyntaxErrors()
        {
            var projects = new Mock<ILinkScriptsToProjects>();
            using (var writer = new ScriptOutputPipe())
            {
                writer.OnScriptOutput += (s, e) => { };

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "print \"Hello\"";
                var errors = runner.VerifySyntax(script);
                Assert.AreEqual(0, errors.Count());
            }
        }
        public void WriteFormatStringWithTwoArguments()
        {
            var value = "{0} - {1}";
            var arg1 = 10;
            var arg2 = 5;

            bool eventWasRaised = false;
            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                    {
                        eventWasRaised = true;
                        Assert.AreEqual(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                value,
                                arg1,
                                arg2),
                            e.Text);
                    };
                pipe.Write(value, arg1, arg2);
            }

            Assert.IsTrue(eventWasRaised);
        }
        public void VerifySyntaxWithMultipleSyntaxErrors()
        {
            var projects = new Mock<ILinkScriptsToProjects>();
            using (var writer = new ScriptOutputPipe())
            {
                writer.OnScriptOutput += (s, e) => { };

                var engine = Python.CreateEngine();
                var runner = new RemoteScriptRunner(projects.Object, writer, engine);

                var script = "prin 10" + Environment.NewLine + "prin 20";
                var errors = runner.VerifySyntax(script);
                Assert.AreEqual(2, errors.Count());

                var error = errors.First();
                Assert.AreEqual(1, error.Line);
                Assert.AreEqual(6, error.Column);
                Assert.AreEqual(SyntaxVerificationSeverity.Error, error.Severity);

                error = errors.Last();
                Assert.AreEqual(2, error.Line);
                Assert.AreEqual(6, error.Column);
                Assert.AreEqual(SyntaxVerificationSeverity.Error, error.Severity);
            }
        }
        public void WriteFormatStringWithArgumentArray()
        {
            var value = "{0}{1}{2}{3}";
            var arg1 = 10;
            var arg2 = 20;
            var arg3 = 30;
            var arg4 = 40;

            bool eventWasRaised = false;
            using (var pipe = new ScriptOutputPipe())
            {
                pipe.OnScriptOutput +=
                    (s, e) =>
                    {
                        eventWasRaised = true;
                        Assert.AreEqual(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                value,
                                arg1,
                                arg2,
                                arg3,
                                arg4),
                            e.Text);
                    };
                pipe.Write(value, arg1, arg2, arg3, arg4);
            }

            Assert.IsTrue(eventWasRaised);
        }