コード例 #1
0
        public void GenerateProject_Should_Render_Directories()
        {
            // Arrange
            var spec     = new ProjectSpec();
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "d1/"
                    },
                    new FileEntry {
                        Path = "d1/d2/"
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Path.Should().Be("d1/");
            project.FileEntries[1].Text.Should().BeNull();
            project.FileEntries[2].Path.Should().Be("d1/d2/");
            project.FileEntries[2].Text.Should().BeNull();
        }
コード例 #2
0
        public void GenerateProject_Should_Evaluate_Parameter_Expression()
        {
            // Arrange
            var spec = new ProjectSpec {
                Dependencies = "Dep1,Dep2"
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "f", Text = "{{#Or}}text{{/Or}}"
                    },
                },
                Parameters = new[]
                {
                    new Parameter()
                    {
                        Name       = "Or",
                        Expression = "Dep1||Dep2",
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Text.Should().Be("text");
        }
コード例 #3
0
        public void GenerateProject_Should_Evaluate_Parameter_Value()
        {
            // Arrange
            var spec     = new ProjectSpec();
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "f", Text = "{{Param}}"
                    },
                },
                Parameters = new[]
                {
                    new Parameter()
                    {
                        Name  = "Param",
                        Value = "text",
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Text.Should().Be("text");
        }
コード例 #4
0
        public void GenerateProject_Should_Give_Precedence_To_Parameter_Value()
        {
            // Arrange
            var spec = new ProjectSpec {
                Dependencies = "Dep1"
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "f", Text = "{{Which}}"
                    },
                },
                Parameters = new[]
                {
                    new Parameter()
                    {
                        Name       = "Which",
                        Value      = "text",
                        Expression = "Dep",
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Text.Should().Be("text");
        }
コード例 #5
0
        public void GenerateProject_Should_NoOp_Parameter_With_Value_Or_Expression()
        {
            // Arrange
            var spec = new ProjectSpec {
                Dependencies = "Dep1"
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "f", Text = "{{Which}}"
                    },
                },
                Parameters = new[]
                {
                    new Parameter()
                    {
                        Name = "Which",
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Text.Should().Be(string.Empty);
        }
コード例 #6
0
        public void Invalid_Version_Should_Log_An_Error()
        {
            // Arrange
            var config = new InitializrConfig
            {
                ProjectTemplates = new[]
                {
                    new ProjectTemplateConfiguration
                    {
                        Uri = new Uri("pt:///izr?steeltoeVersionRange=1.0"),
                    },
                },
            };
            var logger   = new Mock <ILogger <ProjectTemplateRegistry> >();
            var registry = new TemplateRegistryBuilder().WithConfig(config).WithLogger(logger.Object).Build();
            var spec     = new ProjectSpec {
                SteeltoeVersion = "1..1"
            };

            // Act
            var template = registry.Lookup(spec);

            // Assert
            template.Should().BeNull();
            logger.VerifyLog(LogLevel.Error,
                             "Error looking up project template: Version not in correct format: '1..1'");
        }
コード例 #7
0
            public Task <byte[]> GenerateProjectArchive(ProjectSpec spec)
            {
                if (spec.Name is "nosuchproject")
                {
                    throw new NoProjectForSpecException($"No project for spec.");
                }

                if (spec.Packaging is "nosuchpackaging")
                {
                    throw new InvalidSpecException($"Packaging '{spec.Packaging}' not found.");
                }

                const char newline = '\n';
                var        buffer  = new StringBuilder();

                buffer.Append("project name=").Append(spec.Name ?? "<na>");
                buffer.Append(newline);
                buffer.Append("description=").Append(spec.Description ?? "<na>");
                buffer.Append(newline);
                buffer.Append("namespace=").Append(spec.Namespace ?? "<na>");
                buffer.Append(newline);
                buffer.Append("steeltoe version=").Append(spec.SteeltoeVersion ?? "<na>");
                buffer.Append(newline);
                buffer.Append("dotnet framework=").Append(spec.DotNetFramework ?? "<na>");
                buffer.Append(newline);
                buffer.Append("language=").Append(spec.Language ?? "<na>");
                buffer.Append(newline);
                buffer.Append("packaging=").Append(spec.Packaging ?? "<na>");
                buffer.Append(newline);
                buffer.Append("dependencies=").Append(spec.Dependencies ?? "<na>");
                buffer.Append(newline);
                return(Task.FromResult(Encoding.ASCII.GetBytes(buffer.ToString())));
            }
コード例 #8
0
        public void GenerateProject_Should_Render_Files()
        {
            // Arrange
            var spec = new ProjectSpec
            {
                Name            = "my name",
                Description     = "my description",
                Namespace       = "my namespace",
                SteeltoeVersion = "my steeltoe version",
                DotNetFramework = "my dotnet framework",
                DotNetTemplate  = "my dotnet template",
                Language        = "my language",
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "name", Text = "{{Name}}"
                    },
                    new FileEntry {
                        Path = "description", Text = "{{Description}}"
                    },
                    new FileEntry {
                        Path = "namespace", Text = "{{Namespace}}"
                    },
                    new FileEntry {
                        Path = "steeltoe version", Text = "{{SteeltoeVersion}}"
                    },
                    new FileEntry {
                        Path = "dotnet framework", Text = "{{DotNetFramework}}"
                    },
                    new FileEntry {
                        Path = "dotnet template", Text = "{{DotNetTemplate}}"
                    },
                    new FileEntry {
                        Path = "language", Text = "{{Language}}"
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            var i = 1;

            project.FileEntries[i++].Text.Should().Be("my name");
            project.FileEntries[i++].Text.Should().Be("my description");
            project.FileEntries[i++].Text.Should().Be("my namespace");
            project.FileEntries[i++].Text.Should().Be("my steeltoe version");
            project.FileEntries[i++].Text.Should().Be("my dotnet framework");
            project.FileEntries[i++].Text.Should().Be("my dotnet template");
            project.FileEntries[i].Text.Should().Be("my language");
        }
コード例 #9
0
        public async Task Unsupported_DotNet_Framework_Should_Return_404_NotFound()
        {
            // Arrange
            var config = new UiConfig
            {
                Name = new UiConfig.Text {
                    Default = "my project name"
                },
                Description = new UiConfig.Text {
                    Default = "my description"
                },
                Namespace = new UiConfig.Text {
                    Default = "my namespace"
                },
                SteeltoeVersion = new UiConfig.SingleSelectList {
                    Default = "0.0"
                },
                DotNetFramework = new UiConfig.SingleSelectList {
                    Default = "0.0"
                },
                Dependencies = new UiConfig.GroupList
                {
                    Values = new[]
                    {
                        new UiConfig.Group
                        {
                            Values = new[]
                            {
                                new UiConfig.GroupItem
                                {
                                    Id = "MyDep",
                                    DotNetFrameworkRange = "1.0"
                                },
                            },
                        },
                    },
                },
            };
            var controller = new ProjectControllerBuilder()
                             .WithInitializrConfiguration(config)
                             .Build();
            var spec = new ProjectSpec
            {
                Dependencies = "mydep",
            };

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            // Assert
            result.Value.ToString().Should().Be("No dependency 'mydep' found for .NET framework 0.0.");
        }
コード例 #10
0
        public void Application_Should_Be_Assumed()
        {
            // Arrange
            var spec = new ProjectSpec {
                Packaging = "foo"
            };

            // Act

            // Assert
            spec.Packaging.Should().Be("foo");
        }
コード例 #11
0
        public void No_Template_Should_Return_Null_Project()
        {
            // Arrange
            var spec      = new ProjectSpec();
            var generator = new StubbleProjectGeneratorBuilder().Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.Should().BeNull();
        }
コード例 #12
0
ファイル: GameStage.cs プロジェクト: lyuha/Top-of-SI
        public void RecoverStateFromXml(string rawXml)
        {
            var rootElement = XElement.Parse(rawXml);

            Title           = rootElement.AttributeValue("Title");
            ElapsedDayLimit = rootElement.AttributeValue("TimeLimit", int.Parse);
            Reward          = rootElement.AttributeValue("Reward", int.Parse);
            MainStage       = rootElement.AttributeValue("MainStage", bool.Parse);
            IconName        = rootElement.AttributeValue("Icon");

            Boss = new ProjectSpec();
            Boss.RecoverStateFromXml(rootElement.Element("ProjectSpec").ToString());
        }
コード例 #13
0
        public void GenerateProject_Should_Generate_A_Project()
        {
            // Arrange
            var spec     = new ProjectSpec();
            var template = new ProjectTemplate {
                Manifest = new FileEntry[0]
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.Should().NotBeNull();
        }
コード例 #14
0
        public void Unknown_Dependency_Should_Return_404_Page_Not_found()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec {
                Dependencies = "nosuchdep"
            };

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            result.Value.ToString().Should().Be("Dependency 'nosuchdep' not found.");
        }
コード例 #15
0
        public void Properties_Should_Be_Defined()
        {
            // Arrange
            var spec = new ProjectSpec();

            // Act

            // Assert
            spec.Name.Should().BeNull();
            spec.Description.Should().BeNull();
            spec.Namespace.Should().BeNull();
            spec.SteeltoeVersion.Should().BeNull();
            spec.DotNetFramework.Should().BeNull();
            spec.Language.Should().BeNull();
            spec.Packaging.Should().BeNull();
        }
コード例 #16
0
        public void Unknown_Archive_Format_Should_Return_404_Page_Not_Found()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec {
                Packaging = "nosuchformat"
            };

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            result.Value.ToString().Should().Be("Packaging 'nosuchformat' not found.");
        }
コード例 #17
0
        public void GenerateProject_Should_Contain_Top_Level_Directory()
        {
            // Arrange
            var spec = new ProjectSpec {
                Name = "tld",
            };
            var template = new ProjectTemplate {
                Manifest = new FileEntry[0]
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[0].Path.Should().Be("tld/");
        }
コード例 #18
0
        public void No_Template_Found_Should_Return_404_Page_Not_Found()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec {
                Name = "nosuchtemplate"
            };

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            result.Value.ToString().Should()
            .Be("No project template for spec: [name=nosuchtemplate,packaging=myarchive]");
        }
コード例 #19
0
        public void Application_Should_Be_Default_to_Name()
        {
            // Arrange
            var spec = new ProjectSpec();

            // Act
            spec.Name = "foo";

            // Assert
            spec.Namespace.Should().Be("foo");

            // Act
            spec.Namespace = "bar";

            // Assert
            spec.Namespace.Should().Be("bar");
        }
コード例 #20
0
        public void GenerateProject_Should_Omit_Files_If_Dependency_Not_Met()
        {
            // Arrange
            var spec = new ProjectSpec {
                Dependencies = "dep0,dep1"
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "f0"
                    },
                    new FileEntry {
                        Path = "f1", Dependencies = "dep0"
                    },
                    new FileEntry {
                        Path = "f2", Dependencies = "dep1"
                    },
                    new FileEntry {
                        Path = "f3", Dependencies = "dep0,dep1"
                    },
                    new FileEntry {
                        Path = "f4", Dependencies = "dep2"
                    },
                    new FileEntry {
                        Path = "f5", Dependencies = "dep0,dep2"
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries.Count.Should().Be(6);
            var i = 1;

            project.FileEntries[i++].Path.Should().Be("f0");
            project.FileEntries[i++].Path.Should().Be("f1");
            project.FileEntries[i++].Path.Should().Be("f2");
            project.FileEntries[i++].Path.Should().Be("f3");
            project.FileEntries[i].Path.Should().Be("f5");
        }
コード例 #21
0
        public void Dependencies_Should_Be_Case_Corrected()
        {
            // Arrange
            var config = new InitializrConfig
            {
                ProjectMetadata = new ProjectMetadata
                {
                    Dependencies = new ProjectMetadata.GroupList
                    {
                        Values = new[]
                        {
                            new ProjectMetadata.Group
                            {
                                Values = new[]
                                {
                                    new ProjectMetadata.GroupItem
                                    {
                                        Id = "CamelCaseDep",
                                    },
                                },
                            },
                        },
                    },
                },
            };
            var spec = new ProjectSpec
            {
                Packaging    = "myarchive",
                Dependencies = "camelcasedep",
            };
            var controller = new ProjectControllerBuilder()
                             .WithInitializrConfiguration(config)
                             .Build();

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <FileContentResult>(unknown);

            using var reader = new StreamReader(new MemoryStream(result.FileContents));
            var body = reader.ReadToEnd();

            body.Should().Contain("dependencies=CamelCaseDep");
        }
コード例 #22
0
        public void Null_Archive_Format_Should_Return_500_Internal_Server_Error()
        {
            // Arrange
            var spec   = new ProjectSpec();
            var config = new InitializrConfig {
                ProjectTemplates = new ProjectTemplateConfiguration[0]
            };
            var controller = new ProjectControllerBuilder().WithInitializrConfiguration(config).Build();

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <ObjectResult>(unknown);

            result.StatusCode.Should().Be(StatusCodes.Status500InternalServerError);
            result.Value.Should().Be("Default packaging not configured.");
        }
コード例 #23
0
        public async Task Unknown_Packaging_Should_Return_400_BadRequest()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec
            {
                SteeltoeVersion = "0.0",
                DotNetFramework = "0.0",
                Packaging       = "nosuchpackaging",
            };

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result = Assert.IsType <BadRequestObjectResult>(unknown);

            // Assert
            result.Value.ToString().Should().Be("Packaging 'nosuchpackaging' not found.");
        }
コード例 #24
0
        public async Task Unknown_Dependency_Should_Return_404_Page_Not_found()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec
            {
                SteeltoeVersion = "0.0",
                DotNetFramework = "0.0",
                Dependencies    = "nosuchdep",
            };

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            // Assert
            result.Value.ToString().Should().Be("Dependency 'nosuchdep' not found.");
        }
コード例 #25
0
        public async Task No_Template_Found_Should_Return_404_Page_Not_Found()
        {
            // Arrange
            var controller = new ProjectControllerBuilder().Build();
            var spec       = new ProjectSpec
            {
                SteeltoeVersion = "0.0",
                DotNetFramework = "0.0",
                Name            = "nosuchproject",
            };

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result = Assert.IsType <NotFoundObjectResult>(unknown);

            // Assert
            result.Value.ToString().Should().Be("No project for spec.");
        }
コード例 #26
0
            public Project GenerateProject(ProjectSpec spec)
            {
                if (spec.Name != null && spec.Name.Equals("nosuchtemplate"))
                {
                    return(null);
                }

                var project = new Project();

                project.FileEntries.Add(new FileEntry {
                    Path = "project name", Text = spec.Name ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry {
                    Path = "description", Text = spec.Description ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry {
                    Path = "namespace", Text = spec.Namespace ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry
                {
                    Path = "steeltoe version", Text = spec.SteeltoeVersion ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry
                {
                    Path = "dotnet framework", Text = spec.DotNetFramework ?? "<na>"
                });
                project.FileEntries.Add(
                    new FileEntry {
                    Path = "dotnet template", Text = spec.DotNetTemplate ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry {
                    Path = "language", Text = spec.Language ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry
                {
                    Path = "packaging", Text = spec.Packaging ?? "<na>"
                });
                project.FileEntries.Add(new FileEntry {
                    Path = "dependencies", Text = spec.Dependencies ?? "<na>"
                });
                return(project);
            }
コード例 #27
0
        public async Task Dependencies_Should_Be_Case_Corrected()
        {
            // Arrange
            var config = new UiConfig
            {
                Dependencies = new UiConfig.GroupList
                {
                    Values = new[]
                    {
                        new UiConfig.Group
                        {
                            Values = new[]
                            {
                                new UiConfig.GroupItem
                                {
                                    Id = "CamelCaseDep",
                                },
                            },
                        },
                    },
                },
            };
            var spec = new ProjectSpec
            {
                SteeltoeVersion = "0.0",
                DotNetFramework = "0.0",
                Packaging       = "myarchive",
                Dependencies    = "camelcasedep",
            };
            var controller = new ProjectControllerBuilder()
                             .WithInitializrConfiguration(config)
                             .Build();

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result         = Assert.IsType <FileContentResult>(unknown);
            var projectPackage = Encoding.ASCII.GetString(result.FileContents);

            // Assert
            projectPackage.Should().Contain("dependencies=CamelCaseDep");
        }
コード例 #28
0
        public async Task Null_Archive_Format_Should_Return_500_Internal_Server_Error()
        {
            // Arrange
            var spec = new ProjectSpec
            {
                SteeltoeVersion = "0.0",
                DotNetFramework = "0.0",
            };
            var config     = new UiConfig();
            var controller = new ProjectControllerBuilder().WithInitializrConfiguration(config).Build();

            // Act
            var unknown = await controller.GetProjectArchive(spec);

            var result = Assert.IsType <ObjectResult>(unknown);

            // Assert
            result.StatusCode.Should().Be(StatusCodes.Status500InternalServerError);
            result.Value.Should().Be("Default packaging not configured.");
        }
コード例 #29
0
        public void GenerateProject_Should_Rename_Files()
        {
            // Arrange
            var spec = new ProjectSpec {
                Namespace = "My.Namespace"
            };
            var template = new ProjectTemplate
            {
                Manifest = new[]
                {
                    new FileEntry {
                        Path = "oldName", Rename = "{{Namespace}}"
                    },
                },
            };
            var generator = new StubbleProjectGeneratorBuilder().WithProjectTemplate(template).Build();

            // Act
            var project = generator.GenerateProject(spec);

            // Assert
            project.FileEntries[1].Path.Should().Be("My.Namespace");
        }
コード例 #30
0
        public void Zip_Archive_Format_Should_Return_Zip_Archive()
        {
            // Arrange
            var archiverRegistry = new Mock <IArchiverRegistry>();

            archiverRegistry.Setup(reg => reg.Lookup(It.Is <string>(s => s.Equals("zip"))))
            .Returns(new ZipArchiver());
            var controller = new ProjectControllerBuilder().WithArchiverRegistry(archiverRegistry.Object).Build();
            var spec       = new ProjectSpec {
                Packaging = "zip"
            };

            // Act
            var unknown = controller.GetProjectArchive(spec);

            // Assert
            var result = Assert.IsType <FileContentResult>(unknown);

            result.ContentType.Should().Be("application/zip");
            result.FileDownloadName.Should().EndWith(".zip");
            var stream = new MemoryStream(result.FileContents);

            new ZipArchive(stream).Should().BeOfType <ZipArchive>();
        }