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);
     }
 }
示例#3
0
 public static bool GetItemNameEditable(this ITemplateInfo ti)
 {
     return(ti.GetMultipleInstance());
 }