Don't create console in package registry

This commit is contained in:
Ravi Chande 2019-06-11 14:41:27 -07:00
Родитель fd07417c7f
Коммит 7a2890f56e
19 изменённых файлов: 141 добавлений и 113 удалений

Просмотреть файл

@ -63,7 +63,7 @@ namespace BasicConsoleApp
("Program.cs", fileContent),
("sample.csproj", "")
};
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var document =
$@"```{language} --source-file Program.cs
```";
@ -81,7 +81,7 @@ $@"```{language} --source-file Program.cs
var testDir = TestAssets.SampleConsole;
var directoryAccessor = new InMemoryDirectoryAccessor(testDir);
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var document = @"
```js --source-file Program.cs
console.log(""Hello World"");
@ -106,7 +106,7 @@ $@"<pre><code class=""{expectedClass}"">Console.WriteLine(&quot;Hello World&quot
var testDir = TestAssets.SampleConsole;
var directoryAccessor = new InMemoryDirectoryAccessor(testDir);
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var document = $@"
```{fenceLanguage}
Console.WriteLine(""Hello World"");
@ -124,7 +124,7 @@ Console.WriteLine(""Hello World"");
{
("sample.csproj", "")
};
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var document =
@"```cs --source-file DOESNOTEXIST
```";
@ -140,7 +140,7 @@ Console.WriteLine(""Hello World"");
{
("Program.cs", "")
};
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var document =
@"```cs --source-file Program.cs
```";
@ -162,7 +162,7 @@ Console.WriteLine(""Hello World"");
var document =
$@"```cs --project {projectPath} --source-file Program.cs
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
html.Should().Contain($"Project not found: ./{projectPath}");
@ -179,7 +179,7 @@ $@"```cs --project {projectPath} --source-file Program.cs
("src/sample/sample.csproj", "")
};
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var package = "../src/sample/sample.csproj";
var document =
@ -212,7 +212,7 @@ $@"```cs --project {package} --source-file ../src/sample/Program.cs
($"src/sample/{projectName}", "")
};
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var package = $"../src/sample/{projectName}";
var document =
@ -316,7 +316,7 @@ namespace BasicConsoleApp
var document =
@"```cs --source-file Program.cs --region codeRegion
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -346,7 +346,7 @@ Console.WriteLine(""Hello World"");
var document =
$@"```cs --source-file {filename} --region codeRegion
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -376,7 +376,7 @@ Console.WriteLine(""Hello World"");
var document =
$@"```cs --source-file {sourceFile} --destination-file {destinationFile} --region codeRegion
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -405,7 +405,7 @@ Console.WriteLine(""Hello World"");
var document =
$@"```cs --source-file Program.cs --region {region}
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -430,7 +430,7 @@ $@"```cs --source-file Program.cs --region {region}
var document =
$@"```cs --source-file Program.cs --region {region}
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -461,7 +461,7 @@ $@"```cs --source-file Program.cs --region {region}
var document =
$@"```cs --source-file Program.cs --region {region}
```";
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder).Build();
var pipeline = new MarkdownPipelineBuilder().UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync()).Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
var htmlDocument = new HtmlDocument();
@ -485,7 +485,7 @@ $@"```cs --source-file Program.cs --region {region}
$@"```cs --source-file Program.cs --session {session}
```";
var pipeline = new MarkdownPipelineBuilder()
.UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder)
.UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync())
.Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();
@ -512,7 +512,7 @@ $@"```cs --source-file Program.cs --region {region}
@"```cs --source-file Program.cs
```";
var pipeline = new MarkdownPipelineBuilder()
.UseCodeBlockAnnotations(directoryAccessor, Default.PackageFinder)
.UseCodeBlockAnnotations(directoryAccessor,await Default.PackageFinder.ValueAsync())
.Build();
var html = (await pipeline.RenderHtmlAsync(document)).EnforceLF();

Просмотреть файл

@ -135,7 +135,7 @@ namespace BasicConsoleApp
```")
};
var project = new MarkdownProject(dirAccessor, Default.PackageFinder);
var project = new MarkdownProject(dirAccessor, await Default.PackageFinder.ValueAsync());
project.TryGetMarkdownFile(new RelativeFilePath("docs/Readme.md"), out var markdownFile).Should().BeTrue();
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml((await markdownFile.ToHtmlContentAsync()).ToString());
@ -524,7 +524,7 @@ This is the end of the file"));
"),
("Program.cs", "")
},
Default.PackageFinder,
await Default.PackageFinder.ValueAsync(),
defaultCodeBlockAnnotations
);
@ -548,7 +548,7 @@ This is the end of the file"));
var markdownProject = new MarkdownProject(
directoryAccessor,
Default.PackageFinder);
await Default.PackageFinder.ValueAsync());
var markdownFile = markdownProject.GetAllMarkdownFiles().Single();
var html = (await markdownFile.ToHtmlContentAsync()).ToString();

Просмотреть файл

@ -19,7 +19,7 @@ namespace MLS.Agent.Tests
public class GetAllMarkdownFiles
{
[Fact]
public void Returns_list_of_all_relative_paths_to_all_markdown_files()
public async Task Returns_list_of_all_relative_paths_to_all_markdown_files()
{
var workingDir = TestAssets.SampleConsole;
var dirAccessor = new InMemoryDirectoryAccessor(workingDir)
@ -29,7 +29,7 @@ namespace MLS.Agent.Tests
("Program.cs", "")
};
var project = new MarkdownProject(dirAccessor, Default.PackageFinder);
var project = new MarkdownProject(dirAccessor, await Default.PackageFinder.ValueAsync());
var files = project.GetAllMarkdownFiles();
@ -42,11 +42,11 @@ namespace MLS.Agent.Tests
public class TryGetMarkdownFile
{
[Fact]
public void Returns_false_for_nonexistent_file()
public async Task Returns_false_for_nonexistent_file()
{
var workingDir = TestAssets.SampleConsole;
var dirAccessor = new InMemoryDirectoryAccessor(workingDir);
var project = new MarkdownProject(dirAccessor, Default.PackageFinder);
var project = new MarkdownProject(dirAccessor, await Default.PackageFinder.ValueAsync());
var path = new RelativeFilePath("DOESNOTEXIST");
project.TryGetMarkdownFile(path, out _).Should().BeFalse();
@ -70,7 +70,7 @@ namespace MLS.Agent.Tests
("../Project1/Console1.csproj", @""),
("../Project2/Console2.csproj", @"")
},
Default.PackageFinder);
await Default.PackageFinder.ValueAsync());
var markdownFiles = project.GetAllMarkdownFiles();

Просмотреть файл

@ -2,6 +2,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Linq;
namespace MLS.Agent.Tools
{
@ -11,7 +12,7 @@ namespace MLS.Agent.Tools
{
if (result.ExitCode != 0)
{
throw new CommandLineInvocationException(result, message ?? string.Join("\n", result.Error));
throw new CommandLineInvocationException(result, message ?? string.Join("\n", result.Error.Concat(result.Output)));
}
}
}

Просмотреть файл

@ -36,7 +36,7 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task Run_starts_the_kestrel_server_and_provides_a_WebServer_feature_that_can_receive_requests()
{
var registry = Default.PackageFinder;
var registry = await Default.PackageFinder.ValueAsync();
var server = new RoslynWorkspaceServer(registry);
var package = await registry.Get<Package>("aspnet.webapi");
await package.CreateRoslynWorkspaceAsync(new Budget()); // ensure the package exists on disk

Просмотреть файл

@ -4,20 +4,50 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Clockwise;
using MLS.Agent.Tools;
using WorkspaceServer.Packaging;
namespace WorkspaceServer.Tests
{
public static class Default
public class Default
{
public static PackageRegistry PackageFinder { get; } = PackageRegistry.CreateForHostedMode();
public static AsyncLazy<PackageRegistry> PackageFinder { get; } = new AsyncLazy<PackageRegistry>(async () =>
{
var _ = await _lazyConsolePackage.ValueAsync();
return PackageRegistry.CreateForHostedMode();
});
public static async Task<Package> ConsoleWorkspace() => await PackageFinder.Get<Package>("console");
public static async Task<Package> WebApiWorkspace() => await PackageFinder.Get<Package>("aspnet.webapi");
public static AsyncLazy<Package> _lazyConsolePackage = new AsyncLazy<Package>(async () =>
{
var packageBuilder = new PackageBuilder("console");
packageBuilder.CreateUsingDotnet("console");
packageBuilder.TrySetLanguageVersion("8.0");
packageBuilder.AddPackageReference("Newtonsoft.Json");
var package = packageBuilder.GetPackage() as Package;
await package.CreateRoslynWorkspaceForRunAsync(new Budget());
return package;
});
public static async Task<Package> XunitWorkspace() => await PackageFinder.Get<Package>("xunit");
public static Task<Package> ConsoleWorkspace() => _lazyConsolePackage.ValueAsync();
public static async Task<Package> NetstandardWorkspace() => await PackageFinder.Get<Package>("blazor-console");
public static async Task<Package> WebApiWorkspace()
{
var finder = await PackageFinder.ValueAsync();
return await finder.Get<Package>("aspnet.webapi");
}
public static async Task<Package> XunitWorkspace()
{
var finder = await PackageFinder.ValueAsync();
return await finder.Get<Package>("xunit");
}
public static async Task<Package> NetstandardWorkspace()
{
var finder = await PackageFinder.ValueAsync();
return await finder.Get<Package>("blazor-console");
}
}
}

Просмотреть файл

@ -32,7 +32,7 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task When_run_fails_to_compile_then_diagnostics_are_aligned_with_buffer_span()
{
var server = GetCodeCompiler();
var server = await GetCodeCompilerAsync();
var workspace = new Workspace(
workspaceType: "blazor-console",
@ -54,7 +54,7 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task Compile_with_active_buffer_id_includes_diagnostics_on_edge_of_region()
{
var server = GetCodeCompiler();
var server = await GetCodeCompilerAsync();
var workspace = new Workspace(
workspaceType: "blazor-console",
@ -75,7 +75,7 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task Compile_can_succeed_and_run()
{
var server = GetCodeCompiler();
var server = await GetCodeCompilerAsync();
var workspace = new Workspace(
workspaceType: "blazor-console",
@ -96,6 +96,6 @@ namespace WorkspaceServer.Tests
main.Invoke(null, new [] { new string[] { } });
}
protected ICodeCompiler GetCodeCompiler() => new RoslynWorkspaceServer(Default.PackageFinder);
protected async Task<ICodeCompiler> GetCodeCompilerAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
}
}

Просмотреть файл

@ -181,7 +181,7 @@ namespace WorkspaceServer.Tests
//[InlineData("blazor-nodatime.api", true, Skip = "Requires package design changes")]
public async Task CanSupportBlazor_indicates_whether_the_package_supports_Wasm_runner(string packageName, bool expected)
{
var registry = Default.PackageFinder;
var registry = await Default.PackageFinder.ValueAsync();
var package = await registry.Get<ICanSupportWasm>(packageName);
package.CanSupportWasm.Should().Be(expected);
}

Двоичный файл не отображается.

Просмотреть файл

@ -28,16 +28,16 @@ namespace WorkspaceServer.Tests
var ws = new Workspace(buffers: new[] { new Buffer("file.csx", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "file.csx");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetDiagnostics(request);
result.Diagnostics.Should().NotBeEmpty();
result.Diagnostics.Should().Contain(diagnostics => diagnostics.Message == "file.csx(1,1): error CS0103: The name \'addd\' does not exist in the current context");
}
protected override ILanguageService GetLanguageService() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ILanguageService> GetLanguageServiceAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
protected override ICodeCompiler GetCodeCompiler() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ICodeCompiler> GetCodeCompilerAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
protected override ICodeRunner GetCodeRunner() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ICodeRunner> GetCodeRunnerAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
}
}

Просмотреть файл

@ -50,7 +50,7 @@ public class Program
var ws = new Workspace(buffers: new[] { new Buffer("file.csx", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "file.csx");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Should().NotBeNull();
result.Signatures.Should().BeNullOrEmpty();
@ -87,7 +87,7 @@ public class Program
var (processed, markLocation) = CodeManipulation.ProcessMarkup(code);
var ws = new Workspace( buffers: new[] { new Buffer("file.csx", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "file.csx");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeEmpty();
result.Signatures.First().Label.Should().Be("IEnumerable<TSource> Enumerable.Take<TSource>(IEnumerable<TSource> source, int count)");
@ -101,7 +101,7 @@ public class Program
var ws = new Workspace(buffers: new[] { new Buffer("default.cs", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "default.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
@ -114,7 +114,7 @@ public class Program
var (processed, markLocation) = CodeManipulation.ProcessMarkup("var xa = 3;\n$$a");
var ws = new Workspace(buffers: new[] { new Buffer("default.cs", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "default.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
@ -146,7 +146,7 @@ public class Program
var request = new WorkspaceRequest(ws, activeBufferId: "program.cs@nesting");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeEmpty();
@ -165,7 +165,7 @@ public class Program
var ws = new Workspace(buffers: new[] { new Buffer("program.cs", processed, markLocation) });
var request = new WorkspaceRequest(ws, activeBufferId: "program.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeEmpty();
result.Signatures.First().Label.Should().Be("void C.Foo()");
@ -176,7 +176,7 @@ public class Program
{
var ws = new Workspace(buffers: new[] { new Buffer("default.cs", "System.Threading.Tasks.", 23) });
var request = new WorkspaceRequest(ws, activeBufferId: "default.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
var taskCompletionItem = result.Items.First(i => i.DisplayText == "Task");
@ -193,7 +193,7 @@ public class Program
var request = new WorkspaceRequest(ws, activeBufferId: "program.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
@ -207,7 +207,7 @@ public class Program
var request = new WorkspaceRequest(ws, activeBufferId: "program.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);

Просмотреть файл

@ -52,7 +52,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: new BufferId("Program.cs", "code"));
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetDiagnostics(request);
result.Diagnostics.Should().NotBeNullOrEmpty();
@ -91,7 +91,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "Program.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetDiagnostics(request);
result.Diagnostics.Should().NotBeNullOrEmpty();
@ -151,7 +151,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetDiagnostics(request);
result.Diagnostics.Should().NotBeNullOrEmpty();

Просмотреть файл

@ -72,7 +72,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
result.Items.Should().NotContain(signature => string.IsNullOrEmpty(signature.Kind));
@ -133,7 +133,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
@ -196,7 +196,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Should().NotBeNull();
@ -269,7 +269,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs@codeRegion");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
@ -339,7 +339,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs@codeRegion");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().NotBeNullOrEmpty();
result.Items.Should().NotContain(signature => string.IsNullOrEmpty(signature.Kind));
@ -389,7 +389,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs@codeRegion");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetCompletionList(request);
result.Items.Should().BeEmpty();
}
@ -453,7 +453,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeNullOrEmpty();
@ -512,7 +512,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Should().NotBeNull();
result.Signatures.Should().BeNullOrEmpty();
@ -576,7 +576,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs@codeRegion");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeNullOrEmpty();
@ -643,7 +643,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs@codeRegion");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeNullOrEmpty();
@ -702,7 +702,7 @@ namespace FibonacciTest
});
var request = new WorkspaceRequest(workspace, activeBufferId: "generators/FibonacciGenerator.cs");
var server = GetLanguageService();
var server = await GetLanguageServiceAsync();
var result = await server.GetSignatureHelp(request);
result.Signatures.Should().NotBeNullOrEmpty();

Просмотреть файл

@ -4,6 +4,7 @@
using WorkspaceServer.Packaging;
using WorkspaceServer.Servers.Roslyn;
using Xunit.Abstractions;
using System.Threading.Tasks;
namespace WorkspaceServer.Tests
{
@ -13,10 +14,10 @@ namespace WorkspaceServer.Tests
{
}
protected override ILanguageService GetLanguageService() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ILanguageService> GetLanguageServiceAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
protected override ICodeCompiler GetCodeCompiler() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ICodeCompiler> GetCodeCompilerAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
protected override ICodeRunner GetCodeRunner() => new RoslynWorkspaceServer(Default.PackageFinder);
protected override async Task<ICodeRunner> GetCodeRunnerAsync() => new RoslynWorkspaceServer(await Default.PackageFinder.ValueAsync());
}
}

Просмотреть файл

@ -28,12 +28,12 @@ namespace WorkspaceServer.Tests
Workspace.FromSource(text, workspaceType: "script");
protected override ILanguageService GetLanguageService() =>
protected override Task<ILanguageService> GetLanguageServiceAsync() =>
throw new NotImplementedException();
protected override ICodeCompiler GetCodeCompiler() => throw new NotImplementedException();
protected override Task<ICodeCompiler> GetCodeCompilerAsync() => throw new NotImplementedException();
protected override ICodeRunner GetCodeRunner() => new ScriptingWorkspaceServer();
protected override Task<ICodeRunner> GetCodeRunnerAsync() => Task.FromResult<ICodeRunner>(new ScriptingWorkspaceServer());
[Fact]
public async Task Response_shows_fragment_return_value()
@ -43,7 +43,7 @@ namespace WorkspaceServer.Tests
var person = new { Name = ""Jeff"", Age = 20 };
$""{person.Name} is {person.Age} year(s) old""", "script");
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -63,7 +63,7 @@ $""{person.Name} is {person.Age} year(s) old""", "script");
{
var workspace = Workspace.FromSource(@"
Console.WriteLine(banana);", "script");
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -93,7 +93,7 @@ public static class Hello
workspaceType: "script",
usings: new[] { "System.Threading" });
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -118,7 +118,7 @@ public static class Hello
Console.WriteLine(""Hello there!"");
}
}", workspaceType: "script");
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -138,7 +138,7 @@ public static class Hello
Console.WriteLine(""Hello there!"");
}
}", workspaceType: "script");
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -165,7 +165,7 @@ public static class Hello
workspaceType: "script",
files: new[] { new File("Main.cs", fileCode) },
buffers: new[] { new Buffer(@"Main.cs@toReplace", @"Console.WriteLine(""Hello there!"");", 0) });
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
@ -191,7 +191,7 @@ public static class Hello
files: new[] { new File("Main.cs", fileCode) },
buffers: new[] { new Buffer(@"Main.cs@toReplace", @"Console.WriteLine(banana);", 0) });
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(new WorkspaceRequest(workspace));
result.Should().BeEquivalentTo(new

Просмотреть файл

@ -20,7 +20,6 @@ namespace WorkspaceServer.Tests
public class WorkspaceServerRegistryTests : IDisposable
{
private readonly CompositeDisposable _disposables = new CompositeDisposable();
private readonly PackageRegistry _registry = Default.PackageFinder;
public WorkspaceServerRegistryTests(ITestOutputHelper output)
{
@ -35,10 +34,11 @@ namespace WorkspaceServer.Tests
{
var packageName = PackageUtilities.CreateDirectory(nameof(Workspaces_can_be_registered_to_be_created_using_dotnet_new)).Name;
_registry.Add(packageName,
var registry = await Default.PackageFinder.ValueAsync();
registry.Add(packageName,
options => options.CreateUsingDotnet("console"));
var package = await _registry.Get<ICreateWorkspaceForRun>(packageName);
var package = await registry.Get<ICreateWorkspaceForRun>(packageName);
var workspace = await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds()));
@ -51,7 +51,8 @@ namespace WorkspaceServer.Tests
{
var unregisteredWorkspace = await Default.ConsoleWorkspace();
var package = await _registry.Get<ICreateWorkspaceForRun>(unregisteredWorkspace.Name);
var registry = await Default.PackageFinder.ValueAsync();
var package = await registry.Get<ICreateWorkspaceForRun>(unregisteredWorkspace.Name);
var workspace = await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds()));
@ -61,8 +62,9 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task When_workspace_was_not_registered_then_GetWorkspaceServer_will_return_a_working_server()
{
var registry = await Default.PackageFinder.ValueAsync();
var unregisteredWorkspace = await Default.ConsoleWorkspace();
var server = new RoslynWorkspaceServer(_registry);
var server = new RoslynWorkspaceServer(registry);
var workspaceRequest = WorkspaceRequestFactory.CreateRequestFromDirectory(unregisteredWorkspace.Directory, unregisteredWorkspace.Name);
@ -80,14 +82,15 @@ namespace WorkspaceServer.Tests
var childDirectory = parentDirectory.CreateSubdirectory(workspaceName);
_registry.Add(
var registry = await Default.PackageFinder.ValueAsync();
registry.Add(
workspaceName,
builder =>
{
builder.Directory = childDirectory;
});
var workspace = await _registry.Get<IHaveADirectory>(workspaceName);
var workspace = await registry.Get<IHaveADirectory>(workspaceName);
workspace.Directory.Should().Be(childDirectory);
}

Просмотреть файл

@ -26,7 +26,7 @@ namespace WorkspaceServer.Tests
{
using (LogEvents.Subscribe(e => Console.WriteLine(e.ToLogString())))
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var result = await server.Run(
new WorkspaceRequest(
@ -49,7 +49,7 @@ namespace WorkspaceServer.Tests
[Fact]
public async Task Response_indicates_when_compile_is_successful_and_signature_is_like_a_console_app()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource(@"
using System;
@ -74,7 +74,7 @@ public static class Hello
{
var output = nameof(Response_shows_program_output_when_compile_is_successful_and_signature_is_like_a_console_app);
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource($@"
using System;
@ -96,7 +96,7 @@ public static class Hello
[Fact]
public async Task Response_shows_program_output_when_compile_is_successful_and_signature_is_a_fragment_containing_console_output()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
var person = new { Name = ""Jeff"", Age = 20 };
@ -112,7 +112,7 @@ Console.Write(s);");
[Fact]
public async Task When_compile_is_unsuccessful_then_no_exceptions_are_shown()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine(banana);");
@ -125,7 +125,7 @@ Console.WriteLine(banana);");
[Fact]
public async Task When_compile_is_unsuccessful_then_diagnostics_are_displayed_in_output()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine(banana);");
@ -140,7 +140,7 @@ Console.WriteLine(banana);");
[Fact]
public async Task Multi_line_console_output_is_captured_correctly_a()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine(1);
@ -157,7 +157,7 @@ Console.WriteLine(4);");
[Fact]
public async Task Multi_line_console_output_is_captured_correctly()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine(1);
@ -175,7 +175,7 @@ Console.WriteLine(4);");
public async Task Whitespace_is_preserved_in_multi_line_output()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine();
@ -192,7 +192,7 @@ Console.WriteLine(2);");
[Fact]
public async Task Multi_line_console_output_is_captured_correctly_when_an_exception_is_thrown()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
Console.WriteLine(1);
@ -214,7 +214,7 @@ Console.WriteLine(4);");
[Fact]
public async Task When_the_users_code_throws_on_first_line_then_it_is_returned_as_an_exception_property()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"throw new Exception(""oops!"");");
@ -227,7 +227,7 @@ Console.WriteLine(4);");
[Fact]
public async Task When_the_users_code_throws_on_subsequent_line_then_it_is_returned_as_an_exception_property()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var request = CreateWorkspaceWithMainContaining(@"
throw new Exception(""oops!"");");
@ -241,7 +241,7 @@ throw new Exception(""oops!"");");
[Fact]
public async Task When_a_public_void_Main_with_no_parameters_is_present_it_is_invoked()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource(@"
using System;
@ -262,7 +262,7 @@ public static class Hello
[Fact]
public async Task When_a_public_void_Main_with_parameters_is_present_it_is_invoked()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource(@"
using System;
@ -283,7 +283,7 @@ public static class Hello
[Fact]
public async Task When_an_internal_void_Main_with_no_parameters_is_present_it_is_invoked()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource(@"
using System;
@ -306,7 +306,7 @@ public static class Hello
[Fact]
public async Task When_an_internal_void_Main_with_parameters_is_present_it_is_invoked()
{
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = Workspace.FromSource(@"
using System;
@ -331,7 +331,7 @@ public static class Hello
{
var output = nameof(Response_shows_warnings_with_successful_compilation);
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = CreateWorkspaceWithMainContaining($@"
using System;
@ -358,7 +358,7 @@ public static class Hello
{
var output = nameof(Response_shows_warnings_when_compilation_fails);
var server = GetCodeRunner();
var server = await GetCodeRunnerAsync();
var workspace = CreateWorkspaceWithMainContaining($@"
using System;

Просмотреть файл

@ -2,6 +2,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Threading.Tasks;
using Pocket;
using Xunit.Abstractions;
@ -18,10 +19,10 @@ namespace WorkspaceServer.Tests
public void Dispose() => _disposables.Dispose();
protected abstract ILanguageService GetLanguageService();
protected abstract Task<ILanguageService> GetLanguageServiceAsync();
protected abstract ICodeCompiler GetCodeCompiler();
protected abstract Task<ICodeCompiler> GetCodeCompilerAsync();
protected abstract ICodeRunner GetCodeRunner();
protected abstract Task<ICodeRunner> GetCodeRunnerAsync();
}
}

Просмотреть файл

@ -182,14 +182,6 @@ namespace WorkspaceServer
createRebuildablePackages: false,
packageFinders: finders);
registry.Add("console",
packageBuilder =>
{
packageBuilder.CreateUsingDotnet("console");
packageBuilder.TrySetLanguageVersion("8.0");
packageBuilder.AddPackageReference("Newtonsoft.Json");
});
registry.Add("nodatime.api",
packageBuilder =>
{