public static string StringToString(string template, object data, TemplateLocator templateLocator) { var reader = new StringReader(template); var writer = new StringWriter(); Template(reader, data, writer, templateLocator); return writer.GetStringBuilder().ToString(); }
public void It_can_include_templates_over_three_levels_with_external_includes() { var baseTemplate = new Template("Base"); baseTemplate.Load(new StringReader("Base{{>BaseContent}}")); var masterTemplate = new Template("Master"); masterTemplate.Load(new StringReader("{{<BaseContent}}Master{{>MasterContent}}{{/BaseContent}}{{>Base}}")); var templates = new Dictionary <string, Template>(); templates.Add("Base", baseTemplate); templates.Add("Master", masterTemplate); TemplateLocator locateTemplate = name => { Template ret; templates.TryGetValue(name, out ret); if (ret == null) { throw new KeyNotFoundException(string.Format("The view '{0}' could not be found.", name)); } return(ret); }; var result = Render.StringToString("{{<MasterContent}}Hello{{/MasterContent}}{{>Master}}", null, locateTemplate); Assert.AreEqual("BaseMasterHello", result); }
public GivenAnTemplateLocator(ITestOutputHelper logger) : base(logger) { _resolver = new TemplateLocator(); _fakeDotnetRootDirectory = Path.Combine(TestContext.Current.TestExecutionDirectory, Path.GetRandomFileName()); _manifestDirectory = Path.Combine(_fakeDotnetRootDirectory, "workloadmanifests", "5.0.100"); Directory.CreateDirectory(_manifestDirectory); }
public static void StringToFile(string template, object data, string outputPath, TemplateLocator templateLocator) { var reader = new StringReader(template); using (var writer = File.CreateText(outputPath)) { Template(reader, data, writer, templateLocator); } }
/// <summary> /// Renders the template. /// </summary> /// <param name="data">The data to use to render the template.</param> /// <param name="writer">The object to write the output to.</param> /// <param name="templateLocator">The delegate to use to locate templates for inclusion.</param> /// <remarks> /// The <paramref name="writer" /> is flushed, but not closed or disposed. /// </remarks> public void Render(object data, TextWriter writer, TemplateLocator templateLocator) { var context = new RenderContext(this, data, writer, templateLocator); Render(context); writer.Flush(); }
public static string StringToString(string template, object data, TemplateLocator templateLocator) { var reader = new StringReader(template); var writer = new StringWriter(); Template(reader, data, writer, templateLocator); return(writer.GetStringBuilder().ToString()); }
public GivenAnTemplateLocator(ITestOutputHelper logger) : base(logger) { _resolver = new TemplateLocator(Environment.GetEnvironmentVariable, VSSettings.Ambient, null, null); _fakeDotnetRootDirectory = Path.Combine(TestContext.Current.TestExecutionDirectory, Path.GetRandomFileName()); _manifestDirectory = Path.Combine(_fakeDotnetRootDirectory, "sdk-manifests", "5.0.100"); Directory.CreateDirectory(_manifestDirectory); }
public RenderContext(Section section, object data, TextWriter writer, TemplateLocator templateLocator) { _sectionStack.Push(section); _dataStack.Push(data); _writer = writer; _templateLocator = templateLocator; _includeLevel = 0; }
public void Render(object data, TextWriter writer, TemplateLocator templateLocator, IValueProviderCollection valueProviders) { var context = new RenderContext(this, data, writer, templateLocator, valueProviders); Render(context); writer.Flush(); }
public CompileContext(Section section, Type targetType, Expression dataParam, TemplateLocator templateLocator) { this.targetType = targetType; this.renderContext = new RenderContext(section, null, null, templateLocator); this.templateLocator = templateLocator; _targetObjectStack.Push(dataParam); _sectionStack.Push(section); }
public RenderContext(Section section, object data, TextWriter writer, TemplateLocator templateLocator, IValueProviderCollection valueProviders) { _sectionStack.Push(section); _dataStack.Push(data); _writer = writer; _templateLocator = templateLocator; _valueProviders = valueProviders; _includeLevel = 0; }
/// <summary> /// Compiles the template into a Lambda function which can be executed later. /// </summary> /// <typeparam name="T">The type which the template will render against. Missing /// properties/methods/fields will result in CompilationExceptions.</typeparam> /// <param name="templateLocator">The delegate to use to locate templates for inclusion.</param> /// <returns>A lambda expression representing the compiled template.</returns> public static Func <T, string> Compile <T>(this Template template, TemplateLocator templateLocator) where T : class { var param = Expression.Parameter(typeof(T), "data"); var context = new CompileContext(template, typeof(T), param, templateLocator); var expression = Compile(template, context); return((Expression.Lambda <Func <T, string> >(expression, param)).Compile()); }
public static void Template(TextReader reader, object data, TextWriter writer, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour = null) { var template = new Template(); template.Load(reader); var renderBehaviour = renderContextBehaviour ?? RenderContextBehaviour.GetDefaultRenderContextBehaviour(); template.Render(data, writer, templateLocator, renderBehaviour); }
public void Render(object data, TextWriter writer, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour) { var context = new RenderContext(this, data, writer, templateLocator, renderContextBehaviour); context.ActiveStartDelimiter = StartDelimiter; context.ActiveEndDelimiter = EndDelimiter; Render(context); writer.Flush(); }
public static void StringToFile( string template, object data, string outputPath, TemplateLocator templateLocator, Options options) { var reader = new StringReader(template); using (StreamWriter writer = File.CreateText(outputPath)) { Template(reader, data, writer, templateLocator, options); } }
public static string StringToString(string template, object data, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour = null) { var reader = new StringReader(template); var writer = new StringWriter(); var renderBehaviour = renderContextBehaviour ?? RenderContextBehaviour.GetDefaultRenderContextBehaviour(); Template(reader, data, writer, templateLocator, renderBehaviour); return(writer.GetStringBuilder().ToString()); }
public RenderContext(RenderContext baseContext, TextWriter writer) { _sectionStack = baseContext._sectionStack; _dataStack = baseContext._dataStack; _writer = writer; _templateLocator = baseContext._templateLocator; _renderContextBehaviour = baseContext._renderContextBehaviour; _includeLevel = baseContext._includeLevel; _indent = baseContext._indent; _lineEnded = baseContext._lineEnded; }
public RenderContext(Section section, object data, TextWriter writer, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour = null) { _sectionStack.Push(section); _dataStack.Push(data); _writer = writer; _templateLocator = templateLocator; _includeLevel = 0; _renderContextBehaviour = renderContextBehaviour ?? RenderContextBehaviour.GetDefaultRenderContextBehaviour(); }
public static string StringToString(string template, object data, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour = null) { var reader = new StringReader(template); var writer = new StringWriter(); var renderBehaviour = renderContextBehaviour ?? RenderContextBehaviour.GetDefaultRenderContextBehaviour(); Template(reader, data, writer, templateLocator, renderBehaviour); return writer.GetStringBuilder().ToString(); }
private static void RunMustacheSpecs(MustacheSpec.MustacheTest test) { TemplateLocator testDataTemplateLocator = name => { if (test.Partials != null && test.Partials[name] != null) { var template = new Template(); template.Load(new StringReader(test.Partials[name].ToString())); return(template); } ; return(null); }; var rendered = Render.StringToString(test.Template, test.Example, testDataTemplateLocator); Assert.AreEqual(test.Expected, rendered, "JSON object rendering failed for " + test.Description); rendered = Render.StringToString(test.Template, test.StronglyTypedExample, testDataTemplateLocator); Assert.AreEqual(test.Expected, rendered, "Strongly typed rendering failed for " + test.Description); var templ = new Template(); templ.Load(new StringReader(test.Template)); if (!test.Name.ToLower().Contains("context miss") && !test.Name.ToLower().Contains("broken chain") && !(test.SpecName == "inverted" && (test.Name == "List" || test.Name == "Context"))) { var compiledTemplate = templ.Compile( test.StronglyTypedExample != null ? test.StronglyTypedExample.GetType() : typeof(object), testDataTemplateLocator); rendered = compiledTemplate(test.StronglyTypedExample); Assert.AreEqual(test.Expected, rendered, "Compiled Template rendering failed for " + test.Description); } else { bool gotException = false; try { var compiledTemplate = templ.Compile( test.StronglyTypedExample != null ? test.StronglyTypedExample.GetType() : typeof(object), testDataTemplateLocator); } catch (Compilation.CompilationException) { gotException = true; } Assert.IsTrue(gotException, "Expected test to throw a compilation exception for an invalid template"); } }
public static void StringToFile(string template, object data, string outputPath, TemplateLocator templateLocator, RenderContextBehaviour renderContextBehaviour = null) { var reader = new StringReader(template); var renderBehaviour = renderContextBehaviour ?? RenderContextBehaviour.GetDefaultRenderContextBehaviour(); using (var writer = File.CreateText(outputPath)) { Template(reader, data, writer, templateLocator, renderBehaviour); } }
public void ItShouldReturnListOfTemplates() { var resolver = new TemplateLocator(); var stage2Dotnet = new DirectoryInfo(TestContext.Current.ToolsetUnderTest.DotNetHostPath); var stage2Templates = stage2Dotnet.Parent.GetDirectories("templates")[0].EnumerateDirectories().First(); resolver.SetDotnetSdkTemplatesLocation(stage2Templates); var result = resolver.GetDotnetSdkTemplatePackages("any"); result.Should().NotBeEmpty(); }
public static void Template( TextReader reader, object data, TextWriter writer, TemplateLocator templateLocator, Options options) { if (options == null) { options = Options.Defaults(); } var template = new Template(); template.Load(reader); template.Render(data, writer, templateLocator, options); }
public GivenAnTemplateLocator(ITestOutputHelper logger) : base(logger) { _resolver = new TemplateLocator(Environment.GetEnvironmentVariable, VSSettings.Ambient, null, null); _fakeDotnetRootDirectory = Path.Combine(TestContext.Current.TestExecutionDirectory, Path.GetRandomFileName()); var fakeSdkDirectory = Path.Combine(_fakeDotnetRootDirectory, "sdk", "5.0.102"); Directory.CreateDirectory(fakeSdkDirectory); var fakeRuntimeIdentifierChainPath = Path.Combine(fakeSdkDirectory, "NETCoreSdkRuntimeIdentifierChain.txt"); File.WriteAllLines(fakeRuntimeIdentifierChainPath, new[] { "win-x64", "win", "any", "base" }); _manifestDirectory = Path.Combine(_fakeDotnetRootDirectory, "sdk-manifests", "5.0.100"); Directory.CreateDirectory(_manifestDirectory); }
public static void Template(TextReader reader, object data, TextWriter writer, TemplateLocator templateLocator) { var template = new Template(); template.Load(reader); template.Render(data, writer, templateLocator); }
public static string StringToString(string template, object data, TemplateLocator templateLocator) { return(StringToString(template, data, templateLocator, null)); }
/// <summary> /// Compiles the template into a Lambda function which can be executed later. /// This version allows reflective compilation of templates. /// </summary> /// <param name="compileFor">The type to compile the template for.Missing /// properties/methods/fields will result in CompilationExceptions.</param> /// <param name="templateLocator">The delegate to use to locate templates for inclusion.</param> /// <returns>A lambda expression representing the compiled template. The lambda takes and object /// and immediately casts it to <paramref name="compileFor"/>.</returns> public static Func <object, string> Compile(this Template template, Type compileFor, TemplateLocator templateLocator) { var param = Expression.Parameter(typeof(object), "data"); var context = new CompileContext(template, compileFor, Expression.Convert(param, compileFor), templateLocator); var expression = Compile(template, context); return((Expression.Lambda <Func <object, string> >(expression, param)).Compile()); }
public static void StringToFile( string template, object data, string outputPath, TemplateLocator templateLocator) { StringToFile(template, data, outputPath, templateLocator, null); }
/// <summary> /// Renders the template. /// </summary> /// <param name="data">The data to use to render the template.</param> /// <param name="writer">The object to write the output to.</param> /// <param name="templateLocator">The delegate to use to locate templates for inclusion.</param> /// <remarks> /// The <paramref name="writer" /> is flushed, but not closed or disposed. /// </remarks> public void Render(object data, TextWriter writer, TemplateLocator templateLocator) { Render(data, writer, templateLocator, RenderContextBehaviour.GetDefaultRenderContextBehaviour()); }
private bool SyncOptionalWorkloads() { bool isHiveUpdated = false; bool isCustomHive = _commandInput.HasDebuggingFlag("--debug:ephemeral-hive") || _commandInput.HasDebuggingFlag("--debug:custom-hive"); if (!isCustomHive) { string sdkVersion = EnvironmentSettings.Host.Version.Substring(1); // Host.Version (from SDK) has a leading "v" that need to remove. try { List <InstallationRequest> owInstallationRequests = new List <InstallationRequest>(); Dictionary <string, string> owInstalledPkgs = new Dictionary <string, string>(); // packageId -> packageVersion HashSet <string> owSyncRequestsPackageIds = new HashSet <string>(); TemplateLocator optionalWorkloadLocator = new TemplateLocator(); string dotnetPath = Path.GetDirectoryName(Path.GetDirectoryName(_paths.Global.BaseDir)); IReadOnlyCollection <IOptionalSdkTemplatePackageInfo> owPkgsToSync = optionalWorkloadLocator.GetDotnetSdkTemplatePackages(sdkVersion, dotnetPath); foreach (IInstallUnitDescriptor descriptor in _settingsLoader.InstallUnitDescriptorCache.Descriptors.Values) { if (descriptor.IsPartOfAnOptionalWorkload) { if (!descriptor.Details.TryGetValue("Version", out string pkgVersion)) { pkgVersion = string.Empty; } owInstalledPkgs.Add(descriptor.Identifier, pkgVersion); } } foreach (IOptionalSdkTemplatePackageInfo packageInfo in owPkgsToSync) { owSyncRequestsPackageIds.Add(packageInfo.TemplatePackageId); if (!owInstalledPkgs.TryGetValue(packageInfo.TemplatePackageId, out string version) || version != packageInfo.TemplateVersion) { isHiveUpdated = true; owInstallationRequests.Add(new InstallationRequest(packageInfo.Path, isPartOfAnOptionalWorkload: true)); } } if (owInstallationRequests.Count != 0) { Installer.InstallPackages(owInstallationRequests); } // remove uninstalled Optional SDK Workload packages List <string> owRemovalRequestsPackageIds = new List <string>(); foreach (string descriptorIdentifier in owInstalledPkgs.Keys) { if (!owSyncRequestsPackageIds.Contains(descriptorIdentifier)) { owRemovalRequestsPackageIds.Add(descriptorIdentifier); } } if (owRemovalRequestsPackageIds.Count != 0) { isHiveUpdated = true; IEnumerable <string> failures = Installer.Uninstall(owRemovalRequestsPackageIds); foreach (string failure in failures) { Reporter.Output.WriteLine(string.Format(LocalizableStrings.CouldntUninstall, failure)); } } } catch (Exception ex) { throw new HiveSynchronizationException(LocalizableStrings.OptionalWorkloadsSyncFailed, sdkVersion, ex); } } return(isHiveUpdated); }
public void Render(object data, TextWriter writer, TemplateLocator templateLocator, INamingConvention namingConvention) { Render(data, writer, templateLocator, new ValueProviderCollection(namingConvention)); }
public void Render(object data, TextWriter writer, TemplateLocator templateLocator, NamingConvention namingConvention) { Render(data, writer, templateLocator, NamingConventionFactory.Create(namingConvention)); }
/// <summary> /// Renders the template. /// </summary> /// <param name="data">The data to use to render the template.</param> /// <param name="writer">The object to write the output to.</param> /// <param name="templateLocator">The delegate to use to locate templates for inclusion.</param> /// <remarks> /// The <paramref name="writer" /> is flushed, but not closed or disposed. /// </remarks> public void Render(object data, TextWriter writer, TemplateLocator templateLocator) { Render(data, writer, templateLocator, NamingConventionFactory.Default); }
public RenderContext(Section section, object data, TextWriter writer, TemplateLocator templateLocator) : this(section, data, writer, templateLocator, new ValueProviderCollection()) { }