public async Task Handling_kernel_can_be_specified_using_kernel_alias_as_a_directive()
        {
            var cSharpKernel = new CSharpKernel();
            var fSharpKernel = new FSharpKernel();

            using var kernel = new CompositeKernel();
            kernel.Add(cSharpKernel, new[] { "C#" });
            kernel.Add(fSharpKernel, new[] { "F#" });
            kernel.DefaultKernelName = fSharpKernel.Name;

            using var events = kernel.KernelEvents.ToSubscribedList();

            var csharpCommand = new SubmitCode(@"
#!C#
new [] {1,2,3}");
            await kernel.SendAsync(csharpCommand);

            var fsharpCommand = new SubmitCode(@"
#!F#
[1;2;3]");

            await kernel.SendAsync(fsharpCommand);

            events.Should()
            .ContainSingle <CommandSucceeded>(e => e.Command == csharpCommand);
            events.Should()
            .ContainSingle <CommandSucceeded>(e => e.Command == fsharpCommand);
        }
示例#2
0
        protected JupyterRequestHandlerTestBase(ITestOutputHelper output)
        {
            _frontendEnvironment = new JupyterFrontendEnvironment();
            _disposables.Add(output.SubscribeToPocketLogger());
            _cSharpKernel = new CSharpKernel()
                            .UseDefaultFormatting()
                            .UseKernelHelpers()
                            .UseJupyterHelpers()
                            .UseMathAndLaTeX();

            _fSharpKernel = new FSharpKernel()
                            .UseDefaultFormatting()
                            .UseKernelHelpers()
                            .UseDefaultNamespaces()
                            .UseMathAndLaTeX();

            _compositeKernel = new CompositeKernel
            {
                _cSharpKernel,
                _fSharpKernel
            }
            .UseDefaultMagicCommands();

            _compositeKernel.UseFrontedEnvironment(context => _frontendEnvironment);
            SetKernelLanguage(Language.CSharp);
            _compositeKernel.Name = ".NET";

            Kernel = _compositeKernel;

            JupyterMessageSender = new RecordingJupyterMessageSender();

            _disposables.Add(_compositeKernel);
            _disposables.Add(Kernel.LogEventsToPocketLogger());
        }
示例#3
0
        public async Task Handling_kernel_can_be_specified_using_kernel_name_as_a_directive_as_a_proxy_named_pipe()
        {
            var fSharpKernel = new FSharpKernel();

            using var kernel = new CompositeKernel
                  {
                      fSharpKernel
                  }.UseProxyKernel();

            kernel.DefaultKernelName = fSharpKernel.Name;

            var pipeName = Guid.NewGuid().ToString();

            using var cSharpKernel = new CSharpKernel();
            Action doWait = () =>
                            Task.Run(() => NamedPipeKernelServer.WaitForConnection(cSharpKernel, pipeName));

            doWait();

            using var events = kernel.KernelEvents.ToSubscribedList();

            var proxyCommand = new SubmitCode($"#!connect test {pipeName}");

            await kernel.SendAsync(proxyCommand);

            var proxyCommand2 = new SubmitCode(@"
var x = 1 + 1;
x", targetKernelName: "test");

            await kernel.SendAsync(proxyCommand2);

            events.Should()
            .ContainSingle <CommandSucceeded>(e => e.Command == proxyCommand);
        }
示例#4
0
        protected JupyterRequestHandlerTestBase(ITestOutputHelper output)
        {
            _disposables.Add(output.SubscribeToPocketLogger());

            _cSharpKernel = new CSharpKernel()
                            .UseDefaultFormatting()
                            .UseExtendDirective()
                            .UseKernelHelpers();

            _fSharpKernel = new FSharpKernel()
                            .UseDefaultFormatting()
                            .UseKernelHelpers()
                            .UseDefaultNamespaces();

            _compositeKernel = new CompositeKernel
            {
                _cSharpKernel,
                _fSharpKernel
            }
            .UseDefaultMagicCommands()
            .UseExtendDirective();

            SetKernelLanguage(Language.CSharp);
            _compositeKernel.Name = ".NET";

            Kernel = _compositeKernel;

            JupyterMessageSender = new RecordingJupyterMessageSender();

            _disposables.Add(_compositeKernel);
            _disposables.Add(Kernel.LogEventsToPocketLogger());
        }
示例#5
0
        public async Task Handling_kernel_can_be_specified_using_kernel_name_as_a_directive_as_a_proxy_named_pipe()
        {
            var fSharpKernel = new FSharpKernel();

            using var kernel = new CompositeKernel
                  {
                      fSharpKernel
                  }.UseConnection(new ConnectNamedPipe());

            kernel.DefaultKernelName = fSharpKernel.Name;

            var pipeName = Guid.NewGuid().ToString();

            using var remoteKernel = new CSharpKernel();
            StartServer(remoteKernel, pipeName);

            using var events = kernel.KernelEvents.ToSubscribedList();

            var proxyCommand = new SubmitCode($"#!connect named-pipe --kernel-name test --pipe-name {pipeName}");

            await kernel.SendAsync(proxyCommand);

            var proxyCommand2 = new SubmitCode(@"
var x = 1 + 1;
x", targetKernelName: "test");

            await kernel.SendAsync(proxyCommand2);

            events.Should()
            .ContainSingle <CommandSucceeded>(e => e.Command == proxyCommand);
        }
示例#6
0
        public static FSharpKernel UseKernelHelpers(
            this FSharpKernel kernel)
        {
            Task.Run(() =>
                     kernel.SendAsync(new SubmitCode($@"
open {typeof(FSharpKernelHelpers).FullName}
"))).Wait();

            return(kernel);
        }
        public static FSharpKernel UseDefaultRendering(
            this FSharpKernel kernel)
        {
            Task.Run(() =>
                     kernel.SendAsync(
                         new SubmitCode($@"
{ReferenceFromType(typeof(IHtmlContent))}
{ReferenceFromType(typeof(FSharpPocketViewTags))}
open {typeof(FSharpPocketViewTags).FullName}
"))).Wait();

            return(kernel);
        }
示例#8
0
        public static FSharpKernel UseDefaultNamespaces(
            this FSharpKernel kernel)
        {
            Task.Run(() =>
                     kernel.SendAsync(
                         new SubmitCode($@"
open System
open System.Text
open System.Threading.Tasks
open System.Linq
"))).Wait();
            return(kernel);
        }
示例#9
0
        public static FSharpKernel UseVSCodeHelpers(this FSharpKernel kernel)
        {
            var command = new SubmitCode($@"
#r ""{typeof(VSCodeInteractiveHost).Assembly.Location.Replace("\\", "/")}""

[<AutoOpen>]
module VSCodeTopLevelModule =
    let GetInputAsync ( prompt : string ) ( isPassword : bool) = 
        {typeof(VSCodeInteractiveHost).FullName}.{nameof(VSCodeInteractiveHost.GetInputAsync)}( prompt, isPassword ) |> Async.AwaitTask
");

            kernel.DeferCommand(command);
            return(kernel);
        }
示例#10
0
        public static FSharpKernel UseMathAndLaTeX(this FSharpKernel kernel)
        {
            if (kernel is null)
            {
                throw new ArgumentNullException(nameof(kernel));
            }

            kernel.DeferCommand(
                new SubmitCode($@"
#r ""{typeof(LaTeXString).Assembly.Location.Replace("\\", "/")}""
open {typeof(LaTeXString).Namespace}
"));

            return(kernel);
        }
示例#11
0
            public async Task lsmagic_lists_registered_magic_commands_in_subkernels()
            {
                var subkernel1 = new CSharpKernel();

                subkernel1.AddDirective(new Command("#!from-subkernel-1"));
                var subkernel2 = new FSharpKernel();

                subkernel2.AddDirective(new Command("#!from-subkernel-2"));

                using var compositeKernel = new CompositeKernel
                      {
                          subkernel1,
                          subkernel2
                      }
                      .UseDefaultMagicCommands()
                      .LogEventsToPocketLogger();
                compositeKernel.DefaultKernelName = "csharp";

                compositeKernel.AddDirective(new Command("#!from-compositekernel"));

                using var events = compositeKernel.KernelEvents.ToSubscribedList();

                await compositeKernel.SendAsync(new SubmitCode("#!lsmagic"));

                var valueProduceds = events.OfType <DisplayedValueProduced>().ToArray();

                valueProduceds[0].Value
                .ToDisplayString("text/html")
                .Should()
                .ContainAll("#!lsmagic",
                            "#!csharp",
                            "#!fsharp",
                            "#!from-compositekernel");

                valueProduceds[1].Value
                .ToDisplayString("text/html")
                .Should()
                .ContainAll("#!lsmagic",
                            "#!from-subkernel-1");
                valueProduceds[2].Value
                .ToDisplayString("text/html")
                .Should()
                .ContainAll("#!lsmagic",
                            "#!from-subkernel-2");
            }
        private Kernel CreateFSharpKernel(bool openTestingNamespaces)
        {
            var kernel =
                new FSharpKernel()
                .UseDefaultFormatting()
                .UseNugetDirective()
                .UseKernelHelpers()
                .UseDotNetVariableSharing()
                .UseWho()
                .UseDefaultNamespaces();

            if (openTestingNamespaces)
            {
                return(UseExtraNamespacesForFSharpTesting(kernel));
            }
            else
            {
                return(kernel);
            }
        }
        public async Task cell_with_nuget_and_code_continues_executions_on_right_kernel(Language first, Language second)
        {
            var csk =
                new CSharpKernel()
                .UseNugetDirective()
                .UseKernelHelpers()
                .UseWho()
                .LogEventsToPocketLogger();
            var fsk =
                new FSharpKernel()
                .UseDefaultFormatting()
                .UseKernelHelpers()
                .UseWho()
                .UseDefaultNamespaces()
                .LogEventsToPocketLogger();

            using var kernel =
                      new CompositeKernel
                  {
                      first switch { Language.CSharp => csk, Language.FSharp => fsk },
示例#14
0
        protected JupyterRequestHandlerTestBase(ITestOutputHelper output)
        {
            _disposables.Add(output.SubscribeToPocketLogger());
            _cSharpKernel = new CSharpKernel()
                            .UseNugetDirective()
                            .UseKernelHelpers()
                            .UseJupyterHelpers()
                            .UseMathAndLaTeX();

            _fSharpKernel = new FSharpKernel()
                            .UseNugetDirective()
                            .UseDefaultFormatting()
                            .UseKernelHelpers()
                            .UseDefaultNamespaces()
                            .UseMathAndLaTeX();

            _psKernel = new PowerShellKernel()
                        .UseJupyterHelpers();

            _compositeKernel = new CompositeKernel
            {
                _cSharpKernel,
                _fSharpKernel,
                _psKernel,
                new HtmlKernel(),
                new JavaScriptKernel()
            }
            .UseDefaultMagicCommands();

            SetKernelLanguage(Language.CSharp);

            Kernel = _compositeKernel;

            JupyterMessageSender = new RecordingJupyterMessageSender();

            _disposables.Add(_compositeKernel);
            _disposables.Add(Kernel.LogEventsToPocketLogger());
        }
        public void Child_kernels_are_disposed_when_CompositeKernel_is_disposed()
        {
            var csharpKernelWasDisposed = false;
            var fsharpKernelWasDisposed = false;

            var csharpKernel = new CSharpKernel();

            csharpKernel.RegisterForDisposal(() => csharpKernelWasDisposed = true);

            var fsharpKernel = new FSharpKernel();

            fsharpKernel.RegisterForDisposal(() => fsharpKernelWasDisposed = true);

            var compositeKernel = new CompositeKernel
            {
                csharpKernel,
                fsharpKernel
            };

            compositeKernel.Dispose();

            csharpKernelWasDisposed.Should().BeTrue();
            fsharpKernelWasDisposed.Should().BeTrue();
        }
示例#16
0
 public static FSharpKernel UseDefaultRendering(
     this FSharpKernel kernel)
 {
     // noop while the F# kernel is just a wrapper around fsi.exe forcing all return values to be strings
     return(kernel);
 }