|
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // DotnetInteractiveServiceTest.cs
-
- using FluentAssertions;
- using Xunit;
- using Xunit.Abstractions;
-
- namespace AutoGen.DotnetInteractive.Tests;
-
- public class DotnetInteractiveServiceTest : IDisposable
- {
- private ITestOutputHelper _output;
- private InteractiveService _interactiveService;
- private string _workingDir;
-
- public DotnetInteractiveServiceTest(ITestOutputHelper output)
- {
- _output = output;
- _workingDir = Path.Combine(Path.GetTempPath(), "test", Path.GetRandomFileName());
- if (!Directory.Exists(_workingDir))
- {
- Directory.CreateDirectory(_workingDir);
- }
-
- _interactiveService = new InteractiveService(_workingDir);
- _interactiveService.StartAsync(_workingDir, default).Wait();
- }
-
- public void Dispose()
- {
- _interactiveService.Dispose();
- }
-
- [Fact]
- public async Task ItRunCSharpCodeSnippetTestsAsync()
- {
- var cts = new CancellationTokenSource();
- var isRunning = await _interactiveService.StartAsync(_workingDir, cts.Token);
-
- isRunning.Should().BeTrue();
-
- _interactiveService.IsRunning().Should().BeTrue();
-
- // test code snippet
- var hello_world = @"
- Console.WriteLine(""hello world"");
- ";
-
- await this.TestCSharpCodeSnippet(_interactiveService, hello_world, "hello world");
- await this.TestCSharpCodeSnippet(
- _interactiveService,
- code: @"
- Console.WriteLine(""hello world""
- ",
- expectedOutput: "Error: (2,32): error CS1026: ) expected");
-
- await this.TestCSharpCodeSnippet(
- service: _interactiveService,
- code: "throw new Exception();",
- expectedOutput: "Error: System.Exception: Exception of type 'System.Exception' was thrown");
- }
-
- [Fact]
- public async Task ItRunPowershellScriptTestsAsync()
- {
- // test power shell
- var ps = @"Write-Output ""hello world""";
- await this.TestPowershellCodeSnippet(_interactiveService, ps, "hello world");
- }
-
- private async Task TestPowershellCodeSnippet(InteractiveService service, string code, string expectedOutput)
- {
- var result = await service.SubmitPowershellCodeAsync(code, CancellationToken.None);
- result.Should().StartWith(expectedOutput);
- }
-
- private async Task TestCSharpCodeSnippet(InteractiveService service, string code, string expectedOutput)
- {
- var result = await service.SubmitCSharpCodeAsync(code, CancellationToken.None);
- result.Should().StartWith(expectedOutput);
- }
- }
|