Exemplo n.º 1
0
        public async Task kernel_base_ignores_command_line_directives(Language language)
        {
            // The text `[1;2;3;4]` parses as a System.CommandLine directive; ensure it's not consumed and is passed on to the kernel.
            var kernel = CreateKernel(language);

            var source = @"
[1;2;3;4]
|> List.sum";

            await SubmitCode(kernel, source);

            KernelEvents
            .OfType <ReturnValueProduced>()
            .Last()
            .Value
            .Should()
            .Be(10);
        }
Exemplo n.º 2
0
        public async Task PowerShell_native_executable_output_is_collected()
        {
            var kernel = CreateKernel(Language.PowerShell);

            var command = Platform.IsWindows
                ? new SubmitCode("ping.exe -n 1 localhost")
                : new SubmitCode("ping -c 1 localhost");

            await kernel.SendAsync(command);

            var outputs = KernelEvents.OfType <StandardOutputValueProduced>();

            outputs.Should().HaveCountGreaterThan(1);
            outputs.Select(e => e.Value.ToString())
            .First(s => s.Trim().Length > 0)
            .ToLowerInvariant()
            .Should().Match("*ping*data*");
        }
        public async Task PowerShell_native_executable_output_is_collected()
        {
            var kernel = CreateKernel(Language.PowerShell);

            var command = new SubmitCode("dotnet --help");

            await kernel.SendAsync(command);

            var outputs = KernelEvents.OfType <StandardOutputValueProduced>();

            outputs.Should().HaveCountGreaterThan(1);

            string.Join("",
                        outputs
                        .SelectMany(e => e.FormattedValues.Select(v => v.Value))
                        ).ToLowerInvariant()
            .Should()
            .ContainAll("build-server", "restore");
        }
Exemplo n.º 4
0
        public async Task it_returns_completion_list_for_types(Language language)
        {
            var kernel = CreateKernel(language);

            var source = "System.Console."; // same code is valid regardless of the language

            await kernel.SendAsync(new RequestCompletion(source, 15));

            KernelEvents
            .Should()
            .ContainSingle(e => e is CompletionRequestReceived);

            KernelEvents
            .OfType <CompletionRequestCompleted>()
            .Single()
            .CompletionList
            .Should()
            .Contain(i => i.DisplayText == "ReadLine");
        }
Exemplo n.º 5
0
        public async Task it_aggregates_multiple_submissions()
        {
            var repl = await CreateKernelAsync();

            await repl.SendAsync(new SubmitCode("var x = new List<int>{1,2};"));

            await repl.SendAsync(new SubmitCode("x.Add(3);"));

            await repl.SendAsync(new SubmitCode("x.Max()"));

            KernelEvents.OfType <ValueProduced>()
            .Last()
            .Should()
            .BeOfType <ValueProduced>()
            .Which
            .Value
            .Should()
            .Be(3);
        }
Exemplo n.º 6
0
        public async Task expression_evaluated_to_null_has_result_with_null_value(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                // null returned.
                Language.FSharp => "null :> obj",
                Language.CSharp => "null as object"
            };

            await SubmitCode(kernel, source);

            KernelEvents
            .OfType <ReturnValueProduced>()
            .Last()
            .Value
            .Should()
            .BeNull();
        }
        public async Task Display_helper_can_be_called_without_specifying_class_name(Language language)
        {
            var kernel = CreateKernel(language);

            var submission = language switch
            {
                Language.CSharp => "display(b(\"hi!\"));",
                Language.FSharp => "display(b.innerHTML(\"hi!\"));",
            };

            await kernel.SendAsync(new SubmitCode(submission));

            KernelEvents
            .OfType <DisplayedValueProduced>()
            .SelectMany(v => v.FormattedValues)
            .Should()
            .ContainSingle(v =>
                           v.MimeType == "text/html" &&
                           v.Value.ToString().Contains("<b>hi!</b>"));
        }
Exemplo n.º 8
0
        public async Task it_returns_a_similarly_shaped_error(Language language)
        {
            var kernel = CreateKernel(language);

            var(source, error) = language switch
            {
                Language.CSharp => ("using Not.A.Namespace;", "(1,7): error CS0246: The type or namespace name 'Not' could not be found (are you missing a using directive or an assembly reference?)"),
                Language.FSharp => ("open Not.A.Namespace", @"input.fsx (1,6)-(1,9) typecheck error The namespace or module 'Not' is not defined. Maybe you want one of the following:
   Net")
            };

            await SubmitCode(kernel, source);

            KernelEvents
            .OfType <CommandFailed>()
            .Last()
            .Message
            .Should()
            .Be(error);
        }
Exemplo n.º 9
0
        public async Task When_a_chart_is_returned_the_value_produced_has_html_with_the_require_config_call()
        {
            var kernel = CreateKernel();

            kernel.UseXplot();

            await kernel.SendAsync(new SubmitCode("using XPlot.Plotly;"));

            await kernel.SendAsync(new SubmitCode("new PlotlyChart()"));

            KernelEvents
            .OfType <ReturnValueProduced>()
            .Should().
            ContainSingle(valueProduced =>
                          valueProduced.FormattedValues.Any(formattedValue =>
                                                            formattedValue.MimeType == "text/html" &&
                                                            formattedValue.Value.ToString().Contains("var xplotRequire = requirejs.config({context:'xplot-3.0.1',paths:{plotly:'https://cdn.plot.ly/plotly-1.49.2.min'}});") &&
                                                            formattedValue.Value.ToString().Contains("xplotRequire([\'plotly\'], function(Plotly)")
                                                            ));
        }
Exemplo n.º 10
0
        public async Task diagnostics_can_be_produced_from_multiple_subkernels()
        {
            var kernel = CreateCompositeKernel(Language.FSharp);

            var code = @"
#!fsharp
printfnnn """"

#!csharp
Console.WriteLin();
";

            await SubmitCode(kernel, code);

            KernelEvents
            .OfType <DiagnosticsProduced>()
            .SelectMany(dp => dp.Diagnostics)
            .Should()
            .ContainSingle(d => d.Code.StartsWith("CS"))
            .And
            .ContainSingle(d => d.Code.StartsWith("FS"));
        }
Exemplo n.º 11
0
        public async Task it_returns_completion_list_for_previously_declared_items(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                Language.FSharp => @"let alpha = new Random()",
                Language.CSharp => @"var alpha = new Random();",
                Language.PowerShell => @"function alpha { 5 }",
            };

            await SubmitCode(kernel, source);

            await kernel.SendAsync(new RequestCompletions("al", new LinePosition(0, 2)));

            KernelEvents
            .OfType <CompletionsProduced>()
            .Single()
            .Completions
            .Should()
            .Contain(i => i.DisplayText == "alpha");
        }
Exemplo n.º 12
0
        public async Task it_can_load_assembly_references_using_r_directive_separate_submissions(Language language)
        {
            var kernel = CreateKernel(language);

            // F# strings treat \ as an escape character.  So do C# strings, except #r in C# is special, and doesn't.  F# usually uses @ strings for paths @"c:\temp\...."
            var dllPath = new FileInfo(typeof(JsonConvert).Assembly.Location).FullName.Replace('\\', '/');

            var source = language switch
            {
                Language.FSharp => new[]
                {
                    $"#r \"{dllPath}\"",
                    "open Newtonsoft.Json",
                    @"let json = JsonConvert.SerializeObject( struct {| value = ""hello"" |} )",
                    "json"
                },

                Language.CSharp => new[]
                {
                    $"#r \"{dllPath}\"",
                    "using Newtonsoft.Json;",
                    @"var json = JsonConvert.SerializeObject(new { value = ""hello"" });",
                    "json"
                }
            };

            await SubmitCode(kernel, source);

            KernelEvents
            .Should()
            .ContainSingle(e => e is ReturnValueProduced);

            KernelEvents
            .OfType <ReturnValueProduced>()
            .Single()
            .Value
            .Should()
            .Be(new { value = "hello" }.ToJson());
        }
Exemplo n.º 13
0
        public async Task Display_indicates_when_a_value_is_null(Language language)
        {
            var kernel = CreateKernel(language);

            var submission = language switch
            {
                Language.CSharp => "display(null);",
                Language.FSharp => "display(null)"
            };

            await kernel.SendAsync(new SubmitCode(submission));

            KernelEvents.Should().NotContainErrors();

            KernelEvents
            .OfType <DisplayedValueProduced>()
            .SelectMany(v => v.FormattedValues)
            .Should()
            .ContainSingle(v =>
                           v.MimeType == "text/html" &&
                           v.Value.ToString().Contains(Formatter.NullString.HtmlEncode().ToString()));
        }
Exemplo n.º 14
0
        //        [InlineData(Language.FSharp)]                 // Todo: need to generate CompletionRequestReceived event ... perhaps
        public async Task it_returns_completion_list_for_types(Language language)
        {
            var kernel = CreateKernel(language);

            var source = language switch
            {
                Language.FSharp => @"System.Console.",

                Language.CSharp => @"System.Console."
            };

            await kernel.SendAsync(new RequestCompletion(source, 15));

            KernelEvents
            .Should()
            .ContainSingle(e => e is CompletionRequestReceived);

            KernelEvents
            .OfType <CompletionRequestCompleted>()
            .Single()
            .CompletionList
            .Should()
            .Contain(i => i.DisplayText == "ReadLine");
        }
Exemplo n.º 15
0
 private void ListenForPackagesToScanForExtensions() =>
 RegisterForDisposal(KernelEvents
                     .OfType <PackageAdded>()
                     .Where(pa => pa?.PackageReference.PackageRoot != null)
                     .Distinct(pa => pa.PackageReference.PackageRoot)
                     .Subscribe(added => _packagesToCheckForExtensions.Enqueue(added)));