Esempio n. 1
0
        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}/"" />");
        }
Esempio n. 2
0
        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")
            });
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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>();
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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"));
        }
Esempio n. 11
0
        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;"));
        }
Esempio n. 12
0
        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"));
        }
Esempio n. 13
0
        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());
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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"));
        }