public async Task when_a_KernelCommand_is_sent_it_writes_a_KernelCommandEnvelope() { var kernelCommand = new SubmitCode("x=1"); var buffer = new StringBuilder(); var sender = new KernelCommandAndEventTextStreamSender(new StringWriter(buffer)); await sender.SendAsync(kernelCommand, CancellationToken.None); var envelopeMessage = buffer.ToString(); envelopeMessage.Should() .BeEquivalentTo(KernelCommandEnvelope.Serialize(KernelCommandEnvelope.Create(kernelCommand)) + KernelCommandAndEventTextStreamSender.Delimiter); }
private async Task <Kernel> CreateProxyKernel(Language language) { var psi = new ProcessStartInfo { FileName = "dotnet-interactive", Arguments = $"stdio --default-kernel {language.LanguageName()}", WorkingDirectory = Directory.GetCurrentDirectory(), RedirectStandardInput = true, RedirectStandardOutput = true, UseShellExecute = false, }; var process = new Process { StartInfo = psi }; TaskCompletionSource <bool> ready = new(); process.Start(); var receiver = new KernelCommandAndEventTextReceiver(process.StandardOutput); var sender = new KernelCommandAndEventTextStreamSender(process.StandardInput); var kernel = new ProxyKernel("proxy", receiver, sender); kernel.RegisterForDisposal(() => { process.Kill(true); process.Dispose(); }); var _ = kernel.RunAsync(); var sub = kernel.KernelEvents.OfType <KernelReady>().Subscribe(_ => { ready.SetResult(true); }); await ready.Task; sub.Dispose(); return(kernel); }