public async Task Initializes_project_with_right_files() { var empty = Create.EmptyWorkspace(); var dir = empty.Directory.CreateSubdirectory("MLS.Blazor"); var name = "blazor-test"; var initializer = new BlazorPackageInitializer( name, new List <(string, string)>()); await initializer.Initialize(dir); var rootFiles = dir.GetFiles(); rootFiles.Should().Contain(f => f.Name == "Program.cs"); rootFiles.Should().Contain(f => f.Name == "Startup.cs"); rootFiles.Should().Contain(f => f.Name == "Linker.xml"); rootFiles.Should().Contain(f => f.Name == "_Imports.razor"); rootFiles.Should().Contain(f => f.Name == "MLS.Blazor.csproj"); var pagesFiles = dir.GetFiles("Pages/*", SearchOption.AllDirectories); pagesFiles.Should().OnlyContain( f => f.Name == "Index.razor" || f.Name == "_Imports.razor2"); var wwwrootFiles = dir.GetFiles("wwwroot/*", SearchOption.AllDirectories); wwwrootFiles.Should().OnlyContain( f => f.Name == "index.html" || f.Name == "interop.js"); File.ReadAllText(Path.Combine(dir.FullName, "wwwroot", "index.html")) .Should(). Contain($@"<base href=""/LocalCodeRunner/{name}/"" />"); }
public async Task Adds_packages() { var empty = Create.EmptyWorkspace(); var dir = empty.Directory.CreateSubdirectory("MLS.Blazor"); var name = "blazor-test"; var initializer = new BlazorPackageInitializer( name, new List <(string, string)> { ("HtmlAgilityPack", "1.11.12") });
public async Task Adds_packages() { var empty = Create.EmptyWorkspace(); var dir = empty.Directory.CreateSubdirectory("MLS.Blazor"); var name = "blazor-test"; var initializer = new BlazorPackageInitializer( name, new List <(string, string)> { ("Microsoft.Extensions.Logging", "3.0.0-preview6.19304.6") });
public async Task Gives_kernel_extension_load_exception_event_when_extension_throws_exception_during_load() { var directory = Create.EmptyWorkspace().Directory; var extensionDll = await KernelExtensionTestHelper.CreateExtension(directory, @"throw new Exception();"); var kernel = CreateKernel(); var extensionLoadEvents = new List <IKernelEvent>(); await new KernelExtensionLoader().LoadFromAssembly(extensionDll, kernel, (kernelEvent) => extensionLoadEvents.Add(kernelEvent)); extensionLoadEvents.Should() .ContainSingle(e => e is KernelExtensionLoadException); }
public async Task A_package_is_not_initialized_more_than_once() { var initializer = new TestPackageInitializer( "console", "MyProject"); var package = Create.EmptyWorkspace(initializer: initializer); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); initializer.InitializeCount.Should().Be(1); }
public void WORKAROUND_Requires_MLS_Blazor_directory_because_of_aspnet_AspNetCore_issues_7902() { // https://github.com/aspnet/AspNetCore/issues/7902 var empty = Create.EmptyWorkspace(); var initializer = new BlazorPackageInitializer( "blazor-test", new List <(string, string)>()); Func <Task> initialize = async() => await initializer.Initialize(empty.Directory); initialize.Should().Throw <ArgumentException>(); }
public async Task Adds_packages() { var empty = Create.EmptyWorkspace(); var dir = empty.Directory.CreateSubdirectory("MLS.Blazor"); var name = "blazor-test"; var initializer = new BlazorPackageInitializer( name, new List <string>() { "Microsoft.Extensions.Logging" }); await initializer.Initialize(dir); }
public async Task A_package_copy_is_not_reinitialized_if_the_source_was_already_initialized() { var initializer = new TestPackageInitializer( "console", "MyProject"); var original = Create.EmptyWorkspace(initializer: initializer); await original.CreateRoslynWorkspaceForLanguageServicesAsync(new TimeBudget(30.Seconds())); var copy = await PackageUtilities.Copy(original); await copy.CreateRoslynWorkspaceForLanguageServicesAsync(new TimeBudget(30.Seconds())); initializer.InitializeCount.Should().Be(1); }
public async Task If_an_existing_file_is_deleted_then_the_workspace_does_not_include_the_file() { var package = Create.EmptyWorkspace(); var build = await Create.NewPackage(package.Name, package.Directory, Create.ConsoleConfiguration, true) as ICreateWorkspaceForRun; var ws = await build.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); var existingFile = Path.Combine(package.Directory.FullName, "Program.cs"); ws.CurrentSolution.Projects.First().Documents.Select(d => d.FilePath).Should().Contain(filePath => filePath == existingFile); File.Delete(existingFile); await Task.Delay(1000); ws = await build.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); ws.CurrentSolution.Projects.First().Documents.Select(d => d.FilePath).Should().NotContain(filePath => filePath == existingFile); }
public async Task When_package_contains_simple_console_app_then_entry_point_dll_is_in_the_build_directory() { var package = Create.EmptyWorkspace(initializer: new PackageInitializer("console", "empty")); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); package.EntryPointAssemblyPath.Exists.Should().BeTrue(); package.EntryPointAssemblyPath .FullName .Should() .Be(Path.Combine( package.Directory.FullName, "bin", "Debug", package.TargetFramework, "empty.dll")); }
public async Task Can_load_from_assembly() { var directory = Create.EmptyWorkspace().Directory; var extensionDll = await KernelExtensionTestHelper.CreateExtension(directory, @"await kernel.SendAsync(new SubmitCode(""using System.Reflection;""));"); var kernel = CreateKernel(); var extensionLoadEvents = new List <IKernelEvent>(); await new KernelExtensionLoader().LoadFromAssembly(extensionDll, kernel, (kernelEvent) => extensionLoadEvents.Add(kernelEvent)); KernelEvents.Should() .ContainSingle(e => e.Value is CommandHandled && e.Value .As <CommandHandled>() .Command .As <SubmitCode>() .Code .Contains("using System.Reflection;")); }
public async Task When_package_contains_aspnet_project_then_entry_point_dll_is_in_the_publish_directory() { var package = Create.EmptyWorkspace(initializer: new PackageInitializer("webapi", "aspnet.webapi")); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); package.EntryPointAssemblyPath.Exists.Should().BeTrue(); package.EntryPointAssemblyPath .FullName .Should() .Be(Path.Combine( package.Directory.FullName, "bin", "Debug", package.TargetFramework, "publish", "aspnet.webapi.dll")); }
public async Task Run_succeeds_with_spaces_in_project_path() { var package = Create.EmptyWorkspace("a space"); var build = await Create.NewPackage(package.Name, package.Directory, Create.ConsoleConfiguration); var server = GetCodeRunner(); var workspace = new Workspace( workspaceType: build.Name, files: new[] { new File("Program.cs", SourceCodeProvider.ConsoleProgramSingleRegion) }, buffers: new[] { new Buffer("Program.cs@alpha", @"Console.WriteLine(""something"");", 0) }); var result = await server.Run(new WorkspaceRequest(workspace)); result.Should().BeEquivalentTo(new { Succeeded = true, Output = new[] { "something", "" }, Exception = (string)null, // we already display the error in Output }, config => config.ExcludingMissingMembers()); }
public async Task Package_after_create_actions_are_not_run_more_than_once() { var afterCreateCallCount = 0; var initializer = new PackageInitializer( "console", "test", afterCreate: async(_, __) => { await Task.Yield(); afterCreateCallCount++; }); var package = Create.EmptyWorkspace(initializer: initializer); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); afterCreateCallCount.Should().Be(1); }
public async Task If_the_project_file_is_changed_then_the_workspace_reflects_the_changes() { var package = Create.EmptyWorkspace(); var build = await Create.NewPackage(package.Name, package.Directory, Create.ConsoleConfiguration) as ICreateWorkspaceForRun; var ws = await build.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); var references = ws.CurrentSolution.Projects.First().MetadataReferences; references.Should().NotContain(reference => reference.Display.Contains("Microsoft.CodeAnalysis.CSharp.dll") && reference.Display.Contains("2.8.2")); await new Dotnet(package.Directory).AddPackage("Microsoft.CodeAnalysis", "2.8.2"); ws = await package.CreateRoslynWorkspaceForRunAsync(new TimeBudget(30.Seconds())); references = ws.CurrentSolution.Projects.First().MetadataReferences; references.Should().Contain(reference => reference.Display.Contains("Microsoft.CodeAnalysis.CSharp.dll") && reference.Display.Contains("2.8.2")); }