public async Task Kernel_can_pound_r_nuget_using_kernel_client()
        {
            var kernel = new CompositeKernel
            {
                new CSharpKernel().UseNugetDirective(),
            };

            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteMessage(new SubmitCode(@"#r ""nuget:Microsoft.Spark, 0.4.0"""), 1);
            writer.WriteMessage(new Quit(), 2);

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text   = reader.ReadToEnd();
            var events = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(JObject.Parse).ToList();

            events.Should().Contain(e => e["eventType"].Value <string>() == nameof(NuGetPackageAdded));
        }
        public async Task Kernel_can_be_interacted_using_kernel_client()
        {
            var kernel = new CompositeKernel
            {
                new CSharpKernel()
            };

            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteMessage(new SubmitCode(@"var x = 123;"), 1);
            writer.WriteMessage(new SubmitCode("x"), 2);
            writer.WriteMessage(new Quit(), 3);

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text = reader.ReadToEnd();

            this.Assent(text, _configuration);
        }
        public async Task Kernel_client_surfaces_code_submission_Errors()
        {
            var kernel = new CSharpKernel();

            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteMessage(new SubmitCode(@"var a = 12"), 1);
            writer.WriteMessage(new Quit(), 2);
            writer.Flush();

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text   = reader.ReadToEnd();
            var events = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(JObject.Parse).ToList();

            events.Should()
            .Contain(e => e["eventType"].Value <string>() == nameof(IncompleteCodeSubmissionReceived))
            .And
            .Contain(e => e["eventType"].Value <string>() == nameof(CommandFailed));
        }
Beispiel #4
0
        public async Task Kernel_can_be_interacted_using_kernel_client()
        {
            var kernel = new CompositeKernel
            {
                new CSharpKernel()
            };

            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteMessage(new SubmitCode(@"var x = 
123;"));
            writer.WriteMessage(new SubmitCode("x"));
            writer.WriteMessage(new Quit());

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text   = reader.ReadToEnd();
            var events = text.Split(Environment.NewLine)
                         .Select(JsonConvert.DeserializeObject <StreamKernelEvent>);

            events.Should().Contain(e => e.EventType == "ValueProduced");
        }
Beispiel #5
0
        public static async Task <int> Do(
            IKernel kernel,
            IConsole console)
        {
            var client = new KernelStreamClient(kernel, Console.In, Console.Out);
            await client.Start();

            return(0);
        }
Beispiel #6
0
        public static async Task <int> Do(
            StartupOptions startupOptions,
            IKernel kernel,
            IConsole console)
        {
            Program.StartToolLogging(startupOptions);

            var client = new KernelStreamClient(kernel, Console.In, Console.Out);

            await client.Start();

            return(0);
        }
Beispiel #7
0
        public async Task Kernel_can_be_interacted_using_kernel_client()
        {
            var receivedOnFakeRepl = new List <IKernelCommand>();

            var kernel = new CompositeKernel
            {
                new CSharpKernel(),
                new FakeKernel("fake")
                {
                    Handle = context =>
                    {
                        receivedOnFakeRepl.Add(context.Command);
                        return(Task.CompletedTask);
                    }
                }
            };


            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteMessage(new SubmitCode("#kernel csharp"));
            writer.WriteMessage(new SubmitCode(@"var x = 
123;"));
            writer.WriteMessage(new SubmitCode("x"));
            writer.WriteMessage(new Quit());

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text   = reader.ReadToEnd();
            var events = text.Split(Environment.NewLine)
                         .Select(e => JsonConvert.DeserializeObject <StreamKernelEvent>(e));

            events.Should().Contain(e => e.EventType == "ValueProduced");
        }
Beispiel #8
0
        public KernelClientTests(ITestOutputHelper output)
        {
            _output = output;
            var displayIdSeed = 0;

            _configuration = new Configuration()
                             .UsingExtension("json");

            _configuration = _configuration.SetInteractive(Debugger.IsAttached);

            Microsoft.DotNet.Interactive.Kernel.DisplayIdGenerator =
                () => Interlocked.Increment(ref displayIdSeed).ToString();

            var kernel = new CompositeKernel
            {
                new CSharpKernel()
                .UseKernelHelpers()
                .UseNugetDirective()
                .UseDefaultRendering()
            };

            _io = new IOStreams();

            _kernelClient = new KernelStreamClient(
                kernel,
                _io,
                _io);

            _events = _io.OutputStream
                      .Where(s => !string.IsNullOrWhiteSpace(s))
                      .Select(JObject.Parse)
                      .ToSubscribedList();

            _disposables.Add(_kernelClient);
            _disposables.Add(_output.SubscribeToPocketLogger());
            _disposables.Add(kernel.LogEventsToPocketLogger());
            _disposables.Add(kernel);
            _disposables.Add(() => Microsoft.DotNet.Interactive.Kernel.DisplayIdGenerator = null);
        }
        public async Task Kernel_client_surfaces_json_errors()
        {
            var kernel = new CompositeKernel
            {
                new CSharpKernel(),
                new FakeKernel("fake")
                {
                    Handle = context => Task.CompletedTask
                }
            };

            var input  = new MemoryStream();
            var writer = new StreamWriter(input, Encoding.UTF8);

            writer.WriteLine("{ hello");
            writer.WriteMessage(new Quit(), 2);
            writer.Flush();

            input.Position = 0;

            var output = new MemoryStream();

            var streamKernel = new KernelStreamClient(kernel,
                                                      new StreamReader(input),
                                                      new StreamWriter(output));

            var   task = streamKernel.Start();
            await task;

            output.Position = 0;
            var reader = new StreamReader(output, Encoding.UTF8);

            var text = reader.ReadToEnd();

            this.Assent(text, _configuration);
        }