protected async Task <(string ProjectPath, string ProjectName)> SetUpComparisonProjectAsync(string language, string projectType, string framework, IEnumerable <string> genIdentities, bool lastPageIsHome = false, bool includeMultipleInstances = true) { BaseGenAndBuildFixture.SetCurrentLanguage(language); BaseGenAndBuildFixture.SetCurrentPlatform(Platforms.Uwp); var projectTemplate = _fixture.Templates().FirstOrDefault(t => t.GetTemplateType() == TemplateType.Project && t.GetProjectTypeList().Contains(projectType) && t.GetFrameworkList().Contains(framework)); var singlePageName = string.Empty; var genIdentitiesList = genIdentities.ToList(); if (genIdentitiesList.Count == 1) { singlePageName = genIdentitiesList.Last().Split('.').Last(); } var projectName = $"{projectType}{framework}{singlePageName}{ShortLanguageName(language)}"; var destinationPath = Path.Combine(_fixture.TestProjectsPath, projectName, projectName); GenContext.Current = new FakeContextProvider { ProjectName = projectName, DestinationPath = destinationPath, GenerationOutputPath = destinationPath, }; var userSelection = _fixture.SetupProject(projectType, framework, Platforms.Uwp, language); foreach (var identity in genIdentitiesList) { ITemplateInfo itemTemplate = _fixture.Templates() .FirstOrDefault(t => (t.Identity.StartsWith($"{identity}.") || t.Identity.Equals(identity)) && t.GetFrameworkList().Contains(framework)); _fixture.AddItem(userSelection, itemTemplate, BaseGenAndBuildFixture.GetDefaultName); // Add multiple pages if supported to check these are handled the same if (includeMultipleInstances && itemTemplate.GetMultipleInstance()) { _fixture.AddItem(userSelection, itemTemplate, BaseGenAndBuildFixture.GetDefaultName); } } if (lastPageIsHome) { // Useful if creating a blank project type and want to change the start page userSelection.HomeName = userSelection.Pages.Last().name; if (projectType == "TabbedNav") { userSelection.Pages.Reverse(); } } await NewProjectGenController.Instance.UnsafeGenerateProjectAsync(userSelection); var resultPath = Path.Combine(_fixture.TestProjectsPath, GenContext.Current.ProjectName); return(resultPath, GenContext.Current.ProjectName); }
public static void AddItem(UserSelection userSelection, ITemplateInfo template, Func <ITemplateInfo, string> getName) { if (template.GetMultipleInstance() || !AlreadyAdded(userSelection, template)) { var itemName = getName(template); var usedNames = userSelection.Pages.Select(p => p.name).Concat(userSelection.Features.Select(f => f.name)); var validators = new List <Validator>() { new ExistingNamesValidator(usedNames), new ReservedNamesValidator(), }; if (template.GetItemNameEditable()) { validators.Add(new DefaultNamesValidator()); } itemName = Naming.Infer(itemName, validators); AddItem(userSelection, itemName, template); } }
public static bool GetItemNameEditable(this ITemplateInfo ti) { return(ti.GetMultipleInstance()); }