public async Task A_script_snippet_workspace_can_be_used_to_get_completions() { var(processed, position) = WorkspaceServer.Tests.CodeManipulation.ProcessMarkup("Console.$$"); using (var agent = new AgentService()) { var json = new WorkspaceRequest( requestId: "TestRun", activeBufferId: "default.cs", workspace: Workspace.FromSource( processed, "script", id: "default.cs", position: position)) .ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/workspace/completion") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <CompletionResult>(); result.Items.Should().ContainSingle(item => item.DisplayText == "WriteLine"); } }
public async Task Can_extract_regions_from_files() { using (var agent = new AgentService()) { var json = new CreateRegionsFromFilesRequest( "testRun", new[] { new SourceFile( "program.cs", "#region one\n#endregion\n#region two\nvar a = 1;\n#endregion") }).ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/project/files/regions") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <CreateRegionsFromFilesResponse>(); result.Should().NotBeNull(); result.Regions.Should().Contain(p => p.Content == string.Empty && p.Id.Contains("one") && p.Id.Contains("program.cs")); result.Regions.Should().Contain(p => p.Content == "var a = 1;" && p.Id.Contains("two") && p.Id.Contains("program.cs")); } }
private static async Task <HttpResponseMessage> Call( string relativeUrl, string requestBody, int?timeoutMs = null, StartupOptions options = null) { HttpResponseMessage response; using (var agent = new AgentService(options ?? StartupOptions.FromCommandLine("hosted"))) { var request = new HttpRequestMessage( HttpMethod.Post, relativeUrl) { Content = new StringContent( requestBody, Encoding.UTF8, "application/json") }; if (timeoutMs != null) { request.Headers.Add("Timeout", timeoutMs.Value.ToString("F0")); } response = await agent.SendAsync(request); } return(response); }
public async Task XForwardedPathBase_is_prepended_to_request_url() { using (var service = new AgentService()) { var message = new HttpRequestMessage(HttpMethod.Get, "/"); message.Headers.Add("X-Forwarded-PathBase", "/LocalCodeRunner/blazor-console"); var expected = @"<!DOCTYPE html> <html> <head> <meta charset=""utf-8"" /> <meta name=""viewport"" content=""width=device-width""> <base href=""/LocalCodeRunner/blazor-console/"" /> </head> <body> <app>Loading...</app> <script src=""interop.js""></script> <script src=""_framework/blazor.webassembly.js""></script> </body> </html> "; var result = await service.SendAsync(message); var content = await result.Content.ReadAsStringAsync(); content.Should().Be(expected); } }
public static Task <HttpResponseMessage> GetAsync( this AgentService service, string uri, string referer = null) { var message = new HttpRequestMessage(HttpMethod.Get, uri); if (referer != null) { message.Headers.Add("referer", referer); } return(service.SendAsync(message)); }
public async Task When_they_run_a_snippet_then_they_get_diagnostics_for_the_first_line() { await Default.ConsoleWorkspace(); var output = Guid.NewGuid().ToString(); using (var agent = new AgentService()) { var json = new WorkspaceRequest( Workspace.FromSource( $@"Console.WriteLine(""{output}""".EnforceLF(), workspaceType: "script"), requestId: "TestRun") .ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/workspace/run") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <RunResult>(); var diagnostics = result.GetFeature <Diagnostics>(); diagnostics.Should().Contain(d => d.Start == 56 && d.End == 56 && d.Message == "(1,57): error CS1026: ) expected" && d.Id == "CS1026"); } }
public async Task A_script_snippet_workspace_can_be_used_to_get_diagnostics() { await Default.ConsoleWorkspace(); var log = new LogEntryList(); var(processed, position) = CodeManipulation.ProcessMarkup("adddd"); using (LogEvents.Subscribe(log.Add)) using (var agent = new AgentService()) { var json = new WorkspaceRequest( requestId: "TestRun", activeBufferId: "default.cs", workspace: Workspace.FromSource( processed, "script", id: "default.cs", position: position)) .ToJson(); var request = new HttpRequestMessage(HttpMethod.Post, @"/workspace/diagnostics") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <DiagnosticResult>(); result.Diagnostics.Should().NotBeNullOrEmpty(); result.Diagnostics.Should().Contain(signature => signature.Message == "default.cs(1,1): error CS0103: The name \'adddd\' does not exist in the current context"); } }
public async Task A_script_snippet_workspace_can_be_used_to_get_signature_help() { await Default.ConsoleWorkspace(); var log = new LogEntryList(); var(processed, position) = CodeManipulation.ProcessMarkup("Console.WriteLine($$)"); using (LogEvents.Subscribe(log.Add)) using (var agent = new AgentService()) { var json = new WorkspaceRequest( requestId: "TestRun", activeBufferId: "default.cs", workspace: Workspace.FromSource( processed, "script", id: "default.cs", position: position)) .ToJson(); var request = new HttpRequestMessage(HttpMethod.Post, @"/workspace/signaturehelp") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <SignatureHelpResult>(); result.Signatures.Should().NotBeNullOrEmpty(); result.Signatures.Should().Contain(signature => signature.Label == "void Console.WriteLine(string format, params object[] arg)"); } }
public async Task A_console_project_can_be_used_to_get_diagnostics() { await Default.ConsoleWorkspace(); #region bufferSources var program = @"using System; using System.Linq; namespace FibonacciTest { public class Program { public static void Main() { foreach (var i in FibonacciGenerator.Fibonacci().Take(20)) { Console.WriteLine(i); } } } }".EnforceLF(); var generator = @"using System.Collections.Generic; using System; namespace FibonacciTest { public static class FibonacciGenerator { public static IEnumerable<int> Fibonacci() { int current = 1, next = 1; while (true) { adddd yield return current; next = current + (current = next); Cons$$ } } } }".EnforceLF(); #endregion var(processed, position) = CodeManipulation.ProcessMarkup(generator); var log = new LogEntryList(); using (LogEvents.Subscribe(log.Add)) using (var agent = new AgentService()) { var json = new WorkspaceRequest(activeBufferId: "generators/FibonacciGenerator.cs", requestId: "TestRun", workspace: Workspace.FromSources( "console", language: "csharp", ("Program.cs", program, 0), ("generators/FibonacciGenerator.cs", processed, position) )).ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/workspace/diagnostics") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <DiagnosticResult>(); result.Diagnostics.Should().NotBeNullOrEmpty(); result.Diagnostics.Should().Contain(diagnostic => diagnostic.Message == "generators/FibonacciGenerator.cs(12,17): error CS0246: The type or namespace name \'adddd\' could not be found (are you missing a using directive or an assembly reference?)"); } }
public async Task A_console_project_can_be_used_to_get_type_completion_with_a_space_in_the_name() { await Default.ConsoleWorkspace(); #region bufferSources var program = @"using System; using System.Linq; namespace FibonacciTest { public class Program { public static void Main() { foreach (var i in FibonacciGenerator.Fibonacci().Take(20)) { Console.WriteLine(i); } } } }".EnforceLF(); var generator = @"using System.Collections.Generic; using System; namespace FibonacciTest { public static class FibonacciGenerator { public static IEnumerable<int> Fibonacci() { int current = 1, next = 1; while (true) { yield return current; next = current + (current = next); Cons$$ } } } }".EnforceLF(); #endregion var package = await PackageUtilities.Copy(await Default.ConsoleWorkspace(), "a space"); var(processed, position) = CodeManipulation.ProcessMarkup(generator); var log = new LogEntryList(); using (LogEvents.Subscribe(log.Add)) using (var agent = new AgentService()) { var json = new WorkspaceRequest(activeBufferId: "generators/FibonacciGenerator.cs", requestId: "TestRun", workspace: Workspace.FromSources( package.Name, language: "csharp", ("Program.cs", program, 0), ("generators/FibonacciGenerator.cs", processed, position) )).ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/workspace/completion") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <CompletionResult>(); result.Items.Should().NotBeNullOrEmpty(); result.Items.Should().Contain(completion => completion.SortText == "Console"); } }
public async Task A_console_workspace_can_be_used_to_get_signature_help() { await Default.ConsoleWorkspace(); #region bufferSources var program = @"using System; using System.Linq; namespace FibonacciTest { public class Program { public static void Main() { foreach (var i in FibonacciGenerator.Fibonacci().Take(20)) { Console.WriteLine(i); } } } }".EnforceLF(); var generator = @"using System.Collections.Generic; using System; namespace FibonacciTest { public static class FibonacciGenerator { public static IEnumerable<int> Fibonacci() { int current = 1, next = 1; while (true) { yield return current; next = current + (current = next); Console.WriteLine($$); } } } }".EnforceLF(); #endregion var(processed, position) = CodeManipulation.ProcessMarkup(generator); var log = new LogEntryList(); using (LogEvents.Subscribe(log.Add)) using (var agent = new AgentService()) { var json = new WorkspaceRequest(activeBufferId: "generators/FibonacciGenerator.cs", requestId: "TestRun", workspace: Workspace.FromSources( workspaceType: "console", language: "csharp", ("Program.cs", program, 0), ("generators/FibonacciGenerator.cs", processed, position) )).ToJson(); var request = new HttpRequestMessage( HttpMethod.Post, @"/workspace/signaturehelp") { Content = new StringContent( json, Encoding.UTF8, "application/json") }; var response = await agent.SendAsync(request); var result = await response .EnsureSuccess() .DeserializeAs <SignatureHelpResult>(); result.Signatures.Should().NotBeNullOrEmpty(); result.Signatures.Should().Contain(diagnostic => diagnostic.Label == "void Console.WriteLine(string format, params object[] arg)"); } }