这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using FluentAssertions;
using System.Diagnostics;
using System.Linq;
using FluentAssertions;
using FluentAssertions.Collections;
using FluentAssertions.Execution;

namespace WorkspaceServer.Tests
namespace MLS.Agent.Tools.Tests
{
[DebuggerStepThrough]
public static class AssertionExtensions
{
public static AndConstraint<GenericCollectionAssertions<T>> BeEquivalentSequenceTo<T>(
Expand Down
1 change: 0 additions & 1 deletion MLS.Agent.Tools.Tests/RelativeDirectoryPathTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

using System;
using FluentAssertions;
using MLS.Agent.Tools;
using Xunit;

namespace MLS.Agent.Tools.Tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,33 @@

using System;
using System.Threading.Tasks;
using Clockwise;
using FluentAssertions;
using Microsoft.DotNet.Interactive.Jupyter.Protocol;
using WorkspaceServer.Kernel;
using Xunit;
using Xunit.Abstractions;

namespace Microsoft.DotNet.Interactive.Jupyter.Tests
{
public class CompleteRequestHandlerTests
public class CompleteRequestHandlerTests : JupyterRequestHandlerTestBase<CompleteRequest>
{
private readonly MessageSender _ioPubChannel;
private readonly MessageSender _serverChannel;
private readonly RecordingSocket _serverRecordingSocket;
private readonly RecordingSocket _ioRecordingSocket;
private readonly KernelStatus _kernelStatus;

public CompleteRequestHandlerTests()
{
var signatureValidator = new SignatureValidator("key", "HMACSHA256");
_serverRecordingSocket = new RecordingSocket();
_serverChannel = new MessageSender(_serverRecordingSocket, signatureValidator);
_ioRecordingSocket = new RecordingSocket();
_ioPubChannel = new MessageSender(_ioRecordingSocket, signatureValidator);
_kernelStatus = new KernelStatus();
}

[Fact]
public void cannot_handle_requests_that_are_not_CompleteRequest()
public CompleteRequestHandlerTests(ITestOutputHelper output) : base(output)
{
var kernel = new CSharpKernel();
var handler = new CompleteRequestHandler(kernel);
var request = Message.Create(new DisplayData(), null);
Func<Task> messageHandling = () => handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
messageHandling.Should().ThrowExactly<InvalidOperationException>();
}

[Fact]
public async Task send_completeReply_on_CompleteRequest()
{
var kernel = new CSharpKernel();
var handler = new CompleteRequestHandler(kernel);
var request = Message.Create(new CompleteRequest("System.Console.", 15 ), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
var scheduler = CreateScheduler();
var request = Message.Create(new CompleteRequest("System.Console.", 15), null);
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
message.Contains(MessageTypeValues.CompleteReply));
.Should()
.Contain(message =>
message.Contains(MessageTypeValues.CompleteReply));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,32 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Clockwise;
using FluentAssertions;
using Microsoft.DotNet.Interactive.Commands;
using Microsoft.DotNet.Interactive.Jupyter.Protocol;
using WorkspaceServer.Kernel;
using Xunit;
using Xunit.Abstractions;

namespace Microsoft.DotNet.Interactive.Jupyter.Tests
{
public class ExecuteRequestHandlerTests
public class ExecuteRequestHandlerTests : JupyterRequestHandlerTestBase<ExecuteRequest>
{
private readonly MessageSender _ioPubChannel;
private readonly MessageSender _serverChannel;
private readonly RecordingSocket _serverRecordingSocket;
private readonly RecordingSocket _ioRecordingSocket;
private readonly KernelStatus _kernelStatus;

public ExecuteRequestHandlerTests()
{
var signatureValidator = new SignatureValidator("key", "HMACSHA256");
_serverRecordingSocket = new RecordingSocket();
_serverChannel = new MessageSender(_serverRecordingSocket, signatureValidator);
_ioRecordingSocket = new RecordingSocket();
_ioPubChannel = new MessageSender(_ioRecordingSocket, signatureValidator);
_kernelStatus = new KernelStatus();
}

[Fact]
public void cannot_handle_requests_that_are_not_ExecuteRequest()
public ExecuteRequestHandlerTests(ITestOutputHelper output) : base(output)
{
var kernel = new CSharpKernel();
var handler = new ExecuteRequestHandler(kernel);
var request = Message.Create(new DisplayData(), null);
Func<Task> messageHandling = () => handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
messageHandling.Should().ThrowExactly<InvalidOperationException>();
}

[Fact]
public async Task handles_executeRequest()
{
var kernel = new CSharpKernel();
var handler = new ExecuteRequestHandler(kernel);
var request = Message.Create(new ExecuteRequest("var a =12;"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
}

[Fact]
public async Task sends_ExecuteInput_when_ExecuteRequest_is_handled()
{
var kernel = new CSharpKernel();
var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("var a =12;"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
.Should().Contain(message =>
message.Contains(MessageTypeValues.ExecuteInput));

_serverRecordingSocket.DecodedMessages
Expand All @@ -69,11 +38,11 @@ public async Task sends_ExecuteInput_when_ExecuteRequest_is_handled()
[Fact]
public async Task sends_ExecuteReply_message_on_when_code_submission_is_handled()
{
var kernel = new CSharpKernel();

var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("var a =12;"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
Expand All @@ -83,11 +52,11 @@ public async Task sends_ExecuteReply_message_on_when_code_submission_is_handled(
[Fact]
public async Task sends_ExecuteReply_with_error_message_on_when_code_submission_contains_errors()
{
var kernel = new CSharpKernel();

var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("asdes"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should()
Expand All @@ -103,11 +72,11 @@ public async Task sends_ExecuteReply_with_error_message_on_when_code_submission_
[Fact]
public async Task sends_DisplayData_message_on_ValueProduced()
{
var kernel = new CSharpKernel();

var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("Console.WriteLine(2+2);"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
Expand All @@ -121,11 +90,11 @@ public async Task sends_DisplayData_message_on_ValueProduced()
[Fact]
public async Task sends_ExecuteReply_message_on_ReturnValueProduced()
{
var kernel = new CSharpKernel();

var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("2+2"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
Expand All @@ -139,14 +108,11 @@ public async Task sends_ExecuteReply_message_on_ReturnValueProduced()
[Fact]
public async Task sends_ExecuteReply_message_when_submission_contains_only_a_directive()
{
var kernel = new CompositeKernel
{
new CSharpKernel()
}.UseDefaultMagicCommands();

var handler = new ExecuteRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new ExecuteRequest("%%csharp"), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages
.Should().Contain(message =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,36 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using Clockwise;
using FluentAssertions;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.DotNet.Interactive.Jupyter.Protocol;
using Recipes;
using WorkspaceServer.Kernel;
using Xunit;
using Xunit.Abstractions;

namespace Microsoft.DotNet.Interactive.Jupyter.Tests
{
public class InterruptRequestHandlerTests
public class InterruptRequestHandlerTests : JupyterRequestHandlerTestBase<InterruptRequest>
{
private readonly MessageSender _ioPubChannel;
private readonly MessageSender _serverChannel;
private readonly RecordingSocket _serverRecordingSocket;
private readonly RecordingSocket _ioRecordingSocket;
private readonly KernelStatus _kernelStatus;

public InterruptRequestHandlerTests()
{
var signatureValidator = new SignatureValidator("key", "HMACSHA256");
_serverRecordingSocket = new RecordingSocket();
_serverChannel = new MessageSender(_serverRecordingSocket, signatureValidator);
_ioRecordingSocket = new RecordingSocket();
_ioPubChannel = new MessageSender(_ioRecordingSocket, signatureValidator);
_kernelStatus = new KernelStatus();
}

[Fact]
public void cannot_handle_requests_that_are_not_InterruptRequest()
public InterruptRequestHandlerTests(ITestOutputHelper output) : base(output)
{
var kernel = new CSharpKernel();
var handler = new InterruptRequestHandler(kernel);
var request = Message.Create(new DisplayData(), null);
Func<Task> messageHandling = () => handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
messageHandling.Should().ThrowExactly<InvalidOperationException>();
}

[Fact]
public async Task handles_InterruptRequest()
{
var kernel = new CSharpKernel();
var handler = new InterruptRequestHandler(kernel);
var request = Message.Create(new InterruptRequest(), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
}

[Fact]
public async Task sends_InterruptReply()
{
var kernel = new CSharpKernel();
var handler = new InterruptRequestHandler(kernel);
var scheduler = CreateScheduler();
var request = Message.Create(new InterruptRequest(), null);
await handler.Handle(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));
await scheduler.Schedule(new JupyterRequestContext(_serverChannel, _ioPubChannel, request, _kernelStatus));

await _kernelStatus.Idle();

_serverRecordingSocket.DecodedMessages.SingleOrDefault(message =>
message.Contains(MessageTypeValues.InterruptReply))
.Should()
.NotBeNullOrWhiteSpace();
_serverRecordingSocket.DecodedMessages
.SingleOrDefault(message =>
message.Contains(MessageTypeValues.InterruptReply))
.Should()
.NotBeNullOrWhiteSpace();
}
}
}
Loading