public void CanReadHostDataFromITemplateInfo() { IEngineEnvironmentSettings engineEnvironmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true); HostSpecificDataLoader hostSpecificDataLoader = new HostSpecificDataLoader(engineEnvironmentSettings); Assert.True(engineEnvironmentSettings.TryGetMountPoint(Directory.GetCurrentDirectory(), out IMountPoint? mountPoint)); Assert.NotNull(mountPoint); IFile?dataFile = mountPoint !.FileInfo("/Resources/dotnetcli.host.json"); Assert.NotNull(dataFile); JObject json = ReadJObjectFromIFile(dataFile !); ITemplateInfo template = A.Fake <ITemplateInfo>(builder => builder.Implements <ITemplateInfoHostJsonCache>().Implements <ITemplateInfo>()); A.CallTo(() => ((ITemplateInfoHostJsonCache)template).HostData).Returns(json); HostSpecificTemplateData data = hostSpecificDataLoader.ReadHostSpecificTemplateData(template); Assert.NotNull(data); Assert.False(data.IsHidden); Assert.Equal(2, data.UsageExamples?.Count); Assert.Contains("--framework netcoreapp3.1 --langVersion '9.0'", data.UsageExamples); Assert.Equal(4, data.SymbolInfo?.Count); Assert.Contains("TargetFrameworkOverride", data.HiddenParameterNames); Assert.Contains("Framework", data.ParametersToAlwaysShow); Assert.True(data.LongNameOverrides.ContainsKey("skipRestore")); Assert.Equal("no-restore", data.LongNameOverrides["skipRestore"]); Assert.True(data.ShortNameOverrides.ContainsKey("skipRestore")); Assert.Equal("", data.ShortNameOverrides["skipRestore"]); Assert.Equal("no-restore", data.DisplayNameForParameter("skipRestore")); }
private static bool GenerateUsageForTemplate(ITemplateInfo templateInfo, IHostSpecificDataLoader hostDataLoader, string commandName) { HostSpecificTemplateData hostTemplateData = hostDataLoader.ReadHostSpecificTemplateData(templateInfo); if (hostTemplateData.UsageExamples != null) { if (hostTemplateData.UsageExamples.Count == 0) { return(false); } Reporter.Output.WriteLine($" dotnet {commandName} {templateInfo.ShortName} {hostTemplateData.UsageExamples[0]}"); return(true); } Reporter.Output.Write($" dotnet {commandName} {templateInfo.ShortName}"); IReadOnlyList <ITemplateParameter> allParameterDefinitions = templateInfo.Parameters; IEnumerable <ITemplateParameter> filteredParams = TemplateParameterHelpBase.FilterParamsForHelp(allParameterDefinitions, hostTemplateData.HiddenParameterNames, parametersToAlwaysShow: hostTemplateData.ParametersToAlwaysShow); foreach (ITemplateParameter parameter in filteredParams) { if (string.Equals(parameter.DataType, "bool", StringComparison.OrdinalIgnoreCase) && string.Equals(parameter.DefaultValue, "false", StringComparison.OrdinalIgnoreCase)) { continue; } else if (string.Equals(parameter.DataType, "string", StringComparison.OrdinalIgnoreCase)) { continue; } else if (string.Equals(parameter.DataType, "choice", StringComparison.OrdinalIgnoreCase) && parameter.Choices.Count == 1) { continue; } string displayParameter = hostTemplateData.DisplayNameForParameter(parameter.Name); Reporter.Output.Write($" --{displayParameter}"); if (!string.IsNullOrEmpty(parameter.DefaultValue) && !string.Equals(parameter.DataType, "bool", StringComparison.OrdinalIgnoreCase)) { Reporter.Output.Write($" {parameter.DefaultValue}"); } } Reporter.Output.WriteLine(); return(true); }