Exemplo n.º 1
0
        public async Task Execute_Should_Return_Continue_State_When_Invalid_Input()
        {
            // arrange
            const string expectedFirstResult  = null;
            const string expectedSecondResult = "test value";

            var firstCode            = $"var testVariable = \"{expectedSecondResult}\";";
            var invalidCode          = "invalid code;";
            var secondCode           = "testVariable";
            var inputCheck           = new Mock <IInputCheck>();
            var scriptOptionsBuilder = new Mock <IScriptOptionsBuilder>();

            var engine = new ReplEngine(inputCheck.Object, scriptOptionsBuilder.Object);

            // act
            var firstResult = await engine.Execute(firstCode);

            var invalidResult = await engine.Execute(invalidCode);

            var secondResult = await engine.Execute(secondCode);

            // assert
            Assert.That(firstResult.Output, Is.EqualTo(expectedFirstResult));
            Assert.That(firstResult.State, Is.EqualTo(OutputState.Valid));

            Assert.That(invalidResult.Output, Is.EqualTo(null));
            Assert.That(invalidResult.State, Is.EqualTo(OutputState.Continue));

            Assert.That(secondResult.Output, Is.EqualTo(expectedSecondResult));
            Assert.That(secondResult.State, Is.EqualTo(OutputState.Valid));
        }
Exemplo n.º 2
0
        public async Task Execute_Should_Continue_When_Not_Complete()
        {
            // arrange
            var codeLines = new List <string>
            {
                "var ",
                "foo =\"bar\";",
                "foo",
            };

            var inputCheck           = new Mock <IInputCheck>();
            var scriptOptionsBuilder = new Mock <IScriptOptionsBuilder>();
            var engine     = new ReplEngine(inputCheck.Object, scriptOptionsBuilder.Object);
            var builder    = new StringBuilder();
            var codeResult = new CodeResult();

            // act
            foreach (var line in codeLines)
            {
                builder.AppendLine(line);

                codeResult = await engine.Execute(builder.ToString());
            }

            // assert
            Assert.That(codeResult.Output, Is.EqualTo("bar"));
            Assert.That(codeResult.State, Is.EqualTo(OutputState.Valid));
        }
Exemplo n.º 3
0
        private IReplEngine CreateEngine(string workingDirectory)
        {
            var replEngine = new ReplEngine(workingDirectory);

            _disposable.Add(replEngine);

            return(replEngine);
        }
Exemplo n.º 4
0
 public static void Main(string[] args)
 {
     if (args == null || args.Length == 0)
     {
         ReplEngine.Start();
     }
     else
     {
     }
 }
Exemplo n.º 5
0
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection();

            services.AddTransient <HttpClient>();
            services.AddSingleton <HttpRepl>();

            var serviceProvider = services.BuildServiceProvider();

            var repl = ActivatorUtilities.CreateInstance <HttpRepl>(serviceProvider);

            var runtime = ReplBuilder.FromInstance(serviceProvider, repl).Build();

            var engine = new ReplEngine(runtime);

            await engine.StartAsync();
        }
Exemplo n.º 6
0
        public async Task Execute_Should_Return_Error_State_When_Invalid_Input_And_Force_Execute()
        {
            // arrange
            var input                = "invalid code with semicolon to force execute ; ";
            var inputCheck           = new Mock <IInputCheck>();
            var scriptOptionsBuilder = new Mock <IScriptOptionsBuilder>();
            var engine               = new ReplEngine(inputCheck.Object, scriptOptionsBuilder.Object);

            inputCheck
            .Setup(i => i.IsForceExecute(input))
            .Returns(true);

            // act
            var codeResult = await engine.Execute(input);

            // assert
            Assert.That(codeResult.Output, Is.EqualTo("(1,14): error CS1002: ; expected"));
            Assert.That(codeResult.State, Is.EqualTo(OutputState.Error));
        }
Exemplo n.º 7
0
        public async Task Execute_Should_Return_Valid_State_When_Single_Input()
        {
            // arrange
            var expectedOutput   = "test output";
            var expectedVariable = "testVariable";

            var code = $"var {expectedVariable} = \"{expectedOutput}\"; testVariable";
            var expectedVariables = new[] { expectedVariable };

            var inputCheck           = new Mock <IInputCheck>();
            var scriptOptionsBuilder = new Mock <IScriptOptionsBuilder>();

            var engine = new ReplEngine(inputCheck.Object, scriptOptionsBuilder.Object);

            // act
            var result = await engine.Execute(code);

            // assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.Output, Is.EqualTo(expectedOutput));
            Assert.That(result.State, Is.EqualTo(OutputState.Valid));
            Assert.That(result.Variables, Is.SupersetOf(expectedVariables));
        }
Exemplo n.º 8
0
        static void Main(string[] args)
        {
            using (var engine = new ReplEngine())
            {
                engine.State.Subscribe(x => Debug.WriteLine("state = " + x.ToString()));
                engine.Output.Subscribe(Console.Write);
                engine.Start("let answer = 42.00;;");

                while (true)
                {
                    var line = Console.ReadLine();

                    if (line == "q!")
                    {
                        break;
                    }

                    engine.Execute(line);
                }
            }

            Console.WriteLine("Press ENTER to close...");
            Console.ReadLine();
        }
        private IReplEngine CreateEngine(string workingDirectory)
        {
            var replEngine = new ReplEngine(workingDirectory);
            _disposable.Add(replEngine);

            return replEngine;
        }