public void TestGetTemplateResolutionResult_MatchByTagsIgnoredOnShortNameMatch() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App Test", identity: "Console.App.T1", groupIdentity: "Console.App.Test") .WithTag("language", "L1") .WithTag("type", "project") .WithClassifications("Common", "Test", "Console") .WithBaselineInfo("app", "standard")); templatesToSearch.Add( new MockTemplateInfo("cons", name: "Long name for Cons App", identity: "Console.App.T2", groupIdentity: "Console.App.Test2") .WithTag("language", "L1") .WithTag("type", "project") .WithClassifications("Common", "Test", "Console") .WithBaselineInfo("app", "standard")); INewCommandInput userInputs = new MockNewCommandInput("Console").WithListOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.Equal(1, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(1, matchResult.ExactMatchedTemplates.Count); Assert.False(matchResult.HasLanguageMismatch); Assert.False(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); Assert.Equal("console", matchResult.UnambiguousTemplateGroup.Single().Info.ShortName); Assert.Equal("Console.App.T1", matchResult.UnambiguousTemplateGroup.Single().Info.Identity); }
public void TestGetTemplateResolutionResult_NoMatch() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test") .WithTag("language", "L1") .WithTag("type", "project") .WithBaselineInfo("app", "standard")); INewCommandInput userInputs = new MockNewCommandInput("zzzzz", "L1", "item").WithHelpOption().WithCommandOption("--baseline", "app"); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.False(matchResult.HasExactMatches); Assert.False(matchResult.HasPartialMatches); Assert.Equal(0, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.Equal(0, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(0, matchResult.PartiallyMatchedTemplateGroups.Count); Assert.False(matchResult.HasLanguageMismatch); Assert.False(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); Assert.False(matchResult.HasUnambiguousTemplateGroup); Assert.Equal(0, matchResult.UnambiguousTemplateGroup.Count); }
public void TestGetTemplateResolutionResult_MatchByTagsAndMismatchByFilter() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test") .WithTag("language", "L1") .WithTag("type", "project") .WithClassifications("Common", "Test") .WithBaselineInfo("app", "standard")); INewCommandInput userInputs = new MockNewCommandInput("Common", "L2", "item").WithListOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.False(matchResult.HasExactMatches); Assert.Equal(0, matchResult.ExactMatchedTemplatesGrouped.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasPartialMatches); Assert.Equal(1, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(1, matchResult.PartiallyMatchedTemplatesGrouped.Count); Assert.True(matchResult.HasLanguageMismatch); Assert.True(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); }
private async Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { TemplateListResolutionResult listingTemplateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified)); } TemplateResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResult(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); TemplateInvocationAndAcquisitionCoordinator invocationCoordinator = new TemplateInvocationAndAcquisitionCoordinator(_settingsLoader, _commandInput, _templateCreator, _hostDataLoader, _telemetryLogger, _defaultLanguage, CommandName, _inputGetter, _callbacks); return(await invocationCoordinator.CoordinateInvocationOrAcquisitionAsync()); }
public void TestGetTemplateResolutionResult_ExactMatchOnShortNameMatchesCorrectly() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App")); templatesToSearch.Add(new MockTemplateInfo("console2", name: "Long name for Console App #2", identity: "Console.App2")); INewCommandInput userInputs = new MockNewCommandInput("console").WithHelpOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal("console", matchResult.UnambiguousTemplateGroup.Single().Info.ShortName); Assert.Equal("Console.App", matchResult.UnambiguousTemplateGroup.Single().Info.Identity); Assert.Equal(1, matchResult.UnambiguousTemplateGroup.Count); }
public void TestGetTemplateResolutionResult_TagsMatch(string templateTags, string commandTag, bool matchExpected) { const string separator = "||"; string[] templateTagsArray = templateTags.Split(separator); List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test", author: "TemplateAuthor") .WithTag("language", "L1") .WithTag("type", "project") .WithClassifications(templateTagsArray) .WithBaselineInfo("app", "standard")); MockNewCommandInput userInputs = new MockNewCommandInput("console").WithListOption().WithCommandOption("--tag", commandTag); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); if (matchExpected) { Assert.True(matchResult.HasExactMatches); Assert.Equal(1, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(1, matchResult.ExactMatchedTemplates.Count); Assert.False(matchResult.HasPartialMatches); Assert.Equal(0, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(0, matchResult.PartiallyMatchedTemplateGroups.Count); Assert.False(matchResult.HasClassificationMismatch); } else { Assert.False(matchResult.HasExactMatches); Assert.Equal(0, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasPartialMatches); Assert.Equal(1, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(1, matchResult.PartiallyMatchedTemplateGroups.Count); Assert.True(matchResult.HasClassificationMismatch); } Assert.False(matchResult.HasLanguageMismatch); Assert.False(matchResult.HasTypeMismatch); Assert.False(matchResult.HasBaselineMismatch); Assert.False(matchResult.HasAuthorMismatch); }
public void TestGetTemplateResolutionResult_UnambiguousGroupIsFound() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L1", groupIdentity: "Console.App.Test").WithTag("language", "L1")); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L2", groupIdentity: "Console.App.Test").WithTag("language", "L2")); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L3", groupIdentity: "Console.App.Test").WithTag("language", "L3")); INewCommandInput userInputs = new MockNewCommandInput("console").WithHelpOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.Equal(1, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(3, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal(3, matchResult.UnambiguousTemplateGroup.Count); }
public void TestGetTemplateResolutionResult_InputLanguageIsPreferredOverDefault() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L1", groupIdentity: "Console.App.Test").WithTag("language", "L1")); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L2", groupIdentity: "Console.App.Test").WithTag("language", "L2")); INewCommandInput userInputs = new MockNewCommandInput("console", "L2").WithHelpOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, "L1"); Assert.True(matchResult.HasExactMatches); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal("console", matchResult.UnambiguousTemplateGroup.Single().Info.ShortName); Assert.Equal("Console.App.L2", matchResult.UnambiguousTemplateGroup.Single().Info.Identity); Assert.Equal("L2", matchResult.UnambiguousTemplateGroup.Single().Info.Tags["language"].Choices.Keys.FirstOrDefault()); Assert.Equal(1, matchResult.UnambiguousTemplateGroup.Count); }
// TODO: make sure help / usage works right in these cases. private CreationResultStatus EnterMaintenanceFlow() { if (!TemplateResolver.ValidateRemainingParameters(_commandInput, out IReadOnlyList <string> invalidParams)) { HelpForTemplateResolution.DisplayInvalidParameters(invalidParams); if (_commandInput.IsHelpFlagSpecified) { // this code path doesn't go through the full help & usage stack, so needs it's own call to ShowUsageHelp(). HelpForTemplateResolution.ShowUsageHelp(_commandInput, _telemetryLogger); } else { Reporter.Error.WriteLine(string.Format(LocalizableStrings.RunHelpForInformationAboutAcceptedParameters, CommandName).Bold().Red()); } return(CreationResultStatus.InvalidParamValues); } if (_commandInput.ToUninstallList != null) { return(EnterUninstallFlow()); } if (_commandInput.ToInstallList != null && _commandInput.ToInstallList.Count > 0 && _commandInput.ToInstallList[0] != null) { CreationResultStatus installResult = EnterInstallFlow(); if (installResult == CreationResultStatus.Success) { _settingsLoader.Reload(); TemplateListResolutionResult resolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(resolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: false); } return(installResult); } // No other cases specified, we've fallen through to "Optional usage help + List" TemplateListResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified); return(CreationResultStatus.Success); }
public void TestGetTemplateResolutionResult_DefaultLanguageDisambiguates() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L1", groupIdentity: "Console.App.Test").WithTag("language", "L1")); templatesToSearch.Add(new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.L2", groupIdentity: "Console.App.Test").WithTag("language", "L2")); INewCommandInput userInputs = new MockNewCommandInput("console").WithListOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, "L1"); Assert.True(matchResult.HasExactMatches); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal(1, matchResult.ExactMatchedTemplatesGrouped.Count); Assert.Equal(2, matchResult.ExactMatchedTemplates.Count); Assert.NotNull(matchResult.ExactMatchedTemplates.Single(t => t.Info.Identity == "Console.App.L1")); Assert.NotNull(matchResult.ExactMatchedTemplates.Single(t => t.Info.Identity == "Console.App.L2")); Assert.False(matchResult.HasUnambiguousTemplateGroupForDefaultLanguage); }
private Task <CreationResultStatus> EnterTemplateManipulationFlowAsync() { if (_commandInput.IsListFlagSpecified || _commandInput.IsHelpFlagSpecified) { TemplateListResolutionResult listingTemplateResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(Task.FromResult(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateResolutionResult, EnvironmentSettings, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, showUsageHelp: _commandInput.IsHelpFlagSpecified))); } TemplateResolutionResult templateResolutionResult = TemplateResolver.GetTemplateResolutionResult(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); if (templateResolutionResult.ResolutionStatus == TemplateResolutionResult.Status.SingleMatch) { TemplateInvocationCoordinator invocationCoordinator = new TemplateInvocationCoordinator(_settingsLoader, _commandInput, _telemetryLogger, CommandName, _inputGetter, _callbacks); return(invocationCoordinator.CoordinateInvocationOrAcquisitionAsync(templateResolutionResult.TemplateToInvoke)); } else { return(Task.FromResult(HelpForTemplateResolution.CoordinateAmbiguousTemplateResolutionDisplay(templateResolutionResult, EnvironmentSettings, _commandInput, _defaultLanguage, _settingsLoader.InstallUnitDescriptorCache.Descriptors.Values))); } }
public async Task <CreationResultStatus> CoordinateInvocationOrAcquisitionAsync() { EnsureTemplateResolutionResult(); if (_templateToInvoke != null) { // invoke and then check for updates CreationResultStatus creationResult = await InvokeTemplateAsync(); // check for updates on this template (pack) await CheckForTemplateUpdateAsync(); return(creationResult); } else { TemplateListResolutionResult listingTemplateListResolutionResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(_settingsLoader.UserTemplateCache.TemplateInfo, _hostDataLoader, _commandInput, _defaultLanguage); return(HelpForTemplateResolution.CoordinateHelpAndUsageDisplay(listingTemplateListResolutionResult, _environment, _commandInput, _hostDataLoader, _telemetryLogger, _templateCreator, _defaultLanguage, false)); } }
public void TestGetTemplateResolutionResult_OtherParameterMatch_Text() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test1") .WithTag("language", "L1") .WithTag("type", "project") .WithParameters("langVersion") .WithBaselineInfo("app", "standard")); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T2", groupIdentity: "Console.App.Test2") .WithTag("language", "L2") .WithTag("type", "project") .WithParameters("test") .WithBaselineInfo("app", "standard")); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T3", groupIdentity: "Console.App.Test3") .WithTag("language", "L3") .WithTag("type", "project") .WithBaselineInfo("app", "standard")); INewCommandInput userInputs = new MockNewCommandInput("c").WithHelpOption().WithTemplateOption("langVersion"); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.True(matchResult.HasExactMatches); Assert.Equal(1, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(1, matchResult.ExactMatchedTemplates.Count); Assert.False(matchResult.HasLanguageMismatch); Assert.False(matchResult.HasContextMismatch); Assert.False(matchResult.HasBaselineMismatch); Assert.True(matchResult.HasUnambiguousTemplateGroup); Assert.Equal(1, matchResult.UnambiguousTemplateGroup.Count); HelpForTemplateResolution.GetParametersInvalidForTemplatesInList(matchResult.ExactMatchedTemplates, out IReadOnlyList <string> invalidForAllTemplates, out IReadOnlyList <string> invalidForSomeTemplates); Assert.Equal(0, invalidForSomeTemplates.Count); Assert.Equal(0, invalidForAllTemplates.Count); }
public void TestGetTemplateResolutionResult_TemplateWithoutTypeShouldNotBeMatchedForContextFilter() { List <ITemplateInfo> templatesToSearch = new List <ITemplateInfo>(); templatesToSearch.Add( new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test") .WithClassifications("Common", "Test")); INewCommandInput userInputs = new MockNewCommandInput("console", type: "item").WithListOption(); TemplateListResolutionResult matchResult = TemplateResolver.GetTemplateResolutionResultForListOrHelp(templatesToSearch, new MockHostSpecificDataLoader(), userInputs, null); Assert.False(matchResult.HasExactMatches); Assert.Equal(0, matchResult.ExactMatchedTemplateGroups.Count); Assert.Equal(0, matchResult.ExactMatchedTemplates.Count); Assert.True(matchResult.HasPartialMatches); Assert.Equal(1, matchResult.PartiallyMatchedTemplates.Count); Assert.Equal(1, matchResult.PartiallyMatchedTemplateGroups.Count); Assert.False(matchResult.HasLanguageMismatch); Assert.True(matchResult.HasTypeMismatch); Assert.False(matchResult.HasBaselineMismatch); }